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


相关推荐
怪兽20144 小时前
Redis过期键的删除策略有哪些?
java·数据库·redis·缓存·面试
Victor3565 小时前
Redis(76)Redis作为缓存的常见使用场景有哪些?
后端
Victor3565 小时前
Redis(77)Redis缓存的优点和缺点是什么?
后端
摇滚侠8 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
天若有情67310 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
一只叫煤球的猫11 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
lichong95111 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
雲帝12 小时前
github断开Fork关系
github
magic3341656312 小时前
Springboot整合MinIO文件服务(windows版本)
windows·spring boot·后端·minio·文件对象存储