猿辅导Java面试 的文章,结构清晰、列出的几个核心问题,并附详细答案。文章既适合复习,也适合面试现场讲解。 编辑
猿辅导Java面试核心知识点解析
Java面试中,垃圾回收、锁机制以及高并发集合类是常考知识点。本文将结合实际面试题,系统讲解这些内容。
---编辑
一、垃圾收集器(Garbage Collector, GC)
概念 :
垃圾收集器负责自动管理内存,回收无用对象,避免内存泄漏和程序崩溃。Java虚拟机中,垃圾收集器主要作用于堆内存。编辑
常见垃圾收集器:
- Serial GC:单线程,适合客户端环境。
- Parallel GC:多线程收集,追求吞吐量。
- CMS(Concurrent Mark Sweep):低延迟,采用标记-清除算法,适合对响应时间敏感的应用。
- G1(Garbage First):分代收集,适合大堆内存,并通过并发和分区来平衡延迟和吞吐量。
二、G1 和 CMS 的区别
特性 | CMS | G1 | |
---|---|---|---|
内存划分 | 年轻代 + 老年代 | 整个堆划分为多个Region | |
收集方式 | 并发标记 + 清除 | 并发标记 + 回收 | |
碎片问题 | 易产生碎片 | 通过Region整理碎片,减少Full GC | |
停顿时间 | 较低,但存在Concurrent Mode Failure风险 | 低停顿,可预测停顿时间 | |
适用场景 | 老应用,响应时间敏感 | 大内存应用,需要控制停顿时间 |
三、为什么 G1 可以在保证用户吞吐量的情况下进行垃圾收集
G1 的核心优势在于 Region 分区 + 并发标记 + 并行回收:
- Region 分区:将堆划分成多个小块,允许回收一部分Region,而不是整个老年代。
- 混合回收(Mixed GC):优先回收垃圾最多的Region,减少不必要的停顿。
- 预测停顿时间:G1 会根据停顿时间目标(Pause Time Goal)选择回收Region数量,从而平衡吞吐量和停顿时间。
总结:G1 通过局部回收、并发标记和停顿预测,实现低延迟且尽量不影响应用吞吐量。
四、Java中实现加锁的方式
Java中主要的锁机制:
- 内置锁(Synchronized)
- 修饰方法或代码块
- 基于 JVM 对象头的 Mark Word 和 Monitor 实现
- 显示锁(Lock)
ReentrantLock
、ReentrantReadWriteLock
- 提供更灵活的锁操作,例如可中断、可尝试获取
- CAS(Compare-And-Swap)
- 无锁机制,多用于原子操作类(
AtomicInteger
)
- 无锁机制,多用于原子操作类(
- 偏向锁 / 轻量级锁 / 重量级锁
- JVM 锁优化策略,通过不同状态减少锁竞争开销
五、Synchronized 及锁升级过程
Synchronized 工作原理:
- 对象头中有 Mark Word 和 指向 Monitor 的指针
- 不同状态下锁的表现不同:
锁状态 | 说明 | 获取方式 |
---|---|---|
偏向锁 | 偏向单线程,减少无竞争锁开销 | 线程首次获取后 Mark Word 记录线程ID |
轻量级锁 | 多线程竞争,但未发生阻塞 | 使用 CAS 尝试获取锁,失败则膨胀为重量级锁 |
重量级锁 | 高竞争线程阻塞 | 使用操作系统互斥量(Mutex)阻塞线程 |
锁升级顺序 :偏向锁 → 轻量级锁 → 重量级锁
编辑
六、AQS(AbstractQueuedSynchronizer)底层实现原理
AQS 是 Java 并发锁的核心框架,支持 ReentrantLock
、Semaphore
等。
原理:
- 状态维护 :AQS 内部通过
int state
表示锁的状态 - 队列机制 :等待线程通过 双向队列(CLH 队列) 排队
- 独占/共享模式 :
- 独占锁:一次只有一个线程持有
- 共享锁:多个线程可同时持有(如 Semaphore)
- 核心方法 :
tryAcquire()
/tryRelease()
:尝试获取或释放锁acquire()
/release()
:带阻塞的获取/释放方法
AQS 的队列保证了公平性和线程阻塞唤醒机制,是 Java 高并发锁的基础。
七、ConcurrentHashMap
概念:
- 并发哈希表,线程安全的 HashMap
- JDK1.7 采用 分段锁(Segment),每段独立加锁
- JDK1.8 采用 CAS + synchronized,通过链表/红黑树存储桶节点
特点:
- 高并发读无需加锁(volatile + CAS)
- 写操作仅锁定桶节点或进行 CAS
- JDK1.8 支持链表转红黑树,优化高碰撞场景
总结
猿辅导 Java 面试常考的知识点主要围绕:
- GC机制:G1/CMS的区别、G1低停顿原理
- 锁机制:Synchronized、锁升级、AQS原理
- 高并发集合:ConcurrentHashMap的实现
掌握这些核心原理,不仅能回答面试题,还能在面试中深入分析场景问题,展示扎实的Java基础。