提示
Java 面试宝典。@ermo
# 2 数据库
# 2.1 MySQL
# 数据库的三范式是什么?
- 确保每张表中没有重复的数据项,保证每个字段都是原子性的
- 非主键列不存在对主键列的部分依赖,每张表只能描述一件事情
- 满足第二范式的前提下,确保表中的字段没有传递依赖关系
# MySQL 的主要执行过程?
- 连接器:负责与客户端建立连接
- 查询缓存:如果是 select 语句,可以命中缓存的情况下直接返回
- 分析器:对 SQL 进行词法分析和语法分析,构建语法树
- 优化器:根据 SQL 的复杂度确定具体的索引以及最优的执行计划
- 执行器:根据执行计划调用存储引擎的 API 执行 SQL,对数据进行过滤和排序等处理
- 结果返回:将查询结果返回给客户端
# SQL 语句的执行顺序?
- from
- on
- join
- where
- group by
- having+聚合函数
- select
- order by
- limit
# 数据库主从复制原理是什么?
- 从库生成2个线程,一个 I/O 线程,一个 SQL 读写线程;
- I/O 线程请求主库的 binlog,将得到的 binlog 日志写到 relay log 文件中;
- 主库生成一个 log dump 线程,发生 insert、update、delete 事件时,用来给从库 I/O 线程传送 binlog;
- 从库还会创建一个 SQL 线程,从 relay log 中读取内容写入到从库的 db 中。
# MySQL 存储引擎 myiasm 和 innodb 的区别?
(1):Myiasm是mysql默认的存储引擎,不支持数据库事务,行级锁,外键;插入更新需锁表,效率低,查询速度快,Myisam使用的是非聚集索引
(2):innodb 支持事务,底层为B+树实现,适合处理多重并发更新操作,普通select都是快照读,快照读不加锁。InnoDb使用的是聚集索引
# 索引失效的条件是什么?
# MySQL 如何保证唯一性索引的唯一性的?
# SQL 做过优化吗以及怎么优化的?
# binlog、redolog、undolog 的区别是什么?
# 2.2 Redis
# 2.3 MongoDB
# 2.4 ElasticSearch
← 5 Java 新版本 7 数据结构与算法 →