• Ruby中Super向上追溯方法路径

    在方法定义主体中,Super关键字可以在当前执行的方法查找路径的方法中,跳转到下一个高级定义。 1234567891011121314151617module M def Report puts "this is in module...
  • Ruby方法查找

    每当对象接收到消息的时候,预期的结局就是在对象的类或者超类中,再往上追溯,到达Object甚至BasicObject中,或者在混合到类的模块中,执行与消息同名的方法。 如果类和混和后的模块中都定义了相同名称的方法,这种发生混淆的例子,对象最终会选择哪...
  • 一致性哈希算法原理

    参考了该文章进行了该算法原理的学习笔记 一致性哈希算法再分布式系统中得到了广泛的应用,这里以mamcached缓存数据库举例。 mamcached服务器端本身不提供分布式cache的一致性,而是由客户端提供的,具体计算一致性哈希时采用如下步骤: ...
  • 哈希算法(2

    负载均衡常见的负载均衡算法包括轮询、随机、加权轮询等 那么如何实现一个会话粘滞的负载均衡算法。也就是说,需要在同一个客户端,在一次会话中的所有请求路由都同步到同一个服务器上。 最直接的办法就是维护一张客户端IP地址胡总和会话ID与服务器编号的映射关系...
  • 哈希算法

    终于忙完手头的事情再次回归到学习中了,hhh。 哈希算法将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算...
  • 设计哈希表

    哈希列表的查询效率并不能笼统地说成是 O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。 在极端情况下,有些恶意的攻击者,还有可能通过精心构造的数据,使得所...
  • 哈希表(hash table)

    散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。 散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。 通过散列函数把元素的键值(key...
  • 跳表(Skip List)

    如何理解”跳表”对于一个单链表来讲,即便链表中存储的数据是有序的,如果要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,是 O(n)。 原始链表 每两个结点提取一个结点到上一级,我们把抽出来的那一级叫做索引或索...
  • 二分查找(Binary Search)

    二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 二分查找是一种非常高效的查找算法 假设数据大小是 n,每次查找后数据都会缩小为...
  • 排序优化

    选择合适的排序算法 如果对小规模数据进行排序,可以选择时间复杂度是 O(n2) 的算法 如果对大规模数据进行排序,时间复杂度是 O(nlogn) 的算法更加高效。 为了兼顾任意规模数据的排序,一般都会首选时间复杂度是 O(nlogn) 的排序算法来...