自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 聊聊微服务架构及分布式事务解决方案

分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。什么是事务事务(Transaction)及其ACID属性事务是由一组SQL语句组成的逻...

2020-04-21 22:34:45 587

转载 Java线程池实现原理及其在美团业务中的实践

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程...

2020-04-03 14:58:43 646

转载 Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析

一、深入JVM锁机制:synchronizedsynrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁...

2020-04-01 16:00:25 522

转载 一文带你理解Java中Lock的实现原理

当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java底层支持的,而concurrent包则是jdk实现。关于synchronized的原理可以阅读再有人问你synchronized是什么,就把这篇文章发给他。在这里...

2020-04-01 15:04:40 868

转载 Java自带的JVM性能监控及调优工具(jps、jinfo、jstat、jmap、javap)使用介绍

JVM介绍JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM性能监控及调优的意义JVM作为java程序运行时的环境,它的性能好坏直接影响java程序的性能,合适的环境对于java程序起着举足轻重的作用。性能监控及调优工具1. jpsj...

2020-04-29 15:39:57 786

转载 商品秒杀系统设计思路

秒杀的概念秒杀是电商网站的一种销售方式,以特定时间段内较低的商品价格来吸引消费者购买,并对销售库存进行限制。这样必然会造成特定时间段(一般几秒到几十秒不等)大量的用户对某商品进行抢购,并会有库存不足,抢购失败的情况。秒杀的特点大量用户在秒杀时间点发起购买请求,造成网站流量瞬间激增; 秒杀的商品一般库存较少,只有少数用户能够购买,要控制好库存,防止超卖; 整个系统关键在于支撑短时间内...

2020-04-29 15:32:35 2178

转载 Jackson总结:常用注解、整合spring、自定义JsonSerializer

ackson作为springMVC默认的MessageConverter(消息序列化工具),经常在项目中使用,如果熟悉Jackson常用的使用方法,特性化机制,就会事半功倍,极大提高前后端数据交互的灵活性。maven依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> ...

2020-04-29 15:29:30 458

原创 SpringBoot自定义starter

一、自定义starter前要了解的1、这个场景需要使用到的依赖是什么?2、如何编写自动配置@Configuration//指定这个类是一个配置类@ConditionalOnXXX//在指定条件成立的情况下自动配置类生效@AutoConfigureAfter//指定自动配置类的顺序@Bean//给容器中添加组件@ConfigurationPropertie //...

2020-04-25 22:44:56 402

原创 SpringBoot启动流程

几个重要的事件回调机制配置在META-INF/spring.factoriesApplicationContextInitializerSpringApplicationRunListener只需要放在ioc容器中ApplicationRunnerCommandLineRunner启动流程:1、创建SpringApplication对象initialize(so...

2020-04-24 22:06:28 283

转载 Spring Boot 2.x 启动全过程源码分析(全)

上篇《Spring Boot 2.x 启动全过程源码分析(一)入口类剖析》我们分析了 Spring Boot 入口类 SpringApplication 的源码,并知道了其构造原理,这篇我们继续往下面分析其核心 run 方法。SpringApplication 实例 run 方法运行过程/*** Static helper that can be used to run a {@lin...

2020-04-24 01:34:34 478

原创 Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。Spring Boot读取配置的几种方式:读取application文件在application.yml或者properties文件中添加:info.address=USAinfo.company=Spring...

2020-04-24 00:31:20 1202

转载 Intellij IDEA pom.xml文件中如何手动添加Maven依赖

熟悉IDEA的同鞋都知道IDEA很强大,非常强大,让我这个使用了N年Eclipse的忠实者也转移到了的IDEA的阵营,今天说下,如何在IDEA中的Maven项目中添加第三方的Jar依赖,其实很简单,请看图:1.先打开项目中的pom.xml文件,并使用快捷键Alt+Insert :2.选择Depenency后,并输入要添加的Jar包的相关包名或者类名检索:这里我输入 “se...

2020-04-24 00:30:24 7964 1

原创 如何在 Spring Boot 启动的时候运行一些特定的代码?

可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。Spring Boot Runner启动器:Runner启动器如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口 ApplicationRunner或者 CommandLineRunner,这两个接口实现方式一样...

2020-04-23 19:29:28 3758

转载 Spring Boot

一、什么是 Spring Boot?主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。1、Spring Boot的优点Features Create stand-alone Spring applications Embed Tomcat, Jetty or Undertow directly (no need to d...

2020-04-23 19:26:47 371

转载 两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践

Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot专家的文章。在本文中,我将重点介绍Spring Boot特有的实践(大多数时候,也适用于Spring项目)。以下依次列出了最佳实践,排名不分先后。1、使用自定义BOM来维护第...

2020-04-23 19:22:28 267

转载 Spring Boot 2.x 新特性总结及迁移指南

这一篇文章主要讲解 Spring Boot 2.x 与 1.5.x 的区别,2.x 主要更新了什么东西,以便对 Spring Boot 2.x 有一个详细的了解。本文讲的 1.x 指的是 1.5.10, 2.x 指的是 2.0.0。 配置变更 在 2.x 中废除了一些 1.x 中的配置,并增加了许多新配置,详细请查看以下链接中的变更表格。https://github.com/s...

2020-04-23 19:14:12 330

转载 @Conditional、@ConditionalOnClass 等条件注解的作用

(1)例子说明(2)编码思路(3)编写条件类WindowCondition和LinuxCondition(4)编写接口CmdService以及两个实现类(5)编写配置类,根据条件进行注入不同的类(6)编写测试代码(7)Spring提供的Condition(8)题外话:怎么在Condition中获取application.properties的配置项

2020-04-23 16:53:56 5362 2

转载 @ConfigurationProperties 的作用

springBoot目录@ConfigurationPropertiesspring-boot 提供该注解将配置文件的值映射到类上使用。例子:1、这是我们在application.yml配置的druid连接池学习2、通过@ConfigurationProperties注解则会将值映射到该类中3、通过@Autowired标签即可访问到该对象,不过在使用之前必须在使用类上面...

2020-04-23 16:13:26 1252

转载 @EnableConfigurationProperties 的作用

先说作用:@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。说明:如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfiguratio...

2020-04-23 16:04:02 27441 2

转载 @Configuration作用

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。@Configuration标注在类上,相当于把该类作为s...

2020-04-23 15:57:44 578

转载 Spring Boot面试杀手锏:自动配置原理(重新理解)

引言不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框架。当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。Spr...

2020-04-23 15:48:49 471

转载 SpringBoot自动配置的实现原理(重新理解)

之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配置的功能,我们编写一个最简单的自动配置功能,大概的总结一下.一,配置属性类其实就是值对象注入的方式去配置一些Spring常用的配置,我们编写一个最简单的配置对象。@Configurati...

2020-04-23 15:24:22 498 1

转载 Java高级进阶:自定义ClassLoader

假如我们的类不在classpath下,而我们又想读取一个自定义的目录下的class,如果做呢?读取自定义目录的类示例读取c:/test/com/test.jdk/Key.class这个类。package com.test.jdk;public class Key { private String key = "111111";}自定义ClassLoaderim...

2020-04-22 00:13:31 450

原创 equals 和 hashCode 到底有什么联系?一文告诉你!

写在前面Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。本文介绍了2种方法在使用和重写时,一些需要注意的问题。equal()方法Object类中equals()方法实现如下:publ...

2020-04-21 22:57:25 357

原创 Java Base64 编码解码方案总结

Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。如果要使用Java 程式语言来实作Base64的编码与解码功能,可以参考本篇文章的作法。早期作法早期在Java上做Base64的编码与解码,会使用到JDK里s...

2020-04-21 21:12:59 631

原创 PV、UV、IP分别是什么意思

PV、UV、IP可能各有它们不同的意思,但是当它们出现在一起的时候,多指网站的运营与管理这方面。在这儿小编就为大家分享一下PV、UV、IP分别是什么意思。网站运营:1、PVPage View(页面访问量)又叫做页面浏览量、点击量。通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。用户每打开一个网站页面就被记录1次。用户多次打开同一页面,浏览量值累计。所以,页面访问量是...

2020-04-19 23:41:32 1189

转载 服务器一般达到多少QPS比较好?

每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间 公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS) 机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器 每天...

2020-04-19 23:26:30 6777

原创 Spring Boot 整合 Junit 单元测试

1、pom.xml中添加Junit依赖:<!-- 添加 junit 环境的 jar 包 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId&gt...

2020-04-15 02:05:54 281

原创 Java中接口的理解和使用

1、接口的理解package com.example.demo.interfaceClass;/** * 1、我们前面用继承关系,描述了动物、哺乳动物、爬行动物的各种关系 * 2、现在我们要描述:飞机、公鸡、导弹、子弹、篮球、石头的关系? *///进行一次抽象,它们都会飞public interface Flyable { int MAX_SPEED = 11000...

2020-04-14 14:45:29 376 1

原创 Java数组值打印

Java数组本身没有重写Object的toString()方法;所以我们打印数组中的值一般使用数组的工具类Arrays的toString()方法:Arrays.toString();下面是这个方法的源码://Arrays.toString()public static String toString(int[] a) { if (a == null) return "nul...

2020-04-12 23:20:27 437

转载 XML解析——Java中XML的四种解析方式

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。  XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的...

2020-04-12 23:15:25 337

转载 Java解析XML(4种方法)

xml文件:<?xml version="1.0" encoding="utf-8" ?><class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <nic...

2020-04-12 23:05:50 297

原创 Java抽象类的理解和使用

package com.example.demo.abstractClass;/** * @Description 抽象类的理解和使用: * 1、抽象类只能用来被继承 * 2、抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展 * 3、通过抽象类,可以避免子类设计的随意性 * * @Auther gf.x * @Date 2020...

2020-04-08 13:04:34 383

原创 多态及内存分析

1、父类package com.example.demo.polymorphismServlet;/** * @Description 多态父类 * @Auther gf.x * @Date 2020/4/8 0:06 */public class HttpServlet { public void service() { System.out.prin...

2020-04-08 13:01:16 359

原创 Java异常机制 自定义异常

1、自定义异常类//自定义异常类MyException,继承RuntimeExceptionpublic class MyException extends Exception{ //无参构造方法 public MyException() { } //有参构造方法 (message:异常描述信息) public MyException(Strin...

2020-04-07 22:18:12 375

原创 Java异常机制 throws和throw的使用

package com.example.demo.exceptionTest;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;/** * @Description throws和throw的使用 * @Auther gf.x * @Date 202...

2020-04-07 21:35:57 422

转载 同事埋了个坑:Insert into select语句把生产服务器炸了

前言Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使用网络I/O,直接使用SQL依靠数据库I/O完成,这样简直不要太...

2020-04-07 21:20:26 530

原创 Intellij idea用快捷键自动生成序列化id

默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告。如果需要ide提示生成serialVersionUID,那么需要做以下设置:Setting->Inspections->Serialization issues->Serializable class without ’serialVers...

2020-04-07 20:41:38 418

原创 异常机制 try、catch、finally、return 执行顺序

package com.example.demo;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;/** * @Description 异常机制 try、catch、finally、return 执行顺序 * @Auther gf.x * @Dat...

2020-04-07 11:37:07 329

原创 Java异常处理机制

package com.example.demo;import org.junit.Test;/** * @Description Java异常处理机制 * @Auther gf.x * @Date 2020/4/6 13:51 */public class ExceptionTest { //1、异常的分类 public static void main(S...

2020-04-07 11:33:22 241

Java8 新特性.rar

Java8新特性,包含代码实例与技术文档。

2020-03-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除