摘要:
类图概述 由类图可以看出,L是单向链表实现的,有两个ReentrantLock实例用来控制元素入队和出队的原子性,takeLock用来控制只有一个线程可以从队头获取元素,putLock控制只有一个线程可以从队尾添加元素。notEmpty和notFull是条件变量,内部有条件队列用来存放进队和出队被阻 阅读全文
摘要:
为什么听众无法理解你的演讲 文斯视察工厂时,指着一台生产设备问:有没有这个设备的清洁记录? 工厂负责人赶紧解释:我和你说,事情是这样的,我们工厂内部的清洁流程是这样的...(省略一百字介绍)。 解释了很多,但就是没有正面回答问题。 文斯开了个玩笑,说:一个有或没有的问题,他们至少需要十分钟才能告诉我 阅读全文
摘要:
AQS简述 AQS是一个FIFO的双向队列,队列元素类型为Node(也就是Thread)。AQS有一个state属性,ReentrantLock可以用来便是当前线程获取锁的可重入次数;对于samaphore来说,state表示当前可用信号的个数;对于CountDownLatch,state表示计数器 阅读全文
摘要:
JUC的线程池架构 1.Executor Executor是Java异步任务的执行者接口,目标是执行目标任务。Executor作为执行者角色,目的是提供一种将“任务提交者”与“任务执行者”分离的机制。它只有一个函数式方法: public interface Executor { void execu 阅读全文
摘要:
线程的启动和运行 方法一:使用start()方法:用来启动一个线程,当调用start方法后,JVM会开启一个新线程执行用户定义的线程代码逻辑。 方法二:使用run()方法:作为线程代码逻辑的入口方法。run方法不是由用户程序来调用的,当调用start方法启动一个线程之后,只要线程获得了CPU执行时间 阅读全文
摘要:
幂等性是什么? 一次接口调用和多次接口调用都能得到与预期相符的结果。 怎么解决? 传统方法:代码增加前置判断,但是这样工作量太大了。 我们需要一种无侵入的幂等解决方案。 构建幂等表示通用的解决方案 幂等表设计 每次在请求头部放一个RequestId(保证唯一的),通过网关检查RequestId,幂等 阅读全文
摘要:
CMS收集器的特点:追求最短的停顿时间。 CMS-Concurrent Mark Sweep 并发 标记 清除 标记垃圾的方式 标记清除:标记处需要回收的对象,标记完成后统一回收所有被标记的对象。 标记复制:将内存分为两块, 每次用一块。当一块内存用完时,将活着的对象复制到另一块上。 标记整理:让存 阅读全文
摘要:
缓存穿透 缓存的目的是为了缓解 CPU 或者 I/O 的压力,譬如对数据库做缓存,大部分流量都从缓存中直接返回,只有缓存未能命中的数据请求才会流到数据库中,这样数据库压力自然就减小了。 如果查询的数据在数据库中根本不存在的话,缓存里自然也不会有, 这类请求的流量每次都不会命中,这种查询不存在数据的现 阅读全文
摘要:
介绍 一阶段:事务协调者通知每一个服务处理本地事务,每个服务开始处理但是不会提交事务,处理完毕后告知协调者。 二阶段:协调者收到所有服务的消息后通知他们提交事务。 重要角色 事务管理器(TM),决定什么时候全局提交or回滚。(司令官) 事务协调者(TC),负责通知命令的中间件seata-serv 阅读全文
摘要:
总结 MMM是是Perl语言开发的用于管理MySQL主主同步架构的工具包。主要作用:管理MySQL的主主复制拓扑,在主服务器失效时,进行主备切换和故障转移。 MMM缺点:故障切换可能会丢事务(主备使用半同步复制解决)。不支持GTID。社区不活跃。MMM无法完全的保证数据一致性,所以适用于对数据的一致 阅读全文