1. SSM框架面试核心考察点解析
SSM(Spring+SpringMVC+MyBatis)作为Java企业级开发的主流框架组合,在技术面试中始终占据重要地位。根据我参与过的近百场技术面试统计,面试官对SSM的考察主要集中在三个维度:框架整合原理(占比35%)、实际应用中的异常处理(占比45%)、性能优化实践(占比20%)。这组数据背后反映出一个现实——企业更需要能解决实际问题的开发者,而非仅仅会配置文件的"配置工程师"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Spring面试题深度剖析
2.1 IoC容器工作原理与高频问题
IoC容器初始化过程是Spring面试的必考点。常见误区是认为容器启动只是加载XML或注解配置,实际上完整的初始化链路包含:
- 资源定位:BeanDefinition的资源定位,涉及ResourceLoader策略
- 载入解析:将配置转换为BeanDefinition对象(重要考点:BeanDefinition的属性和作用)
- 注册存储:向DefaultListableBeanFactory注册BeanDefinition
典型面试题:BeanFactory和ApplicationContext的区别?
标准答案应包含:延迟加载vs立即加载、BeanPostProcessor自动注册、国际化等扩展功能差异,并结合应用场景说明选择依据。
2.2 AOP实现原理与陷阱规避
Spring AOP的代理机制选择是实际开发中的高频坑点。需要掌握:
- JDK动态代理与CGLIB的触发条件(基于接口与否)
- 代理对象方法调用的完整链路图
- 常见失效场景(同类调用、final方法、静态方法等)
面试案例:某电商优惠券系统出现AOP拦截失效,根本原因是开发者在同一类中通过this调用被增强方法。解决方案应涉及代理对象获取方式(AopContext.currentProxy())或代码结构调整。
3. SpringMVC面试核心要点
3.1 请求处理流程的六个关键阶段
- 请求映射:HandlerMapping的匹配策略(包括Ant路径匹配的算法实现)
- 适配调用:HandlerAdapter如何处理不同类型的Controller(重点:@RequestMapping方法的参数解析机制)
- 拦截器栈:Interceptor的执行顺序与中断处理
- 视图解析:ViewResolver链式调用与重定向特殊处理
- 异常处理:@ControllerAdvice与HandlerExceptionResolver的优先级
- 结果渲染:MessageConverter的协商策略(Accept头处理逻辑)
3.2 文件上传的五个技术细节
面试中常被忽略但实际重要的文件上传实现细节:
- CommonsMultipartResolver的临时文件清理机制
- 大文件分块上传的内存控制参数(maxInMemorySize)
- 文件类型校验的Bypass风险(不要依赖Content-Type)
- 分布式环境下的上传进度跟踪方案
- 与云存储服务的断点续传集成
4. MyBatis面试深度解析
4.1 缓存机制与脏读问题
MyBatis的二级缓存是面试高频考点,但多数候选人只知概念不明原理。需要掌握:
- 二级缓存的存储结构(TransactionalCacheManager如何管理Cache实例)
- 事务提交时的缓存同步时机
- 跨namespace的缓存共享配置风险
- 最佳实践:建议在读写比例超过7:3的场景启用
4.2 动态SQL的工程化实践
除了基础的
- SQL注入防护:$与#的区别底层实现(ParameterHandler处理过程)
- 批量操作优化:ExecutorType.BATCH的正确打开方式
- 多租户方案:基于Interceptor的SQL重写技巧
- 分页插件原理:BoundSql的修改时机与风险
5. SSM整合中的典型问题
5.1 事务管理的三个层级
- JDBC层:Connection的autoCommit与savepoint机制
- Spring层:@Transactional的传播行为实际应用场景(特别注意NESTED与REQUIRES_NEW的区别)
- ORM层:MyBatis的Executor与Spring事务的协作流程
5.2 配置陷阱排查指南
常见整合问题排查表:
| 现象 | 可能原因 | 验证方式 |
|---|---|---|
| 事务不生效 | @Transactional注解类未被代理 | 检查Bean的class名是否包含$$EnhancerBySpringCGLIB |
| Mapper注入失败 | 接口未扫描或重复注册 | 查看BeanDefinitionRegistry中的bean定义 |
| 请求返回404 | SpringMVC未正确处理静态资源 | 检查HandlerMapping的order值配置 |
6. 性能优化实战方案
6.1 连接池配置黄金法则
以Druid为例的关键参数设置原则:
- initialSize = 平均QPS × 平均RT(s) ÷ 实例数
- maxActive = initialSize × 3(突发流量缓冲)
- validationQuery必须设置且要轻量(推荐SELECT 1)
- 连接泄露检测参数timeBetweenEvictionRunsMillis建议30000ms
6.2 SQL执行监控方案
基于Interceptor的自定义监控实现要点:
- 统计SQL执行时间需包含网络往返时间
- 识别慢SQL应使用移动平均算法避免偶发波动
- 结果集大小监控要注意内存保护
- 建议对接APM系统实现可视化
7. 前沿技术融合趋势
7.1 响应式编程适配
Spring WebFlux与MyBatis的混合使用方案:
- 通过DeferredResult实现异步查询
- 注意连接池的并发限制问题
- 事务管理的特殊处理(TransactionSynchronizationManager替代方案)
7.2 云原生改造要点
SSM应用容器化时的特殊配置:
- 配置文件的外部化策略(ConfigMap/Secret使用)
- 健康检查接口的设计原则(包含依赖组件状态)
- 优雅下线处理(ShutdownHook中的连接池关闭)
在准备SSM框架面试时,建议候选人至少完成三个深度实践:实现自定义Spring Starter、开发MyBatis插件、构建分布式事务demo。这些经历能显著提升面试表现的可信度。最后提醒,框架原理要结合JVM、网络等底层知识才能形成完整认知体系——比如Spring循环依赖解决机制就涉及三级缓存与早期对象暴露的巧妙设计。
