提示
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 数据结构与算法 →