美文网首页
应用类问题

应用类问题

作者: 伊凡的一天 | 来源:发表于2019-07-12 21:43 被阅读0次

1. Hash算法

Hash函数是将输入键(key)转换为一个确定输出的函数。这个输出成为散列值。一个Hash函数拥有以下约束:

  • 如果输出的散列值不同,那么输入key一定不同。
  • 两个不同的key有可能输出的散列值相同,这被称为散列碰撞。

常见的Hash函数有MD5, SHA-1等。
一个完美的Hash函数,我们希望达到以下效果:

如果key1 != key2,那么hash (key1) != hash(key2)

然而在真实世界中,想要找到一个不同key对应不同散列值的Hash函数是不可能的。两个不同的key对应的散列值相同,这被称为散列碰撞或散列冲突。

常见的散列冲突解决方法有两种:开放寻址发和链表法。

比较经典的开放寻址法包括:线性探测法,二次探测法和双重检测法。

  • 线性探测法:当计算出的hash值对应的散列表位置被占用时,自动寻找下一个位置,直到找到第一个未被占用的位置为止。
  • 二次探测法:当计算出的hash值对应的散列表位置被占用时,不是直接一个一个往下遍历,而是按照二次幂的步长向下或向上探测。也就是说,它探测的下标序列为:hash(key)+0,hash(key)+1^2 或hash(key)-1^2 ,hash(key)+2^2 或 hash(key)-2^2
  • 双重探测法:所谓双重散列,意思就是不仅要使用一个散列函数,而是使用一组散列函数 hash1(key),hash2(key),hash3(key)。。。。。。先用第一个散列函数,如果计算得到的存储位置已经被占用,再用第二个散列函数,依次类推,直到找到空闲的存储位置。

事实上,不管采用哪种探测方法,只要当散列表中空闲位置不多的时候,散列冲突的概率就会大大提高。为了尽可能保证散列表的操作效率,一般情况下,需要尽可能保证散列表中有一定比例的空闲槽位。一般使用加载因子(load factor)来表示空位的多少。加载因子是表示 Hsah 表中元素的填满的程度,若加载因子越大,则填满的元素越多,这样的好处是:空间利用率高了,但冲突的机会加大了。反之,加载因子越小,填满的元素越少,好处是冲突的机会减小了,但空间浪费多了。

load factor的应用可以参考Java中HashMap的实现,HashMap中load factor默认值为0.75。

而链表法是一种更加常用的散列冲突解决办法,相比开放寻址法,它要简单很多。在散列表中,每个位置对应一条链表,所有散列值相同的元素都放到相同位置对应的链表中。这也是Java中HashMap的实现方式。

2. 一致性Hash

3. 消息队列实现最终一致性

4. 常见负载均衡算法

相关文章

  • 应用类问题

    1. Hash算法 Hash函数是将输入键(key)转换为一个确定输出的函数。这个输出成为散列值。一个Hash函数...

  • 【引导工具】焦点讨论法

    前期准备—充分预热—O类问题—R类问题—I类问题—D类问题—回顾—结果应用 所有问题指向发起人关注的焦点目标; 引...

  • Android性能优化(二)图片优化

    图片的加载和显示是每个商业App都避免不了的问题,对于图片重度依赖类App,例如壁纸类应用,图片社交类应用...

  • 应用层(一)

    每个应用层协议都是为了解决某一类应用问题的,而问题的解决需要多个应用进程之间的通信和协同工作来完成的。应用层的具体...

  • VUE直传阿里云OSS

    安装 oss 模块:npm install ali-oss js 工具类 时间工具类 实际应用 跨域问题解决

  • Java包的定义与导入

    Java应用是由若干个类组成的。但是从逻辑上考虑,这些类解决的问题都是不同的。比如某些类解决了数据库访问问题,某些...

  • Swift开源项目精选

    目录: 轮子 工具类 存储类 网络类 界面类 框架类 车子 示例应用 完整应用 轮子 工具类 存储类 网络类 图片...

  • css基础——2017.2.21

    css伪类 :link 伪类将应用于未被访问过的链接。IE6不兼容,解决此问题,直接使用a标签 :hover 伪类...

  • 【Netty官方文档翻译】前言

    Preface前言 The Problem 问题   现在,我们使用通用的应用或者类库来解决互相之间的通讯问题。举...

  • 【Netty官方文档翻译】User guide for 4.x

    Preface前言 The Problem 问题   现在,我们使用通用的应用或者类库来解决互相之间的通讯问题。举...

网友评论

      本文标题:应用类问题

      本文链接:https://www.haomeiwen.com/subject/tynekctx.html