自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 聊聊@PostConstruct、InitializingBean、ApplicationRunner/CommandLineRunner、@EventListener的初始化

一、背景 在我们在做application启动的时候,我们经常需要做一些初始化的操作,这个时候我们尝尝纠结于他们的执行顺序,其实我们真正应该去关心的是我们的需求,它应该什么时候被执行才是正确的。二、源码分析 为了不陈述大量的源码,只贴出了springboot项目在启动时,运行的run方法并分别在这几种方式调用的入口处加了注释public ConfigurableApplicationContext run(String... args) { long st...

2022-01-21 17:48:25 1660

原创 自定义HttpMessageConverter

自定义HttpMessageConverter

2022-01-20 15:23:51 1841

原创 git提效

很多朋友不喜欢用ide的git插件,还喜欢原生的命令行,但大多数场景都需要add+commit+push这些重复性操作,有个小技巧可以这样alias gs='git status'alias pull='git pull'alias push='push(){git add .&&git commit -m $1&&git push};push'这样设置完成后变更对比只需要输入:gs拉去最新代码只需要输入:pullpush代码只需要输入:push

2021-07-27 15:28:27 150

原创 git常用命令

1.git修改commit内容git commit -m "xx"commit之后,在push之前执行git commit --amend进入编辑页面,修改commit内容即可2.git修改commit的user.name和user.emailgit config --global user.name xxxgit config --global user.email xxx3.修改版本id用户名或邮箱git commit --amend --author="

2021-07-27 15:20:17 89

原创 从排序数组中删除重复项

1.背景给定一个排序数组,删除重复出现的元素,使得每个元素只出现一次。不要使用额外的数组空间,必须在原数组内完成。2.分析案例:int[] array = {1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9}输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 7, 7, 8, 9]3. 双指针法下标 0 1 2...

2019-01-06 12:46:12 177

原创 MAT内存分析工具-独立版安装

一、背景在java程序运行中发生OOM的时候,我们可以使用强大的内存分析工具MAT进行问题跟踪,但由于习惯了使用idea开发,再为了MAT下载个eclipse太麻烦,所以安装MAT独立版。二、安装下载地址:https://eclipse.org/mat/downloads.php选择自己系统相应的版本下载,下载完得到一个zip文件,笔者这里使用的是Mac OSX (Mac/Cocoa x86_64...

2018-02-09 15:03:43 24447 5

原创 Jackson序列化之自动检测

一、背景今天线上出现了一个问题,使用springMVC RestController接口返回json数据给客户端,发现其中某一个model中的所有属性,被序列化了两遍,并且一次是大写开头,一次是小写,部分结构如下:Java代码  "promotionTags": [      {          "CornerRadius": 1,          "TitleFontSize": 10,  ...

2018-02-09 15:03:05 2457 1

原创 Map原理及使用

Hashmap原理hashmap的底层数据结构散列表,即:数组+链表,创建的时候初始化一个数组,每个节点可以为一个链表 当一键值对发生put操作时,首先根据key的hash值得到这个元素在数组中的位置(即下标),如果这个位置上已经存在其他元素,将进行下一步操作。 由于同一点是链表方式存储,会将原来的元素向后推然后新的元素放在这个位置上put操作可能会出现冲突,冲突分两种: 不同的key值,通过ha...

2018-02-09 15:01:00 25466

原创 spring事件机制-onApplicationEvent执行两次

一、case复现事件定义 Java代码  public class MyEvent extends ApplicationEvent {        public MyEvent(Object object) {          super(object);      }  }    监听定义 Java代码  @Component  public class MyListener implem...

2018-02-09 15:00:11 5188 2

原创 JAVA BIO与NIO的对比

一、BIO1、机制 采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的链接,它接收到客户端的连接请求之后为每个客户端请求创建一个新的线程进行链路处理,处理完成之后通过输出流将响应返回给客户端,线程销毁,这就是典型的一请求一应答的通信模型。2、分析当客户端并发访问量增加后,服务端的线程个数和客户端并发访问按1:1的正比关系递增,线程膨胀之后,系统的性能会急剧下降,甚至会...

2018-02-09 14:59:13 247

原创 SecureCRT for mac 破解安装

一、参考链接参考链接二、背景Mac 上尝试了好多网上的方案都破解无效,通过上述链接解决了问题,总结下简要的步骤。三、方案1.官网下载SecureCRT传送门:secureCRT官网,我使用的是7.1.3版本,亲测可用。2.下载破解文件传送门:secureCRT破解文件3.获取注册信息secureCRT安装完后,可能应用程序中没有secureCRT,手动copy到应用程序中。破解文件下载后,会得到名...

2018-02-09 14:57:58 15287 1

原创 Rxjava学习

1 基本概念1.1 Rx概念一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库,其实 RxJava 的本质就是一个可以实现异步操作的库1.2 Rx优势同样是做异步,为什么人们用它,而不用现成的 Async / Future / XXX / ... 一个词:简洁! 异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 随着程序逻辑变...

2018-02-09 14:56:46 233

原创 深入理解ThreadLocal的"内存溢出"

背景对ThreadLocal的实际使用场景一直有点模糊。在code review中大家对ThreadLocal是否会出现内存泄漏问题提出不同看法。故上网一探究竟,但是发现网上的说法不一,有的说会导致内存泄漏有的说不会,很难发现实战的结晶。分析结构一个简洁的ThreadLocal类的内部结构如下Java代码  public class ThreadLocal<T> {         s...

2018-02-09 14:56:00 811

原创 深入了解MVCC

背景MySQL的InnoDB引擎实现了多版本控制MVCC,其对RR和RC隔离级别提供了支持,RR和RC可以在快照读取数据,那InnoDB是如何支持快照读的呢?MVCC 是如何操作的童话里是这么说的SelectInnoDB只查找版本小于或等于当前事务版本的数据行。确保事务读取到的行,要么是事务开始前就存在的,要么是事务自身插入或者修改的。行的删除版本要么未定义,要么大于当前事务的版本。确保事务读取到...

2018-02-09 14:55:00 374

原创 事务并发之隔离级别

概念事务事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。 事务并发数据库是多个用户(事务)共享的,当多个用户同时访问数据时,那么在这种情况下就叫做并发。 更新丢失两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统没有执行任何的锁操作,因此并发事务并...

2018-02-09 14:51:20 125

原创 SimpleDateFormat线程安全问题

一、背景项目上线前QA进行压测,出现SimpleDateFormat线程安全问题,异常如下Java代码  Exception in thread "Thread-1" java.lang.NumberFormatException: multiple points      at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecim...

2018-02-09 14:50:16 159

MAT内存分析工具-独立版安装

 一、背景在java程序运行中发生OOM的时候,我们可以使用强大的内存分析工具MAT进行问题跟踪,但由于习惯了使用idea开发,再为了MAT下载个eclipse太麻烦,所以安装MAT独立版。二、安装下载地址:https://eclipse.org/mat/downloads.php,如下选择自己系统相应的版本下载,下载完得到一个zip文件,笔者这里使用的是Mac OSX (...

2018-02-04 17:35:46 385

Jackson序列化之自动检测

一、背景今天线上出现了一个问题,使用springMVC RestController接口返回json数据给客户端,发现其中某一个model中的所有属性,被序列化了两遍,并且一次是大写开头,一次是小写,部分结构如下: "promotionTags": [ { "Corn...

2018-01-04 21:40:09 619 1

Map原理及使用

Hashmap原理hashmap的底层数据结构散列表,即:数组+链表,创建的时候初始化一个数组,每个节点可以为一个链表 当一键值对发生put操作时,首先根据key的hash值得到这个元素在数组中的位置(即下标),如果这个位置上已经存在其他元素,将进行下一步操作。 由于同一点是链表方式存储,会将原来的元素向后推然后新的元素放在这个位置上put操作可能会出现冲突...

2017-12-06 13:37:20 1339

spring事件机制-onApplicationEvent执行两次

一、case复现事件定义 public class MyEvent extends ApplicationEvent { public MyEvent(Object object) { super(object); }}  监听定义 @Componentpublic class MyListener implem...

2017-12-06 13:00:48 2201 1

JAVA BIO与NIO的对比

一、BIO1、机制 采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的链接,它接收到客户端的连接请求之后为每个客户端请求创建一个新的线程进行链路处理,处理完成之后通过输出流将响应返回给客户端,线程销毁,这就是典型的一请求一应答的通信模型。2、分析当客户端并发访问量增加后,服务端的线程个数和客户端并发访问按1:1的正比关系递增,线程膨胀之后,系统的性...

2017-11-19 23:30:54 144

原创 SecureCRT for mac 破解安装

一、参考链接参考链接二、背景Mac 上尝试了好多网上的方案都破解无效,通过上述链接解决了问题,总结下简要的步骤。三、方案1.官网下载SecureCRT传送门:secureCRT官网,我使用的是7.1.3版本,亲测可用。2.下载破解文件传送门:secureCRT破解文件,链接无效的话,请在附件中下载。3.获取注册信息secureCRT安装完后,可能应用程...

2017-09-03 12:45:47 1010 2

Rxjava学习

1 基本概念1.1 Rx概念一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库,其实 RxJava 的本质就是一个可以实现异步操作的库1.2 Rx优势同样是做异步,为什么人们用它,而不用现成的 Async / Future / XXX / ... 一个词:简洁! 异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难...

2017-03-16 17:01:24 138

原创 深入理解ThreadLocal的"内存溢出"

背景对ThreadLocal的实际使用场景一直有点模糊。在code review中大家对ThreadLocal是否会出现内存泄漏问题提出不同看法。故上网一探究竟,但是发现网上的说法不一,有的说会导致内存泄漏有的说不会,很难发现实战的结晶。分析结构一个简洁的ThreadLocal类的内部结构如下public class ThreadLocal<T> { ...

2016-12-29 12:45:13 624

原创 深入了解MVCC

背景MySQL的InnoDB引擎实现了多版本控制MVCC,其对RR和RC隔离级别提供了支持,RR和RC可以在快照读取数据,那InnoDB是如何支持快照读的呢?MVCC 是如何操作的童话里是这么说的SelectInnoDB只查找版本小于或等于当前事务版本的数据行。确保事务读取到的行,要么是事务开始前就存在的,要么是事务自身插入或者修改的。行的删除版本要么未定义,要么大于当前事...

2016-12-24 16:14:05 161

事务并发之隔离级别

概念事务事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。 事务并发数据库是多个用户(事务)共享的,当多个用户同时访问数据时,那么在这种情况下就叫做并发。 更新丢失两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统...

2016-12-14 23:38:50 134

SimpleDateFormat线程安全问题

一、背景项目上线前QA进行压测,出现SimpleDateFormat线程安全问题,异常如下Exception in thread "Thread-1" java.lang.NumberFormatException: multiple points at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal...

2016-12-14 23:11:27 129

空空如也

空空如也

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

TA关注的人

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