hash

总结1.20

折月煮酒 提交于 2020-02-18 16:48:29
什么是ACID ACID,指数据库事务正确执行的四个基本要素的缩写。 包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。 原子性,指的是整个事务是一个独立的单元,要么操作成功,要么操作不成功 一致性,事务必须要保持和系统处于一致的状态(如果不一致会导致系统其它的方出现bug) 隔离性,事务是并发控制机制,他们的交错也需要一致性,隔离隐藏,一般通过悲观或者乐观锁实现 耐久性,一个成功的事务将永久性地改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中 cookie和session区别 区别: 1、数据存放位置不同: cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、安全程度不同: cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。 3、性能使用程度不同: session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。 4

Map源码会问哪些面试题

爷,独闯天下 提交于 2020-02-18 15:20:34
1 Map 整体数据结构类问题 1.1 说一说 HashMap 底层数据结构 答:HashMap 底层是数组 + 链表 + 红黑树的数据结构,数组的主要作用是方便快速查找,时间复杂度是 O(1),默认大小是 16,数组的下标索引是通过 key 的 hashcode 计算出来的,数组元素叫做 Node,当多个 key 的 hashcode 一致,但 key 值不同时,单个 Node 就会转化成链表,链表的查询复杂度是 O(n),当链表的长度大于等于 8 并且数组的大小超过 64 时,链表就会转化成红黑树,红黑树的查询复杂度是 O(log(n)),简单来说,最坏的查询次数相当于红黑树的最大深度。 1.2 HashMap、TreeMap、LinkedHashMap 三者有啥相同点,有啥不同点? 答:相同点: 三者在特定的情况下,都会使用红黑树; 底层的 hash 算法相同; 在迭代的过程中,如果 Map 的数据结构被改动,都会报 ConcurrentModificationException 的错误。 不同点: HashMap 数据结构以数组为主,查询非常快,TreeMap 数据结构以红黑树为主,利用了红黑树左小右大的特点,可以实现 key 的排序,LinkedHashMap 在 HashMap 的基础上增加了链表的结构,实现了插入顺序访问和最少访问删除两种策略; 由于三种 Map

collection(list,set,map)、HashMap

断了今生、忘了曾经 提交于 2020-02-18 02:53:39
collection里面有什么子类?(list和set是实现了collection接口的。)   List: 1.可以允许重复的对象(可重复,有序集合)。 2.可以插入多个null元素。 3.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。 ———————————————— Set: 1.不允许重复对象(不可重复,无序集合)。 2 只允许一个 null 元素 3.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序集合。而且可以重复。 ———————————————— Map: 1.Map不是collection的子接口或者实现类。Map是一个接口。 2.不允许重复元素。 3. Map 里你可以拥有随意个 null 值但只能有一个 null (key)键。 4. Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable

HashMap 实现原理及源码分析

偶尔善良 提交于 2020-02-18 00:43:39
HashMap是JDK中非常重要的容器,采用 数组 + 链表 的方式实现,理想情况下能支持 O(1) 时间复杂度的增删改查操作。本文将由浅入深地讲解哈希表的实现原理,并对HashMap的部分源码进行分析。 1. 从数组说起 数组应该是我们最先学习的数据结构,它是内存中一块连续的存储单元,因此计算机可以根据数组起始地址、元素长度和下标,计算出我们要访问的元素的地址,时间复杂度为 O(1) 。 以下代码定义了一个简单的 Student 类,假如我们要存储 20 个 Student 对象,我们希望能够在 O(1) 时间复杂度内,根据 studentID 找到相应的对象。 public class Student { public int studentID; public String name; public Student(int studentID, String name) { this.studentID = studentID; this.name = name; } } 如果我们要存储的 20 个 Student 对象的 studentID 刚好就是从 0 到 19,我们自然可以新建一个长度为 20 的 Student 数组 students,然后将对象的 studentID 作为数组下标,放到对应的 slot 里面,如下图所示。这样的话,如果我们想找 studentID

浅析分布式系统中的一致性哈希算法

点点圈 提交于 2020-02-17 08:59:42
分布式系统与高并发高可用 浅析分布式系统中的一致性哈希算法 通过本文将了解到以下内容: 分布式系统的简单概念和基本作用 分布式系统常用负载均衡策略 普通哈希取模策略优缺点 一致性哈希算法的定义和思想 一致性哈希的基本过程 Redis集群中一致性哈希的实现 1.分布式系统的基本概念 分布式系统与高并发高可用 当今高并发和海量数据处理等场景越来越多,实现服务应用的高可用、易扩展、短延时等成为必然。 在此情况下分布式系统应运而生,互联网的场景无外乎存储和计算,因此分布式系统可以简单地分为: 分布式存储 分布式计算 所谓分布式系统就是一批计算机组合起来共同对外提供服务,对于用户来说具体有多少规模的计算机完成了这次请求,完全是无感知的。分布式系统中的计算机越多,意味着计算和存储资源等也就越多,能够处理的并发访问量也就越大,响应速度也越快。 如图为简单整体架构图: 大前端 主要实现了服务应用对应的所有流量的接入,比如xyz域名下可能有N个子服务,这一层涉及很多网络流量的处理,也很有挑战,像百度的BFE(百度统一前端)接入了百度的大部分流量,每日转发1万亿次,峰值QPS1000w。 中间层 完成了各个服务的调度和分发,粒度相比大前端接入层更细致一些,这一层实现了用户的无感知体验,可以简单理解为反向代理层。 业务层 完成了数据存储、数据计算、数据缓存等,各个业务环节高度解耦,并且基于集群化来实现。

HashMap和ConcurrentHashMap的原理和实现

微笑、不失礼 提交于 2020-02-16 18:33:31
一.线程不安全的HashMap 多线程环境下,使用HashMap进行put操作会引起死循环(jdk1.7 Entry链表形成环形数据结构),导致CPU利用率接近100%。 结构:数组 table[]+链表entry<k,v> put 对key做hash 默认初始化数组长度 16 加载因子 0.75 扩容 大于16*0.75时 rehash hash冲突:链表解决。原来的entry移出去,后来的进来,然后next指向原来的entry 线程不安全:多个线程扩容时闭环,引起死循环。 为什么会形成闭环: 线程1 A>B>C 线程2 B>A倒置。会变成A>B>A 解决: 1.8 红黑树:数组+链表+红黑树。阈值:8 hashmap扩容过程: 传入新的容量 初始化新的Entry数组,将数据转移到新的Entry数组里(遍历旧数组,取得每个元素,释放旧数组的引用,重新计算位置) table属性引用新的entry数组 修改阈值 hash算法:取key的hashcode值,高位运算,取模运算 1.8的优化 1.resize时不需要重新计算hash,只要看看原来的hash新增的那个bit是0还是1。0的话索引没变,1的话索引变成原索引加oldcap。找到新数组下标,确定索引位置,增加随机性。 2.不会形成闭环,扩容时不再使用头插法改成尾插法。 二.效率低下的HashTable

Hash

冷暖自知 提交于 2020-02-16 15:32:21
欠一篇 常用Hash函数 分布式的一致性Hash算法算法、环形结构、虚拟节点 来源: https://www.cnblogs.com/wqff-biubiu/p/12316695.html

Java_Map集合接口

♀尐吖头ヾ 提交于 2020-02-16 10:02:31
现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。 Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。 Map 接口的实现类有HashMap、TreeMap、HashTable、Properties等。 Map接口中常用的方法: HashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。 Map接口中的常用方法 : import java.util.HashMap; import java.util.Map; public class TestMap { public static void main(String[] args) { Map<Integer, String> m1 = new HashMap<Integer, String>(); Map<Integer, String> m2 = new HashMap<Integer, String>(); m1.put(1, "张三"); m1.put(2, "李四"); m1.put(3, "王五"); m2.put(1, "一

第二篇 Nosql讲解之windows下memcache的安装(一)

感情迁移 提交于 2020-02-16 08:51:26
memcached基本概念 1.Memcached是danga的一个项目,最早是LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用。 官方网站:www.danga.com 和memcached.org 2.Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 2.Memcache工作原理 首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。 注意,这些对象并不是持久的,服务停止之后

哈希是什么?为什么哈希存取比较快?

随声附和 提交于 2020-02-16 07:56:35
  不太恰当的比喻:     XM 指的是“小明”,也指的是“小萌”     XM就是哈希值,小明和小萌就是拥有同一个哈希值的,存在同一个链表的元素。     想要获取小萌,首先使用hashcode获取到这两个人,然后再通过equals获取到小萌。   个人理解      哈希表其实就是一个一维数组,而数组中的每一个元素都是一个单向链表而已。这样的数据结构 解决了数组的增删元素的不足和链表的查询效率的不足 。    数组是存在连续的存储空间,而链表的存储空间不连续 --------------------------------   哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。   哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。   哈希通过将单向数学函数(有时称为“哈希算法”