提示

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