记录少时诵诗书

  • 「对象的创建逻辑简单」,通常只需要new一下就可以,此时可以考虑「简单工厂模式」
  • 「对象的创建逻辑很复杂」,需要做各种初始化操作,此时可以考虑使用「工厂方法模式」,将对象创建的复杂逻辑拆分到各个工厂类中,让每个工厂类都不至于过于复杂
  • 「系统中有多于一个产品族」,而每次只使用其中某一产品族,此时使用「抽象工厂模式」
定义一组算法,将每个算法都封装起来,并且使他们之间可以互换

策略模式,可用于替换if else

Redis 底层数据结构的实现原理是什么? - 知乎

面试八股文——Spring篇 - 知乎

哈希函数,返回int型散列值

如果直接拿散列值作为下标访问HashMap主数组的话,考虑到2进制32位带符号的int表值范围从

2147483648-2147483648

散列值与数组长度取模运算

h&(length-1)

低位掩码

与”操作的结果就是散列值的高位全部归零,只保留低位值,用来做数组下标访问

但这时候问题就来了,这样就算我的散列值分布再松散,要是只取最后几位的话,碰撞也会很严重。更要命的是如果散列本身做得不好,分布上成等差数列的漏洞,恰好使最后几个低位呈现规律性重复,就无比蛋疼。

扰动函数

右位移16位,正好是32bit的一半,自己的高半区和低半区做异或,就是为了

混合原始哈希码的高位和低位,以此来加大低位的随机性

。而且混合后的低位掺杂了高位的部分特征,这样高位的信息也被变相保留下来。

从而做到更小的哈希碰撞

选择值31是因为它是奇数素数。如果是偶数且乘法溢出,则信息将丢失,因为乘2等于移位。使用素数的优点不太明显,但它是传统的。31的一个很好的特性是,乘法可以用移位和减法来代替,以获得更好的性能:31*i==(i<<5)-i。现代虚拟机自动进行此类优化。

redis原子操作  setnx() 如果key没有值,则将值设置进去,如果已有值就不做处理,提示失败  锁
                Lua脚本 Redis中某个值是否满足条件,只有满足条件才做这个操作     cas
                为什么Lua脚本可以实现原子操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值