Skip to content

Spring 面试知识体系总览

本系列笔记覆盖 Spring 框架核心知识体系,从 IoC 容器到微服务,从基础用法到源码级理解,适合 Java 后端面试准备。


知识地图


十大知识模块

#模块核心考点
#模块核心考点
:-:---------------
1IoC 容器IoC/DI、Bean 生命周期、循环依赖、三级缓存、作用域
2AOP 与动态代理JDK/CGLIB、Advice、Pointcut、@Transactional 失效
3事务管理传播行为、隔离级别、7种失效场景、源码级
4Spring MVCDispatcherServlet 流程、参数绑定、拦截器
5Spring Boot自动配置原理、条件注解、Starter、Actuator
6数据访问JPA、N+1、关联映射、多数据源
7Spring Security认证流程、JWT、OAuth2、CSRF
8Spring Cloud 微服务注册发现、网关、配置中心、分布式事务
9进阶与源码refresh()、@Configuration 增强、事件机制
10测试与质量@SpringBootTest、Slice、Testcontainers

推荐追问方向(面试官视角)

如果候选人基础扎实,建议深挖的进阶题:

IoC

"Spring 为什么要用三级缓存而不是二级?"

关键点:二级缓存可以解决循环依赖,但无法区分"完整的 Bean"和"半成品代理对象"。三级缓存存放 ObjectFactory,在 Bean 需要被提前暴露时,才决定是返回原始对象还是代理对象,实现"延迟代理创建",避免 singleton 容器中混入未包装的原始 Bean。

AOP

"同一个类里面 A 方法调用 B 方法,B 上的 @Transactional 为什么不生效?有哪些解法?"

关键点:AOP 代理机制——B 的拦截是通过代理对象调用的,而类内部 this.method() 调用的是原始对象。解法:AopContext.currentProxy()、注入自身代理、拆分为两个 Service 类。

配置

"@Configuration 加 final 会怎样?为什么?"

关键点:@Configuration 类需要被 CGLIB 增强(生成子类代理)来拦截 @Bean 方法调用,确保 singleton 作用域的 Bean 只创建一次。final 类无法被 CGLIB 继承,Full 模式降级为 Lite 模式,@Bean 方法间调用不再保证单例。

事务

"REQUIRES_NEW 在同一个事务管理器下真的会新建物理连接吗?"

关键点:默认情况下 Spring 的事务管理器使用 DataSourceTransactionManager,它从连接池获取连接。REQUIRES_NEW 会暂停当前事务、从连接池获取新连接来执行新事务,两事务使用不同物理连接。如果连接池只有一个连接,则会阻塞等待。

Spring Boot

"你自己写过 Starter 吗?spring.factories 和 AutoConfiguration.imports 有什么区别?"

关键点spring.factories(Spring Boot 2.7 之前)和 AutoConfiguration.imports(Spring Boot 2.7+)都是自动配置的注册机制。后者是 Spring Boot 从 spring-coreSpringFactoriesLoader 迁移到专用文件,减少类路径扫描,提升启动速度,且文件格式更简洁——每行一个自动配置类全限定名。

JPA

"N+1 问题你怎么发现和解决?@EntityGraph 和 @Query("JOIN FETCH") 有何区别?"

关键点:N+1 在遍历关联集合时触发。发现方式:开启 spring.jpa.show-sql、配置 hibernate.count 统计。解决方式:@EntityGraph(声明式,不影响 JPQL)、JOIN FETCH(命令式,改变查询语句)、@BatchSize(懒加载批量优化)。

Security

"无状态 JWT 方案怎么处理 token 续期?怎么让 token 及时失效?"

关键点:续期方案——Refresh Token 模式(短生命周期 Access Token + 长生命周期 Refresh Token)、滑动过期。及时失效——维护黑名单(Redis + 布隆过滤器)、缩短有效期 + 刷新、版本号控制。

启动流程

"Spring Boot 和普通 Spring 启动流程的差异在哪?"

关键点:Spring Boot 在 SpringApplication.run() 中多做了:推断 Web 应用类型、加载 ApplicationContextInitializer、加载 ApplicationListener、自动装配(@EnableAutoConfiguration → 加载 AutoConfiguration.imports → 条件评估)、内嵌 Web 服务器启动。核心 refresh() 方法流程与普通 Spring 一致。


学习路线建议

  1. 第一阶段:IoC → AOP → 事务管理(Spring 三大基石)
  2. 第二阶段:Spring MVC → Spring Boot(自动配置思想)
  3. 第三阶段:数据访问 + Security(实际开发必备)
  4. 第四阶段:微服务(云原生进阶)
  5. 第五阶段:源码分析(走向高阶)
  6. 第六阶段:测试质量(工程化落地)

Knowledge4J — Java 知识库