【图解数据结构,Java岗面试题总结

前言

提到MySQL的事务,我相信对MySQL有了解的同学都能聊上几句,无论是面试求职,还是日常开发,MySQL的事务都跟我们息息相关。

而事务的ACID(即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)可以说涵盖了事务的全部知识点,所以,我们不仅要知道ACID是什么,还要了解ACID背后的实现,只有这样,无论在日常开发还是面试求职,都能无往而不利。

为了大家更好的阅读体验,对ACID的深入分析将分为上下两篇。

本篇主要围绕ACID中的I,也就是“隔离性”展开,从基本概念,到隔离性的实现,最后以一个实战案例进行融会贯通。

  • 将单词中每个字母的ASCll码值“进位”相加

  • 再跟哈希表的size求余、取模,作为散列值

比如,英文单词java,我们转化出来的散列值就是下面这样:

hash(“java”)=((“j” - “a”) * 262626 + (“a” - “a”)2626 + (“v” - “a”)*26+ (“a”-“a”)) / 78978

还有很多设计方法,比如直接寻址法、平方取中法、折叠法、随机数法等。hash函数设计的好坏,决定了哈希表冲突的概率大小,也直接决定了哈希表的性能。

无论设计的多么优秀,还是得考虑如何解决散列冲突问题。

[](()3 散列冲突

=====================================================================

[](()3.1 开放寻址法


若出现hash冲突,就重新探测一个空闲位置,将其插入。

最简单的就是

[](()3.1.1 线性探测(Linear Probing)

当我们往散列表中插入数据时,如果某个数据经过散列函数散列之后,存储位置已经被占用了,我们就从当前位置开始,依次往后查找,看是否有空闲位置,直到找到为止。如ThreadLocalMap。

[](()案例
  • 黄块

空闲位置

  • 橙块

已存储数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值