zoukankan      html  css  js  c++  java
  • 面试官的问题与解读

    最近又开始面试了。

    然后当时面试官问了个问题

    a()执行修改完毕。

    b()执行修改完毕。

    c()执行读取完毕。

    发现c()出现了脏读。怎么解决?

    然后我就懵逼了。

    然后就在一个交流群里问了问大佬。(群中真是卧虎藏龙,问我问题的老哥,看起来都是身经百战)。

    嗯,他们直接指出了问题的核心:这个问题是想问我脏读在代码中出现的原因,以及如何避免?

    嗯,根据当时面试的心路历程,我感觉是???(也吐槽一点客观因素吧,当时天很冷,然后我被晾了半天,恰好又是下午最瞌睡的时间,然后很蒙蔽。就是自己太菜了)

    针对如何避免出现脏读的问题。

    在代码层面就是,当写方法加锁时,读方法没有加锁,就会出现脏读。

    那么,怎么解决呢。就是使用读写锁:ReentrantReadWriteLock类。

    这样,就不会出现脏读了,至于为什么呢?点击这里

    嗯,那么万一真的脏读了,说明数据库中已经出现问题了。那么这个时候该怎么做呢?

    群里老哥说了:

    先去看数据库隔离级别:

                dirty read(脏读)    nonrepeatable read(不可重复读)    Phantom Read(幻读)

    Read uncommitted        可能            可能                  可能

    Read committed      不可能               可能                  可能

    Repeatable read        不可能            不可能                 可能

    Serializable        不可能            不可能                  不可能

    MySQL默认是:Repeatable  read

    oracle默认是:read committed

    当然你去查查数据库隔离级别就可以了。

    如果真的需要还原:

    那么查看报文,然后查看数据。

    或者直接找DBA啊。

    当然在使用框架的时候,当然是spring的声明式事务啊(这也是我当时回答的。。。。。。。)

    至于分布式事务。。。。这个我真的不太了解。。。属于待完成事项吧。。。。

    至于这个面试总结:

    自己准备不足,一些基本的问题回答的并不好,实际上自己可以回答的更好。

    还有这个让我直接滚蛋的问题。。。。。。

    很尴尬。线程基础书籍刚看过一本,却没有想到关于脏读与线程里面涉及的关系。这是自己的问题,没得牌面。

    多多积累多多努力!!!

  • 相关阅读:
    隐私政策
    .net打杂工程师的面试感想和总结
    xamarin调试android部署到模拟器错误记录:Deployment failed Mono.AndroidTools.InstallFailedException: Unexpected install output: Error: Could not access the Package Manager. Is the system running?
    C#位运算实际作用之操作整型某一位
    C#位运算实际运用之合并Int
    C#位运算基本概念与计算过程
    ajax异步请求302分析
    http与https区别
    html + css + jquery实现简单的进度条实例
    一个简单的彩色背景图形验证码
  • 原文地址:https://www.cnblogs.com/lilinzhiyu/p/8260083.html
Copyright © 2011-2022 走看看