spring面试整理

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring面试整理相关的知识,希望对你有一定的参考价值。

spring

  • 对AOP的理解
    • AOP 面向切面编程,spring主要是通过 JDK 和 cglib 代理对象实现。spring aop 主要运用在事务、日志、异常处理。通过在代码前后做增强,实现业务逻辑的隔离,提高代码的模块化
  • 对IOC的理解
    • ioc 又叫做控制反转,指通过spring来管理对象的创建,配置和生命周期。把 bean 的控制权交给spring,不需要人工来管理对象之间的复杂依赖关系,好处是易解耦。
  • spring aop 和 AspectJ aop
    • spring aop 基于动态代理实现,属于运行时增强
    • aspectJ 属于编译时增强
      • 编译时织入:源码和增强代码都有,直接使用 aspectj 编译器编译即可,生成一个新类
      • 编译后织入:源码已生成class或者打包成jar,此时增强方式则是编译后织入
      • 加载时织入,是指jvm 加载类的时候织入
  • factoryBean 和 beanFactory 的区别
    • beanFactory 是bean的工厂,applicationContext的父类,IOC容器的核心,负责生产和管理bean对象
    • factoryBean 则是一个工厂Bean,可以定制某一个类型Bean实例
  • spring 支持哪几种 bean 作用域
    • singleton: 默认的作用域,单例bean
    • prototype: 每次获取的都是新的 bean
    • request 每次 request 请求创建一个 bean 对象
    • session 同一个 session 的 request 共享一个 bean 示例
    • global session: 全局作用域
  • spring 事务的实现原理
    • spring 有两种事务实现,编程式事务 和 声明式事务
    • spring 事务主要通过 aop 代理实现,对象代码方法进行拦截,在方法执行前启动事务,在方法完成后,根据是否异常,进行提交或则回滚
  • bean的生命周期
    • 实例化,创建一个bean 对象
    • 填充属性,为属性赋值
    • 如果实现 xxxAware 接口,通过不同类型的Aware接口拿到spring里的资源
    • 如果实现 BeanPostProcess 则调用 postProcessBeforeInitialize 方法
    • 如配置了 ini-method ,则调用
    • 如实现 BeanPostProcess 则调用 postProcessAfterInitialize 方法
    • 如实现 DisposableBean 则调用
    • 执行 destroy-method 方法
  • 如何解决循环依赖
    • 三级缓存,第一级用来保存实例化,初始化都完成的对象
    • 第二级,用来保存实例化的对象,但未初始化完成的对象
    • 第三级:用来保存一个对象工厂,提供一个匿名内部类,用于创建二级缓存的对象
    • A->B B->A; a和b 互相依赖
      • 一开始时 a 实例化,并把a的对象工厂放入三级缓存
      • 接着注入 b ,转去实例化 b
      • 创建 b 时 发现依赖 a, 依次从一到三级查询 a,从三级缓存通过对象工厂获取 a,将 a 实例放入二级缓存,并删除三级缓存a的工厂。b 实例化完成放入一级缓存
      • a 继续实例化,从一级缓存获取 b 对象完成实例流程。从二级缓存删除 a 并放入一级缓存
  • 使用二级缓存可以解决循环依赖吗
    • spring的第三级缓存是为了处理代理对象,提前暴露代理后的对象。如果没有代理,二级也是可以的
  • spring mvc 的工作流程
    • 用户向服务器发送请求,被spring的 servlet DispatcherServlet 获取处理
    • DispatcherServlet 对url 进行解析,根据 url 调用 HandlerMapping 获取对应的 handerExecutionChain(hander)
    • DispatcherServlet 根据 handler 找对应的适配器 HandlerAdapter 来执行 handler
    • 提取 request 数据模型,数据转换,序列化等,填入 hander 入参,执行 controller 里业务逻辑
    • handler 执行完返回一个 modelAndView 对象
    • 根据 modelAndView 选择一个合适的 ViewResolver
    • ViewResolver 处理后返回响应给前端
  • spring 用到哪些设计模式
    • 单例模式:spring 的bean默认情况下都是单例
    • 工厂模式:通过 beanFactory 和 ApplicationContext 来生产 bean 对象
    • 代理模式:最常见的AOP 就是通过代理实现,spring主要是用到 JDK 和 cglib 代理
    • 模板方法模式:主要是一些对数据库操作的类,jdbcTemplate,redisTemplate

以上是关于spring面试整理的主要内容,如果未能解决你的问题,请参考以下文章

spring面试整理

spring面试整理

java面试题整理

Spring经典面试题,帮你整理好了,公司初级程序员Java面试题

Spring面试问题汇总整理

Java面试题超详细整理《Spring篇》