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

  • 相关阅读:
    node.js之Cookie
    jQuery和js之Cookie实现
    StringRedisTemplate操作Redis
    Could not get a resource from the pool 错误解决
    tableLayoutPanel 列宽度设置
    KRBTabControl(中文)Windows选项卡控件
    KRBTabControl
    Deferred content load was not performed. To provide the content, subscribe to the View's QueryControl event
    where(泛型类型约束)
    ExportAsFixedFormat Visio文件另存为其他几种格式的处理
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6235524.html
Copyright © 2011-2022 走看看