编程语言
首页 > 编程语言> > 面试可能问到的问题(JAVA)

面试可能问到的问题(JAVA)

作者:互联网

1、问:什么是事务?

   答:事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序,执行逻辑单元。狭义上的事务指的是数据库事务。一方面,当多个应用程序并发访问数据库时,事务可以在这些应用程序之间提供一个隔离方法,以防止彼此之间操作互相干扰。另一个方面事务为数据库操作序列提供了一个从失败恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持数据一致性的方法。

2、问:事务的四个特征(ACID)

   答:1)原子性(Atomicity)

    事务的原子性是指事务必须是一个院子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现以下两种状态

    全部执行或者全部不执行

    任何一项操作失败都将导致整个事务失败,同时其他已经执行的操作都将被撤销和回滚,只有所有操作全部成功,整个事务才算成功

    2)一致性(Consistency)

    事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性。一个事务的在执行之前和执行之后,数据库必须处于一致性状态

    3)隔离性(Isolation)

    事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事物的执行不能被其他事务所干扰。也就是说,不同的事务并发操纵相同数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并且并发执行的各个事务之间不能相互干扰

    在标准SQL规范,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同, 如未授权读取、授权读取、可重复读取和串行化

    ①未授权读取

    未授权读取也被称为读未提交,该隔离级别允许脏读,其隔离级别最低。换句话说,如果一个事务正在处理某一数据,并对其进行了更新,但同时尚未完成事务,因此还没有进行事务提交,而与此同时,允许另一个事务也能够访问该数据。举个例子来说,事务A和事务B同时进行,事务A在整个执行阶段,会将某数据项的值从1开始,做一系列加法操作(比如说加1操作)直到变成10之后进行事务提交,此时,事务B能够看到这个数据项在事务A操作过程中的所有中间值(如1变成2、2变成3等),而对这一系列的中间值的读取就是未授权读取。

    ②授权读取
    授权读取也被称为读已提交(Read Committed),它和未授权读取非常相近,唯一的区别就是授权读取只允许获取已经被提交的数据。同样以上面的例子来说,事务 A和事务同时进行,事务A进行与上述同样的操作,此时,事务B无法看到这个数据项在事务A操作过程中的所有中间值,只能看到最终的10。

    另外,如果说有一个事务C,和事务A进行非常类似的操作,只是事务C是将数据项从10加到 20,此时事务B也同样可以读取到20,即授权读取允许不可重复读取。

    ③可重复读取
    可重复读取(Repeatable Read),简单地说,就是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的。因此该事务级別禁止了不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影数据,就是指同样的事务操作,在前后两个时间段内执行对同一个数据项的读取,可能出现不一致的结果。在上面的例子,可重复读取隔离级别能够保证事务B在第一次事务操作过程中,始终对数据项读取到 1,但是在下一次事务操作中,即使事务 B (注意,事务名字虽然相同,但是指的是另一次事务操作)采用同样的查询方式,就吋能会读取到10或20

    ④串行化

    串行化( Serializable)是最严格的事务隔离级別。它要求所有事务都被串行执行,即事务只能一个接一个地进行处理,不能并发执行。

    在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

    4、持久性(Durability)
    事务的持久性也被称为永久性,是指一个事务一旦提交,它对数据库中对应数据的状态变更就应该是永久性的。换句话说,一旦某个事务成功结束,那么它对数据库所做的更新就必须被永久保存下来——即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束时的状态。

 

标签:事务,JAVA,读取,数据库,面试,问到,操作,执行,隔离
来源: https://www.cnblogs.com/jiuhuche/p/13130198.html