- 博客(28)
- 收藏
- 关注
原创 一文讲懂布隆过滤器(含与bitmap的关系)
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能存在于一个集合中。它的核心思想是利用多个哈希函数和一个位数组(Bitmap)。当要将一个元素添加到布隆过滤器中时,使用多个不同的哈希函数对该元素进行计算,得到多个哈希值。这些哈希值将作为位数组的索引,将对应的位设置为 1。当查询一个元素是否存在时,同样使用这些哈希函数对元素进行计算,得到对应的索引位置,如果这些位置的位都为 1,则认为该元素可能存在;若其中任何一个位置的位为 0,则该元素一定不存在。
2025-01-18 22:02:11
1086
原创 重学设计模式-装饰器模式
例如,对于一个图形绘制系统,有圆形、矩形等基础图形,如果要给图形添加颜色填充、边框样式、阴影效果等多种特性,使用继承的话,就需要为每一种图形与特性的组合创建一个单独的类,很快就会使代码库变得臃肿不堪。这里,基础咖啡就像是被装饰的原始对象,而牛奶、巧克力粉则是装饰器,它们层层包裹原始对象,赋予其新的 “特性”,最终得到一杯满足你独特口味的咖啡。从结果可以清晰地看到,通过不断地使用装饰器,基础咖啡逐步被赋予了新的特性,价格和描述也相应地动态变化,完美地展示了装饰器模式的魅力。现在,来实现具体装饰器。
2025-01-17 21:10:45
471
原创 重学设计模式-单例模式
这种方式利用了 Java 的静态内部类特性,当外部类被加载时,静态内部类不会立即加载,只有在调用 getInstance 方法时,静态内部类才会加载并创建实例,实现了延迟加载。想象一下,在一个大型游戏中,游戏的配置信息类,整个游戏运行期间只需要一份配置数据就够了,没必要创建多个相同的配置实例,这时候单例模式就派上用场了。以操作系统中的任务管理器为例,无论在系统的哪个模块、哪个层级,当需要获取当前系统运行状态信息时,都可以通过任务管理器这个单例的全局访问点来获取,不用四处寻找不同的数据源,方便又可靠。
2025-01-17 21:08:24
1819
原创 重学设计模式-模板模式
模板模式是一种行为型设计模式,它在超类(通常是抽象类)中定义了一个算法的框架或步骤,并将一些步骤的实现延迟到子类中。这种模式允许子类在不改变算法结构的前提下,重新定义算法的特定步骤。模板模式的优点包括:代码复用:通过将公共代码放在抽象类中,子类可以复用父类的代码。扩展性好:可以通过增加新的子类来增加新的行为。封装不变部分,扩展可变部分:模板方法模式把不变的行为搬移到父类中,去除了子类中的重复代码。符合开闭原则:通过子类实现扩展,不需要修改抽象类。
2024-12-28 23:49:00
1162
原创 重学设计模式-责任链模式
责任链模式又称为职责链模式,其核心思想是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在这种模式下,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,因此责任链将请求的发送者和请求的处理者解耦了。责任链模式属于对象行为型模式,它主要由以下几个角色组成:抽象处理者(Handler):定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
2024-12-28 23:41:35
1128
原创 重学设计模式-建造者模式
建造者模式是一种创建型设计模式,它使用多个简单的对象一步一步构建成一个复杂的对象。这种模式的主要目的是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
2024-12-02 20:56:41
781
原创 重学设计模式-工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
工厂模式将目的将创建对象的具体过程屏蔽隔离起来,从而达到更高的灵活性,工厂模式可以分为三类:简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象,并且更具一般性。《设计模式》一书中将工厂模式分为两类:工厂方法模式与抽象工厂模式。将简单工厂模式看为工厂方法模式的一种特例,两者归为一类。
2024-12-02 20:48:01
1495
原创 11.27字节番茄小说后端实习OC面经
本面试题其实就是考察spring的基础,鉴于是字节,所以还是答得详细一点比较好Bean的启动流程是Spring框架中的核心机制之一,它基于依赖注入(Dependency Injection)和控制反转(Inversion of Control)的原则,实现了对象实例的创建、配置、装配及生命周期管理。Bean的启动流程是Spring框架实现依赖注入和控制反转的关键机制之一。它分为容器启动阶段和Bean实例化与初始化阶段。
2024-11-27 23:31:55
891
原创 阿里云VLDB顶会论文在Async-fork在redis中应用解读
这篇论文本身还是非常有含金量的,建议大家去读一下,无论是开发还是内核都有很大的帮助。
2024-11-24 20:27:54
816
原创 一文搞懂一致性哈希(二)
本文主要是代码篇,如果还不了解原理的同学请移步[一文搞懂一致性哈希(一)](https://blog.youkuaiyun.com/m0_73629745/article/details/140008142?spm=1001.2014.3001.5502)
2024-06-27 12:12:50
336
原创 一文搞懂一致性哈希(一)
本系列讨论的话题是一致性哈希,主要分为两篇: - 第一篇:讲解一致性哈希技术原理,以及应用场景 - 第二篇:带大家从0到1实现一致性哈希,相应代码也会开源到github上
2024-06-27 11:48:44
1791
原创 一文讲懂GeoHash(二)
本文是一文讲动GeoHash的第二篇,代码实现篇,主要是代大家从0到1实现GeoHash,代码量不多,大约只有400多行,如果还不太清楚GeoHash的原理,请参考[一文讲懂GeoHash(一)]
2024-06-26 17:49:12
319
原创 4000字详解go语言操作mysql神器sqlx库(一篇文章就会了)
对于很多Java转go,或者刚开始学go的同学来说,会感觉gorm包括database/sql都用不顺手,奇怪的语法以及难理解的返回值,sqlx足以解决一切烦恼(本文默认读者会基础的sql语句)
2024-06-21 15:11:13
1154
3
原创 万字解析raft
分布式主要是为了解决大规模数据的读写问题(这在后续的raft论文中会有一些小问题)对于第二点需要有个补充,我们不可能无上限的增加机器,一是物质上目前的生产力还不可能支持无上限的机器,二是一个集群的节点数量是一定有上限的,超过这个上限一定会对集群造成影响。
2024-06-20 16:27:55
1805
原创 select模式下出现粘包的原因
我们来理解一下这个发送原理,假如说我们服务端是发送端,客户端是接收端,那么我们服务器发送数据后,会先在我们的发送缓冲区等一会,然后会通过网络传输层传给接收端,传到接收端后,数据会先放在接收缓冲区,然后通过recv函数放到dataheader中,然后就传到了我们的客户端。当然要注意我们说的是底层原理,像缓存区并不是你代码中的缓存数组。像这样我们创建了一个4k的缓存数组,像这样的情况下我们用select模式所创建的服务器已经足够一个局域网游戏使用了,当然更高性能的服务器还是不行的。后续会继续更新高性能服务器。
2023-08-28 21:40:40
108
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人