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

相关推荐
Yolo566Q4 小时前
OpenLCA生命周期评估模型构建与分析
java·开发语言·人工智能
安娜的信息安全说4 小时前
深入浅出 MQTT:轻量级消息协议在物联网中的应用与实践
开发语言·物联网·mqtt
lang201509285 小时前
Spring Boot日志配置完全指南
java·spring boot·单元测试
在坚持一下我可没意见5 小时前
HTTP 协议基本格式与 Fiddler 抓包工具实战指南
java·开发语言·网络协议·tcp/ip·http·java-ee·fiddler
樱花开了几轉5 小时前
element ui下拉框踩坑
开发语言·javascript·ui
报错小能手5 小时前
C++笔记(面向对象)RTTI操作符
开发语言·c++·笔记
草明5 小时前
Go 的 IO 多路复用
开发语言·后端·golang
蓝-萧5 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
故事不长丨5 小时前
【Java SpringBoot+Vue 实现视频文件上传与存储】
java·javascript·spring boot·vscode·后端·vue·intellij-idea