Skip to content

面试速答(先看这里)

**一句话结论:**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),所以他的查询效率很高。