一.引言 有序集合在日常开发中相当常见,比如做排名等相关的功能,肯定要用到排序的功能,那么常见底层实现有很多种: 数组 :不便于元素的插入和删除 链表 :查询效率低,需要遍历所有元素 平衡树OR红黑树 :性能高但是实现复杂 所以这里就引出了本文的主角: 跳跃表 :性能堪比红黑树,但实现相对简单得多 二.跳跃表简介 首先,学习跳跃链表我们先要明白一个概念: 有序链表:所有元素以递增或者递减方式有序排列的数据结构,每个节点都有指向下个节点的next指针,最后一个节点的next指针指向NULL. PS…
一.初识redis 定义 Redis是一个开源的Key-Value数据库,通常被称为数据结构服务器,其值可以是多种常见的数据格式,且读写性能极高,且所有操作都是原子性的. 高性能的主要原因 1.基于内存存储,命令几乎都是操作内存,内存的读写速度非常快. 2.单线程处理网络请求,避免不必要的上下文切换,同时不存在加锁/释放锁等同步操作.[PS:正在运行的redis server肯定不止一个线程,但只有一个线程来处理网络请求] 3.使用多路I/O复用模型(select.poll.epoll),可以高…
一.引言 上一节我们总结了跳跃表的知识,我们知道了有序数组可以用跳跃表实现,也可以用压缩列表来实现,这一篇文章我们来总结一下压缩列表相关的知识. 二.压缩列表简介 定义:压缩列表 ziplist 本质上是一个字节数组,每个元素可以是一个字节数组或一个整数. PS:Redis的有序集合.散列.列表都直接或间接用到了压缩列表. 三.压缩列表的存储结构 我们通过一张图来直观地分析压缩列表的结构: zlbytes :压缩列表的字节长度,占4个字节,因此压缩列表最多有232-1个字节 . zltail :…
一.引言 学习之前先了解几个概念: SDS定义:简单动态字符串,Redis的基本数据结构之一,用于储存字符串和整型数据. 二进制安全:C语言中用"\0"表示字符串结束,如果字符串本身就有这个字符,那么此字符串会被阶段,此时为非二进制安全:若通过某种机制保证读写字符串时不损害其内容,则称为二进制安全. 字节对齐:字节按照一定规则在空间上排列.(不按规则排列有些架构CPU进行访问时会引起错误或者影响读取效率). PS:如4字节对齐的意思是4字节为一个对齐单位,1字节对齐的意思就是连续存放.…
概述在我的上一篇文章:Spring源码分析(三):DispatcherServlet的设计与实现中提到,DispatcherServlet在接收到客户端请求时,会遍历DispatcherServlet自身维护的一个HandlerMapping集合,来查找该请求对应的请求处理器,然后由该请求处理器来执行请求处理. 在SpringMVC中,DispatcherServlet通过HandlerMapping接口来定义请求和请求处理器之间的映射关系,通过HandlerAdapter接口来提供一个模板实现…
一个普通的 Zepto 源码分析(三) - event 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块,以及 event . ajax . form . ie ,其中 event 模块也是比较重要的模块之一,我们可以借助它提供的方法实现事件的监听.自定义事件的派发等.最重要的是,做了一些事件的兼容,简化了我们的编码. event 模块 这个模块代码行数要比 ajax 的少.还是老套路,对函数调用关系做…
Abstract 本系列是关于Koa框架的文章,目前关注版本是Koa v1.主要分为以下几个方面: Koa源码分析(一) -- generator Koa源码分析(二) -- co的实现 Koa源码分析(三) -- middleware机制的实现 Koa概括 Koa是基于generator与co之上的新一代中间件框架,它的优势主要集中在以下几个方面 中间件机制 封装了request/response, context对象 使用yield,方便异步编程进行流程控制 在忽略同步或者异步的情况下,使用…
一 : 术在内而道在外 Android系统的精髓在源码之外,而不在源码之内,代码只是一种实现人类思想的工具,仅此而已...... 近来发现很多关于Android文章都是以源码的方向入手分析Android这个系统,最终结果可想而知,甚是凄惨.正所谓自信满满的来,一脸懵逼的走. 想要真正了解Android系统,首先一定要站在更高的层次上做分析,以设计者的角度去思考.如果让你去设计Android系统,你会如何设计?而并不是把已经设计好的源码当做学习Android系统的切入点,源码只是让你进一步去验证自…
Backbone源码分析(一) Backbone源码分析(二) Backbone中主要的业务逻辑位于Model和Collection,上一篇介绍了Backbone中的Model,这篇文章中将主要探讨Collection的源码. 让我们先来看一下Collection的构造函数: // Create a new **Collection**, perhaps to contain a specific type of `model`. // If a `comparator` is specifie…
一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(一)简述 这一节我们来看看一个Spark RPC中的运用实例--Spark的心跳机制.当然这次主要还是从代码的角度来看. 我们首先要知道Spark的心跳有什么用.心跳是分布式技术的基础,我们知道在Spark中,是有一个Master和众多的Worker,那么Master怎么知道每…