猿辅导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基础。


相关推荐
h***04773 小时前
SpringBoot(7)-Swagger
java·spring boot·后端
v***91305 小时前
Spring boot创建时常用的依赖
java·spring boot·后端
Cosolar8 小时前
银河麒麟 / aarch64 系统:Docker + Docker Compose 完整安装教程
后端·程序员·架构
星释8 小时前
Rust 练习册 100:音乐音阶生成器
开发语言·后端·rust
摇滚侠8 小时前
零基础小白自学 Git_Github 教程,解决分支合并冲突,笔记14
笔记·git·github
kaliarch8 小时前
2025年IaC生态全景与实践指南:从工具选型到多云治理
后端·云计算·自动化运维
Coder-coco8 小时前
个人健康管理|基于springboot+vue+个人健康管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·mysql·论文
b***65328 小时前
springboot整合mybatis-plus(保姆教学) 及搭建项目
spring boot·后端·mybatis
5***E6858 小时前
Spring Boot与MyBatis
spring boot·后端·mybatis
CoderJia程序员甲8 小时前
GitHub 热榜项目 - 日榜(2025-12-1)
ai·开源·llm·github·ai教程