二、并发 / 多线程 / JVM¶
本分类覆盖 CPU 缓存模型、JMM、锁原理、AQS、原子类、并发集合、阻塞队列与线程池。
题目列表¶
基础¶
| # | 题目 | 核心考点 |
|---|---|---|
| 1 | 两个线程交替打印奇偶数 | wait/notify、Lock/Condition |
| 2 | 进程与线程的区别 | 资源分配、调度单位 |
| 3 | JVM 最多支持多少个线程 | 栈大小、OS 限制 |
| 4 | 堆 OOM 后其他线程能否工作 | OOM 后的 JVM 状态 |
| 5 | Java GC 机制 | 分代收集、垃圾判定 |
| 6 | Java 并发面试题汇总 | JUC、AQS、锁 |
| 7 | Java NIO 高频考点 | Buffer、Channel、Selector |
| 8 | Instrumentation 是什么 | Java Agent、字节码增强 |
底层原理¶
| # | 题目 | 核心考点 |
|---|---|---|
| 9 | CPU 多级缓存模型 | L1/L2/L3、缓存行 |
| 10 | 总线加锁与 MESI 协议 | M/E/S/I、缓存一致性 |
| 11 | volatile 如何保证可见性/有序性 | 不保证原子性 |
| 12 | volatile 底层:lock 与内存屏障 | StoreLoad、LoadLoad |
| 13 | synchronized 底层原理 | monitor、对象头、锁升级 |
| 14 | 可见性硬件基础:寄存器/缓存/写缓冲器 | Store Buffer、Invalidate Queue |
| 15 | 指令重排发生在哪些地方 | 编译器/CPU/内存系统 |
| 16 | synchronized 三大特性保证 | 原子/可见/有序 |
| 17 | 写缓冲器与无效队列优化 MESI | 内存屏障来源 |
原子类与 CAS¶
| # | 题目 | 核心考点 |
|---|---|---|
| 18 | AtomicInteger 的 CAS 无锁原理 | do-while 自旋 |
| 19 | AtomicInteger 与 Unsafe 类 | 偏移量、JNI |
| 20 | CAS 底层 CPU 指令 | lock cmpxchg |
| 21 | CAS 三大缺点与解决 | ABA、自旋、单变量 |
锁机制¶
| # | 题目 | 核心考点 |
|---|---|---|
| 22 | AQS 原理 | state、CLH 队列、模板方法 |
| 23 | AQS 非公平加锁策略 | 先 CAS 抢 |
| 24 | AQS 队列唤醒过程 | LockSupport.unpark |
| 25 | ReentrantLock 公平锁 | hasQueuedPredecessors |
| 26 | ThreadLocal 源码 | ThreadLocalMap、弱引用、内存泄漏 |
并发集合¶
| # | 题目 | 核心考点 |
|---|---|---|
| 27 | JDK7 HashMap 死循环:环形链表 | 头插法成环 |
| 28 | JDK7 HashMap 死循环与丢数据 | 并发覆盖 |
| 29 | ConcurrentHashMap 初始化 | 懒初始化、sizeCtl |
| 30 | ConcurrentHashMap CAS 加锁 | 桶空 CAS、桶非空 synchronized |
| 31 | ConcurrentHashMap 链表与红黑树 | TreeBin、树化阈值 |
| 32 | JDK8 ConcurrentHashMap 锁优化 | 放弃分段锁 |
| 33 | CopyOnWriteArrayList | 写时复制 |
| 34 | CopyOnWriteArrayList 弱一致性 | 读无锁、快照迭代 |
阻塞队列¶
| # | 题目 | 核心考点 |
|---|---|---|
| 35 | LinkedBlockingQueue | 读写双锁 |
| 36 | ArrayBlockingQueue | 单锁循环数组 |
线程池¶
| # | 题目 | 核心考点 |
|---|---|---|
| 37 | 线程池核心成员变量 | 7 大参数、ctl |
| 38 | 线程池执行流程 | addWorker、Worker |
| 39 | 线程池种类与使用场景 | Fixed/Cached/Scheduled |