字节跳动初级Android面试必问8题:HashMap和Handler你真的搞明白了吗

📅 2026/7/26 4:26:41
字节跳动初级Android面试必问8题:HashMap和Handler你真的搞明白了吗
去年帮我一个学弟准备字节面试,应届生,投的初级Android岗。面完出来说了句话:"哥,HashMap问了我快20分钟,差点没出来。"字节面试跟别家不太一样,特别喜欢从一个点往深了挖。你觉得准备了HashMap,他问红黑树;你觉得准备了Handler,他问epoll。初级岗也不例外,表面看题目基础,每道题都有追问。下面8道题是我从牛客、脉脉上整理的字节初级Android高频题,答案经过验证,放心食用。Q1:HashMap底层原理,JDK8之后做了什么优化?面试官想考的不是"数组+链表"四个字,而是你知不知道什么时候链表变红黑树。HashMap底层是数组,每个槽位挂链表。hash冲突时新节点追加到链表尾部。JDK8之前用头插法,多线程扩容会出环形链表的死循环bug,JDK8改成了尾插法。关键优化:当链表长度超过8且数组长度≥64时,链表转红黑树,查询从O(n)降到O(log n)。为什么是8?作者做了泊松分布计算,理想hash下链表长度到8的概率极低。容量始终是2的幂,默认负载因子0.75,16个槽位放12个元素就扩容。避坑:别说"HashMap线程安全",那是ConcurrentHashMap。Q2:Handler消息机制的完整工作流程?字节面试Handler几乎必问,经常追问到nativePollOnce。四个角色:Message(消息体,有对象池复用机制避免频繁创建)、MessageQueue(按时间排序的单链表)、Looper(循环器,一个线程只能有一个)、Handler(处理器)。Handler发消息时调enqueueMessage按when