Java 后端面试干货:四大核心模块高频考点深度解析
Java 后端面试核心围绕 “基础深度、原理理解、场景应用” 展开,本文针对并发编程、JVM、Spring 框架、数据库四大高频模块,拆解核心考点与面试重点,助力求职者精准备考。
一、并发编程:面试必问的 “硬骨头”
1. 线程池核心原理
- 核心参数:核心线程数(corePoolSize)、最大线程数(maximumPoolSize)、队列容量(workQueue)、空闲线程存活时间(keepAliveTime)、拒绝策略(handler)。
 
- 执行流程:核心线程满→任务入队→队列满→创建非核心线程→线程数达最大→触发拒绝策略。
 
- 面试重点:
 
- 拒绝策略选型(如秒杀场景用 CallerRunsPolicy 避免任务丢失);
 
- 线程池参数设计(CPU 密集型:核心线程数 = CPU 核心数 + 1;IO 密集型:核心线程数 = CPU 核心数 ×2);
 
- Executors 创建线程池的弊端(如 FixedThreadPool 无界队列易 OOM)。
 
2. synchronized 与 ReentrantLock 区别
|   特性  |   synchronized  |   ReentrantLock  | 
|   锁实现  |   JVM 层面(监视器锁)  |   JDK 层面(AQS)  | 
|   可中断性  |   不可中断  |   可中断(lockInterruptibly)  | 
|   公平锁  |   非公平  |   可公平 / 非公平  | 
|   条件变量  |   无  |   支持(Condition)  | 
|   锁释放  |   自动释放(异常 / 方法结束)  |   手动释放(finally 中 unlock)  | 
- 面试延伸:synchronized 锁升级过程(偏向锁→轻量级锁→重量级锁)及触发条件。
 
3. volatile 关键字
- 核心作用:可见性(禁止 CPU 缓存,变量修改直接写入主内存)、有序性(禁止指令重排)。
 
- 局限性:无法保证原子性(如 i++ 操作)。
 
- 面试重点:volatile 的内存语义、与 synchronized 的区别。
 
二、JVM:底层原理的 “分水岭”
1. 运行时数据区
- 线程私有:程序计数器(无 OOM)、虚拟机栈(StackOverflowError/OOM)、本地方法栈;
 
- 线程共享:堆(GC 核心区域,OOM 高发地)、方法区(JDK8 为元空间,存储类元信息)。
 
- 面试重点:堆内存分代(年轻代 Eden+Survivor、老年代)及对象晋升流程。
 
2. 垃圾回收(GC)
- 核心算法:可达性分析(GC Roots)、标记 - 清除(碎片多)、标记 - 复制(年轻代用)、标记 - 整理(老年代用)。
 
- 收集器:
 
- CMS:低延迟,标记 - 清除,有碎片;
 
- G1:分区回收,兼顾吞吐量与延迟;
 
- ZGC:大内存低延迟,并发回收。
 
- 面试重点:GC Roots 类型、G1 与 CMS 的对比、Full GC 触发条件。
 
3. 类加载机制
- 流程:加载→验证→准备→解析→初始化(执行 clinit 方法)。
 
- 类加载器:双亲委派模型(Bootstrap→Extension→Application)。
 
- 面试重点:双亲委派模型的破坏场景(如 Tomcat 类加载)。
 

三、Spring 框架:从 API 到源码的 “深度考察”
1. Spring IoC 容器
- 核心概念:控制反转(对象创建权交给容器)、依赖注入(构造器 /setter/ 字段注入)。
 
- Bean 生命周期:实例化→属性注入→初始化(InitializingBean)→使用→销毁(DisposableBean)。
 
- 面试重点:循环依赖解决(三级缓存)、Bean 作用域(singleton/prototype)。
 
2. Spring AOP
- 核心术语:切面(Aspect)、通知(Advice:@Before/@After/@Around)、切入点(Pointcut)。
 
- 实现原理:JDK 动态代理(接口)、CGLIB 动态代理(继承)。
 
- 面试重点:动态代理区别、AOP 应用场景(事务 / 日志)。
 
3. Spring 事务
- ACID 特性:原子性、一致性、隔离性、持久性。
 
- 隔离级别:Read Committed(解决脏读)、Repeatable Read(MySQL 默认,解决不可重复读)、Serializable。
 
- 传播机制:REQUIRED(默认)、REQUIRES_NEW(独立事务)。
 
- 面试重点:事务不生效场景(非 public 方法、自调用、异常被捕获)。
 

四、数据库(MySQL):性能优化的 “关键”
1. 索引原理
- 类型:聚簇索引(主键,叶节点存数据)、二级索引(叶节点存主键)。
 
- 数据结构:B + 树(范围查询高效)。
 
- 索引失效场景:函数操作索引列、Like 以 % 开头、联合索引不满足最左前缀。
 
- 面试重点:聚簇索引与非聚簇索引区别、覆盖索引(避免回表)。
 
2. 事务与并发
- 并发问题:脏读、不可重复读、幻读。
 
- 隔离级别对应解决:Repeatable Read 通过 MVCC 解决幻读。
 
- 面试重点:MVCC 实现原理。
 
3. SQL 优化
- 避免 select *,使用覆盖索引;
 
- 大表分库分表(水平按行、垂直按列);
 
- 分页优化(where id>xxx limit 10 替代 limit 100000,10)。
 
- 面试重点:慢查询分析流程(慢日志→explain 执行计划)。
 

总结
Java 后端面试考察的是 “底层原理 + 场景应用” 的综合能力。建议结合源码(如 HashMap、Spring IoC)和项目实操,深入理解每个知识点的 “为什么” 与 “怎么用”,避免死记硬背。祝各位求职者面试顺利,offer 到手!💪
以上面试题已打包:DDD面试题
