zoukankan      html  css  js  c++  java
  • redis 有序集合、跳表、面试、源码学习

    1、有序集合(ordereset)用在哪里?

      排行榜、成绩排名

    2、跳表 数据结构?

    a、有序的数据结构,增删改查,数组,增删时存在大量数据移动

    b、有序的链表,增删改查:O(n)。如何增加查找的效率?增加一层有序链表可以增加查找效率。如果数据量大,可以继续增加有序链表。

    (1)如何增加有序链表?

      二分方法,依次增加链表。例如共有七个数,第一层1、2、3、4、5、6、7. 第二层1、3、5、7. 第三层1、5.

      但是这种方法存在问题:对于增、删情况,可能会导致所有层都会改变。这样代价较高。

    3、redis跳表的实现原理:

    源码分析?redis nginx skynet memcache等

    a、明确目标,主题,redis跳表实现

    b、构造环境数据测试,调试

    c、验证我们的目标

    有序集合是如何存储的。

    1、当有序集合的节点的个数 大于 128 的时候,或者 任意节点 的member长度大于64的时候,采用跳表

    2、否则使用 ziplist

    数据量少的时候,使用跳表(skiplist)并不合适,所以要满足上面的条件。

    红黑树:增删改查的时间复杂度 O(log n),

    跳表:增删改查的时间复杂度O(log n)大概率

    技术成长线路:5年以上 需要提升自己的 后台开发 应该是后台主管 

    1、从源码中学习, 1)nginx:数据结构、slab、upstream、机制的设计  2)redis:建立连接到数据处理、数据的存储原理、数据键值、磁盘同步、rdb 、aof  网络io 3)zerom:服务与服务、推拉模型、监听发布模型、请求回应、底层网络通信机制、架构实现

    2、 提高造轮子能力,线程池、消息队列、内存池、请求池、高性能高并发io,自己实现epoll reactor proactor 网络协议栈 nginx模块开发, 锁,cas,公平锁,数据的乐观锁和悲观锁

    3、集群的能力。redis哨兵模式 一致性hash mysql的集群

    4、linux内核,内核编译,内核更换,网卡子系统,内存管理,

    5、mysql linux调优

    6、docker 运维部署的能力

    7、学习一线大厂的架构

    面试:

    滴滴 2020年面试真题:

    redis的对象类型有哪些?以及底层的数据结构(有序集合 hash)?

    头条 2020年面试真题:

    zset的底层是用什么数据结构实现的。

  • 相关阅读:
    [转]只有程序员才能看懂的幽默
    论安防集成管理平台规范标准建设的重要性和必要性
    视频集成技术演进与创新实践
    (转)jQuery中Ajax事件beforesend及各参数含义
    (转)如何打一手好Log
    marquee标签
    如何学习Git,如何使用Git
    学习vue
    python安装教程
    Jmeter压力测试(入门篇)
  • 原文地址:https://www.cnblogs.com/xiaohaigegede/p/14091729.html
Copyright © 2011-2022 走看看