Spring面试题, Spring 事务有几个隔离级别?
Spring面试题, Spring 事务有几个隔离级别?
QA
Step 1
Q:: Spring 事务有几个隔离级别?
A:: Spring 事务有五个隔离级别:
1. DEFAULT:
使用后端数据库默认的隔离级别。
2. READ_UNCOMMITTED:
允许读取未提交的数据,可能导致脏读、不可重复读、幻读。
3. READ_COMMITTED:
只能读取已经提交的数据,防止脏读,但可能导致不可重复读和幻读。
4. REPEATABLE_READ:
保证在同一个事务中多次读取同样数据结果一致,防止脏读和不可重复读,但可能导致幻读。
5. SERIALIZABLE:
最高的隔离级别,所有事务依次执行,防止脏读、不可重复读和幻读,但性能最差。
Step 2
Q:: Spring 事务传播行为有几种类型?
A:: Spring 事务传播行为有七种类型:
1. REQUIRED:
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
2. REQUIRES_NEW:
总是创建一个新的事务,如果当前存在事务,则挂起当前事务。
3. SUPPORTS:
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
4. NOT_SUPPORTED:
以非事务方式执行,如果当前存在事务,则挂起当前事务。
5. MANDATORY:
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
6. NEVER:
以非事务方式执行,如果当前存在事务,则抛出异常。
7. NESTED:
如果当前存在事务,则创建一个事务嵌套事务执行;如果当前没有事务,则等同于REQUIRED。
Step 3
Q:: 什么是脏读、不可重复读和幻读?
A:: 脏读:一个事务读取了另一个事务未提交的数据。 不可重复读:在同一个事务中,两次读取同样的数据,结果却不一致。 幻读:在同一个事务中,两次查询操作返回的记录数不一致。
Step 4
Q:: Spring 中的 @
Transactional 注解有什么作用?
A:: @
Transactional 注解用于声明事务管理。它可以应用于类或方法上,指定事务的传播行为和隔离级别,以及是否只读、超时时间和回滚规则等。
Step 5
Q:: 如何处理事务的回滚?
A:: 在Spring中,可以通过在@Transactional注解中设置rollbackFor或noRollbackFor属性来指定哪些异常会触发事务回滚。例如,@Transaction(rollbackFor = Exception.class)
表示当抛出任何异常时回滚事务。默认情况下,只有未检查异常(继承自RuntimeException)才会导致事务回滚。