以下是 2025 年最新版 Spring / Spring Boot 常见面试题总结(含标准答案 + 面试官真实追问点),按岗位级别和考察频率分类整理,基本覆盖了 80%+ 的大厂面试(阿里、字节、腾讯、美团、京东、华为等)。
一、必问 Top 20(几乎每场都问)
| 序号 | 面试题 | 推荐答案关键词 | 常见追问 |
|---|
| 1 | Spring 中 Bean 的作用域有哪几种? | singleton(默认)、prototype、request、session、application、websocket | singleton 是如何保证线程安全的? |
| 2 | @Component 和 @Bean 的区别? | @Component 作用于类,@Bean 作用于方法(常用于第三方类) | 为什么第三方类要用 @Bean? |
| 3 | @Autowired 和 @Resource 的区别? | Autowired(byType → byName),Resource(byName → byType),Resource 是 JSR-250 标准 | 循环依赖时 @Autowired 能解决吗? |
| 4 | Spring 是如何解决循环依赖的? | 三级缓存 + 提前暴露半初始化对象(ObjectFactory) | 为什么 constructor 注入不能解决循环依赖? |
| 5 | @Transactional 事务失效的常见场景? | private 方法、未被代理、异常被捕获、数据库不支持事务、多线程、propagation 设置错误 | @Transactional 内部调用自己方法为什么失效? |
| 6 | Spring Boot 的自动配置原理? | @SpringBootApplication → @EnableAutoConfiguration → META-INF/spring.factories → AutoConfiguration → @Conditional 系列 | @ConditionalOnClass、@ConditionalOnMissingBean 作用? |
| 7 | Spring Boot Starter 原理? | 导入 starter → 触发 spring-boot-autoconfigure 中的自动配置类 | 自己怎么写一个 starter? |
| 8 | Spring 中的设计模式有哪些? | 工厂(BeanFactory)、代理(AOP)、模板方法(JdbcTemplate)、观察者(ApplicationEvent)、策略(@Conditional)、单例等 | 具体说说代理模式在 AOP 中的实现 |
| 9 | Spring MVC 的执行流程? | DispatcherServlet → HandlerMapping → HandlerAdapter → @Controller → ViewResolver | 和 Spring Boot 的区别? |
| 10 | @PostConstruct 和 @PreDestroy 执行顺序? | 构造方法 → @Autowired → @PostConstruct → InitializingBean → init-method → @PreDestroy | 为什么不推荐实现 InitializingBean? |
二、高频进阶题(30k+ 岗位必考)
| 题目 | 关键回答点 | 追问杀 |
|---|
| Spring Bean 的完整生命周期(11 步) | 实例化 → 属性赋值 → Aware 回调 → BeanPostProcessor 前 → @PostConstruct → afterPropertiesSet → init-method → BeanPostProcessor 后(生成代理)→ 使用 → @PreDestroy → destroy | AOP 代理是在第几步生成的? |
| Spring 事务传播行为 7 种? | REQUIRED(默认)、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED | REQUIRES_NEW 和 NESTED 的区别? |
| @Transactional 底层如何实现? | AOP 代理 + TransactionInterceptor + PlatformTransactionManager | 回滚是怎么实现的?(Connection.setAutoCommit(false) + rollback) |
| Spring 中用了哪些锁? | Bean 的初始化加 synchronized,单例缓存用 ConcurrentHashMap | 三级缓存为什么不用锁? |
| Spring Boot 启动流程? | SpringApplication.run → 创建上下文 → 加载自动配置 → 刷新容器 → 执行 Runner | 为什么启动很快?(懒加载、条件装配) |
| Spring Cloud 和 Spring Boot 版本对应关系? | 2023.0.x 对应 Spring Boot 3.x,Hoxton 对应 Boot 2.3.x | 升级到 Boot 3 最大的坑是什么?(Jakarta EE) |
| Spring Cache 常用注解? | @Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig | @Cacheable 第一次一定走方法吗? |
三、源码/原理深挖题(40k+ / P7+ 必问)
| 题目 | 核心源码点 |
|---|
| 三级缓存具体是什么? | singletonObjects(一级)、earlySingletonObjects(二级)、singletonFactories(三级) |
| CGLIB 和 JDK 动态代理区别? | CGLIB 生成子类,可代理无接口类,final 类和方法无法代理 |
| Refresh() 方法 12 个步骤? | prepareRefresh → obtainFreshBeanFactory → prepareBeanFactory → postProcessBeanFactory → invokeBeanFactoryPostProcessors → registerBeanPostProcessors → initMessageSource → initApplicationEventMulticaster → onRefresh → registerListeners → finishBeanFactoryInitialization → finishRefresh |
| 配置类解析流程? | ConfigurationClassPostProcessor → @ComponentScan 扫描 → @Bean 方法注册 BeanDefinition |
| 事件发布机制? | ApplicationEvent + ApplicationListener + ApplicationEventMulticaster |
四、常见手撕题 / 实战题
- 手写一个 Spring Boot Starter
- 手写 @EnableXXX 注解(导入 Configuration 或 Registrar)
- 实现一个分布式锁(基于 Redis + AOP)
- 自定义 Spring Boot 自动配置(条件(@ConditionalOnProperty)
- 解决 @Transactional + @Async 失效问题
五、2025 年新增高频题(Spring 6 + Boot 3)
| 题目 | 重点 |
|---|
| Spring Boot 3 + Java 17+ 虚拟线程怎么用? | @ConfigurationProperties 绑定变化、Records 支持 |
| GraalVM Native Image 支持情况? | 反射、资源、动态代理需要 hints |
| Spring AOT 是什么? | 提前编译阶段处理反射、资源,提升启动速度 |
| Spring Boot 3 Observability 怎么用? | Micrometer + Brave → OpenTelemetry |
六、面试官最爱问的“陷阱题”
| 题目 | 错误答案 | 正确答案 |
|---|
| Spring Bean 默认是单例吗?线程安全吗? | “Spring 保证线程安全” | Bean 本身单例,但不保证线程安全,需自己保证 |
| @Async 能和 @Transactional 一起用吗? | “可以” | 默认不能,事务先提交,异步后执行 |
| 多个数据源怎么配置事务? | “@Transactional 随便写” | 需要指定 transactionManager |
总结:背会这 50 题,Spring 面试基本无压力
- 校招/初级:Top 20 必背
- 社招 20-30k:Top 20 + 高频进阶
- 大厂 35k+ / P7:必须掌握源码级 + AOT + Native + 虚拟线程
需要我把上面所有题目整理成 PDF 或者 Anki 记忆卡片发给你吗?或者你想针对某个题目让我给你完整标准答案+面试对话脚本?直接说!