Skip to content

Latest commit

 

History

History
91 lines (56 loc) · 3.69 KB

数据库.md

File metadata and controls

91 lines (56 loc) · 3.69 KB

数据库常见面试问题总结

数据库在Java工程师的面试过程中也是常问的一项,这里主要对数据库原理,MySQL,Redis相关问题进行了总结

问题汇总

1. 数据库中的事务是什么

事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。是满足ACID特性的一组操作。

A:Automic,原子性,事务的所有操作要么全部提交成功,要么全部失败回滚。

C:Consistency,一致性,事务应确保数据库的状态从一个一致状态转变为另一个一致状态。

I:Isolation,隔离性,多个事务并发执行时,一个事务的执行不会影响其他事务的执行。

D:Durability,持久性,已被提交的事务对数据库的修改应该永久保存在数据库中。

2. 并发环境下,事务会带来哪些问题

丢失修改

读脏数据

不可重复读

幻影读

3. 事务的隔离级别

Read Uncommitted(读取未提交):

Read Committed(读取已提交):

Repeatable Read(可重复读):

Serializable(串行化):

MySQL的默认隔离级别是

4. MySQL的存储引擎

MySQL支持的引擎在5.5版本前默认为MyISAM,之后默认为InnoDB

区别在于:

1.InnoDB支持的行级锁,而MyISAM支持的是表级锁

2.InnoDB支持事务,而MyISAM不支持事务

3.InnoDB支持外键,而MyISAM不支持外键(外键用于与另一张表关联,是另一张表的主键)

4.InnoDB支持MVCC(多版本并发控制机制),MyISAM不支持

最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入MVCC之后,只有写写之间相互阻塞,其他三种操作都可以并行,
这样大幅度提高了InnoDB的并发度。MVCC比单纯的加锁更高效,MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作,
MVCC可以使用乐观锁和悲观锁来实现。其具体实现方式是保存数据在某个时间点的快照实现的,不同存储引擎的实现方法是不同的
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。
这里的时间指的是系统版本号。比如InnoDB查询每行数据,必须确保两个标准
1.数据行的版本必须小于等于当前事务的版本 2.行的删除操作的版本一定是未定义的或者大于当前事务的版本号

5.InnoDB使用的是聚簇索引,而MyISAM使用的是非聚簇索引

聚簇索引指的是数据就存储在叶子节点上,而非聚簇索引叶子节点存储的不是数据本身,而是数据存放的地址。

5. MySQL的索引

在MySQL建立联合索引的时候会用到最左匹配原则,即最左优先,在查询的时候会从联合索引的最左边开始匹配

7. Redis和MySQL有啥区别,Redis是单线程的为什么还这么快

8. Redis的数据类型有哪些

9. Redis跳表

10. Redis的热key问题如何解决

11. Redis的持久化机制

12. Redis的哨兵和集群机制

13. 缓存穿透和缓存雪崩

14. 一致性哈希问题

15. Redis分布式锁

16. MySQL常用语法

有的公司是会考察这个的,会出一些相应的题目,但基本都是力扣上数据库的题的一些变式甚至是原题, 建议把力扣数据库的题刷一遍,非会员能做的就二十来个,面试官问的也基本在这里面