Java大厂面试全覆盖:30+Spring高频面试题详解(含腾讯/阿里/美团/百度真题)
1. 什么是Spring框架?
考察知识点:Spring定义与核心作用。
Spring是一个开源的轻量级Java企业级应用开发框架,提供了IOC(控制反转)、AOP(面向切面编程)等核心特性,大大简化了企业级开发,促进了松耦合和高扩展性。
2. Spring有哪些核心模块?
考察知识点:Spring模块体系。
主要包括Spring Core(IOC容器)、Spring AOP、Spring Context、Spring JDBC、Spring ORM、Spring Web、Spring Test等。不同模块协作实现完整的企业级开发支持。
3. 什么是IOC?
考察知识点:控制反转原理。
IOC(Inversion of Control)指对象的创建和依赖关系由容器管理,开发者只需声明依赖,容器自动注入,提高解耦性。实现方式包括XML、注解、JavaConfig等。
4. 什么是依赖注入(DI)?
考察知识点:IOC的具体实现。
DI(Dependency Injection)是IOC的一种实现方式,Spring通过构造器、Setter、字段注入等方式,将依赖自动注入到Bean中。
5. Bean的生命周期?
考察知识点:Bean管理流程。
包括实例化、属性赋值、调用Aware接口、BeanPostProcessor前处理、初始化方法、BeanPostProcessor后处理、对象就绪、销毁。可通过@PostConstruct/@PreDestroy、InitializingBean/DisposableBean等自定义初始化与销毁逻辑。
6. Bean的作用域有哪些?
考察知识点:Bean Scope。
常见有singleton(单例,默认)、prototype(多例)、request、session、application、websocket等。不同作用域决定Bean的实例管理策略。
7. 单例Bean线程安全吗?
考察知识点:Bean实例化与并发。
Spring默认singleton为单例,但不保证线程安全。多线程下需自行加锁或使用无状态Bean。
8. Spring Bean的注入方式?
考察知识点:注入手段。
包括构造器注入、Setter注入、字段注入(@Autowired/@Resource/@Inject),推荐构造器注入,利于测试与不可变性。
9. @Autowired、@Resource、@Inject的区别?
考察知识点:注解注入对比。
@Autowired是Spring专用,按类型注入,默认必须存在可选required=false。@Resource是JDK注解,默认按名称注入。@Inject为JSR-330标准,按类型注入。
10. 如何解决循环依赖?
考察知识点:Bean依赖关系。
Spring通过三级缓存(singletonObjects、earlySingletonObjects、singletonFactories)解决单例构造器注入和Setter注入的循环依赖,原型模式无法自动解决。
11. 什么是AOP?Spring如何实现AOP?
考察知识点:面向切面编程。
AOP允许将横切关注点(如日志、事务、安全)从业务代码中分离出来。Spring AOP基于动态代理实现(JDK动态代理和CGLIB字节码生成),可通过@Aspect、@Around等注解声明切面。
12. JDK动态代理和CGLIB的区别?
考察知识点:AOP代理实现。
JDK动态代理只能代理接口,CGLIB通过生成子类方式代理类本身。无接口时Spring自动选择CGLIB。
13. Spring事务的传播行为有哪些?
考察知识点:事务管理。
常见有REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED。REQUIRED最常用,遇到新事务则加入,否则新建。
14. Spring事务的隔离级别?
考察知识点:并发事务控制。
支持数据库的四种隔离级别(READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE),通过@Transaction注解配置。
15. Spring事务的实现原理?
考察知识点:AOP与代理。
基于AOP,将事务管理代码织入业务方法前后,核心类包括TransactionInterceptor、PlatformTransactionManager等。
16. @Transactional注解失效的常见原因?
考察知识点:事务传播机制。
如方法非public、同类内部调用、异常未抛出、未被Spring管理等,都会导致@Transactional失效。
17. Spring Bean的懒加载?
考察知识点:延迟实例化。
通过@Lazy注解或XML配置,Bean在首次使用时才被实例化,节省资源,提升启动速度。
18. Spring的事件机制?
考察知识点:事件驱动模型。
Spring通过ApplicationEvent和ApplicationListener实现事件发布/监听,适合解耦模块间通信。
19. ApplicationContext和BeanFactory区别?
考察知识点:容器层次。
BeanFactory是最基础的IOC容器,延迟加载。ApplicationContext功能更全,支持国际化、事件、AOP、自动装配,推荐使用。
20. Spring如何实现热部署?
考察知识点:开发效率。
通过Spring-DevTools、JRebel等工具支持代码热部署,提升开发效率。
21. Spring的循环依赖三级缓存原理?
考察知识点:单例依赖解决。
一级缓存singletonObjects存完全初始化Bean,二级缓存earlySingletonObjects存早期对象,三级缓存singletonFactories存ObjectFactory,用于提前暴露代理对象。
22. 常见的Spring注解有哪些?
考察知识点:注解体系。
如@Component、@Service、@Repository、@Controller、@RestController、@Autowired、@Qualifier、@Value、@PostConstruct、@PreDestroy、@Transactional、@Configuration、@Bean等。
23. @Component、@Service、@Repository、@Controller区别?
考察知识点:组件语义。
都是@Component的派生,@Service用于业务逻辑,@Repository用于数据访问,@Controller用于Web控制层,利于分层与AOP。
24. @Bean与@Component的区别?
考察知识点:Bean定义方式。
@Bean用于JavaConfig中定义Bean,@Component用于类声明自动扫描,两者结合提升灵活性。
25. Spring的自动装配有哪几种方式?
考察知识点:自动装配策略。
有按类型(byType)、按名称(byName)、构造器(constructor)、自动检测(autodetect)。现代Spring推荐注解方式。
26. @Primary和@Qualifier的作用?
考察知识点:多实现Bean注入。
@Primary标记首选Bean,@Qualifier指定注入Bean的名称,解决多实现类注入冲突。
27. Spring Boot和Spring的区别?
考察知识点:微服务扩展。
Spring Boot在Spring基础上实现自动配置、内嵌服务器、无XML配置、快速开发微服务,极大提升开发效率。
28. Spring Boot自动配置原理?
考察知识点:条件化配置。
基于@ConditionalOnXxx、META-INF/spring.factories等机制,根据环境和依赖自动装配所需Bean。
29. Spring Boot如何自定义Starter?
考察知识点:模块化开发。
通过新建Maven模块,编写自动配置类、配置文件和SPI,发布到私服,实现通用功能组件化。
30. Spring如何和第三方框架集成?
考察知识点:生态兼容。
通过Spring提供的集成模块(如Spring Data、Spring Security、Spring Batch等)或自定义配置,实现与MyBatis、Redis、Kafka等无缝集成。
31. Spring常见的内存泄漏场景?
考察知识点:容器管理。
如ThreadLocal未清理、ApplicationContext未关闭、Bean生命周期管理不善、动态代理导致ClassLoader泄漏等。
32. Spring Bean的循环依赖会导致哪些问题?
考察知识点:依赖管理风险。
对于singleton通过三级缓存可解决,但prototype循环依赖无法解决,会抛出异常。应优化设计避免循环依赖。
33. Spring的优缺点?
考察知识点:架构总结。
优点:解耦、易扩展、强大生态、开发高效。缺点:学习曲线陡峭、启动慢、配置复杂(Spring Boot已优化)。
以上题目涵盖了大厂Spring面试高频与基础知识点,建议结合源码与项目深入理解,做到知其然且知其所以然,助力高分通过面试!