大厂面试---Redis面试题(含答案,相关知识点,面试考察次数统计)_安吉_lh1029的博客-CSDN博客
大厂面试问答题汇总分析---数据库(索引-聚集/非聚集,事务,mySql, 锁)_安吉_lh1029的博客-CSDN博客
大厂面试问答题汇总分析---网络安全类问题_安吉_lh1029的博客-CSDN博客
大厂面试问答题汇总分析--- 秒杀 / 限流 / 高并发_安吉_lh1029的博客-CSDN博客
【锁】的相关概念汇总_安吉_lh1029的博客-CSDN博客
大厂面试问答题汇总分析--- 多线程问题_安吉_lh1029的博客-CSDN博客
概述摘要:
Redis(本质是内存数据库),【数据库】相关题目在历届大厂面试中占比20%到30%之间 【根据600多道大厂面试题】,有的公司该类题目占比比例会更高。本文梳理就是针对高频题目和相关知识点的梳理学习,包含高频问题和相关所有答案。
面试题目考察频次列表(仅以本次大厂面经提供题目,进行归纳分析,作为样本)
【超高频】 | 考察次数 > 5 |
【高频】 | 5 >= 考察次数 > 3 |
【中频】 | 3 >= 考察次数 > 1 |
【普通】 | 考察次数 = 1 |
3、【超高频】Redis数据类型有哪些?对应使用场景?其中zSet的底层实现
----- zSet 相关问题: zSet的底层结构是什么?zSet为什么用跳表实现?为什么不用红黑树?
4、【超高频】Reids如何持久化?有哪些持久化方式,优缺点是什么?
分布式锁实现比较【数据库】【Zookeeper】【Redis】
8、【高频】Reids的集群架构方案?master-slave模式,以及哨兵模式
9-1 三种过期删除的策略比较(定时删除、惰性删除、定期删除)
题目答案和相关知识点解析
1、【中频】Redis 网络模型是什么?
Redis 就是一个高性能的数据库, Redis 的数据是存在内存中的,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。Redis 与其他 key - value 缓存产品有以下三个特点:
- 支持数据的持久化,可将内存中的数据保存在磁盘中,重启时再次加载进行使用。
- 不仅支持简单的key-value类型的数据,还提供list,set,zset,hash等数据结构的存储。
- 支持数据的备份,即master-slave模式的数据备份
2、【普通】Redis在项目中都使用了哪些功能?
Redis 被广泛应用于缓存方向。另外,Redis 也经常用来做分布式锁。Redis 提供了多种数据类型来支持不同的业务场景。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。
- 会话缓存(最常用)
- 消息队列(支付)
- 活动排行榜或计数
- 发布,订阅消息(消息通知)
- 商品列表,评论列表
(可详看问题3中不同数据类型 支持 使用场景, 这种题一般结合其他知识点问,单独问的比较少,一般问Reids如何实现分布式锁? 如何避免Redis缓存穿透? 等)
3、【超高频】Redis数据类型有哪些?对应使用场景?其中zSet的底层实现
支持的 数据类型 |
存储结构 | 内部编码模式 | 使用 场景 |
1--String (字符串) |
JSON、XML, 二进制的图片等,但不能超过512MB | int:8个字节长整型 embstr:<=39个字节的字符串 raw:>39个字节的字符串 |
缓存, 计数 共享Session 限速 |
2--Hash (字典) |
键值对 | ziplist(压缩列表):个数小于512个(默认)且所有值小于64字节(默认) hashtable (哈希表):其余情况 |
存储、读取、修改用户属性 |
3--List (列表) |
多个有序的字符串, 最多可以存储2^32-1个元素 | ziplist(压缩列表):同上 linkedlist(链表):其余情况 |
最新消息排行等功能(如朋友圈的时间线);消息队列 栈, 文章列表 |
4--Set (集合) |
多个字符串元素, 不允许重复且无序 |
intset(整数集合):都是整数且个数小于512个(默认) hashtable(哈希表):其余情况 |
用户标签, 抽奖功能 |
【超高频】 5--zSet、(有序集合) |
不允许重复且可排序,每个元素设置score作排序依据 | ziplist(压缩列表):有序个数小于128个(默认) 且所有值小于64字节(默认) skiplist(跳跃表):其余情况 |
排行榜 延迟消息队列 |
----- zSet 相关问题: zSet的底层结构是什么?zSet为什么用跳表实现?为什么不用红黑树?
【超高频】zSet的底层结构是什么?(或问排序原理/ 实现)答:是跳表
【中频】zSet为什么用跳表实现?为什么不用红黑树?两者对比
答:skiplist(跳表)1)是一种多层的有序链表
2)跳表查询:每在上层搜索一次就平均缩小了一半的搜索范围,平均时间复杂度为O(logn)
3)与【红黑树】比较:
跳表 | 红黑树 | ||
相同点 | 查询/插入/删除 复杂度两者相同,都为O(logn) | ||
不同点 | 1、插入/删除 | 插入相邻节点 | 操作后需要调整 |
2、范围查询 | 更适合范围查询,找到范围最小值,在第一层遍历即可 | 效率没有跳表高 | |
3、实现 | 更为简单 | 相对复杂 |
【普通】redis的数据结构,对长字符串和短字符串处理有什么不同?
答:Redis
会根据当前值的 类型 和 长度 决定使用哪种 内部编码实现。短字符串使用embstr(<=39个字节的字符串)