本篇文档精选了一些企业真实场景下的 Spring 高级面试题,并结合实际案例进行了解答,帮助求职者更好地理解和掌握 Spring 框架的核心概念和应用技巧。

Spring AOP

1. 什么是 AOP?

AOP(Aspect Oriented Programming),即面向切面编程,是一种编程范式,它允许程序员将横切关注点(例如日志记录、事务管理、安全等)与业务逻辑分离,从而提高代码模块化和可维护性。

2. Spring AOP 中的代理机制有哪些?

Spring AOP 支持两种代理机制:

  • JDK 动态代理:基于接口代理,为目标对象创建代理对象。
  • CGLIB 代理:基于继承代理,为目标对象创建子类代理。

3. Spring AOP 中的通知类型有哪些?

  • 前置通知(Before advice):在目标方法执行之前执行。
  • 后置通知(After returning advice):在目标方法成功执行之后执行。
  • 异常通知(After throwing advice):在目标方法抛出异常后执行。
  • 最终通知(After advice):无论目标方法是否成功执行都会执行。
  • 环绕通知(Around advice):围绕目标方法执行,可以控制目标方法是否执行以及何时执行。

Spring 事务管理

1. Spring 事务管理的两种方式是什么?

  • 编程式事务管理:通过编程方式显式地管理事务,例如使用 TransactionTemplatePlatformTransactionManager
  • 声明式事务管理:使用注解或 XML 配置的方式声明事务,例如使用 @Transactional 注解。

2. Spring 事务隔离级别有哪些?

  • DEFAULT:使用数据库默认的隔离级别。
  • READ_UNCOMMITTED:允许读取未提交的数据,可能导致脏读。
  • READ_COMMITTED:只允许读取已提交的数据,可以防止脏读。
  • REPEATABLE_READ:保证多次读取同一数据时,数据保持一致,可以防止脏读、不可重复读。
  • SERIALIZABLE:最高的隔离级别,完全串行化执行事务,可以防止脏读、不可重复读、幻读。

3. Spring 事务传播行为有哪些?

  • REQUIRED:如果当前存在事务,则加入该事务;否则创建一个新事务。
  • SUPPORTS:如果当前存在事务,则加入该事务;否则以非事务方式执行。
  • MANDATORY:如果当前存在事务,则加入该事务;否则抛出异常。
  • REQUIRES_NEW:创建一个新事务,如果当前存在事务,则将当前事务挂起。
  • NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
  • NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
  • NESTED:如果当前存在事务,则创建一个嵌套事务;否则创建一个新事务。

Spring MVC

1. Spring MVC 的工作流程是什么?

  1. 用户发送请求到 DispatcherServlet。
  2. DispatcherServlet 根据请求信息找到合适的 HandlerMapping。
  3. HandlerMapping 返回执行请求的 HandlerExecutionChain(包含 Handler 和 Interceptor)。
  4. DispatcherServlet 将请求交给 HandlerAdapter 处理。
  5. HandlerAdapter 执行 Handler 方法,并返回 ModelAndView 对象。
  6. DispatcherServlet 将 ModelAndView 解析成 View 对象。
  7. View 渲染视图,并将结果返回给用户。

2. Spring MVC 中的控制器注解有哪些?

  • @Controller:标识一个类是控制器。
  • @RequestMapping:映射请求 URL 到控制器方法。
  • @GetMapping@PostMapping@PutMapping@DeleteMapping:分别映射 GET、POST、PUT、DELETE 请求。
  • @PathVariable:获取 URL 路径中的参数。
  • @RequestParam:获取请求参数。
  • @RequestBody:获取请求体中的 JSON 数据。
  • @ResponseBody:将返回值转换为 JSON 数据返回。

更多面试题

除了以上列出的问题,Spring 框架的面试题还可能涉及 IoC 容器、依赖注入、Bean 的生命周期、Spring Boot 自动配置、Spring Cloud 微服务等方面的内容。

总结

掌握 Spring 框架的核心概念和应用技巧是 Java 开发者必备的技能之一。希望本篇文档能够帮助你更好地应对 Spring 框架高级面试题,取得理想的成绩。