首页 > 其他分享 >Spring面试题

Spring面试题

时间:2024-03-20 16:31:05浏览次数:12  
标签:面试题 读取 Spring 事务 PROPAGATION 当前 隔离

目录

Spring事务

Spring的事务传播行为(级别)

Spring的事务隔离

Spring中的BeanFactory和ApplicationContext的区别


Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。

Spring事务

        简单点来说,就是对数据的操作要么完全执行完成,要么不执行,不存在执行部分完成。

其次,事务的ACID四大特性

  1. 持久性:一个事务被提交后,它对数据库中数据的改变是持久的即使数据库发生故障也不应该对其有任何影响。(利用redo log日志)
  2. 原子性:事务的原子性确保动作要么全部完成,要么完全不起作用。(利用 undo log日志)
  3. 隔离性:并发访问数据库时,一个用户的事务不被其他事务干扰,各并发事务之间是独立的
  4. 一致性:执行事务前后,数据保持一致,如:转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。

Spring的事务传播行为(级别)

  1. PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
  2. PROPAGATION_RQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
  3. PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。
  4. PROPAGATION_NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,就把当前事务挂起。
  5. PROPAGATION_NESTED:如果当前存在事务,则嵌套事务内执行,如果当前没有事务,则按REQUIRED属性执行。
  6. PROPAGATION_MANDAYTORY:执行当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
  7. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常

Spring的事务隔离

        spring有五大隔离级别,默认值为ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致:

  • 读未提及:最低隔离级别、事务未提交前,就可被其他事务读取(会出现脏读,不可重复读、幻读);
  • 读已提交:提交读,一个事务提交后才能被其他事务读取到(不可重复读,幻读);
  • 可重复读:保证多次读取同一个数据时,其值和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(幻读)MySQL的默认级别
  • 顺序读:序列化,代价最高最可靠的隔离级别,该隔离级别能防脏读、不可重复读、幻读

脏读:A事务读取B事务中还未提交的数据。比如,A事务尝试插入记录,此时该事务还未提交,然后B事务读取到了该记录,然后A事务回滚,导致B事务读取的数据

不可重复读:一个事务两次执行相同的sql,获取的相同的数据不一致,A事务第一次读取后,B事务修改了数据,导致A事务第二次获取的数据不一样

幻读:指同一个事务内多次查询返回的结果集不一样。比如同一个事务A第一次查询的时候有n条记录,但是第二次同等条件下查询却有n+1条记录。幻读的原因是另外一个事务新增或者删除了第一个事务结果集里面的数据。

Spring中的BeanFactory和ApplicationContext的区别

        BeanFactory是Spring IOC容器的最基本形式,提供了基本的IOC功能。它是延迟初始化的,即当一个Bean被实际使用时才被创建。ApplicationContext是BeanFactory的子接口,提供了更多的企业级功能,如AOP,事件驱动,国际化等。ApplicationContext是预初始化的,即在容器启动时就已经创建了所有的Bean。

        

        

标签:面试题,读取,Spring,事务,PROPAGATION,当前,隔离
From: https://blog.csdn.net/qq_56469942/article/details/136876760

相关文章

  • springboot项目打包时提示“程序包xxx不存在,找不到符号”
    springboot多包工程,在使用maven进行打包的时候,一直提示“程序包xxx不存在,找不到符号”,但项目是可以正常启动运行的,开始一直以为是maven哪里没有配置好导致的,后来才发现原来是springboot的maven插件导致的。xxx-parent:顶级父工程xxx-a:子项目1xxx-b:子项目2xxx-c:子项目3依赖关系......
  • spring boot企业级开发教程学习笔记——第二章
    记录笔记。给亲友看的笔记,干劲十足(希望她看得懂,因为我不会教人)一.重要前提再次强调:springboot是为了优化spring的冗重的xml文件配置,spring的注解会更加丰富,但是springboot的思想还是跟着spring走。spring的重要思想是:说到容器,就必须要讲到一个东西Bean,按......
  • 原型链面试题
    原型链面试题functionPerson(){this.name="张三";this.age=18;return1;}constp=newPerson();console.log(p);//谁创造了你那你的__proto__属性就指向谁的prototype//对象都有__proto__属性函数对象(可被new的)有prototype属性//我再来一遍;/......
  • Spring中@NotNull注解@Valid注解简介及使用
    前言在开发中,为了代码的稳定性不报空指针异常,经常需要判断前端传过来的值是否为空,为空的话就返回前端值为空的提示,才能进行下一步的操作,例如登录操作需要判断传过来的登录名和密码是否为空:@GetMapping("login")publicResultlogin(Useruser){if(StringUti......
  • SpringBoot添加跨域处理
    配置类实现WebMvcConfigurer接口重写addCorsMappings(CorsRegistryregistry)方法用registry对象添加映射路径、是否发送cookie、设置放行哪些原始域、放行哪行请求方法、放行哪些请求头信息、暴漏哪些请求头部信息@ConfigurationpublicclassCorsConfigimplements......
  • spring 路由安全
    资料SpringMVC—@RequestMapping原理讲解-1-陶庭开-博客园(cnblogs.com)SpringBoot之@Controller和@RequestMapping的实现原理_51CTO博客_controllerrequestmappingSpringMVC源码解析——HandlerMapping(处理器映射器)_springmvchandlermapping-CSDN博客【精选】......
  • 基于Java的校园电商物流云平台(Vue.js+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1数据中心模块2.2商品数据模块2.3快递公司模块2.4物流订单模块三、系统设计3.1用例设计3.2数据库设计3.2.1商品表3.2.2快递公司表3.2.3物流订单表四、系统展示五、核心代码5.1查询商品5.2查询快递公......
  • 基于Java的医院门诊预约挂号系统(Vue.js+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1功能性需求2.1.1数据中心模块2.1.2科室医生档案模块2.1.3预约挂号模块2.1.4医院时政模块2.2可行性分析2.2.1可靠性2.2.2易用性2.2.3维护性三、数据库设计3.1用户表3.2科室档案表3.3医生档案表3.4......
  • 基于Java的考研专业课程管理系统(Vue.js+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1数据中心模块2.2考研高校模块2.3高校教师管理模块2.4考研专业模块2.5考研政策模块三、系统设计3.1用例设计3.2数据库设计3.2.1考研高校表3.2.2高校教师表3.2.3考研专业表3.2.4考研政策表四、系统展......
  • 3.他人面试题
    1.ReentrantLock的实现原理ReentrantLock是一个可重入的互斥锁,具有尝试非阻塞地获取锁、可中断的锁获取、支持公平性等特点。ReentrantLock通过内部类Sync实现核心功能,Sync继承了AQS类(构建锁和其他同步组件的框架)。AQS通过int型的成员变量表示同步状态,通过内置的FIFO来管理线......