spring事务管理

spring事务管理

事务概念:
什么是事务?概念
  • 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。
1、事务的四大属性 /ACID
性质描述
原子性(atomicity)事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成要么完全不起作用。一个事务中的执行动作,只要一个未执行,那么全部动作都不执行
一致性(consistency)一旦所有事务动作完成,事务就被提交.数据和资源就处于一种满足业务规则的一致性状态中。几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
隔离性(isolation)可能有许多事务会同时处理相同的数据,因此每个事物都应该与其他事务隔离开来,防止数据损坏。事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
持久性(durability)一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响.通常情况下,事务的结果被写到持久化存储器中。事务一旦成功提交,那么该事务对数据的处理是不受影响的(系统崩溃,断电)
对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
请描述事务的ACID属性

1.原子性:事务中的执行动作要么都执行,要么都不执行;

2.隔离性:多个事务对同一数据进行操作,每个事务的执行不会受到其他事务的干扰;

3.一致性:多个并行的事务执行的结果,必须和某一顺序执行的结果一致

4.持久性:对于任意提交的事务,系统必须保证事务对数据库的改变不会丢失,即使数据库出现故障
2、spring事务管理的7种事务传播行为/属性
REQUIREDadj. 必需的,规定的;理想的
v. 需要;要求做(某事
如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行
REQUIRED_NEW需要更新的当前的方法必须启动新事务,并在它自己的事务内运行.如果有事务正在运行,应该将它挂起
SUPPORTS支持如果有事务在运行,当前的方法就在这个事务内运行.否则它可以不运行在事务中.
NOT_SUPPORTE不支持当前的方法不应该运行在事务中,如果有运行的事务,将它挂起
MANDATORYadj. 强制性的,义务的;受(前国际联盟)委任统治的
n. 受托人,代理人
当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常
NEVERadv. 决不,永不;不会,不可能当前的方法不应该运行在事务中.如果有运行的事务,就抛出异常
NESTEDadj. 嵌套的,内装的
v. 筑巢;嵌入
如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行;否则,就启动一个新的事务,并在它自己的事务内运行.
请描述spring事务管理的7种事务传播行为

答:1.REQUIRED:如果有事务在运行就在该事务中运行,否则就开启一个事务运行

2.REQUIRED_NEW:当前的方法必须启动新的事务,并在自己的事务中运行;如果有事务在运行,就将它挂起

3.SUPPORTE :如果有事务在运行,则就在该事务内运行。否则可以并在事务中运行

4.NOT_SUPPORTE:当前的方法不运行在事务中,如果有事务则将它挂起

5.MANDTORY :当前的方法必须运行在事务中,如果没有正在运行的事务,就抛出异常

6.NEVER:当前的方法不应该运行在是事务中,如果有运行的事务,就抛出异常

7.NESTED:如果有事务在运行,则该方法开启一个事务并嵌套在该事务中运行;
否则:就开启一个新事务,并在自己的事务中运行
3、事务的隔离级别
隔离级别释义描述
DEFAULT默认使用底层数据库的默认隔离级别.对于大多数数据库来说,默认隔离级别都是READ_COMMITTED
READ_UNCOMMITTED读未提交允许事务读取未被其他事物提交的变更.脏读,不可重复读和幻读的问题都会出
READ_COMMITTED读已提交只允许事务读取已经被其它事务提交的变更.可以避免脏读,但不可重复读和幻读问题仍然可能出现
REPEATABLE_READ可重复读取确保事务可以多次从一个字段中读取相同的值.在这个事务持续期问,禁止其他事物对这个字段进行更新.可以避免脏读和不可重复读,但幻读的问题仍然存在.
SERIALIZABLE可序列化的确保事务可以从一个表中读取相同的行.在这个事务持续期问,禁止其他事务对该表执行插入,更新和删除操作.所有并发问题都可以避免,但性能十分低下.
描述事务的隔离级别,以及分别能解决什么问题?
答:四种隔离级别

1.READ_UNCOMMITTED:读未提交,允许事务读取其他事务未提交的数据;数据库默认的隔离级别;

2.READ_COMMITED:读已提交,不允许事务读取其他事务未提交的数据;解决脏读

3.REPEATABLE_READ:可重复读取,确保事务多次从一个字段中读取出相同的值;解决脏读和不可重复读

4.SERIALIABLE:可序列化,确保事务可以从一个表中读取相同的行,在这个事务执行期间,会锁住改表,不允许其他事务对其进行更新,改变;解决幻读,同时解决脏读,不可重复读;注意效率比较低
4、并发事务导致的问题:脏读、不可重复读读、幻读
问题描述阐述
脏读对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.读到另一个事务的未提交更新数据,即读取到了脏数据;
不可重复读对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段.之后,T1再次读取同一个字段,值就不同了.事务A对同一记录的两次读取,另一事务在这时间内对该记录做了修改;事务A两次读取数据不一致
幻读对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行.之后,如果T1再次读取同一个表,就会多出几行事务A对同一张表的两次查询不一致,另一事务B在这两次查询时间间隔内插入了记录;
什么是脏读,不可重复读,幻读,数据库是怎么解决这些问题的?
答:

1.脏读:事务A读取到了事务B未提交的数据,然后事务B回滚了;事务A就读取的是临时的无效的数据;

2.不可重复读:事务A读取两次数据,在这之间事务B对数据进行了更新;导致事务A两次读取数据不一致

3.幻读:事务A读取两次数据,在这之间事务B对数据进行了插入;导致事务A两次读取数据的行数不一致

解决脏读:开启事务并设置隔离级别读已提交(READ_CMMITED)

解决不可重复读取:开启事务并设置隔离级别可重复读取(REPEATABlE_READ),同时解决脏读

解决幻读:开启事务并设置隔离级别可序列化(SERIZLIZABLE),同时解决脏读、不可从合肥读取
5、@Autowired 注入三种方式

答:3种:

1.属性注入,

 @Autowired
    private SysRole role;

2.构造方法注入

    private SysRole role;

    @Autowired
   public void SysRoleServiceImpl(SysRole sysRole){
        this.role=sysRole;
    }

3.setter方法注入

    private SysRole role;

    @Autowired
    public void setRole(SysRole role) {
        this.role = role;
    }
### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值