- 博客(146)
- 资源 (15)
- 收藏
- 关注
原创 消息队列-kafka的操作(三)
本文介绍了如何使用librdkafka库操作Kafka,主要内容包括: librdkafka的安装步骤:通过git克隆源码,执行configure、make和make install进行编译安装。 消费者程序分析: 运行消费者程序需要指定broker地址、消费组ID、再平衡协议和主题 程序结构包含参数解析、关键配置项设置和消息处理循环 关键配置包括bootstrap servers、消费组ID、再平衡协议和偏移量重置策略 生产者程序特点: 采用异步发送机制,使用rd_kafka_producev()函数 消
2026-02-01 11:44:55
694
1
原创 消息队列-kafka的安装(二)
本文详细介绍了Kafka在Linux环境下的安装与基本使用方法。首先需要安装Java环境并配置环境变量,然后下载解压Kafka安装包。启动Kafka前需先配置并启动Zookeeper服务,修改server.properties文件后启动Kafka服务。文章演示了创建Topic、查看Topic列表和属性、发送和消费消息等基本操作,并提供了删除Topic的方法。最后建议通过查看帮助手册获取更多命令使用方法。整个过程包括环境准备、服务配置、基础操作等关键步骤,为Kafka初学者提供了清晰的安装和使用指南。
2026-02-01 11:41:31
608
1
原创 VMware workstation 未能启动 VMware Authorization Service
打开Windows下的服务管理器,然后找到 VMware相关的启动服务,将其打开;后续如果觉得麻烦,就设置为自动。
2026-01-31 18:14:10
84
原创 消息队列-kafka(一)
摘要:Kafka是一种分布式消息队列系统,具有解耦、缓冲、异步通信等特点。其架构包含生产者、消费者、Broker集群、Topic和Partition等核心组件,通过分区和副本机制实现高可用和负载均衡。Kafka支持多种分区策略(轮询、随机、键值等)和消费者组机制,灵活适应点对点和发布/订阅模型。分区分配策略(如Range、RoundRobin等)确保消息均匀分布。Kafka依赖Zookeeper进行元数据管理和故障恢复,适用于大数据处理和实时数据分析场景。(150字)
2026-01-31 11:25:17
1131
原创 消息队列-前言
消息队列(MQ)是一种异步通信中间件,采用队列结构实现FIFO消息传递。它主要用于进程/服务间通信,具有异步处理、流量控制、服务解耦等功能。传统直接调用方式存在强耦合、系统脆弱等问题,MQ通过解耦生产者和消费者来解决这些痛点。MQ包含生产者、消费者、Broker代理等核心组件,支持点对点(任务分发)和发布订阅(事件广播)两种模型。主流产品如RabbitMQ(功能丰富)、Kafka(高吞吐)、RocketMQ(低延迟)各有特点,适用于不同场景。MQ显著提升了系统扩展性、可靠性和性能,是现代分布式系统的重要基础
2026-01-31 11:17:53
555
原创 装饰器模式-结构型
装饰器模式是一种结构型设计模式,允许动态地为对象添加新功能而不改变其结构。该模式通过组合而非继承的方式扩展对象功能,遵循开闭原则和单一职责原则。以星巴克咖啡为例,传统继承方式会导致类爆炸和维护困难,而装饰器模式通过抽象组件、具体组件、抽象装饰器和具体装饰器的层级结构,实现了灵活的功能扩展。应用场景包括游戏角色时装系统等需要动态添加功能的场景。该模式有效解决了类数量爆炸、维护困难等问题,提高了代码的可扩展性和灵活性。
2026-01-25 10:54:14
921
原创 适配器模式-结构型
摘要:适配器模式是一种结构型设计模式,主要用于接口兼容,使原本不兼容的类能够协同工作。它分为三种类型:类适配器(通过继承)、对象适配器(通过组合,最推荐)和接口适配器(简化接口实现)。适配器模式在国产化替代、遗留系统集成等场景中发挥重要作用。文章通过PostgreSQL兼容Oracle、文件系统转云存储等实际案例,展示了三种适配器模式的UML图和C++实现代码,说明了如何通过适配器降低重构成本、提高开发效率。
2026-01-25 10:51:06
734
原创 无锁队列-SPSC
环形队列是一种逻辑数据结构,并非物理数据结构,实际上没有环形的内存空间。无锁队列为什么要使用环形队列?环形队列可以充分利用内存空间,避免内存碎片(的开销)对于原子操作友好,如果使用STL队列,比如,入队可能会涉及到内存分配、节点构造、指针修改等操作,这些操作很难进行原子化,一般都是加锁。对于常用的STL-vector,在push_back时,如果空间不足,会进行扩容,扩容会触发重新分配内存;无法保证环形访问;而且删除效率低下。无锁队列性能对比类型时间复杂度适用场景性能。
2026-01-24 16:30:25
903
原创 桥模式-结构型
抽象和实现分离,增强系统扩展性:桥接模式将抽象部分与实现部分分离,使得它们可以独立变化。抽象部分和实现部分都可以独立扩展,而不需要修改其他部分。符合开闭原则:通过桥接模式,可以在不修改原有代码的情况下,增加新的抽象层和实现层,从而实现系统的扩展。符合合成复用原则:桥接模式通过将抽象部分和实现部分分离,使得抽象部分和实现部分可以独立变化,从而实现系统的复用。
2026-01-24 16:25:33
921
原创 原子锁操作
本文摘要:文章详细介绍了原子操作与锁的概念,包括原子操作的底层实现原理、CPU缓存读写策略及缓存一致性协议(MESI)。通过分析多线程环境下共享变量的访问问题,阐述了内存序的不同规则及其应用场景。最后以游戏在线人数统计为例,展示了非原子操作可能导致的并发问题,为后续原子操作实践提供基础。全文从硬件到软件层面系统性地讲解了保证数据一致性的关键技术。
2025-12-21 15:12:43
1025
1
原创 原型模式-创建型
原型模式摘要 原型模式通过复制现有对象(原型)来创建新对象,而非使用new实例化。核心思想是克隆机制,适用于需要高效创建大量相似对象的场景。以孙悟空分身为例,传统方式每次创建分身都需重新初始化技能和装备,存在性能低下、灵活性差和浅拷贝问题。原型模式解决方案包括:1)定义抽象原型类提供克隆接口;2)具体原型类实现深拷贝,确保装备等引用类型被正确复制。该模式显著提升对象创建效率,同时避免内存管理问题。
2025-12-20 12:04:33
351
原创 排序--基数排序
本文介绍了两种非比较型排序算法:计数排序和基数排序。重点讲解了基数排序的实现原理,包括按位分配收集的方法,以及如何处理负数和不同位数的数字。通过LeetCode 164题示例,展示了基数排序在解决需要线性时间复杂度问题中的应用。文章提供了完整的C++实现代码,包括获取数字位数、基数排序核心逻辑以及处理负数情况的方法。这些排序算法适用于特定场景,如数据具有进制特性或需要稳定排序时。
2025-12-20 11:54:28
319
原创 建造者模式-创建型
建造者模式通过分离复杂对象的构建与表示,解决了多参数构造函数的可读性和维护性问题。该模式包含产品类、抽象建造者和具体建造者三个核心组件:产品类定义最终对象;抽象建造者声明构建步骤;具体建造者实现构建逻辑并计算价格。使用建造者模式后,用户可以清晰指定每个配置参数,无需记忆复杂构造函数的参数顺序,同时支持灵活扩展新属性。
2025-12-16 21:37:20
651
原创 排序-堆排序
堆排序是一种基于完全二叉树的高效排序算法,时间复杂度为O(nlogn)。文章详细介绍了堆的基本概念、数组表示方法以及核心操作(向上调整heapInsert和向下调整heapify)。通过实例演示了堆排序过程,并对比了C++ STL中的堆操作。特别强调了手写堆结构的必要性,指出系统堆的局限性。最后给出了堆排序的实际应用场景,包括解决LeetCode 506相对名次问题。文章还包含优化建堆过程的方法,以及处理几乎有序数组的特殊堆排序技巧。
2025-12-16 21:30:21
707
原创 工厂模式-创建型
工厂模式是一种创建型设计模式,核心思想是将对象创建封装在工厂内部,避免客户端直接依赖具体类。简单工厂模式通过一个工厂类根据参数返回不同产品实例,解决了客户端与具体类紧耦合的问题,但违反开闭原则。工厂方法模式则进一步将创建逻辑分散到子类,使实例化延迟到子类实现。简单工厂适用于产品较少且稳定的场景,如支付系统、日志系统等;当产品较多时,可采用注册表等变种优化。工厂方法模式更适合需要灵活扩展的场景,两者都实现了创建逻辑与使用逻辑的分离。
2025-12-13 21:52:10
1226
原创 单例模式-创建型
摘要: 单例模式确保类仅有一个实例并提供全局访问点,解决多实例导致的数据不一致问题。实现方式包括基础懒汉式(线程不安全)、加锁懒汉式(线程安全但低效)及C++11静态局部变量(线程安全高效)。典型应用场景包括日志系统、数据库连接池等需全局唯一实例的情况。优点包括严格控制实例数量、全局访问便利和资源节约,但也存在全局状态修改风险、测试困难等缺点。使用时需权衡利弊,选择适合场景的实现方案。
2025-12-12 22:57:10
373
原创 异步IO(io_uring)性能测试
本文对比了 io_uring 和 epoll 的性能差异,通过设计客户端/服务端测试程序,测量不同数据量下的 QPS 指标。测试结果显示,随着数据量的增大,io_uring 的性能优势逐渐显现。文章详细介绍了测试程序的设计思路、关键数据结构、线程执行流程以及数据验证方法,并提供了完整的性能对比数据表和测试代码。通过控制发送数据的字节数,可以准确测试两种 I/O 模型在不同负载下的表现,为系统性能优化提供参考依据。
2025-11-09 10:03:11
572
1
原创 QML-Model-View
Qt Quick中的Model-View模式将数据与显示分离,包含Model(数据模型)、View(视图容器)和Delegate(可视化代理)三部分。常见的View组件有ListView(列表视图)、GridView(网格视图)、TableView(表格视图)和PathView(路径视图)。Repeater组件可重复渲染数据项,但会创建所有项可能影响性能。ListView支持滑动且可设置项间距,GridView则以网格形式布局。Delegate作为桥梁实现数据可视化并响应状态变化,支持添加/移除动画效果。示
2025-11-03 23:08:36
789
原创 QML-动画
本文介绍了QML中的动画实现方式,主要包括四种动画类型(PropertyAnimation、NumberAnimation、ColorAnimation、RotationAnimation)和三种动画触发方式(属性上的动画、属性上的行为、独立动画)。文章详细讲解了每种动画的使用语法和特性,并通过代码示例展示了如何实现平移、旋转、颜色渐变等动画效果。此外,还介绍了动画分组方法(ParallelAnimation并行执行和SequentialAnimation顺序执行)。最后通过对比表格总结了不同触发方式的适用
2025-11-01 21:12:40
869
原创 QML Image: Cannot open: qrc:xxxx
的方式构建工程,可使用下来在一些方面还不如原来的。排查下来,是工程这边暂未添加导致;,难道是使用方式不对,后续再研究下。可明明资源已存在为何还是打不开。
2025-11-01 15:26:24
271
原创 网络学习-异步IO(八)
摘要: 本文介绍了Linux中的异步I/O机制io_uring及其实现TCP服务器的应用。首先对比了阻塞IO、非阻塞IO和真正异步IO的区别,重点分析了io_uring的设计理念和核心组件(提交队列和完成队列)。文章详细说明了io_uring的系统调用接口(io_uring_setup、io_uring_register、io_uring_enter)以及liburing库的封装优势。最后展示了如何利用io_uring实现TCP服务器的关键步骤,包括初始化、事件设置(accept/recv/send)等,并
2025-10-31 23:03:20
1283
原创 C++异步编程
C++异步编程指南:async与future详解 本文系统介绍了C++中的异步编程机制,重点解析std::async和std::future的使用方法。首先通过同步/异步、阻塞/非阻塞的概念对比,以及生活化的奶茶店示例,帮助理解四种组合模式。然后详细讲解std::async的两种启动策略(async和deferred)和std::future的三种状态检测方法,包括wait()、get()和wait_for()等关键操作。文章还提供了异步任务、延迟任务和共享future的完整代码示例,并给出了使用建议:明确
2025-10-28 00:19:58
781
原创 MySQL-TrinityCore异步连接池的学习(七)
本文介绍了TrinityCore中的异步连接池设计,主要包括三种异步操作模式:1)pipeline模式通过SQLQueryHolder实现批量查询,将多个不相关SQL合并处理;2)chain模式通过QueryCallback实现链式查询,处理相关SQL的连续操作;3)transaction模式提供事务的异步执行。这些模式通过异步任务队列和回调机制,有效减少了数据库交互次数,提高了服务器性能。设计上采用半异步连接池架构,支持单语句、批量查询和事务操作,满足不同业务场景需求。
2025-10-25 22:31:34
903
原创 C++父类与子类进行交互
在工作中,经常用到父类指针指向子类对象,通过关键字实现多态;但当突然子类对象想向父类传数据时,一下子愣住了。重新回顾下C++基础***注意:***继承方式都统一为,如果是其余两个,需要注意下权限问题3. 重写虚函数,回调二、父类向子类传递数据核心点: 在于权限上 注意: 这里父类的构造函数是的,如果是或,则无法通过这种方式调用。3.通过保护函数传递数据4.通过事件/回调机制核心点: 利用回调函数,父类在某个事件发生时(如数据接收完成),调用子类的特定方法。在工作项目中,推荐该做法像一
2025-10-24 00:17:14
527
原创 MySQL同步连接池与TrinityCore的对比学习(六)
《数据库连接池实现对比分析:TrinityCore与个人方案》 本文对比分析了TrinityCore和个人实现的两种同步数据库连接池方案。TrinityCore采用"一连接一锁"设计,使用unique_ptr管理连接,通过轮询和非阻塞锁定获取连接,强调高性能但需手动管理资源。个人方案则采用shared_ptr和条件变量,实现自动资源管理但性能稍逊。 关键差异体现在:1)智能指针选择(unique_ptr性能更优);2)连接获取策略(轮询vs条件变量);3)锁粒度设计(细粒度vs粗粒度);
2025-10-19 16:42:41
793
原创 const 与 constexpr
遇到过该问题:在类中,与static关键字一起使用时, 未在类外进行再次声明,导致编译报错原因就在于static关键字上,单一定义原则(ODR),当静态成员变量需要时,必须在类外进行再次声明,否则编译器会报错。
2025-10-18 16:40:06
667
原创 定时器的学习(三)
public:需要注意在使用multiset或者multimap时,会存在多个相同的key,需要需要提供一个比较函数,在定时器中一般是以升序排列,也就是最早执行的任务排在前面。
2025-10-17 05:43:52
728
原创 定时器的学习(二)
文章摘要: 本文探讨了定时器系统的设计实现方案,重点对比了红黑树、最小堆和时间轮等不同容器结构的性能特点。在C++中,STL提供的红黑树容器(set/multiset/map/multimap)各有优劣,文章分析了TrinityCore游戏框架采用multimap实现定时器的优势,包括支持相同触发时间的多任务处理。通过EventProcessor和TaskScheduler两类定时器的实现案例,展示了对象专属定时器与现代Lambda的结合应用,并提出了将定时器与epoll网络模型集成的智能超时方案,相比传统
2025-10-15 23:15:39
750
原创 Qt 国庆祝福
本文记录了使用QML创建国庆祝福界面的过程。作者原本计划实现魔兽登录界面,但因时间有限改为开发国庆主题界面。该界面包含背景图片、烟花粒子特效、文字和声音效果。文章重点介绍了粒子系统的实现,包括火箭粒子、烟雾粒子和爆炸粒子的设置,以及发射器、轨迹模拟和物理影响器的应用。最终的成果展示了一个动态的烟花效果界面,用于庆祝祖国76周年华诞。相关代码已上传至GitHub仓库。
2025-10-01 00:12:00
317
原创 SRP-6协议
SRP-6协议是一种安全的远程密码认证密钥交换协议,用于在不安全网络中安全交换密钥。它结合对称和非对称加密技术,通过离散对数等数学难题确保安全性。协议核心包括大素数N、生成元g、盐值s等参数,通过6次握手流程实现密钥协商。在Trinity Core开源服务器中,SRP-6被简化为4次握手流程。账号注册通过GM指令完成,将用户名、密码等信息存入数据库。该协议有效解决了明文密码传输风险,同时保障了密钥交换的安全性。
2025-09-25 05:52:01
1053
原创 QT quick的学习(五)
摘要: 本文介绍了QML与Qt框架的关系及QML与C++的交互方式。Qt框架包含Qt Quick、QML和Qt Widgets三部分,其中QML用于描述UI界面,比传统Qt Widgets更灵活。重点讲解了两种QML与C++交互方法:一是通过设置全局变量或注册自定义类型实现数据传递(3-4星推荐);二是通过信号槽机制实现双向通信(5星推荐),包括QML发信号C++接收和C++发信号QML接收两种方式。文中提供了详细代码示例,展示了如何实现值传递和信号处理。
2025-09-16 06:50:30
314
原创 QT初探TCP(四)
本文介绍了如何使用QT实现简单的TCP网络调试助手功能。文章首先说明了QT6中socket的使用需要在CMakeLists中添加Network组件,然后详细讲解了三个核心功能:1)网络连接功能,通过QTcpSocket实现服务器连接与断开;2)数据发送功能,将文本内容转换为字节数组发送;3)接收框清空功能。作者指出QT的良好封装大大简化了网络编程复杂度,最后提供了完整代码链接。整个实现过程展示了QT在网络编程中的高效性和便捷性。
2025-09-09 15:33:44
388
原创 QT定时器的学习(二)
本文介绍了使用Qt实现电子相册的两种方法:QObject定时器和QTimer定时器。通过QObject的startTimer()和killTimer()函数,或QTimer的start()和stop()方法,可以实现图片的自动轮播功能。文章详细展示了如何加载图片文件、处理图片显示随窗口大小变化的问题,并提供了完整的代码实现。关键点包括:使用QDir获取目录下所有图片、QPixmap显示图片、重写resizeEvent()实现图片自适应缩放,以及两种定时器的事件处理机制对比。最终实现了一个支持开始/暂停功能、
2025-09-07 14:53:20
440
原创 QT的学习(一)
本文介绍了作者时隔十年重新使用QT开发计算器的经历。首先分享了QT 6.9版本的国内镜像下载地址,并对比了安装方式的变迁。随后详细阐述了计算器的实现过程:采用网格布局设计UI界面,通过信号槽机制连接按钮功能。核心计算功能使用逆波兰算法实现,将中缀表达式转换为后缀表达式进行计算。文中给出了关键代码片段,包括中缀转后缀、后缀表达式计算等核心算法,并优化了传统的双栈实现方式,改用单个栈和字符串模拟操作。最后总结了QT开发中的内存管理经验,强调了对堆上内存释放的注意事项。
2025-09-06 21:46:13
736
原创 MySQL异步连接池的学习(五)
摘要: 本文探讨了异步连接池的设计与实现,比较了同步与异步方案的适用场景。针对高并发场景下同步连接池的阻塞等待和频繁数据库操作问题,提出了两种异步连接池设计方案:完全异步(需自行实现MySQL协议解析)和半异步(基于线程池模拟异步行为)。重点介绍了半异步连接池的实现,采用多线程独立任务队列架构,减少锁竞争并保证线程安全。测试表明异步连接池适合高并发复杂业务场景,而同步方案更适用于低并发简单业务。大型项目可混合使用两种方案,兼顾性能与实时性需求。
2025-08-16 08:30:00
1025
原创 MySQL同步连接池的学习(四)
MySQL连接池通过复用数据库连接提升性能,避免频繁创建/关闭连接的开销。同步连接池实现方案使用官方驱动,通过智能指针管理连接队列,配合互斥锁和条件变量保证线程安全。关键类ConnectPool提供获取/归还连接的接口,自动处理无效连接。测试显示,10个线程并发访问5容量的连接池能正常工作,实现连接复用。异步连接池需实现MySQL协议,处理更复杂但性能更高。
2025-08-12 15:09:56
904
原创 MySQL的优化与视图的学习(三)
本文主要介绍了SQL优化和视图的相关知识。在SQL优化方面,详细讲解了insert、主键、order by、group by、limit、count和update等操作的优化策略,强调合理使用索引和批量操作的重要性。在视图部分,阐述了视图的概念、创建、查看、修改和删除方法,介绍了检查选项的作用,并分析了视图的更新限制条件。最后总结了视图的三个主要作用:简化操作、提高数据安全性和保持数据独立性。文章通过图表和代码示例直观展示了相关概念和操作技巧,为数据库性能优化提供了实用指导。
2025-08-07 09:00:00
907
原创 MySQL索引的学习(二)
摘要:本文详细介绍了MySQL索引的相关知识,包括索引概述、优缺点、结构分类(B+树、哈希等)、语法操作及性能分析方法。重点讲解了B+树索引的特性、聚集索引选取原则、索引使用规则(如最左前缀原则、范围查询影响等)以及SQL性能分析工具(慢查询日志、PROFILE、EXPLAIN)。文章还提供了索引创建、查看和删除的具体语法,并分析了可能导致索引失效的常见场景,为数据库优化提供了实用指导。
2025-08-05 07:11:51
1076
原创 MySQL事务与存储引擎的学习(一)
MySQL事务与存储引擎摘要: MySQL事务:通过ACID特性保证数据一致性,支持手动和自动控制方式,提供四种隔离级别解决并发问题(脏读、不可重复读、幻读),默认隔离级别为可重复读。 事务控制: 手动控制:通过SET @@autocommit设置提交方式 自动控制:使用START TRANSACTION/BEGIN开启事务 支持COMMIT提交和ROLLBACK回滚 存储引擎: InnoDB(默认):支持事务、行锁、外键,适合高并发场景 MyISAM:仅表锁,适合读多写少场景 Memory:内存存储,速度
2025-08-03 14:56:37
995
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅