hash函数

布隆过滤器、一致性hash

匿名 (未验证) 提交于 2019-12-03 00:13:02
hash 布隆过滤器:失误率 布隆过滤器:比特类型的数组 0 1 hash函数的大小不影响布隆过滤器的大小 m hash函数的个数:k=ln2*(m/n)=0.7*(m/n); 错误率:(1-e^(-n*k/m))^k; 一致性hash(负载均衡) 减少数据迁移的代价。加机器和减机器。 当服务器很少的时候,环可能不均匀。 一开始均匀,后期增删机器,数据迁移后就不均匀了。 解决方案 虚拟节点 给m1 复制1000个虚拟节点同理 m2 m3.。。。建立一个路由表,路由表对应虚拟节点和物理节点。 由增加机器后,仍然是均分的虚拟节点。增加节点同时增加同量的1000个虚拟节点。这1000个是 来源:博客园 作者: 博闻强识不是我 链接:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11631962.html

i春秋Hash

匿名 (未验证) 提交于 2019-12-03 00:03:02
打开题目页面是一个超链接 先查看源码得到一段信息 没什么,这只是超链接跳转的信息 点击跳转到下一个界面 123 123 key url key!=123 flag 然后后面是一段隐藏的信息,需要查看源码才看得到 <!--$hash=md5($sign.$key);the length of $sign is 8 hash sign.key md5 sign 8 key hash key=123&hash=f9109d5f83921a551cf859f853afe7bb hash md5 kkkkkk01123 8 kkkkkk01 sign=kkkkkk01 key=123 key=111 sign kkkkkk01 hash=md5 kkkkkk01111 adaa10eef3a02754da03b5a3a6f40ae632 md5 url http://dfa8409734bd4b7da26d1f5e95d40371a6c316b7a5d14cf8.changame.ichunqiu.com/index.php?key=111&hash=adaa10eef3a02754da03b5a3a6f40ae6 访问之,提示我们next step is Gu3ss_m3_h2h2.php 不多说,直接访问试试 php 看看源码有没有什么遗漏的 (。。。。。应该没有) 审计代码 demo

分库分表与负载均衡的一致性hash算法

匿名 (未验证) 提交于 2019-12-02 23:52:01
首先了解一下什么是一致性哈希,这里推荐一篇博客: http://blog.csdn.net/cywosp/article/details/23397179/ 在分布式应用中,扩容和收缩是一个半自动化的过程,在此期间,应用基本上是可用的,所以不能发生大规模动荡的意外,为了最小化潜在的影响,这时候需要使用到一致性hash算法实现负载均衡和分库分表,hash路由算法在分布式场景下极为重要的角色。 consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛; 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ; hash(object)%N 一切都运行正常,再考虑如下的两种情况; 1 一个 cache 服务器 m down 掉了(在实际应用中必须要考虑这种情况),这样所有映射到 cache m 的对象都会失效,怎么办,需要把 cache m 从 cache 中移除,这时候 cache 是 N-1 台,映射公式变成了 hash(object)%(N-1) ; 2

flask 密码加密 视频资料

匿名 (未验证) 提交于 2019-12-02 23:47:01
https://www.bilibili.com/video/av53870541/?p=33 通过在数据模型中定义函数来实现加密 from werkzeug . security import generate_password_hash , check_password_hashclass User ( db . Modle ):    id = db . Column ( db . Integer , primary_key = True , autoincrement = True )    name = db . Colmn ( db . String ( 20 ), unique = True )   password_hash = db . Colmn ( db . String ( 20 ))    @property    def password ( self ):     print ( 'xxxx随意' )   @password . setter    def passowrd ( self , password ):     self . password_hash = generate_password_hash ( password )   def check_password ( self , password ):     return

面试题(转)

混江龙づ霸主 提交于 2019-12-02 23:11:54
微软 面试题 :地球上有多少个满足这样条件的点 站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点? 北极点满足这个条件。 距离南极点很近的一个圈上也满足这个条件。在这个圆圈上,向南走一公里,然后向东走一公里恰好绕南极点一圈,向北走一公里回到原点。 所以地球上总共有无数点满足这个条件。 谷歌面试题:判断一个自然数是否是某个数的平方 判断一个自然数是否是某个数的平方。当然不能使用开方运算。 假设待判断的数字是 N。 方法1: 遍历从1到N的数字,求取平方并和N进行比较。 如果平方小于N,则继续遍历;如果等于N,则成功退出;如果大于N,则失败退出。 复杂度为O(n^0.5)。 方法2: 使用二分查找法,对1到N之间的数字进行判断。 复杂度为O(log n)。 方法3: 由于 (n+1)^2 =n^2 + 2n + 1, = ... = 1 + (2*1 + 1) + (2*2 + 1) + ... + (2*n + 1) 注意到这些项构成了等差数列(每项之间相差2)。 所以我们可以比较 N-1, N - 1 - 3, N - 1 - 3 - 5 ... 和0的关系。 如果大于0,则继续减;如果等于0,则成功退出;如果小于 0,则失败退出。 复杂度为O(n^0.5)。不过方法3中利用加减法替换掉了方法1中的乘法

源码分析:HashMap

匿名 (未验证) 提交于 2019-12-02 22:56:40
写在前面 作为以key/value存储方式的集合,HashMap可以说起到了极大的作用。因此关于HashMap,我们将着重使用比较大的篇幅。 接下来会用到的几个常量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; static final int MAXIMUM_CAPACITY = 1 << 30; static final int MAXIMUM_CAPACITY = 1 << 30; 先简单过一下,HashMap的思路 我们put的key/value会被封装成一个叫做Entry的内部类。这个Entry由一个变量名为table数组管理。我们每次put会通过一系列的计算,计算一个table数组的index下标用于放Entry,如果出现hash冲突使用链表法解决。get时,可以理解是一个反向的put过程。 put(K key, V value) 1、初始化 if ( table == EMPTY_TABLE ) { //threshold变量在初始化的时候使用DEFAULT_INITIAL_CAPACITY(16)初始化 inflateTable ( threshold ); } private void inflateTable ( int toSize ) { //计算我们table数组应该有多大(初始化是16) int

数据结构预算法 python实现 hash表

匿名 (未验证) 提交于 2019-12-02 22:51:30
哈希表 为了快速的定位到某个元素,科学家给每个元素一个“逻辑下标”,然后直接找到元素,哈希表就是这种实现,他通过一个哈希函数来计算一个元素应该放在哪,当然对于特定的某个元素,哈希函数每次计算的下标必须一样才可以,而且范围不能超出给定数组的长度。 假如我们有一个数组t 包含m=13个元素,我们可以定义一个简单的哈喜函数h(key) = key%m 这里取模函数使得h(key)的结果不会超出数组长度的下标,分别插入以下元素 756,431,142,579,226,903,338 哈希冲突:经过hash算法计算,发生了下标的冲突,该下标下的当前值,会有一个链接,指向发生冲突的值(链接法),缺点,如果冲突比较多,查找时就不是O(1)的时间复杂度 还有一种叫 开放寻址法:他的基本思想是当一个槽被占用的时候,采用一种方式来来找到下一个槽,根据找下一槽的方式不同,分为: 线性探查:当槽被占用,找下一个可用的槽 二次探查:当槽被占用,以二次作为偏移量 双重散列:重新计算哈希结果 python使用的是二次探查法,他的意思就是如果遇到冲突,我们就在原始的位置上增加i 平方 装载因子: 已经被使用的槽数比上总槽数 当空间不够用时,我们就定义一个负载因子的概念,比如插入了8个元素,总槽数为13,就是8/13约等于0.62 。通常来说当负载因子小于0.8,就要新开辟空间,并且重新进行散列 冲哈喜

mysql

匿名 (未验证) 提交于 2019-12-02 22:06:11
索引相关 关于MySQL的索引,曾经进行过一次总结,文章链接在这里 Mysql索引原理及其优化. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAA和AAAAB的索引没有相关性.

Java集合之ConcurrentHashMap

匿名 (未验证) 提交于 2019-12-02 21:53:52
本文转载自 dreamcatcher-cx 作者,出处: ConcurrentHashMap实现原理及源码分析 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现,ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7). JDK1.8之前ConcurrentHashMap采用的分段锁,JDK1.8之后采用CAS算法(不做分析) 先来看看ConcurrentHashMap是个啥结构。 在JDK1.7中,ConcurrentHashMap的数据结构是由一个Segment数组和多个HashEntry组成,结构如下图所示: 众所周知,哈希表是中非常高效,复杂度为O(1)的数据结构,在Java开发中,我们最常见到最频繁使用的就是HashMap和HashTable,但是在线程竞争激烈的并发场景中使用都不够合理。    HashMap :先说HashMap,HashMap是 线程不安全 的,在并发环境下,可能会形成环 状链表 (扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的。    HashTable :

hashmap源码分析学习笔记

孤街浪徒 提交于 2019-12-02 20:17:20
如果对java7和java8的hashmap源码分析, 1.可查看博客: https://www.cnblogs.com/jajian/p/10385063.html#autoid-0-0-0 , 2.如果对文字类无感,可以观看视频: https://www.bilibili.com/video/av71408100?from=search&seid=805805466626935035 以下是自我学习总结笔记 1.java7 , HashMap结构(数组+链表) 2.“模”运算的消耗比较大,采用哈希值进行位移的操作方式 static int indexFor(int h, int length) { return h & (length-1); } 3.哈希冲突(如果两个不同对象的 hashCode 相同,此情况即称为哈希冲突),会单独产生单链结构(如果hash值一般,在相同的数组会创建一个单链存放) 4.hashmap源码三个参数表示 capacity :当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。 loadFactor :负载因子,默认为0.75(加载因子是表示Hash表中元素的填满的程度。)。 threshold:扩容的阈值,等于 capacity * loadFactor。 5.源码分析 public V put(K key, V value