摘要: 一、设计原则 单一职责:一个类负责一类功能 开闭原则:对扩展开放,对修改封闭 里氏代换原则:所有使用父类的地方,都可以使用子类替换 依赖倒转:具体依赖抽象。两个关联的东西,都应该在外层有一个抽象封装,这样只需要修改内部实现,不影响关联。针对接口编程 接口隔离原则:一个接口负责一个功能 合成复用原则: 阅读全文
posted @ 2021-06-21 15:00 walker993 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 在Netty中,跟ThreadLocal做用很类似的类。配套使用的还有InternalThreadLocalMap,它对应ThreadLocalMap、FastThreadLocalThread,它对应Thread。对ThreadLocal不熟悉的小伙伴可以参考第三章 对象的共享中的对应部分。我们一 阅读全文
posted @ 2021-06-18 00:28 walker993 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 方法1: a & (a-1) == 0,画图就能理解 方法2: 这个是在看netty源码的时候发现的,DefaultEventExecutorChooserFactory#isPowerOfTwo(int val) (a & -a) == a,-a二进制的计算方式是,a的二进制取反,再加1,画图方便 阅读全文
posted @ 2021-06-17 18:47 walker993 阅读(53) 评论(0) 推荐(0) 编辑
摘要: synchronized是jdk中的关键字,保证了原子性、可见性、有序性。本文主要探讨可见性的相关问题。可见性是指一个线程对共享变量的修改,是否对其他线程可见。JMM中规定了,lock操作会从主存中刷新最新共享变量的值到工作线程,而unlock会将工作线程中的值同步会主存。所以synchronize 阅读全文
posted @ 2021-06-09 15:29 walker993 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 之前读CHM的源码(JDK8),其中有一段印象比较深,它内部有一个Node数组,volatile修饰, transient volatile Node<K,V>[] table; 。而Node对象本身,存储数据的val变量,也是用volatile修饰的。这两个一个是保证扩容时,变更table引用时的 阅读全文
posted @ 2021-06-09 01:13 walker993 阅读(2704) 评论(0) 推荐(0) 编辑
摘要: 参考自这篇文章:LFU五种实现方式,从简单到复杂,实现了其中第五种方法。 数据结构如下: 1. DoubleLinkedList 每个节点代表不同的频次,按照从高到低的顺序。每个节点内部又维护了一个Node链表,用来存储同一频次下不同时间访问的缓存,按照时间顺序,从前到后,最前的是最近被访问的缓存。 阅读全文
posted @ 2021-06-06 00:12 walker993 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 博主之前做的一个项目,数据依赖三个下游核心。可是呀,核心很烂,两个核心响应在3,400毫秒,一个在1秒以上。 吐槽之后,考虑一下如何提升接口的响应时间。 1. 串行转并发,使用线程池并发处理请求 2. 同步转异步,使用消息队列 3. 使用缓存,读写分离 4. 减少日志打印,留意日志打印中的序列化、长 阅读全文
posted @ 2021-05-31 17:17 walker993 阅读(745) 评论(0) 推荐(0) 编辑
摘要: 1. jps 查看正在运行的JVM进程 2. jstat 监视虚拟机运行时状态信息,显示虚拟机进程中的类装载、内存、垃圾收集、JIT编译等数据 3. jmap 生成heap dump文件,除了这个命令还可以配置-XX:+HeapDumpOnOutOfMemoryError参数让虚拟机出现OOM时自动 阅读全文
posted @ 2021-05-29 18:16 walker993 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 1. 继承体系 FutureTask实现了Runnable接口,实现了run() 方法,可以交给线程/线程池执行。实现了Future接口,实现了get()方法,可以获取执行的结果。 2. 重要属性 /** * Possible state transitions: * NEW -> COMPLETI 阅读全文
posted @ 2021-05-27 17:50 walker993 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 4.1 重要理论 4.1.1 数据模型 znode zk数据存储结构是一个树形结构,根节点下挂载子节点,每个节点都是一个znode,是zk中数据的最小单元,每个znode都可以保存数据 1. 节点类型 持久节点:节点被创建后一直保存,直到删除 持久顺序节点:父节点为儿子节点记录创建的顺序,即创建时在 阅读全文
posted @ 2021-05-24 10:53 walker993 阅读(22) 评论(0) 推荐(0) 编辑