这个问题其实相对比较复杂,因为目前很多公司对于事务的控制其实是比较放松的,就好比可能你去重庆很多公司,发现他们都没有做事务的处理,当问到这样的问题的时候,可以考虑从以下几个方面去回答:

1. 对于那种常规的单表操作,大家都懂的,直接注解就完事了@Transactional
2. 对于分布式的情况,这一块是相对很难回答的,如果说数据库做了分库分表,且同一ID相关资源在同一张表,即按照ID分表,这样的情况其实还是可以保证事务的,即按照业务横向拆分,ID进行纵向拆分,使用分布式组件保证事务(如Seata - seata相关原理可在本分类分布式专栏阅读)。

针对以上两点其实还有一些局限,首先分布式事务一定影响性能,像seata这种TC,TM,TR采取资源回滚的模式,并发高了,数据库写入的性能肯定会下降,面试问到就如实回答就行了,然后面试切入点一定是围绕着最终一致性来回答,就是我们在少数场景可以采用分布式事务,大多数情况下必须保证最终一致性,金融类的做法大多还是会选择最终一致性,而不是强制要求事务,期间会异步回补,离线对账来保证业务正常。

Last modification:April 7, 2022
If you think my article is useful to you, please feel free to appreciate