谈起 Redis 和 MySQL,皆是广大 程 序 猿(媛)朋友面试跳槽必踩的两个坑。那么,关于 Redis 与 MySQL,面试官最爱问哪些问题呢?不知道也不用慌,我已整理了这“68 道 Redis+168 道 MySQL” 精品面试题(带解析),速来试试你 背 “废” 了吗?
68 道 Redis 精品面试题(带解析)
刷 Redis 面试题之前,给大家梳理一下整个 Redis 架构的知识,顺带手绘了一版 xmind 的架构脑图,不过原件无法直接上传,上面直接截图展现!
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【000】即可免费获取
第一部分:Redis 的概念理解
-
1. 什么是 Redis?
-
2. Redis 的特点有哪些?
-
3. Memcache 与 Redis 的区别都有哪些?
-
4. Redis 相比 Memcached 有哪些优势?
-
5. 如何实现本地缓存?请描述一下你知道的方式
-
6. Redis 通讯协议是什么?有什么特点?
第二部分:Redis 数据结构与指令
-
7. Redis 支持的数据类型
-
8. Redis 常用的命令有哪些?
-
9. 一个字符串类型的值 能存储最大容量是多少?
-
10. Redis 各个数据类型最大存储量分别是多少?
-
11. 请介绍一下 Redis 的数据类型 SortedSet(zset)以及底层实现机制?
-
12. Redis 事务相关命令有哪些?
-
13. 什么是 Redis 事务?原理是什么?
-
14. Redis 事务的注意点有哪些?
-
15. Redis 为什么不支持回滚?
-
16. 请介绍一下 Redis 的 Pipeline(管道),以及使用场景
-
17. 请说明一下 Redis 的批量命令与 Pipeline 有什么不同?
-
18. 请介绍一下 Redis 的发布订阅功能
-
19. Redis 的链表数据结构的特征有哪些?
-
20. 请介绍一下 Redis 的 String 类型底层实现?
-
21. Redis 的 String 类型使用 SSD 方式实现的好处?
-
22. 设置键的生存时间和过期时间有哪些命令?
第三部分:Redis 高并发处理策略
-
23. 为什么 Redis 需要把所有数据放到内存中?
-
24. Redis 是单线程的吗?
-
25. Redis 为什么设计成单线程的?
-
26. 什么是缓存穿透?怎么解决?
-
27. 什么是缓存雪崩? 怎么解决?
-
28. 缓存的更新策略有几种?分别有什么注意事项?
-
29. 请介绍几个可能导致 Redis 阻塞的原因
-
30. 怎么去发现 Redis 阻塞异常情况?
第四部分:Redis 集群结构以及设计理念
-
31. Redis 集群架构模式有哪几种?
-
32. Redis 集群最大节点个数是多少?
-
33. Redis 集群的主从复制模型是怎样的?
-
34. 请介绍一下 Redis 集群实现方案
-
35. Redis 集群会有 写操作丢失吗?为什么?
-
36. Redis 慢查询是什么?通过什么配置?
-
37. Redis 的慢查询修复经验有哪些?怎么修复的?
-
38. 如何优化 Redis 服务的性能?
-
39. Redis 的主从复制模式有什么优缺点?
-
40. Redis sentinel(哨兵)模式优缺点有哪些?
-
41. 如何设置 Redis 的最大连接数?查看 Redis 的最大连接数?查看 Redis 的当前
-
42. 介绍一些 Redis 常用的安全设置?
第五部分:Redis 缓存管理与持久化机制
-
43. Redis 持久化机制有哪些?
-
44. Redis 持久化机制 AOF 和 RDB 有哪些不同之处?
-
45. 请介绍一下 RDB 持久化机制的优缺点
-
46. 请介绍一下 AOF 持久化机制的优缺点
-
47. 如果 AOF 文件的数据出现异常, Redis 服务怎么处理?
-
48. 常见的淘汰算法有哪些?
-
49. Redis 淘汰策略有哪些?
-
50. Redis 缓存失效策略有哪些?
-
51. Redis 如何做内存优化?
-
52. 什么是 bigkey? 有什么影响?
-
53. 怎么发现 bigkey?
-
54. Redis 的内存消耗分类有哪些?内存统计使用什么命令?
-
55. 简单介绍一下 Redis 的内存管理方式有哪些?
-
56. 如何设置 Redis 的内存上限?有什么作用?
-
57. Redis 报内存不足怎么处理?
第六部分:Redis 应用场景设计
-
58. Redis 适用场景有哪些?
-
59. Redis 常用的业务场景有哪些?
-
60. Redis 支持的 Java 客户端有哪些? 简单说明一下特点。
-
61. 请简单描述一下 Jedis 的基本使用方法?
-
62. Jedis 连接池连接方法有什么优点?
-
63. 什么是分布式锁?有什么作用?
-
64. 分布式锁可以通过什么来实现?
-
65. 介绍一下分布式锁实现需要注意的事项?
-
66. Redis 怎么实现分布式锁?
-
67. 缓存命中率表示什么?
-
68. 怎么提高缓存命中率?
以上便是这 68 道精品 Redis 面试题,如若在不看答案的情况下,试问自己可以答出多少?
168 道 MySQL 精品面试题(带解析)
先梳理一遍 MySQL 知识,如下图(手绘版 xmind 架构脑图,原件无法上传,截图展现)
MySQL 架构脑图
第一部分:MySQL 基础问题
-
1.说一下 MySQL 执行一条查询语句的内部执行过程?
-
2.MySQL 提示“不存在此列”是执行到哪个节点报出的?
-
3.MySQL 查询缓存的功能有何优缺点?
-
4.如何关闭 MySQL 的查询缓存功能?
-
5.MySQL 的常用引擎都有哪些?
-
6.MySQL 可以针对表级别设置数据库引擎吗?怎么设置?
-
7.常用的存储引擎 InnoDB 和 MyISAM 有什么区别?
-
8.InnoDB 有哪些特性?
-
9.一张自增表中有三条数据,删除了两条数据之后重启数据库,再新增一条数据,此时这条数据的 ID 是几?
-
10.MySQL 中什么情况会导致自增主键不能连续?
-
11.InnoDB 中自增主键能不能被持久化?
-
12.什么是独立表空间和共享表空间?它们的区别是什么?
-
13.如何设置独立表空间?
-
14.如何进行表空间收缩?
-
15.说一下重建表的执行流程?
-
16.表的结构信息存在哪里?
-
17.什么是覆盖索引?
-
18.如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?
-
19.执行一个 update 语句以后,我再去执行 hexdump 命令直接查看 ibd 文件内容,为什么没有看到数据有改变呢?
-
20.内存表和临时表有什么区别?
-
21.并发事务会带来哪些问题?
-
22.什么是脏读和幻读?
-
23.为什么会出现幻读?幻读会带来什么问题?
-
24.如何避免幻读?
-
25.如何查看 MySQL 的空闲连接?
-
26.MySQL 中的字符串类型都有哪些?
-
27.VARCHAR 和 CHAR 的区别是什么?分别适用的场景有哪些?
-
28.MySQL 存储金额应该使用哪种数据类型?为什么?
-
29.limit 3,2 的含义是什么?
-
30.now() 和 current_date() 有什么区别?
-
31.如何去重计算总条数?
-
32.lastinsertid() 函数功能是什么?有什么特点?
-
33.删除表的数据有几种方式?它们有什么区别?
-
34.MySQL 中支持几种模糊查询?它们有什么区别?
-
35.MySQL 支持枚举吗?如何实现?它的用途是什么?
-
36.count(column) 和 count(*) 有什么区别?
-
37.以下关于 count 说法正确的是?
-
38.为什么 InnoDB 不把总条数记录下来,查询的时候直接返回呢?
-
39.能否使用 show table status 中的表行数作为表的总行数直接使用?为什么?
-
40.以下哪个 SQL 的查询性能最高?
-
41.InnoDB 和 MyISAM 执行 select count(*) from t,哪个效率更高?为什么?
-
42.在 MySQL 中有对 count(*) 做优化吗?做了哪些优化?
-
43.在 InnoDB 引擎中 count(*)、count(1)、count(主键)、count(字段) 哪个性能最高?
-
44.MySQL 中内连接、左连接、右连接有什么区别?
-
45.什么是视图?如何创建视图?
-
46.视图有哪些优点?
-
47.MySQL 中“视图”的概念有几个?分别代表什么含义?
-
48.使用 delete 误删数据怎么找回?
-
49.Flashback 恢复数据的原理是什么?
第二部分:MySQL 索引问题
-
50.什么是索引?
-
51.索引分别有哪些优点和缺点?
-
52.以下 SQL 有什么问题?该如何优化?
-
53.为什么 MySQL 官方建议使用自增主键作为表的主键?
-
54.自增主键有哪些优缺点?
-
55.索引有几种类型?分别如何创建?
-
56.主索引和唯一索引有什么区别?
-
57.在 InnDB 中主键索引为什么比普通索引的查询性能高?
-
58.什么叫回表查询?
-
58.如何查询一张表的所有索引?
-
60.MySQL 最多可以创建多少个索引列?
-
61.以下 like 查询会使用索引的是哪一个选项?为什么?
-
62.如何让 like %abc 走索引查询?
-
63.MySQL 联合索引应该注意什么?
-
64.联合索引的作用是什么?
-
65.什么是最左匹配原则?它的生效原则有哪些?
-
66.列值为 NULL 时,查询会使用到索引吗?
-
67.以下语句会走索引么?
-
68.能否给手机号的 前 6 位创建索引?如何创建?
-
69.什么是前缀索引?
-
70.为什么要用前缀索引?
-
71.什么情况下适合使用前缀索引?
-
72.什么是页?
-
73.索引的常见存储算法有哪些?
-
74.InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?
-
75.为什么 InnoDB 要使用 B+ 树来存储索引?
-
76.唯一索引和普通索引哪个性能更好?
-
77.优化器选择查询索引的影响因素有哪些?
-
78.MySQL 是如何判断索引扫描行数的多少?
-
79.MySQL 是如何得到索引基数的?它准确吗?
-
80.MySQL 如何指定查询的索引?
-
81.在 MySQL 中指定了查询索引,为什么没有生效?
-
82.以下 or 查询有什么问题吗?该如何优化?
-
83.以下查询要如何优化?
-
84.MySQL 会错选索引吗?
-
85.如何解决 MySQL 错选索引的问题?
-
86.如何优化身份证的索引?
第三部分:MySQL 锁问题
-
87.什么是锁?MySQL 中提供了几类锁?
-
88.什么是死锁?
-
89.常见的死锁案例有哪些?
-
90.如何处理死锁?
-
91.如何查看死锁?
-
92.如何避免死锁?
-
93.InnoDB 默认是如何对待死锁的?
-
94.如何开启死锁检测?
-
95.什么是全局锁?它的应用场景有哪些?
-
96.什么是共享锁?
-
97.什么是排它锁?
-
98.使用全局锁会导致什么问题?
-
99.如何处理逻辑备份时,整个数据库不能插入的情况?
-
100.如何设置数据库为全局只读锁?
-
101.除了 FTWRL 可以设置数据库只读外,还有什么别的方法?
-
102.FTWRL 和 set global readonly=true 有什么区别?
-
103.如何实现表锁?
-
104.悲观锁和乐观锁有什么区别?
-
105.乐观锁有什么优点和缺点?
-
106.InnoDB 存储引擎有几种锁算法?
-
107.InnoDB 如何实现行锁?
-
108.优化锁方面你有什么建议?
第四部分:MySQL 日志问题
-
109.MySQL 有哪些重要的日志文件?
-
110.redo log 和 binlog 有什么区别?
-
111.什么是 crash-safe?
-
112.什么是脏页和干净页?
-
113.什么情况下会引发 MySQL 刷脏页(flush)的操作?
-
114.MySQL 刷脏页的速度很慢可能是什么原因?
-
115.如何控制 MySQL 只刷新当前脏页?
-
116.MySQL 的 WAL 技术是解决什么问题的?
-
117.为什么有时候会感觉 MySQL 偶尔卡一下?
-
118.redo log 和 binlog 是怎么关联的?
-
119.MySQL 怎么知道 binlog 是完整的?
-
120.MySQL 中可不可以只要 binlog,不要 redo log?
-
121.MySQL 中可不可以只要 redo log,不要 binlog?
-
122.为什么 binlog cache 是每个线程自己维护的,而 redo log buffer 是全局共用的?
-
123.事务执行期间,还未提交,如果发生 crash,redo log 丢失,会导致主备不一致呢?
-
124.在 MySQL 中用什么机制来优化随机读/写磁盘对 IO 的消耗?
-
125.以下说法错误的是?
-
126.以下说法正确的是?
-
127.有没有办法把 MySQL 的数据恢复到过去某个指定的时间节点?怎么恢复?
-
128.MySQL 命令和内置函数篇
-
129.如何用命令行方式连接 MySQL 数据库?
-
130.关于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下说法错误的是?
-
131.如何创建用户?并给用户授权?
-
132.如何修改 MySQL 密码?
-
133.如何使用 SQL 创建数据库,并设置数据库的编码格式?
-
134.如何修改数据库、表的编码格式?
-
135.如何使用 SQL 创建表?
-
136.在 MySQL 命令行中如何查看表结构信息?
-
137.如何使用 SQL 查看已知表的建表脚本?
-
138.如何使用 SQL 语句更新表结构?
-
139.MySQL 有哪些删除方式?有什么区别?
-
140.如何开启和关闭 MySQL 服务?
-
141.如何查询当前 MySQL 安装的版本号?
-
142.如何查看某张表的存储引擎?
-
143.如何查看当前数据库增删改查的执行次数统计?
-
144.如何查询线程连接数?
-
145.如何查看 MySQL 的最大连接数?能不能修改?怎么修改?
-
146.CHAR_LENGTH 和 LENGTH 有什么区别?
-
147.UNION 和 UNION ALL 的用途是什么?有什么区别?
-
148.以下关于 WHERE 和 HAVING 说法正确的是?
-
149.空值和 NULL 的区别是什么?
-
150.MySQL 的常用函数有哪些?
第五部分:MySQL 性能优化问题
-
151.MySQL 性能指标都有哪些?如何得到这些指标?
-
152.什么是慢查询?
-
153.如何开启慢查询日志?
-
154.如何定位慢查询?
-
155.MySQL 的优化手段都有哪些?
-
156.MySQL 常见读写分离方案有哪些?
-
157.介绍一下 Sharding-JDBC 的功能和执行流程?
-
158.什么是 MySQL 多实例?如何配置 MySQL 多实例?
-
159.怎样保证确保备库无延迟?
第六部分:MySQL 开放性问题
-
160.有一个超级大表,如何优化分页查询?
-
161.线上修改表结构有哪些风险?
-
162.查询长时间不返回可能是什么原因?应该如何处理?
-
163.MySQL 主从延迟的原因有哪些?
-
164.如何保证数据不被误删?
-
165.MySQL 服务器 CPU 飙升应该如何处理?
-
166.MySQL 毫无规律的异常重启,可能产生的原因是什么?该如何解决?
-
167.如何实现一个高并发的系统?
MySQL 的面试题整的有点多,168 道,不知道这一路下来你是不是都看懵了?
我也同样整理成如下的 64 页文档了!
答案解析,不论是 Redis 还是 MySQL,整个的内容都太多了,无法全部上传,但都已整理成完整的文档,68 道 Redis 精品面试题(带解析)25 页,168 道 MySQL 精品面试题(带解析)64 页,如需完整的答案解析进行参考学习,以及前面我手绘的 Redis+MySQL 的架构脑图 xmind 版,皆可 100%分享一并学习!
需要的小伙伴都可以私信我,注意回复【000】即可获取更多免费资料!
祝愿大家前程似锦,offer 不断!!Fighting!!Fighting!!