Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9ea9138

Browse files
committed
feat: add redis-interview.md
添加 Redis 面试场景
1 parent 024a695 commit 9ea9138

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

‎README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
| 1 | Redis 深度历险:核心原理和应用实践[2018] | 钱文品 | ⭐⭐⭐⭐⭐ |
2828
| 2 | Redis 使用手册[2019] | 黄健宏 | ⭐⭐⭐⭐⭐ |
2929

30+
31+
学习下面知识之前,先来[感受一波 Redis 面试连环炮](/docs/redis-interview.md)
32+
3033
## Redis 数据结构与应用
3134

3235
### [String 字符串](/docs/redis-string-introduction.md)

‎docs/redis-interview.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Redis 面试场景
2+
3+
## 1. 考察 Redis 基本数据结构
4+
- **面试官**:Redis 都有哪些数据结构?
5+
6+
- **候选人**:(小 case,很自信地回答)Redis 有 5 种数据结构,分别是 `String``List``Hash``Set``Sorted Set`,其中 `Sorted Set` 是有序集合。
7+
8+
- **面试官**:(没了??)就这些吗?
9+
10+
- **候选人**:(心里突然有点慌)好像...没有其他数据结构了吧,我知道的就这些.....
11+
12+
**分析**:这其实是一个很基础的问题,相信绝大部分同学都能回答出以上 5 种数据结构,但是,如果你对 Redis 有更加深入的了解,那么你应该回答 Redis 还有 `HyperLogLog``Bitmap``Geo``Pub/Sub` 等数据结构,甚至还可以回答你玩儿过 `Redis Module`,像 `BloomFilter``RedisSearch``Redis-ML`,想必面试官会眼前一亮,嗯,这小伙子还不错嘛,知道这么多。
13+
14+
## 2. 考察 Redis 分布式锁
15+
- **面试官**:那你有没有用过 Redis 分布式锁?
16+
17+
- **候选人**:用过的。
18+
19+
- **面试官**:说一下你是怎么用 Redis 来实现分布式锁的。
20+
21+
- **候选人**:就是用 `setnx` 命令来争夺锁,如果抢到了,再用 `expire` 给锁加上一个过期时间,防止锁忘记释放。
22+
23+
- **面试官**:那如果在 `setnx` 之后执行 `expire` 之前进程意外 `crash` 或者要重启维护了,要怎么做?
24+
25+
- **候选人**:啊,还有这种情况吗?我就是在系统中简单用用,没有考虑那么多......
26+
27+
- **面试官**:那就算没有发生意外 `crash`,有没有可能出现不安全的问题,比如,锁的超时?导致多个线程执行顺序错乱?
28+
29+
- **候选人**:应该不会吧...我之前使用过,没遇到这个问题......
30+
31+
- **面试官**:(心里觉得这小伙子不行,没遇到,也应该考虑到吧)行吧,那你回去之后好好想想。那 Redis 除了这种方式实现分布式锁,还有其他吗?
32+
33+
- **候选人**:好像还有个 RedLock 算法,但是我只听说了,没去研究它(心里很没底)。
34+
35+
- **面试官**:(我还能说什么呢)...
36+
37+
**分析**:Redis 2.8 版本之后,`setnx``expire` 可以合并成一条指令执行,锁得不到释放的问题也随着迎刃而解。而超时问题,可以使用"随机值+ Lua 脚本"的方式来处理。以上的一些问题,你都应该考虑到,而不是简单的用用 Redis。而关于 RedLock 算法,也应该去好好了解它的原理和实现方式。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /