hash函数

面试(二)

陌路散爱 提交于 2020-01-09 18:51:32
4.介绍一下java的数据结构,然后手写一个栈的类 主要可以分为两类: 1)Java中定义了一个接口collection,用来存储一个元素集合 2)另一种是定义了映射(map)用来存储键/值对。 Collection接口为线性表(list)、向量(vector)、栈(stack)、队列(queue)、优先队列(priority queue)以及规则集(set)定义了通用的操作 Set(规则集) 用于存储一组不重复的元素。 重要的实现类: HashSet 。 List(线性表) 用于存储一个有序元素的集合(允许重复)。两个重要的实现类: ArrayList (数组线性表类)和 LinkedList (链表类)。 Stack(栈) 用于存储采用后进先出方式处理的对象。 Queue(队列) 用于采用先进先出方式处理的对象。不过队列用双向链表 LinkedList 实现更好 PriorityQueue用于存储按照优先级顺序处理的对象。 map(映射)是一个存储“键/值对”集合的容器对象。键很像索引,在List中,索引是整数;在Map中,键可以是任意类型的对象。映射中不能有重复的键,每个键都对于一个值。 线性表、栈、队列、优先队列: ArrayList、LinkedList 都是线程不安全的 。 vector是线程安全的。 ArrayList :用数组存储元素。这个数组是动态创建的

java集合问题篇

此生再无相见时 提交于 2020-01-09 04:02:14
java集合问题篇 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? hashmap如何扩容 hashmap是如何解决hash冲突的 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? 首先判断数组是否为空(为空就初始化数组),不空----》key是否为空(空:将null插入到数组的0号位置),不空—》根据key算出hash值,再根据hash值算出将要插入的数组的下标【(数组长度-1)&hashcode】,如果该位置有元素了,则将该元素和要插入的元素进行比较(先比较hash,再比较key,相同,则覆盖其value,不同,则jdk1.7使用头插法将添加的元素加入到链表头,然后将链表下移。jdk1.8是使用尾插法。【1.8由于使用了红黑树,总是要遍历链表的,所以直接将其放入尾部】)插入元素后,计数变量:size++ hashmap如何扩容 初始化hashmap的时候会有默认的数组长度16,加载因子3/4,此时阈值为16 3/4=12; 当元素超过12个时就会进行扩容。新数组长度是16 2=32,阈值是32*3/4=24

mysql 索引优化 btree hash rtree

天涯浪子 提交于 2020-01-09 01:20:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一:mysql里目前只支持4种索引分别是:b-tree,full-text,hash以及r-tree索引 b-tree索引应该是mysql里最广泛的索引的了,除了archive,基本所有的存储引擎都支持它. 1.b-tree在myisam里的形式和innodb稍有不同 在innodb里面有两种形态:其一是primary key形态其leaf node里存放的是数据.而且不仅存放了索引键的数据,还存放了其他字段的数据.其二是secondary index,其leaf node和普通的b-tree差不多,只是还存放了指向主键的信息. 而在myisam里,主键和其他的并没有太大区别.不过和innodb不太一样的地方是,在myisam里,leaf node里存放的不是主键的信息,存的是指向数据文件里的对应数据行的信息. 2.hash索引,目前我所知道的就只有memory和ndb cluster支持这种索引. hash索引由于其结构,所以在每次查询的时候直接一次到位不行b-tree那样,一点点的前进,所以hash索引的效率高于b-tree.但hash也有缺点,主要如下: (1)由于存放的是hash值,所以仅支持<=>以及in操作. (2)hash索引无法通过操作索引来排序,这是因为存放的时候经过hash计算

浅谈hashCode

只谈情不闲聊 提交于 2020-01-09 00:55:18
《Java编程思想》中对hashCode的描述: 设计hashCode()时最重要的因素就是:无论何时,对同一个对象调用hashCode()都应该产生同样的值。如果将一个对象用put()添加进HashMap时产生一个hashCdoe()值,而用get()取出时却产生了另一个hashCode()值,那么就无法重新取得该对象了。所以如果你的hashCode()方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同的散列码,相当于产生了一个不同的键。 1. HashCode源代码分析 1.1 Object中的HashCode源代码 public int hashCode() { int lockWord = shadow$_monitor_; final int lockWordStateMask = 0xC0000000; // Top 2 bits. final int lockWordStateHash = 0x80000000; // Top 2 bits are value 2 (kStateHash). final int lockWordHashMask = 0x0FFFFFFF; // Low 28 bits. if ((lockWord & lockWordStateMask) == lockWordStateHash

Map的底层实现原理

走远了吗. 提交于 2020-01-08 09:58:28
一,前言 1.1,概述 ​ 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V)。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接口。 Collection 中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 Map 中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键(K)可以找对所对应的值(V)。 Collection 中的集合称为单列集合, Map 中的集合称为双列集合。 需要注意的是, Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。 ​ 通过查看Map接口描述,看到Map有多个子类,这里我们主要讲解常用的HashMap集合、LinkedHashMap集合。 HashMap<K,V> :存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 LinkedHashMap<K,V> :HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法

深度解密Go语言之map

自作多情 提交于 2020-01-08 08:51:52
目录 什么是 map 为什么要用 map map 的底层如何实现 map 内存模型 创建 map 哈希函数 key 定位过程 map 的两种 get 操作 如何进行扩容 map 的遍历 map 的赋值 map 的删除 map 进阶 可以边遍历边删除吗 key 可以是 float 型吗? 总结 参考资料 这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。 我要说明的是,这里对 map 的基本用法涉及比较少,我相信可以通过阅读其他入门书籍了解。本文的内容比较深入,但是由于我画了各种图,我相信很容易看懂。 什么是 map 维基百科里这样定义 map: In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection. 简单说明一下:在计算机科学里,被称为相关数组、map、符号表或者字典,是由一组 <key, value>

python——内置函数和lambda匿名函数

夙愿已清 提交于 2020-01-08 06:33:03
内置函数 接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了 68个内置函数 。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数。这么多函数,我们该从何学起呢? Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() ord() sum() bytearray() filter() issubclass() pow() super() bytes() float() iter() print() tuple() callable() format() len() property() type() chr() frozenset() list()

python基础 内置函数

北城余情 提交于 2020-01-08 04:29:20
内置函数 接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了 68个内置函数 。 内置函数 abs() divmod() input() open() staticmethod() all() enumerate() int() ord() str() any() eval() isinstance() pow() sum() basestring() execfile() issubclass() print() super() bin() file() iter() property() tuple() bool() filter() len() range() type() bytearray() float() list() raw_input() unichr() callable() format() locals() reduce() unicode() chr() frozenset() long() reload() vars() classmethod() getattr() map() repr() xrange() cmp() globals() max() reversed() zip() compile() hasattr() memoryview() round() __import__

内置函数

一笑奈何 提交于 2020-01-08 02:37:52
python中的68个内置函数 。 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() ord() sum() bytearray() filter() issubclass() pow() super() bytes() float() iter() print() tuple() callable() format() len() property() type() chr() frozenset() list() range() vars() classmethod() getattr() locals() repr() zip() compile() globals() map() reversed() __import__() complex() hasattr() max() round() delattr() hash() memoryview() set()

蚂蚁金服服务注册中心数据分片和同步方案详解 | SOFARegistry 解析

那年仲夏 提交于 2020-01-07 05:26:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> SOFAStack( S calable O pen F inancial A rchitecture Stack) 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFARegistry 是蚂蚁金服开源的具有承载海量服务注册和订阅能力的、高可用的服务注册中心,在支付宝/蚂蚁金服的业务发展驱动下,近十年间已经演进至第五代。 本文为《剖析 | SOFARegistry 框架》第四篇, 本篇作者明不二 。《剖析 | SOFARegistry 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:RegistryLab/ ,文末包含往期系列文章。 GitHub 地址: https://gitee.com/sofastack/sofa-registry 概述 在前面的章节中我们已经提到,SOFARegistry 与其他服务发现领域的产品相比,最大的不同点在于支持海量数据。本章即将讲述 SOFARegistry 在支撑海量数据上的一些特性。 本文将从如下几个方面进行讲解: DataServer 总体架构 :对 SOFARegistry 中支持海量数据的总体架构做一个简述,讲解数据分片和同步方案中所涉及到的关键技术点;