记录少时诵诗书

本文探讨了对象创建的工厂模式,包括简单工厂、工厂方法和抽象工厂模式。重点讲解了Redis的底层数据结构,如哈希函数的应用,分析了散列值与数组下标的映射策略,以及如何通过扰动函数减少哈希碰撞。此外,文章介绍了Redis的原子操作,如setnx()和Lua脚本实现的原子性,并解释了Redis的单线程模型和多路复用技术。最后,提到了TCP的SSL/TLS握手过程和HTTP的GET与POST方法的区别。
摘要由CSDN通过智能技术生成
  • 「对象的创建逻辑简单」,通常只需要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脚本可以实现原子操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值