忽略其他问题,直接上技术面试
你们公司服务器中配置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