Mysql事务 JAVAGC 面试

忽略其他问题,直接上技术面试

你们公司服务器中配置Java GC是哪一种?

Java GC 一共分为四种,分别是

  • -XX:+UseSerialGC 串行垃圾回收器
  • -XX:+UseParallelGC 并行垃圾回收器
  • -XX:+UseConcMarkSweepGC 并发标记扫描垃圾回收器
  • -XX:+UseG1GC G1垃圾回收器

选择回答,并说明原因。

MYSQL有多种引擎,InnoDB 支持事务吗?原理是什么?

MySQL有如下中引擎:MyISAM、InnoDB(5.5后的默认引擎)、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
InnoDB是支持事务的引擎

原理即如何实现事务,首先引出事务的四个隔离级别

  • read uncommitted 读未提交

事务中发生修改,在该事物提交之前,其他事务已经能读取的更改。脏读(Dirty Read).

  • read committed 读取提交

事务开始时,只能读取到其他事务已经提交的结果。

  • repeatable read 可重复读

在同一个事务中,多次去读到的结果是一样的。
但是避免不了幻读。幻读:当某个事务读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录。当之前的事务再次读取该范围时,会产生幻行(Phantom Row)。
Mysql 与其他数据库不同,在这个隔离级别上是避免了幻读的。

  • serializable 可串行化

强制事务串行化,彻底避免上面提到的 脏读、不可重复读、幻读问题。

其次是 ACID

A: 原子性(atomicity)
C: 一致性(consistency)
I: 隔离行(isolation)
D: 持久性(durability)

  • 但是事务是怎么保证ACID的呢?
    事务的实现是通过事务日志完成的。redo 日志、undo 日志、

A:InnoDB采用的是group commit的方式来保证原子性。
C:一致性是undo日志实现的。undo日志除了回滚作用之外, undo 实现MVCC,读取一行记录时,发现事务锁定,通过undo恢复到之前的版本,实现非锁定读取。
I:隔离行其实是通过lock实现,InnoDB有行锁、表锁
D:持久性在于日志

总结

1、redo log(事务日志)保证事务的原子性和持久性(物理日志)
2、undo log保证事务的一致性,InnoDB的MVCC也是用undo log来实现的(逻辑日志).
3、redo log中带有有checkPoint,用来高效的恢复数据.
4、物理日志记录的是修改页的的详情,逻辑日志记录的是操作语句. 物理日志恢复的速度快于逻辑日志.
感谢:http://blog.csdn.net/tangkund3218/article/details/47904021

posted @ 2017-12-11 18:55  Etan.Chen  阅读(573)  评论(0编辑  收藏  举报