-
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
-
相关阅读:
OpenCv——鼠标事件笔记
Git - 版本控制系统
需突破技术成本瓶颈 秸秆饲料前景如何国稻种芯现代饲料规划
初识 - Spring
c语言基础程序——经典100道实例。
力扣第134题 加油站 c++ 暴力 + 贪心
Maven基础概念及配置
vue--前端路由及vue-router两种模式
配置 4G 模块为WAN口上网
echarts 实现双Y轴刻度对齐
-
原文地址:https://blog.csdn.net/u013591094/article/details/126267230