HashMap 与 ConcurrentHashMap 是 Java 面试的高频题,但真正能在生产环境里"讲清楚为什么"的工程师并不多。很多人背下了"数组 + 链表 + 红黑树""CAS + synchronized"这些结论,却说不清哈希扰动到底解决了什么问题、扩容为什么能把节点分到两个槽位、树化的阈值为什么是 8、以及 sizeCtl 为负数到底代表什么。
本文不打算复述 API 手册,而是从源码出发,把这些结论背后的设计权衡拆开,并结合生产环境的真实事故与调优经验,给出可操作的结论。
2022/10/8大约 13 分钟