2020-05-22
Spring Boot集成RocketMQ

一、概念二、集成 Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的Broke...

Read More
 2020-02-03

昨天下午回南京了,全副武装。一路上倒没感觉到如何不同,从火车站出站进入地铁的时候,一下子惊醒了。没有了往日嘈杂的列车进站声,地铁站显得非常安静,平日里两三分钟一班的地铁,延长到了10分钟一班。几乎没有人讲话,耳朵里只有广播的声音。一场瘟疫改变了这么多。料到了会很严重,没想到这么严重。刚开始延长了3天假,自己还觉得...

Read More
 2019-09-09
钩子函数、切面编程和代理

钩子函数 切面编程 代理 静态代理 动态代理 以前对钩子函数、切面编程和动态代理分别进行过了解,从来没有把三者联合起来思考过。今天在讨论一个问题的过程中,突然意识到这三者其实是为了达到同一目的的三种方法,也就是说从目的上讲是同一种东西——都是为了增强方法,让方法获得一...

Read More
 2019-02-25
Elasticsearch 乐观锁控制

乐观锁控制Elasticsearch 是分布式的。当创建、修改或删除一个文档的时候,这个文档的新版本会被复制到集群中的其他节点。Elasticsearch 既是异步(asynchronous)的又是同步(concurrent)的,这意味着这些复制请求是同步发送的,但是有可能不按顺序(out of sequence...

Read More
 2019-01-21
用最简单的语言介绍 CAP 理论

第一章:“记忆有限公司”──你的新冒险 第二章:扩大业务 第三章:你有了第一个“糟糕的服务” 第四章:你修正了一致性错误 第五章:你想到了一个最伟大的解决方案 第六章:老婆发火了 第七章:结论 彩蛋:雇佣一个跑腿的职员来保证最终一致性原文来自A plain english introductio...

Read More
 2019-01-17
Update 操作导致 MySQL 锁超时

背景在计算程序中,调度系统会分页计算所有数据,每个分页是一个线程,所以整个计算会有多个线程操作。计算又分为多个步骤,所有的操作最后都需要更新 detail 表,update 语句的条件是 a_id 和 b_id。detail 表主要字段如下:create table srm_review_detail( id ...

Read More
 2018-12-15
MySQL 如何执行关联查询

步骤在MySQL中任何一个查询都是一个关联。 先执行子查询生成临时表; 在最外层表中循环取出单条数据; 嵌套循环到下内层表中寻找匹配的行,直到找到内层表所有匹配的行为止; 根据各个表匹配的行,返回查询中需要的各个列。 MySQL会尝试在最后一个关联表中找到所有匹配的行,如果最后一个表无法找到更多的行,M...

Read More
 2018-02-06
ThreadLocal

ThreadLocal

ThreadLocal 是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立地改变自己的副本而不会影响其他相差对应的副本。在一个类中,ThreadLocal类型的实例是典型的私有、静态(private static)字段,因为我们可以将其作为线程的关联状态。

Read More
 2018-02-02
双亲委派模型

1、类的加载过程

类的加载过程指通过一个类的全限定名获取描述此类的二进制字节流,并将其转化为方法区的数据结构,进而生成一个 java.lang.Class 对象的实例作为方法区各种数据访问的入口。

Read More
 2018-01-28
MySQL 索引

1. 索引的优点 索引可以减少扫描的数据量。 索引和避免排序和建立临时表。 索引可以将随机IO变为顺序IO。2. 索引的选择性索引的选择性是索引列不重复的值和表记录总数(n)的比值,范围在 1/n 到 1 之间。选择性越高查询效率就越高,因为选择性高的索引可以在查询时过滤掉更多的行。唯一索引的选择性是 1,...

Read More
 2018-01-23
volatile 关键字

前置概念

  • 指令重排:JVM 为了优化指令、提高运行速度,在不影响单线程执行结果的前提下,会对代码进行重排。
  • 内存可见性:每个线程在获取锁之后,会在自己的工作内存中操作共享变量,操作完成之后将工作内存中的副本写回内存,在此过程中共享变量的变化对其是不可见的。这样做也是为了提高效率。

Read More
 2017-12-22
Git 版本管理流程

命名规范

  • master 分支:master
  • develop 分支:develop
  • release 稳定分支:release_stable_YYYYMMDD_n,YYYYMMDD 为当前日期(年月日),n 为递增序列号;
  • release 测试分支:release_nightly_YYYYMMDD_n,YYYYMMDD 为当前日期(年月日),n 为递增序列号;
  • 开发人员版分支:bug单号为 bugfree 编号,n 为递增序列号。
    • 修复 bug:fixbug_bug单号_邮箱前缀_n
    • 需求功能:feature_bug单号_邮箱前缀_n

Read More
 2017-12-18
clone 方法

Cloneable 接口:

  • 实现 Cloneable 接口的类表明 clone 方法会返回该对象的一个逐域拷贝(field-for-field copy)的实例。
  • 在一个未实现 Cloneable 接口的类上调用 clone 方法会抛出 CloneNotSupportedException 异常。
  • 实现 Cloneable 接口的类应该用一个public方法重写 Object 的 clone 方法(protected)。
  • Cloneable 接口并没有提供一个 clone 方法,因此并不能因为类实现了此接口就可以调用 clone 方法。

Read More
 2017-12-17
equals 方法

实现 equals() 方法,要实现以下四点:

  • 自反性:对于任何非 null 引用 x,x.equals(x)必须返回 true。
  • 对称性:对于任何非 null 引用 x 和 y,当 y.equals(x) 返回 true 时,x.equals(y) 也必须返回 true。
  • 传递性:对于任何非 null 引用x,y 和 z,当 x.equals(y) 返回 true,并且 y.equals(z) 也返回 true,那么 x.equals(z) 也必须返回 true。
  • 一致性:对于任何非 null 引用 x 和 y,只要 equals 方法用到的信息没有被修改,多次调用 x.equals(y)应该一致性地返回 true 或 false。

Read More
 2017-12-09
逃逸分析

  • 如果一个对象被多个线程或方法使用,那么这个对象的指针就发生了逃逸
  • 逃逸分析可以减轻 Java 的同步负载内存堆分配压力的全局数据流分析算法。
  • 分析一个对象的使用范围决定是否要把它分配在上,如果一个对象未发生逃逸,则直接分配在上。
  • -XX:+DoEscapeAnalysis开启逃逸分析。

Read More
 2017-10-28
JavaScript 相等判断

1. =====

(1) ‘==’ 会进行隐式的类型转换。

  • 如果有一个操作数是布尔型,比较之前会转换为数值;
  • 如果一个操作数是字符串,另一个是数值,比较之前会把字符串转换为数值;
  • 如果一个操作数是对象,另一个不是,比较之前会调用对象的 valueOf() 方法,再按照之前的规则比较;

Read More
 2017-08-06
dubbo IP 绑定

背景

工作中经常用到 dubbo,出现过多次消费端获取不到服务的问题。印象中这个问题遇到过3次,每次都会耽误我很久的时间。实际上也是因为自己不求甚解,没有仔细看过 dubbo 的文档,看源码就更谈不上了。

Read More
 2017-07-12
Ehcache(二)存储层次

一、存储层级

  1. 内存存储:在堆内存里存储。从属于 Java GC。
  2. 非堆存储:受限于 RAM 的可用空间。
    • 不从属于 Java GC。
    • 只能存储序列化的数据。
    • 为内存存储提供了溢出能力。
  3. 磁盘存储。
    • 备份内存存储。
    • 为非堆存储提供溢出能力。
    • 只能存储序列化的数据。

Read More
 2017-07-12
Ehcache(一)缓存配置

一、XML配置文件

  1. ehcache 默认会在 classpath 下查找名为 ehcache.xml 的文件,当然也可以自定义名称。
  2. 如果没有找到 ehcache.xml,ehcache 会默认试用 ehcache-failsafe.xml,它被打包在 ehcache 的 jar 文件中。如果用户使用的是这个文件,ehcache 会报一个警告,让用户自己定义一个配置文件。
  3. defaultCache 配置会被应用到所有没有被显示声明的缓存中。这个配置不是必需的。

Read More
 2017-07-08
Java 动态代理

一、代理模式

Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。

Read More
 2017-07-06
UNION 和 LIMIT 1

今天的另外两个知识点:1、UNION: 查询中尽量不要使用 OR,可以用 UNION 代替。 UNION 和 UNION ALL 的不同点在于:UNION 会删除重复结果再返回,UNION ALL 不会。2、LIMIT 1:如果明确知道查询的结果不会多于一个,可以在查询语句的末尾加上 LIMIT 1,这样 M...

Read More
 2017-06-10
常用垃圾回收算法

一、什么是垃圾回收

垃圾回收(Garbage Collection,简称 GC),就是将存在于内存中的、不会再被使用的对象占有的空间进行清理。清理出来的空间可以供其他对象再利用。如果一直不进行垃圾回收,则有可能会导致内存溢出。

Read More
 2019-09-09
钩子函数、切面编程和代理

钩子函数 切面编程 代理 静态代理 动态代理 以前对钩子函数、切面编程和动态代理分别进行过了解,从来没有把三者联合起来思考过。今天在讨论一个问题的过程中,突然意识到这三者其实是为了达到同一目的的三种方法,也就是说从目的上讲是同一种东西——都是为了增强方法,让方法获得一...

Read More
 2018-02-06
ThreadLocal

ThreadLocal

ThreadLocal 是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立地改变自己的副本而不会影响其他相差对应的副本。在一个类中,ThreadLocal类型的实例是典型的私有、静态(private static)字段,因为我们可以将其作为线程的关联状态。

Read More
 2018-02-02
双亲委派模型

1、类的加载过程

类的加载过程指通过一个类的全限定名获取描述此类的二进制字节流,并将其转化为方法区的数据结构,进而生成一个 java.lang.Class 对象的实例作为方法区各种数据访问的入口。

Read More
 2018-01-23
volatile 关键字

前置概念

  • 指令重排:JVM 为了优化指令、提高运行速度,在不影响单线程执行结果的前提下,会对代码进行重排。
  • 内存可见性:每个线程在获取锁之后,会在自己的工作内存中操作共享变量,操作完成之后将工作内存中的副本写回内存,在此过程中共享变量的变化对其是不可见的。这样做也是为了提高效率。

Read More
 2017-12-18
clone 方法

Cloneable 接口:

  • 实现 Cloneable 接口的类表明 clone 方法会返回该对象的一个逐域拷贝(field-for-field copy)的实例。
  • 在一个未实现 Cloneable 接口的类上调用 clone 方法会抛出 CloneNotSupportedException 异常。
  • 实现 Cloneable 接口的类应该用一个public方法重写 Object 的 clone 方法(protected)。
  • Cloneable 接口并没有提供一个 clone 方法,因此并不能因为类实现了此接口就可以调用 clone 方法。

Read More
 2017-12-17
equals 方法

实现 equals() 方法,要实现以下四点:

  • 自反性:对于任何非 null 引用 x,x.equals(x)必须返回 true。
  • 对称性:对于任何非 null 引用 x 和 y,当 y.equals(x) 返回 true 时,x.equals(y) 也必须返回 true。
  • 传递性:对于任何非 null 引用x,y 和 z,当 x.equals(y) 返回 true,并且 y.equals(z) 也返回 true,那么 x.equals(z) 也必须返回 true。
  • 一致性:对于任何非 null 引用 x 和 y,只要 equals 方法用到的信息没有被修改,多次调用 x.equals(y)应该一致性地返回 true 或 false。

Read More
 2017-12-09
逃逸分析

  • 如果一个对象被多个线程或方法使用,那么这个对象的指针就发生了逃逸
  • 逃逸分析可以减轻 Java 的同步负载内存堆分配压力的全局数据流分析算法。
  • 分析一个对象的使用范围决定是否要把它分配在上,如果一个对象未发生逃逸,则直接分配在上。
  • -XX:+DoEscapeAnalysis开启逃逸分析。

Read More
 2017-08-06
dubbo IP 绑定

背景

工作中经常用到 dubbo,出现过多次消费端获取不到服务的问题。印象中这个问题遇到过3次,每次都会耽误我很久的时间。实际上也是因为自己不求甚解,没有仔细看过 dubbo 的文档,看源码就更谈不上了。

Read More
 2017-07-12
Ehcache(二)存储层次

一、存储层级

  1. 内存存储:在堆内存里存储。从属于 Java GC。
  2. 非堆存储:受限于 RAM 的可用空间。
    • 不从属于 Java GC。
    • 只能存储序列化的数据。
    • 为内存存储提供了溢出能力。
  3. 磁盘存储。
    • 备份内存存储。
    • 为非堆存储提供溢出能力。
    • 只能存储序列化的数据。

Read More
 2017-07-12
Ehcache(一)缓存配置

一、XML配置文件

  1. ehcache 默认会在 classpath 下查找名为 ehcache.xml 的文件,当然也可以自定义名称。
  2. 如果没有找到 ehcache.xml,ehcache 会默认试用 ehcache-failsafe.xml,它被打包在 ehcache 的 jar 文件中。如果用户使用的是这个文件,ehcache 会报一个警告,让用户自己定义一个配置文件。
  3. defaultCache 配置会被应用到所有没有被显示声明的缓存中。这个配置不是必需的。

Read More
 2017-06-10
常用垃圾回收算法

一、什么是垃圾回收

垃圾回收(Garbage Collection,简称 GC),就是将存在于内存中的、不会再被使用的对象占有的空间进行清理。清理出来的空间可以供其他对象再利用。如果一直不进行垃圾回收,则有可能会导致内存溢出。

Read More
 2019-01-17
Update 操作导致 MySQL 锁超时

背景在计算程序中,调度系统会分页计算所有数据,每个分页是一个线程,所以整个计算会有多个线程操作。计算又分为多个步骤,所有的操作最后都需要更新 detail 表,update 语句的条件是 a_id 和 b_id。detail 表主要字段如下:create table srm_review_detail( id ...

Read More
 2018-12-15
MySQL 如何执行关联查询

步骤在MySQL中任何一个查询都是一个关联。 先执行子查询生成临时表; 在最外层表中循环取出单条数据; 嵌套循环到下内层表中寻找匹配的行,直到找到内层表所有匹配的行为止; 根据各个表匹配的行,返回查询中需要的各个列。 MySQL会尝试在最后一个关联表中找到所有匹配的行,如果最后一个表无法找到更多的行,M...

Read More
 2018-01-28
MySQL 索引

1. 索引的优点 索引可以减少扫描的数据量。 索引和避免排序和建立临时表。 索引可以将随机IO变为顺序IO。2. 索引的选择性索引的选择性是索引列不重复的值和表记录总数(n)的比值,范围在 1/n 到 1 之间。选择性越高查询效率就越高,因为选择性高的索引可以在查询时过滤掉更多的行。唯一索引的选择性是 1,...

Read More
 2017-07-06
UNION 和 LIMIT 1

今天的另外两个知识点:1、UNION: 查询中尽量不要使用 OR,可以用 UNION 代替。 UNION 和 UNION ALL 的不同点在于:UNION 会删除重复结果再返回,UNION ALL 不会。2、LIMIT 1:如果明确知道查询的结果不会多于一个,可以在查询语句的末尾加上 LIMIT 1,这样 M...

Read More
 2017-07-08
Java 动态代理

一、代理模式

Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。

Read More
 2017-10-28
JavaScript 相等判断

1. =====

(1) ‘==’ 会进行隐式的类型转换。

  • 如果有一个操作数是布尔型,比较之前会转换为数值;
  • 如果一个操作数是字符串,另一个是数值,比较之前会把字符串转换为数值;
  • 如果一个操作数是对象,另一个不是,比较之前会调用对象的 valueOf() 方法,再按照之前的规则比较;

Read More
 2020-02-03

昨天下午回南京了,全副武装。一路上倒没感觉到如何不同,从火车站出站进入地铁的时候,一下子惊醒了。没有了往日嘈杂的列车进站声,地铁站显得非常安静,平日里两三分钟一班的地铁,延长到了10分钟一班。几乎没有人讲话,耳朵里只有广播的声音。一场瘟疫改变了这么多。料到了会很严重,没想到这么严重。刚开始延长了3天假,自己还觉得...

Read More
 2017-12-22
Git 版本管理流程

命名规范

  • master 分支:master
  • develop 分支:develop
  • release 稳定分支:release_stable_YYYYMMDD_n,YYYYMMDD 为当前日期(年月日),n 为递增序列号;
  • release 测试分支:release_nightly_YYYYMMDD_n,YYYYMMDD 为当前日期(年月日),n 为递增序列号;
  • 开发人员版分支:bug单号为 bugfree 编号,n 为递增序列号。
    • 修复 bug:fixbug_bug单号_邮箱前缀_n
    • 需求功能:feature_bug单号_邮箱前缀_n

Read More
 2019-01-21
用最简单的语言介绍 CAP 理论

第一章:“记忆有限公司”──你的新冒险 第二章:扩大业务 第三章:你有了第一个“糟糕的服务” 第四章:你修正了一致性错误 第五章:你想到了一个最伟大的解决方案 第六章:老婆发火了 第七章:结论 彩蛋:雇佣一个跑腿的职员来保证最终一致性原文来自A plain english introductio...

Read More
 2019-02-25
Elasticsearch 乐观锁控制

乐观锁控制Elasticsearch 是分布式的。当创建、修改或删除一个文档的时候,这个文档的新版本会被复制到集群中的其他节点。Elasticsearch 既是异步(asynchronous)的又是同步(concurrent)的,这意味着这些复制请求是同步发送的,但是有可能不按顺序(out of sequence...

Read More
 2020-05-22
Spring Boot集成RocketMQ

一、概念二、集成 Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的Broke...

Read More