V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liu1996
V2EX  ›  程序员

工作中使用 mysql 事务的问题

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

    小弟昨天去面试,面试官问我工作中没有用到过事务。我跟他说 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 ,你才继续答下去。面试最忌讳浮躁,就是别人刚说一个名词,你就开始你的表演,首先面试官的考点可能不是你说的,其次几轮沟通下来,面试官会给你打上一个不好沟通的标签。就跟算法题一样,先问清楚各种边界,才能利于你更好的解题。
    Morii
        5
    Morii  
       2022-03-11 10:30:54 +08:00
    “面试官问我工作中没有用到过事务。

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


    这个描述看起来就不太通顺~
    oneisall8955
        6
    oneisall8955  
       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 的副作用,应该要反思一下。
    haython
        25
    haython  
       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   ·   我们的愿景   ·   实用小工具   ·   5685 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:32 · PVG 10:32 · LAX 19:32 · JFK 22:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.