6

工作中使用 mysql 事务的问题

 2 years ago
source link: https://www.v2ex.com/t/839583
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

工作中使用 mysql 事务的问题

  liu1996 · 6 小时 50 分钟前 · 1374 次点击

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

27 条回复    2022-03-11 16:33:10 +08:00

qwe520liao

qwe520liao      6 小时 43 分钟前

你说的事务都是技术执行层面的 [如何使用事务] ,猜测一下他应该想问的是业务层面的 [为什么 /什么情况要使用事务] ,一个是 How to do ,一个是 Why to do 。

不过仅从你描述的这些也只是猜测而已,假如说我来进行面试的话,一般就不会问具体的实现细节,而是问这个东西有什么用,为什么要用。

Zss77

Zss77      6 小时 36 分钟前

问数据库的事务和 spring 那些东西有什么关系呢。它们只是提供了事务功能的一种实现。
事务具有 ACID 特性,事务中的 SQL 要么全部成功要么全部失败。我觉得他想问的是这个。

wolfie

wolfie      6 小时 28 分钟前

估计是想看抛开框架 懂不懂 start 、commit 、rollback 。

Seulgi

Seulgi      6 小时 26 分钟前   ❤️ 2

你这就是纯粹的想秀。人家问你工作中用到过事务吗?答用到过。人家看到你停了肯定会再问,哪里用到过,哪个业务场景?你再结合你写的项目经历里的业务场景说,比如某个业务场景,先讲解这个业务场景,然后说怎么用的,也就是你说的 spring transactional 。这时候再去秀技术,讲原理之类的,如果你自己也没有研究得很深,答到 spring 事务就 ok 了。如果他对原理有要求,他会再问,你知道 spring 事务的 xxxx ,你才继续答下去。面试最忌讳浮躁,就是别人刚说一个名词,你就开始你的表演,首先面试官的考点可能不是你说的,其次几轮沟通下来,面试官会给你打上一个不好沟通的标签。就跟算法题一样,先问清楚各种边界,才能利于你更好的解题。

Morii

Morii      6 小时 8 分钟前

“面试官问我工作中没有用到过事务。

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


这个描述看起来就不太通顺~

oneisall8955

oneisall8955      6 小时 4 分钟前

你说用到就行。后面抛出,事务的定义,它的几个特性,为什么需要使用(场景),mysql 中的实现原理,隔离级别,在应用代码中怎么使用,如 spring ,还会涉及到传播行为。你就一下说到代码怎么使用,还没到那一步呢

liu1996

liu1996      5 小时 59 分钟前

@Seulgi 不是想秀,当时确实是没有明白这样问的意思

liu1996

liu1996      5 小时 57 分钟前

@qwe520liao 感谢感谢,感觉确实是我理解有问题了

liu1996

liu1996      5 小时 56 分钟前

@Morii 我想表达的意思是,声明式事务,只要加了注解就开启了事务,那不就用到事务了吗

liu1996

liu1996      5 小时 53 分钟前

@oneisall8955 感谢回复,确实是我没想到这一层面

jorneyr

jorneyr      5 小时 11 分钟前   ❤️ 2

@Seulgi 只是你喜欢这种方式,恰恰相反,我更喜欢我问一个问题,作为引子,面试者能够主动滔滔不绝的介绍相关的知识,我不喜欢一问一答的方式,我更注重的是面试者的能力,而不是某个问题的直接答案。当然,我会提前告知面试者如果能这样回答是我最希望看到的,而不是让人家猜测。

meeop

meeop      5 小时 5 分钟前

无非想问你对[事务]这个概念的了解和使用经验
说 spring 的 api 没问题,但是光说这个没有反映出你对事物这个概念的理解程度

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

应该就能满足绝大多数面试官了

lblblong

lblblong      4 小时 44 分钟前

我认为如果给的不是他想要的答案,应该稍加引导,而不是说一句“不是这个意思”

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

我认为你的回答已经侧面说明你有用到过了

potatowish

potatowish      3 小时 47 分钟前

这问题问的就不好,事务这个概念可宽泛了,要问什么直接说清楚

Felldeadbird

Felldeadbird      2 小时 44 分钟前

面试官提问有问题。我猜他想问你事务啥时候用。结果你回到了一个框架事务,打乱了他的提问节奏。

q474818917

q474818917      2 小时 39 分钟前

事务能扯的真的太多了,什么事务隔离机制、事务的传播性,并发事务带来的问题,这面试官不太会问

RainCats

RainCats      2 小时 31 分钟前

@wolfie 就是早期那种自己写 try-catch 起来手动提交、回滚吧

hidemyself

hidemyself      2 小时 22 分钟前

工作中没有用到过事务?
用过的。比如在什么项目 /功能上,因为要实现 xxx 功能,使用 spring 的声明式事务,我们在函数上加上 Transactional 注解,达到了什么样的效果。然后再说一点要注意的点。

我会这么答。。。

Suaxi

Suaxi      2 小时 18 分钟前

昨天早上面试也是被问到相同的问题,我答的也是 @Transactional 注解,然后说了下具体的业务场景就到下一个问题了

liu1996

liu1996      2 小时 5 分钟前

@lblblong 我也觉的这样合理,不过当时面试官一直在重复"我就问你工作中有没有用到过事务",给我实在整的不会了

liu1996

liu1996      2 小时 3 分钟前

@hidemyself 感谢,确实受教了

encro

encro      1 小时 53 分钟前

有没有用到事务?问这个问题其实要看的是你对事务理解多少?

标准回答:我在什么业务场景用到事务解决了什么问题。

而不是我是如何用事务的,就如 #1 所说人家要知道的是 Why ,你回答了 How 。

知道问 Why 的通常比问 How 的略胜一筹,知道回答 Why 的也通常比回答 How 的略胜一筹。

就好比面试官问你用过 redis 吗?

你告诉他用过 Java 的某个 Redis 库,那么非常 Low ,面试官对这个库不熟悉,那么接下来没法问了,这种回答对于面试官来说就是“死猪不怕开水烫”毫无诚意,要么沟通理解有问题。

如果你告诉他你用 Redis 在业务中用到了缓存,队列,HyperLogLog 等,回答到这步,你基本是有一定经验的,是能胜任相关开发工作的,

那么接下来可以问你 Redis 缓存持久,HLL 等的实现原理等等,如果都能回答对,那么是基础还可以,且具备钻研精神的,是值得培养的,


如果随便问你几个,你都能回答到第二层,那么价格合适赶紧来上班吧。

sampeng

sampeng      1 小时 50 分钟前

如果我是面试官。。我会直接标记一个不会用事务,只知道用框架打个标签,为什么?因为别人都是这么用的。。。

bigbyto

bigbyto      1 小时 11 分钟前

@sampeng 同意你的观点,虽然我觉得面试官问的也是有点问题。

我觉得如果一问到事务马上就想到 @Transactional 注解都是过于依赖 spring 的副作用,应该要反思一下。

haython

haython      1 小时 7 分钟前

面试不只是面技术,也是要面能不能沟通

liu1996

liu1996      6 分钟前

@encro 了解了,感谢回复

liu1996

liu1996      6 分钟前

@sampeng 这个确实。。。。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK