hash

HashTable与LinkedHashMap

て烟熏妆下的殇ゞ 提交于 2020-02-12 13:17:38
HashTable的特点 HashTable继承自Dictionary类,Dictionary 类是一个抽象类,在JDK 1.0中提供用来存储键/值对,作用和Map类相似。 HashTable类中,其数据结构与HashMap是相同的。依然是采用“链地址法”实现的哈希表,保存实际数据的,依然是Entry对象。 Entry<K,V> implements Map.Entry<K,V> { int hash; final K key; V value; Entry<K,V> next; } 和HashMap很类似 不同点: 1、HashTable是线程安全的(synchronized),HashMap线程不安全 2、HashTable是key和value不能为null,而HashMap允许key和value为空。 3、使用的迭代器不同,Hashtable的迭代器(enumerator)。 put方法 put方法的主要逻辑如下: 1. 先获取synchronized锁。 2. put方法不允许null值,如果发现是null,则直接抛出异常(key和value都不能为null)。 3. 计算key的哈希值和index 4. 遍历对应位置的链表,如果发现已经存在相同的hash和key,则更新value,并返回旧值。 5. 如果不存在相同的key的Entry节点,则增加节点。在新增节点时

redis hash

北城以北 提交于 2020-02-12 03:21:50
常用操作: HSET key field value //存储一个哈希表key的键值 HSETNX key field value //存储一个不存在的哈希表key的键值 HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对 HGET key field //获取哈希表key对应的field键值 HMGET key field [field ...] // 批量获取哈希表key中多个field键值 HDEL key field [field...] //删除哈希表中的field键值 HLEN key //返回哈希表key中field的数量 HGETALL key //返回哈希表key中所有的键值 HINCRBY key field increment //为哈希表key中field键的值加上增量increment 来源: https://www.cnblogs.com/lfhphp/p/12297659.html

Java集合常见面试题

江枫思渺然 提交于 2020-02-12 02:36:28
适可而止,见好就收 来源主要是 牛客 的Java实习面经。下面的回答直接背就可以,需要一定的Java基础,适合春招实习的同学,但是我会在每个问题下把有助于理解的博客贴出来。如果发现有问题欢迎私聊我或留言我会在下面更新 Map 1. Map的底层结构 腾讯19年秋招 这个题乍一看没有什么思路(因为Map是个集合,当然也有可能是我记错了),所以我们可以先介绍一下Map然后转到HashMap中 Map是一种使用键值对存储的集合。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。 在整个Map系列中,AbstractMap抽象类实现了Map,SortedMap接口继承了Map。而我们常用的HashMap,HashTable,TreeMap和ConcurrentHashMap有继承了AbstractMap类。 其中,HashTable和ConcurrentHashMap是线程安全的。前者是通过synchronized实现的,后者是通过AQS实现的。其中要注意HashTable不能存空值,HashMap是线程不安全的,key可以为空。TreeMap通过二叉树算法实现有序集合,它实现了SortedMap接口 2. HashMap的原理 阿里17年实习,小米19年秋招本科,滴滴19年秋招本科,网易19年秋招本科

C++-POJ1021-2D-Nim[hash]

心不动则不痛 提交于 2020-02-11 14:24:46
哈希 ,对于 每个点 哈希一次 哈希的方式:该点到联通分量边界(上下左右)的距离和 然后分别对两个图的n个点按hash值排序,判断是否相等即可 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <iostream> 10 #include <algorithm> 11 using namespace std; 12 struct point{int x,y;}p[10001]; 13 int T,W,H,n,flag,a[100][100],hash[2][10001]; 14 int main(){ 15 for(scanf("%d",&T);T--;){ 16 scanf("%d%d%d",&W,&H,&n); 17 memset(hash,0,sizeof(hash)); 18 for(int c=0;c<=1;c++){ 19 memset(a,0,sizeof(a)); 20 for(int i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y),a[p[i].x]

一致性哈希实现负载均衡

丶灬走出姿态 提交于 2020-02-11 01:47:35
一致性哈希实现负载均衡 1 为什么需要哈希算法 解决同一个用户访问服务器是,访问的是不同的服务器的问题 场景:集群造成的session没有同步 当一个用户访问服务器A的时候,该台服务器A会保存这台服务器的session,但是当下次再访问的时候,被负载均衡算法可能算到了不同的服务器B,服务器B中没有用户的session,会要求用户再次登录。 解决: 加入redis,将session存到redis中 Tomcat同步session 一致性哈希算法 2 什么是一致性哈希算法 服务器集群接收到一次请求调用时,可以根据请求的信息,比如客户端的ip地址,或请求路径与请求参数等信息进行哈希,可以得出一个哈希值,特点是对于相同的ip地址,或请求路径和请求参数哈希出来的值是一样的,只要能再增加一个算法,能够把这个哈希值映射成一个服务端ip地址,就可以使用相同的请求(相同的ip地址,或请求路径和请求参数)落到同一服务器上。 因为客户端发起的请求是无穷无尽的(客户端地址不同,请求参数不同等等),所以对于的哈希值也是无穷大的,所以我们不能把所有的哈希值都进行映射到服务端ip上,所有这里需要用到 哈希环 。 3 虚拟节点 解决一个服务器挂掉造成的服务不均匀问题 使得哈希环更加平滑 当时当一台服务器挂掉的话,会造成服务器服务不均匀的情况 会发现,ip3和ip1直接的范围是比较大的,会有更多的请求落到ip1上

【python-leetcode03-滑动窗口法】无重复字符的最大子串

随声附和 提交于 2020-02-10 23:23:33
问题描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 按照惯例,首先是我们的简单版滑动窗口法: class Solution: def lengthOfLongestSubstring(self, s: str) -> int: tmp = 0 #用于记录满足条件得最大值 for i in range(1,len(s)+1):#步长从1到len(s)+1 for j in range(len(s)-i+1):#窗口左端 if len(set(s[j:j+i])) == len(s[j:j+i]):#如果取集合后的长度和原始窗口长度一样,说明这个窗口是不含重复字符的 tmp = max(tmp,i)#更新tmp的值 return tmp #最后返回即可 看下结果,依旧超时,不过呢: 只有一个用例没通过,如果想要把题目做出来

Redis Hash

蓝咒 提交于 2020-02-10 20:14:48
Redis Hash Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。 redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000 OK redis 127.0.0.1:6379> HGETALL w3ckey 1) "name" 2) "redis tutorial" 3) "description" 4) "redis basic commands for caching" 5) "likes" 6) "20" 7) "visitors" 8) "23000" 在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 w3ckey 中。 序号 命令及描述 1 HDEL key field2 [field2] 删除一个或多个哈希表字段 2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。 3 HGET key field

re模块,hashlib模块

对着背影说爱祢 提交于 2020-02-10 16:59:47
import reprint(re.findall('alex','hahahah alex is alex is dsb')) alexprint(re.findall('\w','Aah123 +-_'))  匹配字母数字下划线 \wprint(re.findall('\w\w','Aah123 +-_')) \w\w['Aa','h1','23',]print(re.findall('\w9\w','Aa9h123 aaa9c+-_')) \w9\w['a9h','a9c']print(re.findall('\W','Aah123 +-_'))  匹配非字母数字下划线print(re.findall('\s','Aah\t12\n3 +-_'))  匹配任意空白字符print(re.findall('\S','Aah\t12\n3 +-_'))  匹配任意非空字符print(re.findall('\d','Aah\t12\n3 +-_'))  匹配任意数字print(re.findall('\D','Aah\t12\n3 +-_'))  匹配任意非数字print(re.findall('\w\w\d\d','asfdasdfegon001adfadfegon002asdfxx01 yy02'))print(re.findall('\s','Aah\t12\n3 +-_')

Hash算法(含python实现)

一个人想着一个人 提交于 2020-02-10 07:26:18
1. 简介 哈希(hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。 这种散列变换是一种单向运算,具有 不可逆性 即不能根据散列值还原出输入信息,因此严格意义上讲 Hash算法是一种消息摘要算法 ,不是一种加密算法。常见的hash算法有:SM3、MD5、SHA-1等 。 2. 应用 Hash主要应用在数据结构以及密码学领域。 在不同的应用场景下,hash函数的选择也会有所侧重。比如在管理数据结构时,主要要考虑运算的 快速性 ,并且要保证hash 均匀分布 ;而应用在密码学中就要优先考虑 抗碰撞性 ,避免出现两段不同明文hash值相同的情况发生。 2.1 在密码学领域的应用 在密码学中,Hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。比如一些登陆网站并不会直接明文存储用户密码,存储的是经过hash处理的密码的摘要(hash值),当用户登录时只需要对比输入明文的摘要与数据库存储的摘要是否相同;即使黑客入侵或者维护人员访问数据库也无法获取用户的密码明文,大大提高了安全性。 2.2 在数据结构中的应用 使用Hash算法的数据结构叫做哈希表,也叫散列表,主要是为了提高查询的效率。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数就是hash函数,存放记录的数组叫做哈希表

Hash哈希(一)

眉间皱痕 提交于 2020-02-10 07:26:01
Hash哈希(一)    哈希是大家比较常见一个词语,在编程中也经常用到,但是大多数人都是知其然而不知其所以然,再加上这几天想写一个一致性哈希算法,突然想想对哈希也不是很清楚,所以,抽点时间总结下Hash知识。本文参考了很多博文,感谢大家的无私分享。 基本概念    Hash,一般翻译做“散列”,也有直接音译为“哈希”的。那么哈希函数的是什么样的?大概就是 value = hash(key),我们希望key和value之间是唯一的映射关系。   大家使用的最多的就是哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做哈希函数或散列函数。    实际中的Hash主要有两种应用:加密和压缩。 在加密方面,Hash哈希是把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值,最广泛应用的Hash算法有MD4、MD5、SHA1。 在压缩方面,Hash 哈希 是指把一个大范围映射到一个小范围,往往是为了节省空间,使得数据容易保存。 Hash的特点    主要原理就是把大范围映射到小范围,因此输入范围必须和小范围相当或者比它更小,否则增加冲突。   Hash函数逼近单向函数,所以可以用来对数据进行加密。(单项函数:如果某个函数在给定输入的时候