JAVA面试-框架篇

1、Spring中事务失效的场景

在项目中,我遇到过几种导致事务失效的场景:

  1. 如果方法内部捕获并处理了异常,没有将异常抛出,会导致事务失效。因此,处理异常后应该确保异常能够被抛出。

  2. 如果方法抛出检查型异常(checked exception),并且没有在@Transactional注解上配置rollbackFor属性为Exception,那么异常发生时事务可能不会回滚。

  3. 如果事务注解的方法不是公开(public)修饰的,也可能导致事务失效。

详解: https://www.bilibili.com/video/BV1yT411H7YK?spm_id_from=333.788.videopod.episodes&vd_source=5cdd04cd106e2c17afbf3ebd1143d654&p=38

2、 SpringMVC的执行流程

老旧的视图阶段(JSP)

前后端分离

3、SpringBoot自动装配原理

Spring Boot的自动配置原理基于@SpringBootApplication注解,它封装了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。@EnableAutoConfiguration是核心,它通过@Import导入配置选择器,读取META-INF/spring.factories文件中的类名,根据条件注解决定是否将配置类中的Bean导入到Spring容器中。

4、Spring循环依赖怎么解决

循环依赖发生在两个或两个以上的bean互相持有对方,形成闭环。Spring框架允许循环依赖存在,并通过三级缓存解决大部分循环依赖问题:

  1. 一级缓存:单例池,缓存已完成初始化的bean对象。

  2. 二级缓存:缓存尚未完成生命周期的早期bean对象。

  3. 三级缓存:缓存ObjectFactory,用于创建bean对象。

解决循环依赖的流程如下:

  1. 实例化A对象,并创建ObjectFactory存入三级缓存。

  2. A在初始化时需要B对象,开始B的创建逻辑。

  3. B实例化完成,也创建ObjectFactory存入三级缓存。

  4. B需要注入A,通过三级缓存获取ObjectFactory生成A对象,存入二级缓存。

  5. B通过二级缓存获得A对象后,B创建成功,存入一级缓存。

  6. A对象初始化时,由于B已创建完成,可以直接注入B,A创建成功存入一级缓存。

  7. 清除二级缓存中的临时对象A。

5、MyBatis执行流程

MyBatis的执行流程如下:

  1. 读取MyBatis配置文件mybatis-config.xml。

  2. 构造会话工厂SqlSessionFactory。

  3. 会话工厂创建SqlSession对象。

  4. 操作数据库的接口,Executor执行器。

  5. Executor执行方法中的MappedStatement参数。

  6. 输入参数映射。

  7. 输出结果映射。

6、 MyBatis是否支持延迟加载

7、用过MyBatis的一级缓存和二级缓存吗?

一级缓存

一级缓存的作用域是sqlSession级别的,也就是说一个sqlSession下,同样的查询不会执行第二次,用第一次的结果,但是如过执行了更新,删除,插入的操作,会删除所有的一级缓存.一级缓存默认开启

拓展:同一个事务中默认是使用一个sqlSession的,如一个service的方法中加了 @Transactional那么这个方法里都用都一个sqlsesiion,如果没用加 @Transactional也就没开启事务,则这个方法每次执行mapper里的方法都会开启一个新的sqlsession.即使你连续查了同一条sql,这样是不是可以帮助理解一级缓存的作用域是sqlsession级别的.

二级缓存

二级缓存默认是不开启的,要打开配置,mapper的xml中也要开启,二级缓存的作用域是Namespaces级别的,

相关推荐
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw7 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
Yuzhiyuxia7 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
源码集结号8 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场8 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠8 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David9 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放9 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户37215742613510 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java