category
学习思考
date
Apr 25, 2023
icon
Origin
password
slug
frameQ
status
Published
summary
关于spring框架的一些面试问题
tags
Tags
type
Post
URL
1.Spring框架中的单例bean是线程安全的吗?
不是线程安全的。
Spring框架中有scope(”singleton”)注解定义bean的作用域。默认是单例。一般在bean中注入的成员变量对象多是无状态的,无状态的对象是线程安全的,比如service,dao等。但是有一些成员变量是可修改的,需要考虑线程安全问题。可以使用多例或者加锁解决。
2.什么是AOP,项目中是否使用到AOP?
面向切面变成,用于那些与业务无关,却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合。
记录操作日志,缓存,spring实现的事物
核心是:通过AOP的环绕通知+切点表达式(找到要记录的方法),通过环绕通知参数获取请求方法的参数(类、方法、注释、请求方式等)获取到这些参数以后保存到数据库。
spring中的事物本质是,通过AOP功能,对方法前后进行拦截,在执行方法前开启事物,在执行完目标方法之后,根据执行情况提交或者会滚。
3.Spring 事物失效的场景
1.异常捕获处理,自己处理了异常,没有抛出。解决:手动抛出
2.抛出检查异常。解决:配置rollbackFor属性为Exception
3.非public方法。解决:改为public
4.Spring Bean的生命周期?
1.通过BeanDefinition获取bean的定义信息
2.调用构造函数实例化bean
3.bean的依赖注入
4.处理Aware接口
5.bean的后置处理器beanPostProcessor前置
6.初始化方法
7.bean的后置处理器beanPostProcessor后置
8.销毁bean
5.Spring中的循环引用?
构造函数产生的循环依赖:@Lazy注解,进行懒加载,什么时候需要再进行bean的创建
三级缓存解决大部分循环依赖:
一级缓存:单例池,用来存放已经完成生命周期,完成初始化的bean
二级缓存:缓存早期的bean对象。(生命周期还没走完)
三级缓存:缓存ObjectFactory,表示对象工厂,用来 创建某个对象。
6.Springboot自动装配原理?
主要依赖于@SpringbootApplication注解。这是一个组合注解。由三个注解组成,分别是
@SpringbootConfiguration、@EnableAutoConfiguration、@ComponentScan。其中@SpringbootConfiguration 标注这是一个配置类。@ComponentScan规定扫包范围,扫描本包和子包。@EnableAutoConfiguration,这个注解下面有@import注解,导入了对应的配置选择器,内部读取该项目和项目引用的jar包下,META-INF目录下的,spring.factories中所配置的类的全类名。这类配置中所定义的bean,会根据条件来决定是否导入到Spring容器中。
7.Mybatis的执行流程是什么?
1.读取mybatis配置文件,mybatis-config.xm加载运行环境和映射文件
2.构造会化工厂,SqlSessionFactory
3.会话工厂创建SqlSession对象,包含执行sql语句所有的方法
4.操作数据库的接口,Executor执行器,同时负责查询缓存的维护
5.Executor接口执行方法中有一个MapperStatement类型的参数,封装了映射信息。
6.输入参数映射
7.输出结果映射
8.Mybatis是否支持延迟加载?
延迟加载的意思是:需要用到数据才加载,不需要时不加载
mybatis支持一对一关联对象,和一对多关联集合对象的延迟加载
在mybatis配置中配置lazyLoadingEnable,默认是true
9.Mybatis的一级缓存和二级缓存用过吗?
- 一级缓存给予PerpetualCache(本地缓存)的HashMap本地缓存,其储存作用域为session,当session进行flush或者close之后,改session中的缓存将会被清空,默认打开一集缓存
- 二级缓存是基于namespace和mapper作用域的,不依赖sqlSession,默认也是基于PerpetualCache(本地缓存),HashMap储存,需要单独开启。一个是核心配置,一个是映射文件。
10.Mybatis二级缓存什么时候会清理缓存数据?
当某一个作用域(一级缓存Session/二级缓存NameSpaces)进行了增删改操作时,默认该域下的所有select中的缓存将会被clear。
- 作者:LiuJixue
- 链接:https://liujixue.cn/article/frameQ
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





