HashMap 源码导读:从哈希表到红黑树
HashMap 几乎是 Java 面试的必考题。这一篇不背八股, 而是从一个最朴素的数组加链表讲起,一步步推导出 JDK 8 的最终形态: 扰动函数、负载因子、扩容为什么是 2 的幂、链表何时转红黑树。
阅读全文 →你好,我是林深。这里是我记录编程、阅读与日常的小角落, 更新不快,但每一篇都是认真写的。
HashMap 几乎是 Java 面试的必考题。这一篇不背八股, 而是从一个最朴素的数组加链表讲起,一步步推导出 JDK 8 的最终形态: 扰动函数、负载因子、扩容为什么是 2 的幂、链表何时转红黑树。
阅读全文 →凌晨三点被电话叫醒,服务频繁重启。jmap 一看, 堆里塞满了某第三方 SDK 缓存的对象。这篇记录那次 OOM 的完整排查过程, 以及顺带把 JVM 内存模型和分代 GC 串了一遍。
阅读全文 →并发是 Java 后端绕不开的硬骨头。这篇从「可见性」和「原子性」两个底层问题切入, 讲清楚 volatile 的内存语义、synchronized 的锁升级, 以及 AQS 如何用一个 state 和 CLH 队列支撑起大半个 juc。
阅读全文 →从 for 循环里嵌套 if 再套 for,到一行链式调用说清楚意图—— Stream 改变的不只是代码长度,更是表达问题的方式。 这篇结合几个真实重构案例,聊聊 Stream 的正确打开方式与常见陷阱。
阅读全文 →newFixedThreadPool 用着很爽,为什么阿里开发规约却明令禁止? 这篇从 ThreadPoolExecutor 的七个参数讲起, 说清任务排队、拒绝策略、以及一次因无界队列导致的线上事故。
阅读全文 →很多人觉得只有想清楚了才能动笔,但我的体会恰恰相反—— 写作本身就是把模糊的念头逼出形状的过程。这一篇, 聊聊我开始写博客的契机,以及它如何改变了我的学习方式。
阅读全文 →短视频把我们的注意力切成碎片,连读完一篇长文都变得吃力。 这半年我尝试重新拾起纸质书,发现“慢阅读”带来的, 远不止知识本身。
阅读全文 →那是一个周五的晚上,一个我自认为“无关紧要”的小改动, 把生产环境搞挂了两小时。复盘之后我意识到: 对系统保持敬畏,是工程师最该有的品质。
阅读全文 →林深,一个后端工程师,住在杭州。白天写代码,晚上读书、跑步、 偶尔发呆。喜欢一切需要耐心的事情——长跑、下厨、种绿植, 还有把一个想法慢慢写完整。
如果你喜欢这里的内容,欢迎通过邮件和我聊聊: hi@linshen.example.com