java
zl.qian
talk is cheap ,show me the bug
展开
-
分布式事务框架Seata的实现原理
介绍分布式事务相关概念事务: 并发控制的单元,是用户定义的一组操作序列,需要满足ACID属性。 本地事务:事务由本地资源管理器管理。 分布式事务:事务的操作位于不同的节点。 分支事务:在分布式事务中,由资源管理器管理的本地事务。 全局事务:一次性操作多个资源管理器完成的事务,由一组分支事务组成。分布式事务实现规范对于本地事务,可以借助DBMS系统来实现事务的管理,但是对于分布式事务,它就无能为力了。对于分布式事务,目前主要有2种思路:XA协议的强一致规范以及柔性事务的最终一致性规范。原创 2020-10-12 21:48:42 · 1362 阅读 · 0 评论 -
花几分钟看懂logback
前言我们开发项目过程中,日志是必不可少的,但是我们一直在使用,却很少考虑其原理,本文就是填补此项空白。目录介绍日志框架通常采用门面模式来设计,也就是说开发在使用时直接使用api,而不关心具体实现细节,在java项目中,主要有以下对应产品:门面实现jcl/SLF4j/jboss-loggingLog4j JUL(java.util.logging) Log4j2 Logback本文主要介绍slf4j+logback这个主流的日志搭档。使用slf4j-api上文我们说原创 2020-09-23 20:23:06 · 445 阅读 · 0 评论 -
阅读《es权威指南》的要点学习&总结
分片均衡算法原创 2020-09-16 23:36:04 · 228 阅读 · 0 评论 -
流量回放repeater的原理分析一:sandbox源码分析
目录先说下sandbox-jvm实现字节码增强的原理启动模块加载增强的完成再来看看repeater通过增强的功能实现录制与回放先说下sandbox-jvm实现字节码增强的原理启动我们知道启动分为attach模式和javaagent模式,其过程基本相同,入口都在AgentLauncher中,分别对应着agentmain和premain,它们都调用了install方法,以agentmain为例:public static void agentmain(String featureString, Inst原创 2020-09-08 00:00:26 · 2921 阅读 · 0 评论 -
什么是流量回放?有哪些方案可以借鉴?
前言做开发的人都知道自动化测试,自动化测试不需要人为去触发一个个行为,系统自动运行测试用例。价值不言而喻,但是如果自动化测试用例的缺失部分导致系统没完整测试回归可能会给系统带来风险。这里就是流量回放的价值:通过记录线上流量,在开发或者测试环境回放,来发现系统是否能够正常运行,降低代码变动整体系统带来的风险。原理参考...原创 2020-08-24 21:26:27 · 21958 阅读 · 0 评论 -
rocketmq-各模块-实现原理(简化的实现思想构建高效的系统)
设计理念追求简单和速度NameServer简化,减少复杂度,提高速度;高效的io存储,简化系统,不保证消息只被消费一次,需要消费者自己做幂等;核心模块NameServerNameServer采用了极简设计,节点之间不进行数据同步,因为即使NameServer不是强一致性,客户端也会通过重试避免故障。整体工作流程如下:broker向所有NameServer注册路由元数据,每30秒更新一次NameServer每10秒发送一次心跳检测,如果超过120秒未收到反馈则移除该broker相原创 2020-08-18 20:17:24 · 267 阅读 · 0 评论 -
Guava整体功能介绍
基本工具避免使用null预校验流式比较器Ordering对象公共方法其中ComparisonChain链式比较器可以减少很多冗余代码,例如 public int compareTo(Foo that) { return ComparisonChain.start() .compare(this.aString, that.aString) .compare(this.anInt, that.anInt) .compare(thi原创 2020-07-09 17:20:58 · 1081 阅读 · 0 评论 -
数据结构-BitSet的实现原理-java.util.BitSet
今天看es看到,es使用bitset来标记一个文档是否匹配,于是就看了下java.util中的BitSet实现原理,记录一下该数据结构能够实现什么void set(int id):设置id存在boolean get(int id): 查看id是否存在容易想到用bit位的1或者0来代表, 那么一个long的长度8字节(64位),能存储64个位置的状态,对于id来说需要多少个long才能存储所...原创 2020-04-30 13:55:35 · 259 阅读 · 0 评论 -
springboot项目中使用mvc:annotation-driven问题
背景在一次无意的观察中,发现应用A(一个springboot应用)中的拦截器没有生效,该拦截器通过WebMvcConfigurerAdapter::addInterceptors注册定位分析了一圈代码没有发现异常的情况下,和其他拦截器生效的应用对比,发现唯一的区别在于A使用了mvc:annotation-driven注解该注解会自动生成3个Bean,其中一个bean为RequestMap...原创 2020-03-26 20:18:57 · 2778 阅读 · 0 评论 -
jvm的gc相关介绍
jvm内存区域如何识别垃圾回收算法回收器参考jvm内存区域一起看下内存区域:虚拟机栈线程私有,方法被执行时创建栈帧,主要保存方法中的局部变量表、操作数栈、动态链接、方法返回地址。方法调用时入栈,方法返回是出栈清除,不需要GC本地方法栈与虚拟机栈类似, 不过本地方法栈服务于本地方法调用程序计数器线程私有,线程获得处理器时间片执行时,从程序计数器...原创 2020-02-15 14:47:10 · 268 阅读 · 0 评论