面试系列之数据库篇

2019 Java 开发者跳槽指南.pdf (吐血整理)….>>>

聊聊数据库的事务的四大特性?

原子性:事务包含的操作要么全部成功,要么全部失败回滚;

一致性:保证数据库状态从一个一致状态转变为另一个一致状态;

隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行;

持久性:一个事务一旦提交,对数据库的修改应该永久保存;


事务的隔离级别?

读未提交:可能会出现脏读

读已提交:不可重复读

可重复读:幻读

序列化:可以避免脏读、不可重复读与幻读,但是效率低下

MySQL默认隔离级别是可重复读;


数据库的锁有哪几种?

行级锁、表级锁,悲观锁和乐观锁;

悲观锁是每次操作数据的之前都进行加锁操作,乐观锁是不加锁的一种方式,每次更新完再去判断操作的数据是否发生了修改主要以版本号来判断是否修改;


数据库索引有什么用?

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息;

索引的底层数据结构为B+树,使用B+树的原因是查找速度快,效率高,在查找的过程中,每次能放弃一部分节点,减少遍历个数,因为它的每个父节点中都包含了子节点中最大的元素;


MyISAM和InnoDB的区别?

MyISAM不支持事务,InnoDB是事务类型的存储引擎;

MyISAM只支持表级锁,InnoDB支持行级锁和表级锁,默认为行级锁;

MyISAM不支持外键,InnoDB支持外键;

MyISAM在大量高并发的读写下会出现表损坏的情况;

MyISAM支持全文检索,InnoDB不支持;

MyISAM查询、更新。插入效率要比InnoDB高;


数据库三范式?

第一范式:数据库表的每一列都是不可分割的;

第二范式:表的每条数据都全部依赖主键,不能部分依赖部分不依赖;

第三范式:一个表不能包含其他表中已包含的非属性字段(通常为了查询效率,我们往往在设计数据库时会违反第三范式,适当的加些冗余的字段)



原文始发于微信公众号(Justin的后端书架):面试系列之数据库篇