hash

PHP 创建区块链

徘徊边缘 提交于 2020-02-04 06:51:20
前话 提供一个思路帮助你了解区块链基础运作,文本并不是一个完整的区块链,希望你能举一反三 源码: https://github.com/ar414-com/phpblock 记住 区块链是一个 不可变的、有序的 被称为块的记录链。它们可以包含交易、文件或任何您喜欢的数据。但重要的是,他们用哈希 一起被链接在一起 需要准备什么? php5.6+ 1、Block 区块 块是什么样的? 每个块都有一个 索引 ,一个 时间戳(Unix时间戳) ,一个 事务列表 , 一个 校验(工作证明算法生成的证明) 和 前一个块的哈希 。 block = { 'index' : 2 , 'timestamp' : 1506057125 , 'transactions' : [ { 'sender' : "8527147fe1f5426f9dd545de4b27ee00" , 'recipient' : "a77f5cdfa2934df3954a5c7c7da5df1f" , 'amount' : 5 , } ] , 'proof' : 324984774000 , 'previous_hash' : "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" } 在这一点上,一个 区块链 的概念应该是明显的 -

Vue项目--路由模式推荐hash,history有坑需后端配合。

妖精的绣舞 提交于 2020-02-04 06:51:01
// 在路由的配置文件router.js中: let router = new VueRouter({ // routes:数组 // routes:routes routes, mode:'hash', // 哈希模式,推荐使用 // mode:'history', //历史模式返回有坑,需后端配合,不推荐使用 scrollBehavior () { // return 期望滚动到哪个的位置 return {x:0,y:0} // 切换路由时都默认滚动到顶部 } }) 来源: CSDN 作者: qq_38969618 链接: https://blog.csdn.net/qq_38969618/article/details/104156974

How to create a tsv file on Google Storage Transfer

安稳与你 提交于 2020-02-04 05:34:48
问题 Google provide a great documentation for their cloud services, but unfortunately nobody can understand the content. Their explanation always jumping and leave people with no clue to accomplish even a simple task. Creating tsv file should be a simple task. I tried to follow everything in this page Creating a URL List but stuck with "unknown error" log. Unknown error means I never know what I am doing wrong. They gave example downloaded file md5-test a string "Storage Transfer MD5 Test" =>

leetcode 128 Longest Consecutive Sequence

ぃ、小莉子 提交于 2020-02-04 04:16:48
给定一个数组,找出里面连续的子序列的最长长度。例如: Given [100, 4, 200, 1, 3, 2] , The longest consecutive elements sequence is [1, 2, 3, 4] . Return its length: 4 . 思路一:排序,然后count一下就ok了,但都懒得试了,一点技术含量都没有。 思路二:利用counting sort,但是实现的时候哈哈,果然,数太大,需要的空间太大,failed。 思路三:利用hash,c++11里用unordered_map或者set,然后想采用first和second的方法,如果hash插入后再里面自动排序了,那么用一个迭代器遍历就行了。虽然还是不行。但是起码学会了如何遍历一个hash表。就是用迭代器。 思路四:终于行的通了。还是利用hash将数组映射后,遍历一边给定的数组,对每个数在hash里面找left和right就是多1或者少1,然后记录个数cnt,返回最大的cnt即可。注意的是每次遍历需要对hash表的存在的要删除,这样的话才可能是O(n), 否则会出现n方的,例如:[1,2,3,4]的时候对每个都要找就是n方了,但是如果每次找的时候删除就可以做到O(n)了。 代码如下: class Solution { public: int longestConsecutive

Perl: Numerical sort of arrays in a hash

♀尐吖头ヾ 提交于 2020-02-04 04:14:25
问题 I have a hash of arrays, and I need to sort it first on the keys, and then on the values in the array. Here's my simple code: my %myhash; $line1 = "col1 0.999"; $line2 = "col2 0.899"; $line3 = "col2 -0.52"; $line4 = "col2 1.52"; #insert into hash @cols = split(" ", $line1); push @{ $myhash{$cols[0]} }, $line1; @cols = split(" ", $line2); push @{ $myhash{$cols[0]} }, $line2; @cols = split(" ", $line3); push @{ $myhash{$cols[0]} }, $line3; @cols = split(" ", $line4); push @{ $myhash{$cols[0]} }

一致性哈希

与世无争的帅哥 提交于 2020-02-04 02:19:44
定义 一致性哈希是当机器数量增加或者减少的时候,最大限度的减少重新映射的数量。 实现 hash环 我们可以预先定义0-n个bucket,n通常取值2^32-1。为方便我们取值1000 对于实际存在的机器数量,假设是3个,我们根据机器的信息,随意hash到某一些bucket,注意不可以指定,分配过程是不可以有状态的,要不然重启就完犊子了,比如对ip做hash。假设分配到的bucket是100, 100, 500,那么对于<=10 || > 500,就访问机器1,>10 && <= 100就访问机器2,>100 && <= 500就访问机器3.这就是构成了一个环。 对于增加机器的情况:假设增加的机器在bucket 200处,那么机器2的部分数据会落到bucket 200,机器1 和机器3不受影响 对于宕机的情况,假设机器2挂了。那么机器2的数据会落到机器3上,机器1不受影响 数据倾斜&虚拟节点 假设机器1,2,3的ip hash到的节点非常临近,那么大部分数据就会落到机器1,这不是一个good idea,于是我们可以引入虚拟节点。 一个机器ip不再只生成一个节点,可以通过ip#1, ip#2…ip#32生成32个虚拟节点,这样落到这32个节点的数据都会访问这台机器,不可能这么多节点都是临近的。完美解决!只是每次增减机器的时候要同时变动多个节点而已。 来源: CSDN 作者:

Redis集群

守給你的承諾、 提交于 2020-02-04 02:14:38
原理 一致性hash算法:对2的32次方取模,将哈希值空间组织成虚拟的圆环 比如通过各个节点的主机编号进行hash,这样就能确定每台服务器在hash环上的位置 数据存储 将数据key使用相同的函数进行hash计算出hash值,如果一个新的数据通过hash运算在某个段上,通过顺时针行进,遇到的第一个节点,就是该数据要保存的节点。 某节点宕机 如图,nodeC宕机,原来要保存在C上的数据将顺时针保存在节点D中。 损失的数据就是该宕机节点逆时针所到达的上一个节点,即节点B和节点C中的数据将会损失。 新增节点 如图,新增节点X,此时节点ABD不受影响,对象C要保存的节点变为顺时针离得最近的节点X。影响的数据就是新增的X节点到逆时针到上一节点的数据,即X到B的数据。这些被影响的数据需要重新定位到X。 Hash环数据倾斜问题 数据倾斜就是,在服务器节点较少的时候,节点分布不均匀,大部分数据都存储在某一个节点中,导致该节点宕机,如上图中节点A 解决数据倾斜方法 引入虚拟节点 对每一个节点计算多个hash值,对每个算出的hash值位置放置虚拟节点,如在服务器IP后加标识编号。如上图将AB节点分别计算三个hash值,数据节点算法不,虚拟节点添加指针映射指向真实节点。这样节点少时,可以解决数据倾斜问题。 通常将虚拟节点设置为32个或者更大,这样数据分布就能非常均匀。 来源: CSDN 作者:

Java的HashMap

断了今生、忘了曾经 提交于 2020-02-04 01:08:55
HashMap 概述 HashMap是一个 jdk8源码 构造器 有4个构造器: public HashMap() public HashMap(int initialCapacity) public HashMap(int initialCapacity, float loadFactor) public HashMap(Map<? extends K, ? extends V> m) 除了显式设置loadFactor,其他情况都是设置为默认的0.75。 传入另外一个Map需要满足泛型上下界的要求,比如只能由<String,String>转成<Object,Object>。 主要成员变量 Node<K,V>[] table; 哈希表。 Set<Map.Entry<K,V>> entrySet; 用来遍历的Entry集合。 int size; map中元素个数。 int modCount; 源码上说的是结构化修改的次数,关系不大。 int threshold; 阈值,当size大于这个阈值,就要resize final float loadFactor; 加载因子,表示哈希表中元素的密集程度,默认是0.75。 put table 哈希表,就是一个Node数组,而Node是HashMap里一个静态内部类,实现了Map接口里的Entry接口,可以看出Node类其实是一个链表节点

数据结构之HashMap详解(一)

醉酒当歌 提交于 2020-02-03 07:30:03
在之前有一篇博客介绍了HashMap, 数据结构之Hash表(哈希表) 现在对之前的内容做一个补充。 说HashMap之前,看下数组: 数组的优点在于查找速度快,每个区域都是紧挨着的,并且有下标,可以根据下标快速找到要查找的元素。 缺点:增删麻烦,如果在第二个元素后面再添加个元素的话,那么就需要重新建一个数组,填入对应的信息。 链表:每个内存除了存放自身的元素外,还保留下个内存区域的地址, 优点:插入新元素方便,只需要将指针指向新元素,新元素指向原来的下一个指针即可。 缺点:查找速度慢。链表不像数组那样有下标,链表查找元素只能从head结点开始,一个一个向下找。 而散列表则是综合了两者优点于一身的结构: 上面是数组,数组每个区域内是链表。 说到散列表,就应当说哈希,没有哈希,散列表就无法寻址找数据, 哈希 哈希:Hash也称散列、哈希,对应的英文都是Hash,基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出,这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。 Hash特点: 1、hash值不可以反向推导出原始的数据 2、输入的数据的微小变化会得到完全不同的hash值,相同的数据可以得到相同的值。 3、哈希算法的执行效率要高效 4、hash算法的冲突概率要小 hash原理是将输入空间的值映射成hash空间内

字符串Hash-19王祥力

混江龙づ霸主 提交于 2020-02-03 05:18:13
字符串Hash可以理解为,把一个字符串转换为一个整数。 如果我们通过某种方法,将字符串转换为一个整数,就可以便的确定某个字符串是否重复出现过。 Hash方法 给定一个字符串S=s1s2s3…sn S = s_1s_2s_3…s_nS=s 对字母x,我们规定idx(x)=x−′a′+1。 公式: hash[i]=hash[i−1]∗p+id(s[i])。 单Hash方法: 公式: hash[i]=(hash[i−1])∗p+idx(s[i]) % mod 其中p pp和mod modmod均为质数,且有p<mod p < modp<mod。 对于此种Hash方法,将p和mod尽量取大即可,这种情况下,冲突的概率是很低的。 如取p=13,mod=101 p = 13, mod = 101p=13,mod=101,对字符串abc abcabc进行Hash hash[0] = 1 hash[1] = (hash[0] * 13 + 2) % 101 = 15 hash[2] = (hash[1] * 13 + 3) % 101 = 97 双Hash:将一个字符串用不同的mod modmod hash两次,将这两个结果用一个二元组表示,作为Hash结果。 公式:hash1[i]=(hash1[i−1])∗p+idx(s[i]) % mod1 hash2[i]=(hash2[i−1])∗p