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

相关推荐
2501_9418752810 分钟前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
再吃一根胡萝卜22 分钟前
08 · 前端:Vue3 + SSE 流式与执行链路可视化
面试
再吃一根胡萝卜26 分钟前
03 · 后端:FastAPI 与分层架构
面试
hfywmsj34 分钟前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
努力的lpp3 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2333 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
lhldsg3 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都3 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒3 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb4 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析