1. Spring框架核心原理与高频面试题解析
Spring框架作为Java企业级开发的基石,其核心设计思想始终是面试官考察的重点。IoC(控制反转)和DI(依赖注入)这两个概念看似简单,但在实际面试中能讲透底层机制的候选人不足三成。Spring通过BeanFactory和ApplicationContext这两个核心接口实现了对象的创建与管理,其中ApplicationContext在BeanFactory基础上增加了事件传播、资源加载等企业级功能。
常见误区:很多候选人会把IoC简单理解为"对象由Spring创建",实际上IoC的本质是控制权的转移——将对象的创建、依赖注入的控制权从应用程序代码转移到容器。
Spring AOP的实现原理是另一个高频考点。动态代理机制在JDK动态代理和CGLIB之间的选择标准常被问及:
- 当目标类实现了接口时,默认使用JDK动态代理
- 当目标类未实现接口时,使用CGLIB生成子类代理
- 可通过配置强制使用CGLIB
三级缓存解决循环依赖的机制是Spring框架最精妙的设计之一。面试时需要清晰描述三个Map各自的作用:
- singletonObjects:存放完全初始化好的单例Bean
- earlySingletonObjects:存放早期暴露的Bean(已实例化但未完成属性注入)
- singletonFactories:存放Bean工厂对象,用于生成早期引用
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Spring Boot自动配置与启动流程深度剖析
Spring Boot的自动配置原理是面试必问的"送分题",但能完整说出@SpringBootApplication注解背后机制的候选人并不多。这个复合注解实际上包含三个核心注解:
- @SpringBootConfiguration:标识这是配置类
- @EnableAutoConfiguration:启用自动配置
- @ComponentScan:启用组件扫描
自动配置的魔法在于spring.factories文件。以数据库配置为例,当classpath中存在HikariCP连接池类时,Spring Boot会自动配置数据源。这个过程中有几个关键点常被考察:
- @Conditional系列注解的作用机制
- 如何自定义starter
- 配置加载的优先级(命令行参数 > 系统环境变量 > application.properties等)
启动流程是另一个高频考点。Spring Boot应用启动时大致会经历这些阶段:
- 创建SpringApplication实例
- 运行prepareEnvironment准备环境
- 创建ApplicationContext
- 执行refreshContext刷新上下文
- 调用afterRefresh后置处理
- 发布ApplicationReadyEvent事件
3. Spring MVC处理流程与性能优化实战
Spring MVC的工作流程可以用"一个中心,两个基本点"来概括:
- 一个中心:DispatcherServlet作为前端控制器
- 两个基本点:HandlerMapping负责请求映射,HandlerAdapter负责实际处理
面试时经常要求手写处理流程,以下是关键步骤:
- 用户请求到达DispatcherServlet
- 查询HandlerMapping找到对应Controller
- 通过HandlerAdapter执行Controller方法
- 处理返回的ModelAndView
- 视图渲染后返回响应
性能优化方面有几个实战技巧值得分享:
- 合理配置线程池:Tomcat默认线程数可能不适合高并发场景
- 启用异步处理:@Async注解配合合适的线程池配置
- 静态资源缓存:配置Cache-Control头部减少重复请求
- 启用Gzip压缩:减少传输数据量
4. Spring事务管理与常见陷阱规避
Spring事务的传播行为是面试重点,七种传播行为的实际应用场景需要掌握:
- REQUIRED(默认):当前有事务就加入,没有就新建
- REQUIRES_NEW:总是新建事务,挂起当前事务
- NESTED:在当前事务内创建保存点
- SUPPORTS:有事务就加入,没有也不新建
- NOT_SUPPORTED:非事务方式执行,挂起当前事务
- NEVER:必须在非事务环境下执行
- MANDATORY:必须在事务中执行,否则抛异常
事务失效的常见场景需要特别注意:
- 方法修饰符非public
- 自调用问题(同类中方法调用)
- 异常类型配置错误(默认只回滚RuntimeException)
- 数据库引擎不支持事务(如MyISAM)
5. Spring Security认证授权核心机制
Spring Security的过滤器链是安全机制的核心。典型的认证流程包括:
- UsernamePasswordAuthenticationFilter拦截登录请求
- ProviderManager委托AuthenticationProvider进行认证
- UserDetailsService加载用户信息
- 认证成功后生成Authentication对象存入SecurityContext
权限控制方面,常用的表达式有:
- hasRole('ADMIN'):检查特定角色
- hasAuthority('WRITE'):检查特定权限
- permitAll():允许所有访问
- denyAll():拒绝所有访问
- isAuthenticated():检查是否认证
OAuth2的四种授权模式在微服务架构中尤为重要:
- 授权码模式(最安全)
- 密码模式(仅限信任客户端)
- 客户端凭证模式(服务间调用)
- 简化模式(纯前端应用)
6. Spring Cloud微服务核心组件实战
服务注册与发现是微服务的基础能力。Eureka与Nacos的对比常被问及:
- Eureka:AP设计,适合服务注册发现
- Nacos:支持AP/CP切换,还提供配置中心功能
- 健康检查机制差异
- 集群部署方式不同
Feign声明式客户端的工作原理包含几个关键点:
- 动态代理生成
- 方法注解解析
- 请求模板创建
- 编码器/解码器应用
- 负载均衡集成
分布式配置中心的最佳实践:
- 配置项按环境分离(dev/test/prod)
- 敏感信息加密处理
- 配置变更监听机制
- 多级缓存降低网络开销
7. 高频面试题深度解析与应答策略
Bean的生命周期是经典面试题,完整回答应包括:
- 实例化Bean
- 属性赋值
- 初始化前处理(@PostConstruct)
- 初始化(InitializingBean)
- 初始化后处理(AOP代理)
- 使用中
- 销毁前处理(@PreDestroy)
- 销毁(DisposableBean)
设计模式在Spring中的应用是考察综合能力的题目:
- 工厂模式:BeanFactory
- 单例模式:默认作用域
- 代理模式:AOP实现
- 模板方法:JdbcTemplate
- 观察者模式:ApplicationEvent
应对源码分析类问题的技巧:
- 先讲整体设计(如Spring MVC的DispatcherServlet中心化设计)
- 再讲关键接口(HandlerMapping、HandlerAdapter等)
- 最后讲典型实现类(如RequestMappingHandlerMapping)
- 结合自身项目经验举例说明
8. 项目经验与性能调优实战分享
秒杀系统设计中的技术要点:
- 分层削峰:前端限流 > 网关限流 > 服务限流
- 库存扣减:Redis原子操作 + 异步落库
- 热点数据:本地缓存 + Redis多级缓存
- 熔断降级:Hystrix/Sentinel配置策略
数据库性能优化实战:
- 索引优化:EXPLAIN分析执行计划
- 连接池配置:合理设置maxActive和minIdle
- 批处理操作:使用JdbcTemplate.batchUpdate
- 读写分离:AbstractRoutingDataSource实现
JVM调优在Spring项目中的实践:
- 内存泄漏排查:MAT分析heap dump
- GC日志分析:-XX:+PrintGCDetails
- 线程池配置:避免@Async滥用
- 类加载优化:-XX:+TraceClassLoading
