Java 面试复习草稿:HashMap 与线程池
今天整理两个 Java 面试中非常常见的问题:HashMap 和线程池。
1. HashMap 的底层结构是什么?
JDK 8 之后,HashMap 底层主要由数组、链表和红黑树组成。
数组用于快速定位桶位置,链表用于解决哈希冲突。当链表长度达到一定阈值,并且数组容量满足条件后,链表会转换成红黑树,从而提升查询效率。
面试时不要只背结构,还要说明为什么这样设计:数组查询快,链表解决冲突,红黑树解决极端冲突情况下的性能问题。
2. 线程池的核心参数有哪些?
线程池常见核心参数包括:核心线程数、最大线程数、空闲线程存活时间、阻塞队列、线程工厂和拒绝策略。
任务提交后,如果运行线程数小于核心线程数,就创建核心线程执行任务;如果核心线程已满,任务进入阻塞队列;如果队列也满了,再尝试创建非核心线程;如果线程数达到最大线程数,就触发拒绝策略。
总结
HashMap 重点理解数据结构和哈希冲突处理。线程池重点理解任务提交流程、队列作用和拒绝策略。面试时能把设计原因讲清楚,比单纯背答案更重要。