工作中使用 mysql 事务的问题

2022-03-11 09:49:14 +08:00
 liu1996

小弟昨天去面试,面试官问我工作中没有用到过事务。我跟他说 spring 是声明式事务,加上 Transactional 注解后整个方法中的所有 sql 语句就在一个事务中了,方法执行完毕事务自动提交。他跟我说不是这意思,我又说工作中没有自己给 sql 加过事务,他说也不是问我有没有自己手动加过事务,就问有没有用到过事务。恕小弟愚钝,实在没有搞明白他具体想问什么,有人帮忙看看面试官具体想问什么吗?

3238 次点击
所在节点    程序员
28 条回复
timethinker
2022-03-11 09:55:38 +08:00
你说的事务都是技术执行层面的 [如何使用事务] ,猜测一下他应该想问的是业务层面的 [为什么 /什么情况要使用事务] ,一个是 How to do ,一个是 Why to do 。

不过仅从你描述的这些也只是猜测而已,假如说我来进行面试的话,一般就不会问具体的实现细节,而是问这个东西有什么用,为什么要用。
Zss77
2022-03-11 10:02:59 +08:00
问数据库的事务和 spring 那些东西有什么关系呢。它们只是提供了事务功能的一种实现。
事务具有 ACID 特性,事务中的 SQL 要么全部成功要么全部失败。我觉得他想问的是这个。
wolfie
2022-03-11 10:11:19 +08:00
估计是想看抛开框架 懂不懂 start 、commit 、rollback 。
Seulgi
2022-03-11 10:12:55 +08:00
你这就是纯粹的想秀。人家问你工作中用到过事务吗?答用到过。人家看到你停了肯定会再问,哪里用到过,哪个业务场景?你再结合你写的项目经历里的业务场景说,比如某个业务场景,先讲解这个业务场景,然后说怎么用的,也就是你说的 spring transactional 。这时候再去秀技术,讲原理之类的,如果你自己也没有研究得很深,答到 spring 事务就 ok 了。如果他对原理有要求,他会再问,你知道 spring 事务的 xxxx ,你才继续答下去。面试最忌讳浮躁,就是别人刚说一个名词,你就开始你的表演,首先面试官的考点可能不是你说的,其次几轮沟通下来,面试官会给你打上一个不好沟通的标签。就跟算法题一样,先问清楚各种边界,才能利于你更好的解题。
28Sv0ngQfIE7Yloe
2022-03-11 10:30:54 +08:00
“面试官问我工作中没有用到过事务。

我跟他说 spring 是声明式事务”


这个描述看起来就不太通顺~
oneisall8955
2022-03-11 10:34:52 +08:00
你说用到就行。后面抛出,事务的定义,它的几个特性,为什么需要使用(场景),mysql 中的实现原理,隔离级别,在应用代码中怎么使用,如 spring ,还会涉及到传播行为。你就一下说到代码怎么使用,还没到那一步呢
liu1996
2022-03-11 10:39:41 +08:00
@Seulgi 不是想秀,当时确实是没有明白这样问的意思
liu1996
2022-03-11 10:41:34 +08:00
@qwe520liao 感谢感谢,感觉确实是我理解有问题了
liu1996
2022-03-11 10:43:24 +08:00
@Morii 我想表达的意思是,声明式事务,只要加了注解就开启了事务,那不就用到事务了吗
liu1996
2022-03-11 10:45:30 +08:00
@oneisall8955 感谢回复,确实是我没想到这一层面
jorneyr
2022-03-11 11:27:55 +08:00
@Seulgi 只是你喜欢这种方式,恰恰相反,我更喜欢我问一个问题,作为引子,面试者能够主动滔滔不绝的介绍相关的知识,我不喜欢一问一答的方式,我更注重的是面试者的能力,而不是某个问题的直接答案。当然,我会提前告知面试者如果能这样回答是我最希望看到的,而不是让人家猜测。
meeop
2022-03-11 11:33:53 +08:00
无非想问你对[事务]这个概念的了解和使用经验
说 spring 的 api 没问题,但是光说这个没有反映出你对事物这个概念的理解程度

标答(我猜的)应该是先说事物的概念,用途,然后是主要 api(添加事物,提交事务),最后讲原理(隔离级别,每种级别都啥意思,什么场景用什么级别,mysql 默认是什么级别,之前工作中用什么级别),最后再描述实现的原理(行锁,表锁,版本快照),最后再扩展一下(如何实现一个分布式事务,各个主流数据库支持到什么情况)

应该就能满足绝大多数面试官了
lblblong
2022-03-11 11:55:01 +08:00
我认为如果给的不是他想要的答案,应该稍加引导,而不是说一句“不是这个意思”

单从他的问题:有没有用到过事务?

我认为你的回答已经侧面说明你有用到过了
potatowish
2022-03-11 12:52:01 +08:00
这问题问的就不好,事务这个概念可宽泛了,要问什么直接说清楚
Felldeadbird
2022-03-11 13:54:40 +08:00
面试官提问有问题。我猜他想问你事务啥时候用。结果你回到了一个框架事务,打乱了他的提问节奏。
q474818917
2022-03-11 13:59:51 +08:00
事务能扯的真的太多了,什么事务隔离机制、事务的传播性,并发事务带来的问题,这面试官不太会问
RainCats
2022-03-11 14:07:34 +08:00
@wolfie 就是早期那种自己写 try-catch 起来手动提交、回滚吧
hidemyself
2022-03-11 14:17:09 +08:00
工作中没有用到过事务?
用过的。比如在什么项目 /功能上,因为要实现 xxx 功能,使用 spring 的声明式事务,我们在函数上加上 Transactional 注解,达到了什么样的效果。然后再说一点要注意的点。

我会这么答。。。
Suaxi
2022-03-11 14:20:36 +08:00
昨天早上面试也是被问到相同的问题,我答的也是 @Transactional 注解,然后说了下具体的业务场景就到下一个问题了
liu1996
2022-03-11 14:33:40 +08:00
@lblblong 我也觉的这样合理,不过当时面试官一直在重复"我就问你工作中有没有用到过事务",给我实在整的不会了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX