zoukankan      html  css  js  c++  java
  • 上海面试经常遇到的事务安全问题

        众所周知,北京集结了一大批大型甚至顶尖互联网公司,而在上海却是集结了为数众多的外包公司,也因为金融中心的原因,所以涉及银行保险等行业也是非常多,所以到了上海,如果你没有特定的面试企业,那么就会经常遇到金融保险公司,而这些公司则对安全非常重视,不重视都不行。因这种氛围导致整个上海的软件开发都分外重视安全。我的同学面试遇到了很多这样的情况,特总结一下,供大家参考。后面的简答题也很重要,但是篇幅有限制,只能列出题目供大家参考。

    而事务就是其一。

    图片描述
    --用实例来说明:

    --创建银行账户表
    CREATE TABLE bankaccount(
    acid NUMBER,
    balance NUMBER
    )
    --添加约束
    --余额必须大于1
    ALTER TABLE bankaccount
    ADD CONSTRAINT ck_balance CHECK(balance>=1);
    DECLARE 
    BEGIN
    UPDATE bankaccount SET balance=balance-2000
    WHERE acid=1001;
    UPDATE bankaccount SET balance=balance+2000
    WHERE acid=1002;
    --两个都正常才提交
    COMMIT;
    --任何一个出现异常则都不执行
    EXCEPTION
      WHEN others THEN
        ROLLBACK;
        dbms_output.put_line('交易失败,回滚中');--提示
        END;
    --详细解释一下
    SELECT * FROM bankaccount
    --小强 1001 2000
    --小明 1002 4001
    --不使用事务
    --由小强向小明转账 2000
    UPDATE bankaccount SET balance=balance-2000
    WHERE acid=1001;
    UPDATE bankaccount SET balance=balance+2000
    WHERE acid=1002;
    SELECT * FROM bankaccount;
    --结果:
    --小强 1001 2000
    --小明 1002 6001
    --恐怕小明会高兴死,然后接到银行起诉犯罪的短信或者律师函。
    --不过相反如果你损失钱了,银行得到这笔钱了,那么你就会哭死,
    --你还不能找回来,当然也不能起诉银行  
    --由此你可以明白事物的重要了吧
    --
    --原子性:
    --要么同时转账,connit提交;
    --要么同时不转账 rollback ;
    --以前最小的执行单元是一个sql语句。
    --而原子性之下就是捆绑了两个或者以上各sql语句
    --只能同时成功或者同时失败。
    --实为最小的逻辑单元。无法再分的整体,
    --甚至你都不知道里面有几个sql语句
    --一致性:
    --只是修改了表数据,有没有动表结构
    --所以前后表约束不会发生变化,账户余额必须大于1不会变,这是其一。
    --其二,数据在逻辑单元上前后一致。
    --貌似能量守恒定律,钱(能量)只是进行了转移,前面是6001,后面还是6001;
    --而没有减少或者增加,当然被银行扣除的手续费,你懂得。
    --隔离性:
    --比如今天我有一百笔金额进账,想想就幸福。
    --若是凑巧,同一时间,那么就是连个事物同时进行,
    --当然不能让着两笔进账失败了啊,这可都是小钱钱。
    --所以这两个事物互不干扰,互不影响。
    --建设有一个漏洞,支付一万块钱与进账一块钱两个事物同时进行。
    --若是因为相互影响,导致同时失败,能同时抵消,那么想想就幸福。
    --持久性:
    --这是相对于数据来讲的。也就是提交成功,则数据永久有效。
    --如果回滚则数据完全没有被修改。
    --现在貌似很多转账诈骗
    --如果转出去的钱能回滚,无视持久性,那该多好。

    --附录一些事务面试题
    选择题:如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是()
    A.其中有一个是Delete B.一个是Select,另一个是Update
    C.两个都是Select D.两个都是Update
    简答题
    1.Java事务的类型
    2.Serializable简述
    3.Spring事务
    4,事务的隔离级别有哪些。

    转自java部落https://buluo.qq.com/p/detail.html?bid=11148&pid=7659220-1482997621

  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6235524.html
Copyright © 2011-2022 走看看