Spring常见面试题总结

以下是 2025 年最新版 Spring / Spring Boot 常见面试题总结(含标准答案 + 面试官真实追问点),按岗位级别和考察频率分类整理,基本覆盖了 80%+ 的大厂面试(阿里、字节、腾讯、美团、京东、华为等)。

一、必问 Top 20(几乎每场都问)

序号面试题推荐答案关键词常见追问
1Spring 中 Bean 的作用域有哪几种?singleton(默认)、prototype、request、session、application、websocketsingleton 是如何保证线程安全的?
2@Component 和 @Bean 的区别?@Component 作用于类,@Bean 作用于方法(常用于第三方类)为什么第三方类要用 @Bean?
3@Autowired 和 @Resource 的区别?Autowired(byType → byName),Resource(byName → byType),Resource 是 JSR-250 标准循环依赖时 @Autowired 能解决吗?
4Spring 是如何解决循环依赖的?三级缓存 + 提前暴露半初始化对象(ObjectFactory)为什么 constructor 注入不能解决循环依赖?
5@Transactional 事务失效的常见场景?private 方法、未被代理、异常被捕获、数据库不支持事务、多线程、propagation 设置错误@Transactional 内部调用自己方法为什么失效?
6Spring Boot 的自动配置原理?@SpringBootApplication → @EnableAutoConfiguration → META-INF/spring.factories → AutoConfiguration → @Conditional 系列@ConditionalOnClass、@ConditionalOnMissingBean 作用?
7Spring Boot Starter 原理?导入 starter → 触发 spring-boot-autoconfigure 中的自动配置类自己怎么写一个 starter?
8Spring 中的设计模式有哪些?工厂(BeanFactory)、代理(AOP)、模板方法(JdbcTemplate)、观察者(ApplicationEvent)、策略(@Conditional)、单例等具体说说代理模式在 AOP 中的实现
9Spring 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 → destroyAOP 代理是在第几步生成的?
Spring 事务传播行为 7 种?REQUIRED(默认)、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTEDREQUIRES_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

四、常见手撕题 / 实战题

  1. 手写一个 Spring Boot Starter
  2. 手写 @EnableXXX 注解(导入 Configuration 或 Registrar)
  3. 实现一个分布式锁(基于 Redis + AOP)
  4. 自定义 Spring Boot 自动配置(条件(@ConditionalOnProperty)
  5. 解决 @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 记忆卡片发给你吗?或者你想针对某个题目让我给你完整标准答案+面试对话脚本?直接说!

文章已创建 3017

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部