面试整理

1 spring 事务的传播与失效

融入外界事务
挂起外界事务
嵌套事务
(1)required适用于99.9%的修改性方法,A方法->B方法(B方法在A方法中被调用),传播行为修饰的是被调用的方法,B方法需要一个事务,当A方法含有事务时,B方法加入A中;否则B方法自己创建一个事务。
(2)support适用于99.9%的查询性方法,A有事务时,B会加入A事务;当A没有事务时,B会以非事务方式执行

(3)mandatory表示B方法必须在有事务的A方法运行,否则会抛异常
(4)require_new表示B方法需要一个新事务,当A方法含有事务时,A方法会被挂起,重开新链接开启一个新事务来运行B方法;当A方法没有事务时,B事务必须创建一个新事务,运行B方法。当前方法必须运行在自己的事务中。
(5)not_support不支持事务,当A方法没有事务时,B方法以非事务方式运行;反之,A方法事务被挂起,以非事务的方式执行B事务
(6)never表示B方法必须在没有事务的A方法运行,否则会抛异常
失效
1.方法访问权限问题,只支持public
2.方法用final修饰,动态代理不能代理final方法
3.方法内部调用,同一对象内调用没有使用代理,未被aop事务管理器控制
4.未被spring管理
5.多线程调用,事务管理内部使用threadLocal,不同线程间不在同一事务
6.表不支持事务
7.未配置事务
事务不回滚
8.错误的传播属性
9.自己吞了异常
10.手动抛了别的异常
11.自定义了回滚异常与事务回滚异常不一致
12.嵌套事务回滚多了,需要局部回滚的地方未做异常控制
2 小表驱动大表
作为驱动表来说 会全表扫描
用小表作为驱动表 然后关联字段建立索引
3 redis 的hash 操作
hset hget hgetAll hmset hmget hdel
4 ThreadLocal 的使用

posted @ 2024-04-02 10:57  磊子9527  阅读(36)  评论(0)    收藏  举报