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面试题

相关推荐
MSTcheng.18 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
晓131318 小时前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言
愚者游世18 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
一 乐18 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
KIKIiiiiiiii18 小时前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
梵刹古音18 小时前
【C语言】 指针基础与定义
c语言·开发语言·算法
80530单词突击赢18 小时前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
Ekehlaft18 小时前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
rit843249918 小时前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
开源技术18 小时前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python