首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

金九银十,收下这份 Java String 面试题

String & StringBuilder & StringBuffer 区别 3.1 效率 String 是不可变每次操作都会创建新变量,而另外两个是可变,不需要创建新变量;另外,StringBuffer...String 对象内存分配 6.1 "abc" 与 new String("abc") 区别 "abc" => 虚拟机首先检查 运行时常量池 中是否存在 "abc",如果存在则直接返回,否则在字符串常量池中创建...在类加载时期,Class 文件常量池会被加载进运行时常量池。在调用 new 字节码指令时,虚拟机会在堆中新建一个对象,并且引用常量池中 "abc" 对象。...原因 2 - 31 是一个质数: 质数是只能被 1 和自身整除数,使用质数作为乘法因子获得,在将来进行取模时,得到相同 index 概率会降低,即降低了哈希冲突概率。...原因 3 - 31 是一个不大不小质数: 质数太小容易造成聚集在一个小区间,提供冲突概率;质数过大容易造成超出 int 取值范围(上溢),丢失部分数值信息,冲突概率不稳定。

86510

Java面试题总结--(1)Java中equals方法和hashCode方法异同

同理,在这之前,先说说JavagetClass()方法: getClass() 返回此 Object 运行时类: 以下是个人简单理解: 1. getClass()返回Class类型对象。...也就是说,它通过把关键码映射到表中一个位置来访问记录,以加快查找速度。这个映射函数叫做函数,存放记录数组叫做列表。...hashcode,如果table中没有该hashcode,它就可以直接存进去,不用再进行任何比较了;如果存在该hashcode, 就调用它equals方法与新元素进行比较,相同的话就不存了,不相同就其它地址...映射成一个数值,这个数值称作为。...所以如果你hashCode方法依赖于对象中易变数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同码”。

47310
您找到你想要的搜索结果了吗?
是的
没有找到

Redis 字典

1.3 冲突 函数具有确定性和不确定性。 确定性:哈希不同,那么哈希原始输入也就不同。即:key1=key2,那么hash(key1)=hash(key2)。...不确定性:同一个很有可能对应多个不同原始输入。即:key1≠key2,hash(key1)=hash(key2)。...1.3.2 链表法 链表法是一种比较常用冲突解决办法,Redis使用就是链表法来解决冲突。链表法原理是:如果遇到冲突,他就会在原地址新建一个空间,然后以链表结点形式插入到该空间。...rehashidx记录了rehash目前进度,如果目前没有进行rehash,为-1。...操作 时间复杂度 创建一个新字典 将给定键值对添加到字典内 O(1) 将给定键值对添加到字典内,如果键存在则替换之 O(1) 返回给定键 O(1) 从字典中随机返回一个键值对 O

1.7K84

Redis:09---Hash对象

一些特点: 存储多个键值对之间映射,并且键值对不允许重复 在某一个固定key中,其对应value中field也不允许重复 存储既可以是字符串也可以是数字 用户同样可以对存储数字执行自增操作或自减操作...因为“文档、行、”这三者都允许用户同时访问或修改一个或多个域 注意:哈希类型中映射关系叫作field-value,注意这里value是指field对应,不是键对应,请注意value在不同上下文作用...当field个数超过512,内部编码也会由ziplist变为hashtable 四、字符串和比较与选择 优点 最大优势,只需要在数据库里面创建一个键,就可以把任意多字段和存储到里面...,键过期时间是针对整个键,用户无法为不同字段设置不 同过期时间,所以当一个键过期时候,他包含所有字段和都会被删除。...如果多个数据项在逻辑上属于同一组或者同一类,那么应该优先考虑使用键 五、使用场景 短网址生成程序 此时我们可以根据该短链接查询到具体源网址,并记录点击次数 ?

91220

Python八种数据类型

# 也就是说,它通过把关键码映射到表中一个位置来访问记录,以加快查找速度。这个映射函数叫做函数,存放记录数组叫做列表。”...# 字典本质也是一个数组,但其索引是键经过函数处理后得到函数目的是使键均匀地分布在列表中, # 并且可以在内存中以O(1)时间复杂度进行寻址,从而实现快速查找和修改。...# **列表中函数设计困难在于将数据均匀分布在列表中,从而尽量减少碰撞和冲突。 # # 字典如何添加和查询?...# **添加:**Python 调用内部函数,将键(Key)作为参数进行转换,得到一个唯一地址(这也就解释了为什么给相同键赋值会直接覆盖原因, # 因为相同键转换后地址是一样),然后将...**查询:**使用函数将key转换为数组下标,并定位到数组对应位置获取value。 # # 字典为什么是无序

3.2K30

HashMap常见面试题_java面试题大汇总

计算过程如下所示: 说明: key.hashCode();返回也就是hashcode,假设随便生成一个。 n表示数组初始化长度是16。...Hash,一般翻译为“”,也有直接音译为“哈希”,这就是把任意长度输入通过算法,变换成固定长度输出,该输出就是(哈希);这种转换是一种压缩映射,也就是,空间通常远小于输入空间...,不同输入可能会列成相同输出,所以不可能从来唯一的确定输入。...简单说就是一种将任意长度消息压缩到某一固定长度消息摘要函数。 所有函数都有如下一个基本特性**:根据同一函数计算出如果不同,那么输入肯定也不同。...但是,根据同一函数计算出如果相同,输入不一定相同**。 什么是哈希冲突? 当两个不同输入,根据同一函数计算出相同现象,我们就把它叫做碰撞(哈希碰撞)。

34320

数据结构思维 第十一章 `HashMap`

例如,假设每次n超过k时候,我们都使k加倍;在这种情况下,每个映射条目的平均数量将小于1,并且几乎总是小于10,只要函数能够很好地展开键。...如果每个子映射条目数是不变,我们可以在常数时间内搜索一个子映射。并且计算函数通常是常数时间(它可能取决于键大小,但不取决于键数量)。这使得Map核心方法, put和get时间不变。...这个实现另一个限制是,如果我们得到了一个而不是一个键时,那么是不会有帮助:containsValue是线性,因为它必须搜索所有的子映射。...它会在子映射上调用remove,根据是否找到了键,它可以改变子映射大小,也可能不会改变它大小。但是无论哪种方式,我们将子映射新大小加到size,所以最终size是正确。...图11.2:本章中 UML 类图 不同关系由不同箭头表示: 实心箭头表示 HAS-A 关系。例如,每个MyBetterMap实例包含多个MyLinearMap实例,因此它们通过实线箭头连接。

39610

数据结构(9)-- 哈希表 unordered_map

哈希表(Hash table,也叫列表),是根据关键码(Key value)而直接进行访问数据结构。也就是说,它通过把关键码映射到表中一个位置来访问记录,以加快查找速度。...这个映射函数叫做函数,存放记录数组叫做列表。...(或者:把任意长度输入(又叫做预映射, pre-image),通过算法,变换成固定长度输出,该输出就是。...这种转换是一种压缩映射,也就是,空间通常远小于输入空间,不同输入可能会列成相同输出,而不可能从来唯一的确定输入。...解决方案也很简单: 1、提高哈希函数复杂度,想办法加入随机性(相当于每次使用一个不同哈希函数),避免被人轻易捕捉到弱点 2、不要用开链表法存储冲突数据,采用“再法”,并且使用不同哈希函数再

94511

Redis选13亿个Key,4个field还是1亿个Key,13亿*4个field?

什么是哈希 哈希hash又称为、杂凑等,是将任意长度输入通过算法变换为固定长度输出,最终输出也就是哈希。这种转换是一种压缩映射。...也就是说,空间通常要远小于输入控件,不同输入可能会列成相同输出,所以不可能通过来确定唯一输入。 ?...Redis中哈希类型与Java中HashMap相似,都是一组键值对集合,并且支持单独对其中一个键进行增删改查操作。 ? 为什么哈希更适合存储对象呢? ?...Redis中哈希是一个string类型field和value映射表,它增删操作复杂度平均为O(1)。为什么平均是O(1)呢?因为哈希内部结构包含zipmap和hash两种。...若字段是哈希表中新建字段且字段设置成功则返回1,若哈希表中域字段已经存在且旧被新覆盖成功则返回0。

3.5K21

MySQL数据类型之TEXT与BLOB

BLOB和TEXT会引起一些性能问题,特别是执行了大量删除操作时。 删除操作会在数据库表中留下很大“空洞”,以后要填入这些“空洞”记录在插入性能上会有影响。...简单来说,合成索引就是根据大文本字段内容建立一个,并把这个存储在单独数据中,接下来就可以通过检索找到数据行了。...可以使用MD5()函数生成,也可以使用SHA1()或CRC32(),或者使用自己应用程序逻辑来计算。也可以使用SHA1()或CRC32(),或者使用自己应用程序逻辑来计算。...数值型可以很高效率地存储。如果算法生成字符串带有尾部空格,就不要把他们存储在CHAR或VARCHAR中,他们会收到尾部去除影响。合成索引对于那些BLOB或TEXT数据特别有用。...如果要查询context为“beijingbeijing”记录,则可以通过相应来查询 ? 这种做法只能用于精确匹配,在一定程序上减少了I/O,从而提高了查询效率。

3.5K30

列表(哈希表)

是一种支持常数时间执行插入,删除,查找技术,但是不支持排序操作。因此,FindMax,FindMin诸如此类操作都将不支持。看到这里,我相信大家都明白我们为什么需要列表了吧。...通常是通过函数来把关键字映射到0到TableSize - 1这个范围之内单元之中。理想情况下,函数应该运算简单,并且能保证不会在同一个单元出现两个关键字。...既然我们无法保证理想实现(理想情形下,应该保证任意两个不同关键字映射到两个不同单元),那么无论选择什么样函数都需要解决冲突发生。其中最简单两种是分离链接法和开放定址法。...但是这样可能会花费很多时间。其中最坏情形是,函数设计不行,导致元素占据位置是聚集在一块,这样导致每次都会试探很多次,才能最终放入。...显然这个操作代价非常高。运行时间O(N)。表大小2N。好一点是,再不会经常发生。当然,到底什么时候再这是一个很重要问题。再实现比较简单。

69720

哈希函数如何工作 ?

让我们采用一个更大网格并对 1,000 个随机生成字符串进行哈希处理。您可以单击网格来对一组新随机输入进行,网格将以动画方式向您显示每个输入被并放置在网格上。...我们通过最小化了这个搜索步骤,这也是 murmur3 进行速度优化原因。哈希函数越快,我们找到合适存储桶进行搜索速度就越快,哈希映射整体速度就越快。 这也是为什么减少碰撞如此重要原因。...与一颗种子发生碰撞物体在使用另一颗种子时不应发生碰撞。编程语言通常会在进程启动时生成一个随机数用作种子,因此每次运行程序时种子都是不同。作为一个不知道种子坏人,我现在不可能可靠地造成伤害。...如果您仔细观察上面的可视化和之前可视化,您会发现它们是被相同,但它们产生不同。这意味着,如果您使用一个种子一个,并且希望将来能够与它进行比较,则需要确保使用相同种子。...哈希函数范围很广,在这篇文章中我们实际上只触及了表面。我们还没有讨论加密与非加密,我们只触及了函数数千个用例中一个,并且我们还没有讨论现代函数实际上是如何工作

19130

HashMap你真的了解吗?

它重新哈希码以防止来自键错误函数将所有数据放在内部数组同一索引(存储桶)中 它采用重新哈希码并使用数组长度(减 1)对其进行位掩码。此操作确保索引不能大于数组大小。...由于您修改后密钥与旧哈希(存储在条目中)哈希不同,因此映射不会在链表中找到该条目。 这是Java中一个具体示例。...但是,如果您不注意密钥函数,您可能会得到非常缓慢 put() 和 get() 调用。put() 和 get 良好性能取决于将数据重新分区到内部数组(桶)不同索引中。...如果我使用以下函数运行相同代码,它提供了更好重新分区 现在需要2 秒。 我希望你意识到函数重要性。...为此,您需要避免冲突。String Object 是一个很好键,因为它具有很好函数。整数也很好,因为它们哈希码是它们自己

2.2K30

mass哈希游戏系统开发技术方案丨竞猜;幸运;大小等不同模式分析

密码学中哈希函数具有如下特性:   (1)不管是消息长度是多少,都是有固定长度;   (2)相同消息,是相同,不相同消息,是不相同;   (3)可以通过消息计算出,...但是无法通过计算出消息;   (4)不管消息长度有多长,都要在短时间内完成计算;   如果不同消息,计算出了相同,就产生了冲突,或者称为碰撞。   ...哈希函数可以应用于:   (1)密码保护:系统中不再记录用户密码,而是记录;   (2)云盘秒传;   (3)文件校验:判断是否为同一文件。   满足哈希特性函数都称为哈希函数。...剩余位数64位(512-448)记录了消息原始长度,处理后消息长度为M=512*(N+1)。    (2)设置初始。   ...通过MD5运算规则,就不难理解,为什么原始文件发生一点变化,都会导致MD5不同了   Hash,generally translated as hash or transliterated as

44910

一次性搞清楚equals和hashCode

5、最后需要注意是,equals 方法参数类型是Object,不要写错! public int hashCode() 这个方法返回对象码,返回是int类型码。...如果2个对象通过equals调用后返回是true,那么这个2个对象hashCode方法也必须返回同样int型码 如果2个对象通过equals返回false,他们hashCode返回允许相同...也是说,参与equals函数字段,也必须都参与hashCode 计算。 合乎情理是:同一个类中不同对象返回不同码。...在某个运行时期间,只要对象(字段)变化不会影响equals方法决策结果,那么,在这个期间,无论调用多少次hashCode,都必须返回同一个码。...通过equals调用返回true 2个对象hashCode一定一样。 通过equasl返回false 2个对象码不需要不同,也就是他们hashCode方法返回允许出现相同情况。

59310

哈希表总结

我们整个过程主要分为两步 (1)通过函数计算记录地址,并按此地址存储该记录。就好比麻辣鱼,我们就让它在川菜区,糖醋鱼,我们就让它在鲁菜区。...但是我们需要注意是,无论什么记录我们都需要用同一个函数计算地址,然后再存储。 (2)当我们查找时,我们通过同样函数计算记录地址,按此地址访问该记录。...所以为什么我们可以使用随机数作为它偏移量。 下面我们再来看一下其他函数处理冲突方法 再哈希法 这个方法其实也特别简单,利用不同哈希函数再求得一个哈希地址,直到不出现冲突为止。...,NULLKEY列表初始,然后我们如果查找成功就返回索引,如果不存在该元素就返回元素不存在。...1.函数是否均匀 我们在上文说到,可以通过设计函数减少冲突,但是由于不同函数对一组关键字产生冲突可能性是相同,因此我们可以不考虑它对平均查找长度影响。

65820

学生物女朋友都能看懂哈希表总结!

我们整个过程主要分为两步 (1)通过函数计算记录地址,并按此地址存储该记录。就好比麻辣鱼,我们就让它在川菜区,糖醋鱼,我们就让它在鲁菜区。...但是我们需要注意是,无论什么记录我们都需要用同一个函数计算地址,然后再存储。 (2)当我们查找时,我们通过同样函数计算记录地址,按此地址访问该记录。...所以为什么我们可以使用随机数作为它偏移量。 下面我们再来看一下其他函数处理冲突方法 再哈希法 这个方法其实也特别简单,利用不同哈希函数再求得一个哈希地址,直到不出现冲突为止。...,NULLKEY列表初始,然后我们如果查找成功就返回索引,如果不存在该元素就返回元素不存在。...1.函数是否均匀 我们在上文说到,可以通过设计函数减少冲突,但是由于不同函数对一组关键字产生冲突可能性是相同,因此我们可以不考虑它对平均查找长度影响。

75620

【C++】哈希

但奇怪是,我们在哈希表每个位置数据中还增加了一个 state 变量来记录该位置状态,这是为什么呢?...同时,由于线性探测法发生哈希冲突概率较高,导致数据插入与搜索效率较低,所以我们学习重点不在这里,所以我们也就不再去它实现迭代器了,这些内容我们会在下文中去实现。...2、开节点结构 由于开不同冲突之间不会互相影响,所以开不再需要 state 变量来记录每个下表位置状态;同时,因为开每个下标位置链接都是一个哈希桶,所以 vector 中每个元素都是一个节点指针...}; } 3、开插入删除与查找 开插入 开插入前部分和闭一样,根据 key 与哈希表大小得到映射下标位置,与闭不同是,由于哈希表中每个下标位置都是一个哈希桶,即一个单链表...和闭不同是,开删除不能直接通过查找函数返回来进行删除,因为单链表在删除节点时还需要改变父节点指向,让其指向目标节点下一个节点,所以我们需要通过遍历单链表来进行删除: //删除 bool

1K30

❤️爆肝新一代大数据存储宠儿,梳理了2万字 “超硬核” 文章!❤️

如果表只存在范围分区,不存在分区,则每个分区恰好对应一个tablet。     初始化分区在表创建时期被指定为一组分区边界和拆分点。对于每个边界,都会在表中创建分区对于。...有必要的话,可以根据分区去更加有效删除数据 3.2 分区     分区是根据hash把行数据分配到某个buckets里面。如果只是一层hash,则一个bucket对应一个tablet。...分区对在tablet之间随机写入非常有效,这样有助于缓解tablet热点问题和数据分布不均匀问题。 如何选取,这样计算hash可以保证数据均匀分配到bucket里面去?...零个或多个分区级别可以和可选范围分区级别组合。多级分区与单个分区区别是增加了约束条件,多级分区不能相同。...(存在多级分区时候,各个分区计算使用不能一样)如果使用正确,多级分区可以保留各个分区类型好处,同时减少每个分区类型缺点。多级分区表中tablet总数是每个级别中分区数乘积。

81440
领券