zset 面试常问

面试官常问开头,你能说下redis数据结构吗 >>

1、Redis数据结构?

然后向下👇引起zset >>

2、zset底层数据结构:

压缩列表是什么?:
  • 底层数据结构:
    • 本质上就是一个数组,只不过增加了列表长度、尾部偏移量等如下:

这样的话就有利于快速寻找列表收尾节点,但是对于其他寻找正常的元素。比如元素1、元素2等等 效率也没有很高效,只能一个个遍历。

3、问题:什么时候使用压缩列表?什么时候使用跳表?

    • 有序集合元素保存小于128个
    • 有序集合保存所有元素的长度小于64字节

4、跳表是什么?

跳表在链表基础上增加多级索引,通过多级索引位置的跳转,实现了快速查找元素。

如:针对一张普通的链表查找元素27该怎么查找呢?

只能从链表的头部往后依次遍历

那么跳表是怎么做的呢?
    • 建立多级索引
    • 可以建立多级索引:在一级索引上在建一个元素创建一个索引;
    • 下面举个二级索引的例子:

如图:

下面这张图利用快表快速和找到 -> 70

整个查找过程就是在多级索引之间跳来跳去,最后定位到了这个元素,所以又称为跳表

如图:

注:当数据量特别大的时候,跳表的时间复杂度就是Olog(N),因为它本身运用的思想就有点类似二分法。

5、为什么需要跳表?

    • 因为普通元素的复杂度是O(N)而跳表的时间复杂度是Olog(N)。
    • 查找速度特别快,并且插入、删除也是Olog(N)

插入一个元素:

下面几张题表示 删除一个元素:

6、为什么使用跳表而不使用红黑树或者二叉树呢?他们不也是Olog(N)吗?

    • 原因一:因为zset有一个很核心的操作叫做范围查找,范围查找效率要比红黑树高。
    • 原因二:跳表的实现要比红黑树简单,可以有效的控制跳表的索引层级来控制内存的消耗

注:如果我们要查找某个区间的元素,跳表可以做到Olog(N)快速的查找,比如说你可以找到区间的起点,然后依次往后遍历就可以了。但是,红黑树范围查找的效率没有跳表高

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值