Java 后端面试题
高频优先刷题顺序
P0 必刷
- Spring 和 Spring Boot
- Spring 事务
@Transactional失效场景- MySQL 索引 / B+ 树
- Redis 为什么快
- MQ 解决什么问题
- Java 为什么适合企业级后端
- 模型调用网关设计
P1 高频
- JVM 内存结构
- Full GC 排查
- 线程池
- synchronized 和 ReentrantLock
- IoC 和 AOP
P2 扩展
- 垃圾回收算法
- CAS
- 乐观锁和悲观锁
- 微服务治理细节
面试前 1 小时只看这些
- Spring / 事务 /
@Transactional - MySQL / Redis / MQ
- JVM 和线程池
- 模型网关和知识库后台设计
前端转 AI 全栈开发工程师,除了 Node.js,很多岗位也会要求理解 Java 后端体系,尤其是中后台、企业服务、平台类和 AI 基础设施类岗位。
这份内容不讲 Java 语法细节,重点从面试视角整理 Java 后端高频问题。
Java 为什么适合做后端?
参考答案
Details
Java 在后端领域长期稳定,核心优势主要有:
- 生态成熟,Spring / Spring Boot / Spring Cloud 体系完善。
- JVM 稳定,适合高并发、长生命周期服务。
- 多线程、并发工具链完整,适合复杂业务系统。
- 企业级开发规范成熟,适合大型团队协作。
- 数据库、中间件、监控、微服务配套丰富。
对 AI 全栈岗位而言,Java 常用于:
- 用户系统、订单系统、权限系统
- 企业级后台管理平台
- 模型调用网关
- 任务调度平台
- 知识库管理后台
面试官最爱追问
- 为什么很多企业级系统仍然偏爱 Java?
- Java 和 Node.js 在后端能力上的核心差异是什么?
- AI 平台型项目为什么常见 Java 栈?
JVM 是什么?为什么重要?
参考答案
Details
JVM 是 Java 虚拟机,Java 程序先编译成字节码,再由 JVM 在不同平台执行。
JVM 重要,是因为它直接影响:
- 内存分配
- 垃圾回收
- 性能调优
- 服务稳定性
面试高频会问:
- JVM 内存结构
- 程序计数器
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区 / 元空间
堆里主要放对象实例,栈里主要放局部变量、方法调用帧。
Full GC 频繁通常意味着:
- 对象创建过多
- 内存泄漏
- 堆配置不合理
- 大对象过多
面试官最爱追问
- 堆和栈最容易答错的点是什么?
- Full GC 频繁时你会怎么排查?
- 为什么 JVM 问题常常会影响线上稳定性?
Java 垃圾回收机制 GC
参考答案
Details
GC 的核心目标是自动回收不再使用的对象,避免手动内存管理。
常见面试点:
- 如何判断对象可回收?
- 引用计数法
- 可达性分析
Java 主要使用可达性分析。
- 常见垃圾回收算法:
- 标记清除
- 标记整理
- 复制算法
- 分代回收思想:
- 新生代
- 老年代
因为大部分对象“朝生夕死”,所以分代回收效率更高。
- 为什么会发生 STW?
GC 时为了保证对象引用关系一致,某些阶段需要暂停用户线程,这就是 Stop The World。
Java 线程和线程池
参考答案
Details
Java 是多线程模型,可以更充分利用多核 CPU。常见问题:
- 为什么不建议频繁创建线程?
- 创建和销毁开销大
- 线程太多会导致上下文切换严重
- 难以统一控制资源
- 为什么使用线程池?
- 复用线程
- 控制最大并发数
- 支持任务队列
- 方便监控和拒绝策略
- 线程池核心参数:
- corePoolSize
- maximumPoolSize
- keepAliveTime
- workQueue
- rejectedExecutionHandler
- 常见拒绝策略:
- AbortPolicy
- CallerRunsPolicy
- DiscardPolicy
- DiscardOldestPolicy
synchronized 和 ReentrantLock 的区别
参考答案
Details
二者都可以实现互斥同步,但侧重点不同:
synchronized是 JVM 层关键字,语法简单。ReentrantLock是 JUC 包中的显示锁,功能更灵活。
常见区别:
ReentrantLock可手动加锁 / 解锁- 支持公平锁 / 非公平锁
- 支持可中断锁等待
- 支持条件变量
Condition
面试里一般会继续追问:
- 死锁如何排查?
- 乐观锁和悲观锁的区别?
- CAS 是什么?
Spring 和 Spring Boot 的区别
参考答案
Details
- Spring 是一个大生态,核心能力包括 IoC、AOP、事务管理等。
- Spring Boot 是在 Spring 基础上做自动配置和快速启动,减少大量样板代码。
简单说:
- Spring 解决“如何组织企业级应用”
- Spring Boot 解决“如何更快地把 Spring 应用跑起来”
Spring Boot 常见优势:
- 自动配置
- starter 依赖简化
- 内嵌 Tomcat
- 开箱即用的监控和配置能力
什么是 IoC 和 AOP?
参考答案
Details
IoC 是控制反转,把对象创建和依赖管理交给容器。
AOP 是面向切面编程,把日志、鉴权、事务等横切逻辑从业务代码中抽离出来。
常见使用场景:
- 统一日志
- 事务管理
- 参数校验
- 权限控制
- 接口耗时统计
Spring 事务是怎么实现的?
参考答案
Details
Spring 事务通常基于 AOP 实现,在方法执行前后统一开启、提交或回滚事务。
高频面试点:
@Transactional什么时候会失效?
- 方法不是
public - 同类内部调用
- 异常被吞掉
- 数据源或事务管理器配置不正确
- 事务隔离级别有哪些?
- 读未提交
- 读已提交
- 可重复读
- 串行化
- MySQL 默认隔离级别通常是“可重复读”。
面试官最爱追问
- 为什么
@Transactional会失效? - 同类内部调用为什么事务可能不生效?
- 事务隔离级别和数据库锁之间是什么关系?
MySQL 高频面试题
参考答案
Details
Java 后端几乎一定会问 MySQL。
高频点:
- 索引为什么能加速查询?
- B+ 树和 B 树的区别?
- 什么情况下索引会失效?
- 覆盖索引、回表是什么意思?
- 为什么要最左前缀匹配?
- 慢查询如何排查?
- 事务四大特性 ACID 是什么?
- MVCC 是什么?
对 AI 系统来说,MySQL 常用于:
- 用户与权限
- 对话记录元数据
- 任务状态
- 账单与配额
面试官最爱追问
- B+ 树为什么更适合数据库索引?
- 联合索引为什么要看最左前缀?
- 慢查询到底是怎么一步步定位出来的?
Redis 高频面试题
参考答案
Details
Redis 常用于缓存、分布式锁、会话、排行榜、限流。
高频点:
- Redis 为什么快?
- 常见数据结构有哪些?
- 缓存穿透、击穿、雪崩分别是什么?
- 如何设计分布式锁?
- Redis 持久化方式有哪些?
- 如果缓存和数据库不一致怎么办?
AI 系统中典型用法:
- 热门问答缓存
- token / session 缓存
- 对话上下文短期缓存
- 限流计数器
MQ 为什么重要?
参考答案
Details
消息队列主要解决:
- 异步解耦
- 削峰填谷
- 失败重试
- 延迟任务
AI 应用里常见的异步任务:
- 文档解析
- embedding 构建
- 向量入库
- 批量生成摘要
- 长任务回调
常见追问:
- 如何保证消息不丢失?
- 如何保证消费者幂等?
- 如何处理重复消费?
微服务基础会问什么?
参考答案
Details
不是所有岗位都会问微服务,但中高级岗位常问。
高频问题:
- 为什么拆微服务?
- 微服务带来了什么问题?
- 服务注册发现是什么?
- 网关负责什么?
- 如何做链路追踪和日志聚合?
- 如何做接口限流和熔断?
对 AI 平台类项目,也常会拆成:
- 用户服务
- 模型网关服务
- 知识库服务
- 对话服务
- 任务调度服务
AI 全栈方向的 Java 高频场景题
设计一个模型调用网关
面试官关注:
- 多模型路由
- 鉴权
- 限流
- 超时重试
- 熔断降级
- 调用日志和成本统计
设计一个知识库问答后台
面试官关注:
- 文档上传
- 文本切片
- 向量化任务
- 检索链路
- 多租户隔离
- 权限控制
设计一个 AI 长任务系统
例如:
- 文件解析
- 批量生成
- 训练 / 微调任务编排
会重点问:
- 如何异步化?
- 如何查询进度?
- 如何重试?
- 如何防止重复提交?
面试准备建议
Java 后端必刷模块
- JVM
- 并发与线程池
- Spring / Spring Boot
- MySQL
- Redis
- MQ
- 系统设计
前端转 Java 的表达建议
如果你原来是前端,不要强装“多年 Java 专家”,而要清晰表达:
- 你能理解后端核心链路
- 你能独立完成 CRUD 之外的真实业务
- 你理解缓存、鉴权、异步、监控
- 你能把 AI 应用接入到后端系统里
这会比空谈底层源码更有效。
面试前一天速记 30 问
- Java 为什么适合做后端?
- JVM 内存结构有哪些?
- 堆和栈有什么区别?
- Full GC 频繁说明什么?
- 如何判断对象是否可回收?
- 常见 GC 算法有哪些?
- 为什么要分代回收?
- 线程池为什么比频繁创建线程更好?
- 线程池核心参数有哪些?
- 常见拒绝策略有哪些?
- synchronized 和 ReentrantLock 区别是什么?
- 什么是 CAS?
- 什么是死锁?如何排查?
- Spring 和 Spring Boot 的区别是什么?
- 什么是 IoC?
- 什么是 AOP?
- Spring 事务是怎么实现的?
@Transactional为什么会失效?- MySQL 索引为什么能提速?
- B+ 树为什么适合数据库索引?
- 联合索引为什么要看最左前缀?
- 什么是覆盖索引?
- Redis 为什么快?
- 缓存穿透、击穿、雪崩分别是什么?
- 分布式锁怎么设计?
- MQ 解决什么问题?
- 如何保证消息幂等?
- 微服务为什么会带来治理问题?
- 如何设计一个模型调用网关?
- 如何设计一个知识库后台?