滴滴Java基础专项面经:HashMap红黑树、ConcurrentHashMap、ThreadLocal、WeakReference

📅 2026/8/13 11:23:10
滴滴Java基础专项面经:HashMap红黑树、ConcurrentHashMap、ThreadLocal、WeakReference
上篇聊完架构师技术决策,这篇进入滴滴Java基础专项。Java基础是Android面试的必考内容——HashMap底层实现(红黑树转换)、ConcurrentHashMap并发安全、ThreadLocal线程隔离、WeakReference内存管理。今天8道题覆盖滴滴Java基础面试核心考点。Q1:HashMap什么时候链表转红黑树?条件:同一hash桶链表长度=8且数组长度=64时,链表转红黑树。数组64优先扩容。为什么是8:根据泊松分布,链表达到8的概率极低(0.00000006)。8是空间和时间的平衡。红黑树特性:查找/插入/删除O(logn)(链表O(n))。节点占用空间是链表的2倍。树节点=6时退化回链表。追问:HashMap的hash计算为什么用(h = key.hashCode()) ^ (h 16)?高16位异或低16位,让高位也参与hash计算,减少hash冲突(尤其是数组较小时只用低位容易导致冲突)。Q2:ConcurrentHashMap怎么保证线程安全?JDK 1.7:分段锁(Segment数组,每个Segment独立加锁)。并发度=Segment数量(默认16个)。JDK 1.8:CAS + synchronized。空桶用CAS直接写入,非空桶用synchronized锁住链表头节点