- 博客(17)
- 收藏
- 关注
原创 kv存储(hash)
kv存储底层有多种数据结构的存储方法(rbtree、array、list、hash等),下面我以hash为例子简单介绍kv存储底层有多种数据结构的存储方法(rbtree、array、list、hash等),下面我以hash为例子简单介绍源码已经上传,大家可以参照学习哈希算法通过将键(Key)映射到固定大小的哈希值,直接生成存储地址索引。采用哈希算法生成索引,将键信息映射到NAND闪存或高速缓存的具体位置,大幅缩短了数据查找时间。这种设计避免了传统遍历查询的低效性,实现O(1)时间复杂度的数据访问。
2025-04-09 11:09:04
294
原创 基于 libevent 的高性能组件
基于 libevent 的详细组件使用范例代码,涵盖定时器、TCP 服务器/客户端、信号处理等核心功能,并附带关键代码解释
2025-04-07 11:30:20
310
原创 基于 libevent 的多线程服务端和客户端实现方案
以下是一个基于 libevent 的多线程服务端和客户端实现方案,结合线程池技术实现高并发处理
2025-04-07 10:27:57
309
原创 UDP可靠传输
确认与重传是可靠传输的基石,其核心逻辑是通过序列号标记数据包,接收方返回ACK确认,发送方通过超时未确认触发重传。发送ACK确认:构造ACK包(ack=接收的seq+数据长度),通过UDP返回给发送方。序列号(seq):递增的唯一标识,用于检测丢包、乱序(例:从1开始递增)。确认号(ack):接收方通过ack告知发送方已成功接收的序列号。标志位(flag):区分数据包(DATA)和确认包(ACK)。维护发送队列:缓存已发送但未确认的数据包(用于超时重传)。数据内容(data):实际传输的载荷。
2025-04-05 11:45:41
298
原创 RabbitMQ源码直接使用
对于多个算法,每个算法需要不同个数CPU时,要么将每个算法单独做成一个项目,独立会话;具体怎么做可以查我的博客《多进程下设置CPU亲核性》理论上所有模式可以简化看成广播模式,具体要用哪个模式,就改然后在路由处添加不一样的筛选条件;注释非常详细,自己弄来跑就可以,环境是centos7,且docker部署了MQ,Rabbitmq支持百万并发是没有问题的;信息传递不及时导致溢出队列的最大消息量,MQ会主动删掉最老的消息,这种情况要设置一个队列专门存放。1、RabbitMQ有多种模式,如何选择呢?
2025-04-04 19:26:49
574
原创 多进程下设置CPU亲核性
用户代码通过getpid()获取当前进程ID,结合cpu_set_t设置CPU亲和性。在多进程场景中,若每个进程独立调用此代码(例如父进程创建子进程后,子进程自行设置亲和性),则能实现多进程的核绑定。父进程可在fork()子进程后,通过exec系列函数启动子进程并传递不同的g_code_set值,实现差异化核心绑定。需通过sysconf(_SC_NPROCESSORS_CONF)获取系统实际CPU核心数,避免g_code_set包含无效值。继承性控制:默认情况下,子进程会继承父进程的CPU亲和性。
2025-04-04 19:25:04
143
原创 【设计模式】—五大创建型之原型模式
预先创建并缓存原型对象,避免重复初始化高成本资源(如加载模型、读取配置文件)。默认拷贝构造函数执行浅拷贝,若对象包含指针或动态资源,需手动实现深拷贝。Concrete Prototype(具体原型):实现克隆方法,复制自身。Prototype(原型接口):声明克隆方法(如 clone())。原型模式:通过复制现有对象创建新对象,适合对象创建成本高的场景。场景:游戏中的敌人角色复制,每个敌人有位置、血量、技能列表(需深拷贝)。Client(客户端):通过克隆原型对象创建新实例。
2025-04-03 15:42:22
780
原创 【设计模式】—五大创建型之工厂模式
工厂模式是创建型设计模式,用于封装对象的创建逻辑,将实例化过程与客户端代码解耦。根据场景复杂度,工厂模式分为三种:简单工厂、工厂方法和抽象工厂。答:每个具体工厂(如WindowsFactory)生产一族配套产品(按钮、文本框等),确保这些产品设计风格一致。核心思想:定义一个工厂类,根据输入参数创建不同产品对象。核心思想:提供一个接口,创建相关或依赖对象的家族,而无需指定具体类。答:工厂模式:解耦客户端与具体类,符合依赖倒置原则。缺点:违反开闭原则,新增产品需修改工厂类。
2025-04-03 13:12:14
954
原创 【设计模式】—五大创建型之观察者模式
观察者模式是行为型设计模式,用于在对象间建立一对多的依赖关系,当一个对象(Subject,主题)状态变化时,自动通知所有依赖它的对象(Observer,观察者)。答:使用 std::weak_ptr 代替裸指针或 std::shared_ptr,并在通知前检查 weak_ptr 是否有效(通过 lock() 方法)。使用 std::weak_ptr 避免循环引用(主题持有观察者的弱引用,观察者可能持有主题的强引用)。场景:天气预报系统,气象站(主题)通知多个显示设备(观察者)更新温度。
2025-04-03 11:45:55
730
原创 【设计模式】—五大创建型之策略模式
C++中可通过模板参数或 std::function 实现“鸭子类型”,只要策略对象满足特定接口即可(如拥有 applyDiscount 方法)。答:使用智能指针(如 std::unique_ptr 或 std::shared_ptr)自动管理资源,避免手动 delete。使用 std::unique_ptr 持有策略对象,避免手动 new/delete,防止内存泄漏。上下文(Context):持有一个策略对象的引用,通过接口调用算法。答:策略模式:通过组合(持有策略对象)实现算法扩展,运行时动态切换。
2025-04-03 11:38:05
875
原创 【设计模式】—五大创建型之单例模式
静态内部类SingletonHolder在首次调用getInstance()时加载,触发实例创建。双重检查(两次if (instance == null))避免多线程重复创建。特点:实例在第一次使用时创建,延迟加载节省资源,但需处理线程安全。缺点:锁粒度粗,每次调用getInstance()都需同步。特点:类加载时立即初始化实例,线程安全但可能浪费资源。缺点:无论是否使用都会创建实例,可能占用内存。特点:延迟加载 + 线程安全,无锁实现高性能。优化:减少锁的粒度,仅在第一次创建时同步。
2025-04-03 11:13:23
298
原创 C++11 六大核心特性深度解析
新增 unordered_map、unordered_set 等,基于哈希表实现,查询时间复杂度降至 O(1),适用于高频键值访问场景(如缓存系统)。提供 memory_order_relaxed、memory_order_seq_cst 等选项,平衡性能与一致性需求。独占所有权,禁止拷贝(可通过 std::move 转移),适用于资源独占场景(如文件句柄)。共享所有权,通过引用计数实现自动释放,需注意循环引用问题(结合 weak_ptr 解决)。// 哈希表存储词频。
2025-04-02 14:41:19
644
原创 哈希去重深度解析
在分布式系统中,传统哈希取模算法(hash(key) % N)存在致命缺陷:节点增减导致大量数据重定位,引发缓存雪崩。示例:在Memcached集群中,若新增节点Server4,仅需迁移Server3到Server4之间的数据,而非全量迁移。原理:通过位数组和多个哈希函数表示集合,查询时若所有哈希位均为1则可能存在(允许误判),否则一定不存在。哈希环:将哈希空间映射为环形结构(0~2^32-1),节点与数据均通过哈希函数映射到环上。优势:空间效率极高(1亿数据仅需12MB内存),适合海量数据去重。
2025-04-02 14:17:45
909
原创 红黑树、B树、B+树深度解析及应用场景
红黑树、B树、B+树的设计哲学体现了计算机科学中时空权衡的核心思想:红黑树以内存效率优先,B/B+树以磁盘I/O优化为纲。关键区别总结:树高与I/O优化:B/B+树通过多叉结构显著降低树高(例如1亿数据下,红黑树高约30,B+树仅需3-4层),减少磁盘访问次数。核心原理:非叶子节点仅存储键(不存数据),所有数据存储在叶子节点,且叶子节点通过链表连接形成有序序列。数据存储位置:B+树将数据集中在叶子节点,非叶节点仅存储索引,提升节点利用率。内存操作优先红黑树(高频增删),磁盘存储必选B+树(I/O优化)。
2025-04-02 14:07:22
414
原创 报错:/usr/bin/ld: 找不到 -lclntsh: 没有那个文件或目录
在使用gcc编译器时,链接动态库 -locci -lclntsh,设置环境变量不行之后,又加了(-L库文件路径),变成-locci可以,但是-lclntsh不行
2023-02-08 19:25:05
3208
原创 解决vi: symbol lookup error: /lib/x86_64-linux-gnu/libpython3.10.so.1.0: undefined symbol: XML_SetHash
解决报错----vim/vi: symbol lookup error: /lib/x86_64-linux-gnu/libpython3.10.so.1.0: undefined symbol: XML_SetHash
2023-02-08 17:29:00
2315
客户端与服务端通信,如何找到服务端
2023-01-26
关于#Qt中QTimer::singleShot()#的问题
2022-09-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人