最近在准备后端开发校招面试,写一份总结,整理一下自己的思路,帮助自己记忆。
数据库篇
1.数据库的三大范式
第一范式:列不可再分 第二范式:非主属性只能依赖于唯一主键,而不能依赖于其他主键 第三范式:非主属性只能依赖于主键
数据库设计必须遵守三大范式,除非是为了平衡,例如追求性能。
2.数据库索引的方式
2.1 hash索引
hash索引,根据hash确定出索引的位置 ,hash方法只支持精确查找,不支持范围查找。
2.2 b+树索引
b+树索引底层构建一颗b+树,支持精确查找和范围查找。
b+树索引包括聚集索引、辅助索引、联合索引、覆盖索引。
聚集索引:数据即索引、索引即数据
辅助索引:索引在数据之外
联合索引:多列的索引
覆盖索引: 指所要查找的数据都在索引中,调用索引即可,而无需回表操作。
2.3 全文索引
先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)
3.数据库事务
数据库的事务指对数据库的一组操作,或者一组指令。这些指令要么都执行,要么都不执行,不能被打断。
数据库的事务具有ACID四种特性 即原子性、一致性、隔离性和持久性。
原子性指这些操作是原子的,作为一个整体,要么都执行,要么都不执行。
一致性指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。
隔离性指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。
持久性是指事务对数据库的修改是持久的,对数据库的状态的影响永久保存到数据库中。
4.数据库事务的隔离级别
(由低到高)未提交读、已提交读、可重复读、串行化
5.数据库乐观锁和悲观锁
乐观锁认为数据库在读写过程中不会出现脏数据,要求较为宽松,一般为记录加上version字段
悲观锁认为数据库在读写过程中会出现脏数据,要求较为严格,使用select…for update会把数据给锁住
要注意悲观锁中锁的类型。
6.MyISAM和InnoDB的区别
1.是否支持事务:MYISAM不支持事务、InnoDB支持事务
2.锁粒度:MYISAM是表级锁,InnoDB支持行级锁
3.索引: InnoDB是聚集索引,MyISAM是非聚集索引
4.InnoDB支持外键、InnoDB支持MVCC