猿辅导Java面试真实经历与深度总结(一)

猿辅导Java面试 的文章,结构清晰、列出的几个核心问题,并附详细答案。文章既适合复习,也适合面试现场讲解。 ​编辑


猿辅导Java面试核心知识点解析

Java面试中,垃圾回收、锁机制以及高并发集合类是常考知识点。本文将结合实际面试题,系统讲解这些内容。

---​编辑

一、垃圾收集器(Garbage Collector, GC)

概念

垃圾收集器负责自动管理内存,回收无用对象,避免内存泄漏和程序崩溃。Java虚拟机中,垃圾收集器主要作用于堆内存。​编辑

常见垃圾收集器

  1. Serial GC:单线程,适合客户端环境。
  2. Parallel GC:多线程收集,追求吞吐量。
  3. CMS(Concurrent Mark Sweep):低延迟,采用标记-清除算法,适合对响应时间敏感的应用。
  4. G1(Garbage First):分代收集,适合大堆内存,并通过并发和分区来平衡延迟和吞吐量。

二、G1 和 CMS 的区别

特性 CMS G1
内存划分 年轻代 + 老年代 整个堆划分为多个Region
收集方式 并发标记 + 清除 并发标记 + 回收
碎片问题 易产生碎片 通过Region整理碎片,减少Full GC
停顿时间 较低,但存在Concurrent Mode Failure风险 低停顿,可预测停顿时间
适用场景 老应用,响应时间敏感 大内存应用,需要控制停顿时间

三、为什么 G1 可以在保证用户吞吐量的情况下进行垃圾收集

G1 的核心优势在于 Region 分区 + 并发标记 + 并行回收

  1. Region 分区:将堆划分成多个小块,允许回收一部分Region,而不是整个老年代。
  2. 混合回收(Mixed GC):优先回收垃圾最多的Region,减少不必要的停顿。
  3. 预测停顿时间:G1 会根据停顿时间目标(Pause Time Goal)选择回收Region数量,从而平衡吞吐量和停顿时间。

总结:G1 通过局部回收、并发标记和停顿预测,实现低延迟且尽量不影响应用吞吐量。


四、Java中实现加锁的方式

Java中主要的锁机制:

  1. 内置锁(Synchronized)
    • 修饰方法或代码块
    • 基于 JVM 对象头的 Mark Word 和 Monitor 实现
  2. 显示锁(Lock)
    • ReentrantLockReentrantReadWriteLock
    • 提供更灵活的锁操作,例如可中断、可尝试获取
  3. CAS(Compare-And-Swap)
    • 无锁机制,多用于原子操作类(AtomicInteger
  4. 偏向锁 / 轻量级锁 / 重量级锁
    • JVM 锁优化策略,通过不同状态减少锁竞争开销

五、Synchronized 及锁升级过程

Synchronized 工作原理

  • 对象头中有 Mark Word指向 Monitor 的指针
  • 不同状态下锁的表现不同:
锁状态 说明 获取方式
偏向锁 偏向单线程,减少无竞争锁开销 线程首次获取后 Mark Word 记录线程ID
轻量级锁 多线程竞争,但未发生阻塞 使用 CAS 尝试获取锁,失败则膨胀为重量级锁
重量级锁 高竞争线程阻塞 使用操作系统互斥量(Mutex)阻塞线程

锁升级顺序 :偏向锁 → 轻量级锁 → 重量级锁​编辑


六、AQS(AbstractQueuedSynchronizer)底层实现原理

AQS 是 Java 并发锁的核心框架,支持 ReentrantLockSemaphore 等。

原理

  1. 状态维护 :AQS 内部通过 int state 表示锁的状态
  2. 队列机制 :等待线程通过 双向队列(CLH 队列) 排队
  3. 独占/共享模式
    • 独占锁:一次只有一个线程持有
    • 共享锁:多个线程可同时持有(如 Semaphore)
  4. 核心方法
    • tryAcquire() / tryRelease():尝试获取或释放锁
    • acquire() / release():带阻塞的获取/释放方法

AQS 的队列保证了公平性和线程阻塞唤醒机制,是 Java 高并发锁的基础。


七、ConcurrentHashMap

概念

  • 并发哈希表,线程安全的 HashMap
  • JDK1.7 采用 分段锁(Segment),每段独立加锁
  • JDK1.8 采用 CAS + synchronized,通过链表/红黑树存储桶节点

特点

  • 高并发读无需加锁(volatile + CAS)
  • 写操作仅锁定桶节点或进行 CAS
  • JDK1.8 支持链表转红黑树,优化高碰撞场景

总结

猿辅导 Java 面试常考的知识点主要围绕:

  1. GC机制:G1/CMS的区别、G1低停顿原理
  2. 锁机制:Synchronized、锁升级、AQS原理
  3. 高并发集合:ConcurrentHashMap的实现

掌握这些核心原理,不仅能回答面试题,还能在面试中深入分析场景问题,展示扎实的Java基础。


相关推荐
行百里er1 小时前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
玄〤1 小时前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot
J_liaty2 小时前
Spring Boot拦截器与过滤器深度解析
java·spring boot·后端·interceptor·filter
短剑重铸之日2 小时前
《7天学会Redis》Day2 - 深入Redis数据结构与底层实现
数据结构·数据库·redis·后端
码事漫谈2 小时前
从C++到C#的转型完全指南
后端
好好沉淀2 小时前
1.13草花互动面试
面试·职场和发展
码事漫谈2 小时前
TCP心跳机制:看不见的“生命线”
后端
lpfasd1233 小时前
Spring Boot 4.0.1 时变更清单
java·spring boot·后端
CoderJia程序员甲3 小时前
GitHub 热榜项目 - 日榜(2026-1-13)
人工智能·ai·大模型·github·ai教程
梦梦代码精4 小时前
《全栈开源智能体:终结企业AI拼图时代》
人工智能·后端·深度学习·小程序·前端框架·开源·语音识别