主题
面试速答(先看这里)
**一句话结论:**Sorted Set 能支持范围查询,这是因为它的核心数据结构设计采用了跳表,而它又能O(1)的复杂度获取元素权重,这是因为它同时采用了哈希表进行索引。
60秒标准回答:
Sorted Set 能支持范围查询,这是因为它的核心数据结构设计采用了跳表,而它又能O(1)的复杂度获取元素权重,这是因为它同时采用了哈希表进行索引
以上是zset的数据结构,其中包含了两个成员,分别是哈希表dict和跳表zsl
dict存储 member->score 之间的映射关系,所以 ZSCORE 的时间复杂度为 O(1)。skiplist 是一个「有序链表 + 多层索引」的结构,查询元素的复杂度是 O(logN),所以他的查询效率很高
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**以上是zset的数据结构,其中包含了两个成员,分别是哈希表dict和跳表zsl。
- **要点2:**dict存储 member->score 之间的映射关系,所以 ZSCORE 的时间复杂度为 O(1)。
**记忆锚点:**dict → 复杂度获取元素权重值 → skiplist → member- → Sorted → ZSCORE
加分表达:
- Sorted Set 能支持范围查询,这是因为它的核心数据结构设计采用了跳表,而它又能O(1)的复杂度获取元素权重,这是因为它同时采用了哈希表进行索引。
追问准备:
- 围绕「dict」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「复杂度获取元素权重值」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「skiplist」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
Sorted Set 能支持范围查询,这是因为它的核心数据结构设计采用了跳表,而它又能O(1)的复杂度获取元素权重,这是因为它同时采用了哈希表进行索引。
java
typedef struct zset
{
dict *dict;
zskiplist *zsl;
} zset;以上是zset的数据结构,其中包含了两个成员,分别是哈希表dict和跳表zsl。
dict存储 member->score 之间的映射关系,所以 ZSCORE 的时间复杂度为 O(1)。skiplist 是一个「有序链表 + 多层索引」的结构,查询元素的复杂度是 O(logN),所以他的查询效率很高。