工作中使用 mysql 事务的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
liu1996
V2EX    程序员

工作中使用 mysql 事务的问题

  •  1
     
  •   liu1996 2022-03-11 09:49:14 +08:00 3653 次点击
    这是一个创建于 1312 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


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

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

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

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

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

    我会这么答。。。
    Suaxi
        19
    Suaxi  
       2022-03-11 14:20:36 +08:00
    昨天早上面试也是被问到相同的问题,我答的也是 @Transactional 注解,然后说了下具体的业务场景就到下一个问题了
    liu1996
        20
    liu1996  
    OP
       2022-03-11 14:33:40 +08:00
    @lblblong 我也觉的这样合理,不过当时面试官一直在重复"我就问你工作中有没有用到过事务",给我实在整的不会了
    liu1996
        21
    liu1996  
    OP
       2022-03-11 14:35:36 +08:00
    @hidemyself 感谢,确实受教了
    encro
        22
    encro  
       2022-03-11 14:45:38 +08:00
    有没有用到事务?问这个问题其实要看的是你对事务理解多少?

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

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

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

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

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

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

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


    如果随便问你几个,你都能回答到第二层,那么价格合适赶紧来上班吧。
    sampeng
        23
    sampeng  
       2022-03-11 14:48:41 +08:00   2
    如果我是面试官。。我会直接标记一个不会用事务,只知道用框架打个标签,为什么?因为别人都是这么用的。。。
    bigbyto
        24
    bigbyto  
       2022-03-11 15:27:42 +08:00
    @sampeng 同意你的观点,虽然我觉得面试官问的也是有点问题。

    我觉得如果一问到事务马上就想到 @Transactional 注解都是过于依赖 spring 的副作用,应该要反思一下。
    displayabc
        25
    displayabc  
       2022-03-11 15:31:36 +08:00
    面试不只是面技术,也是要面能不能沟通
    liu1996
        26
    liu1996  
    OP
       2022-03-11 16:32:43 +08:00
    @encro 了解了,感谢回复
    liu1996
        27
    liu1996  
    OP
       2022-03-11 16:33:10 +08:00
    @sampeng 这个确实。。。。
    Erroad
        28
    Erroad  
       2022-03-11 21:05:28 +08:00
    万一人家不用 spring 呢,说事务就说事务,纯粹点挺好的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1401 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:59 PVG 00:59 LAX 09:59 JFK 12:59
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86