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

相关推荐
7***37457 分钟前
Java设计模式之工厂
java·开发语言·设计模式
上不如老下不如小22 分钟前
2025年第七届全国高校计算机能力挑战赛初赛 Python组 编程题汇总
开发语言·python·算法
程序员小白条32 分钟前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
折翅嘀皇虫40 分钟前
fastdds.type_propagation 详解
java·服务器·前端
小年糕是糕手43 分钟前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
豐儀麟阁贵1 小时前
8.2异常的抛出与捕捉
java·开发语言·python
权泽谦1 小时前
PHP 版羊了个羊完整开发实战:逻辑解析 + 三消算法 + 全套接口(附源码)
开发语言·php
老华带你飞1 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
码龄3年 审核中1 小时前
Linux record 03
java·linux·运维
q***87601 小时前
springboot下使用druid-spring-boot-starter
java·spring boot·后端