自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 日志库封装(项目通用)

日志库的封装适用于项目调试问题,可以通过打印日志信息具体定位到某一位置。

2026-01-13 18:23:43 456

原创 coze-ai智能体开发--成语接龙案例

本文介绍了如何创建成语接龙智能体并封装Python SDK。首先在Coze官网创建智能体,设置人设和回复逻辑后进行测试发布,获取bot_id。然后使用Python SDK封装游戏逻辑,包括初始化AI实例、生成初始成语、处理用户输入和获取AI响应等功能。SDK实现了游戏历史记录、超时处理和异常回退机制,通过Flask框架提供API接口。代码展示了如何调用Coze API进行交互,并包含默认成语库作为备用方案。

2025-12-21 15:43:24 348

原创 仿RabbitMQ实现消息队列(六)--服务端代码实现(2)

在开始之前,我们要将消息类型定义出来而消息最终是需要进行持久化存储,因此涉及到数据的序列化和反序列化,因此消息的类型定义使用protobuf进行生成。因此定义消息类型,其实就是定义一个消息类型的proto文件,并形成相关代码。1、消息所需要素a、消息本身要素:I、消息属性:消息属性中包含以下内容1. 消息 ID2. 消息投递模式:非持久化模式/持久化模式3. 消息的 routing_keyii. 消息有效载荷内容b. 消息额外存储所需要素:i. 消息的存储位置。

2025-11-23 15:36:42 309 2

原创 仿RabbitMQ实现消息队列(六)--服务端代码实现(1)

Helper工具类中要完成的是项目中一些辅助零碎的功能代码实现,其中包括文件的基础操作,字符串的额外操作等。UUID 的标准型式包含 32 个 16 进制数字字符,以连字号分为五段,形式为 8-4-4-4-12。在这里,uuid 生成,我们采用生成 8 个随机数字,加上 8 字节序号,共 16 字节数组生。成 32 位 16 进制字符的组合形式来确保全局唯一的同时能够根据序号来分辨数据(随。创建当前目录,需要父级目录存在,如果遇到连续的文件分隔符需要跳过。b. 创建并打开库 / 关闭库 / 删除库。

2025-11-23 15:35:24 264

原创 仿RabbitMQ实现消息队列(六)--项目框架

需求分析模块

2025-11-18 21:14:46 981

原创 仿RabbitMQ实现消息队列(五)--C++11异步操作实现线程池

std::future 是 C++11 标准库中的一个模板类,它表示一个异步操作的结果。当我们在多线程编程中使用异步任务时,std::future 可以帮助我们在需要的时候获取任务的执行结果。std::future 的一个重要特性是能够阻塞当前线程,直到异步操作完成,从而确保我们在获取结果时不会遇到未完成的操作。

2025-11-18 21:13:15 1026

原创 仿RabbitMQ实现消息队列(四)--sqlite3与gtest快速上手

SQLite是一个进程内的轻量级数据库,它实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,也就意味着与其它数据库不一样,我们不需要在系统中配置。像其他数据库,SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接,SQLite直接访问其存储文件。C/C++ API是SQLite3数据库的一个客户端,提供一种用C/C++操作数据库的方法。

2025-11-16 15:11:53 477 1

原创 仿RabbitMQ实现消息队列(三)--muduo介绍与使用

muduo库介绍与使用

2025-11-16 15:05:38 1133

原创 进程间通信(2)--ipc对象详解之消息队列

如果不指定这个参数,那么进程将被阻塞直到函数可以从队列中得到符合条件的消息为止,如果一个 client 正在等待消息的时候队列被删除,EIDRM 就会被返回。虽然,消息的内容 mtext 在 msgbuf 中只是一个字符数组,但事实上,在我们定义的结构中,和它对应的部分可以是任意的数据类型,甚至是多个数据类型的集合。在 Linux 的库文件 linux/msg.h 中,它的定义是这样的。消息队列就是保存消息的队列,但这个队列并不是简单的进行“先入先出”的操作,我们可以控制消息用更灵活的方式流动。

2025-11-13 16:48:40 753

原创 进程间通信(一)

进程间通信是指两个或多个进程之间进行数据交换和信息传递的机制。其目的是使不同进程能够相互协作、共享数据和完成任务。进程间通信通常基于操作系统的内核机制,因为进程的用户空间是私有的,而内核空间是共享的。

2025-11-10 17:53:37 1048 1

原创 仿RabbitMQ实现消息队列(二)-安装

它是数据结构序列化和反序列化框架。它基于应用层协议实现数据的序列化和反序列化的一个功能。语言无关,平台无关高效扩展性兼容性好序列化就是把对象转换为可存储或传输的格式的过程,反序列化就是把序列化后的数据恢复为原始对象的过程。好比如序列化= 把商品精心包装成快递盒,反序列化= 收到快递后拆开包装,恢复成商品。:指定使用 proto3 版本的语法。Proto3 相比于 Proto2 简化了很多特性,并且支持更多语言。:定义了一个包声明chat,这有助于防止不同项目之间的命名冲突。

2025-10-31 16:56:46 457 4

原创 仿RabbitMQ实现消息队列(一)--项目介绍

在并发编程中,有一种特殊的队列叫阻塞队列,一般可以用来实现生产者-消费者模型。生产者生产数据到队列中,消费者取出数据进行处理。解耦合 支持开发 支持忙闲不均 削峰填谷举个例子:食堂托盘架1、后厨=>生产者 2、同学=>消费者 3、托盘架最多10个->有界容量4、后厨看到架子满了->阻塞(休息),等同学拿走一个才被叫醒5、同学发现架子空了->阻塞(休息),等后厨放新托盘才被叫醒没有人原地转圈(cpu 0%空转)

2025-10-31 16:22:44 506 5

原创 【Linux篇】--进程

exec 系列中的系统调用都完成相同的功能,它们把一个新程序装入调用进程的内存空间,来改变调用进程的执行代码,从而形成新进程。这时进程 A 和 B 一起运行,进程 A 是父进程,进程 B 是子进程,它是进程 A 的副本,执行与 A 一样的程序。上述代码中,出现了三个分支,当pid为0时,他给出了子进程的工作,大于零时,给出了父进程的工作,小于零时,它给出了 fork 建立子进程失败时所作的工作。fork调用成功后,就会使内核建立一个新的进程,所谓的新进程是调用fork的进程的副本。

2025-09-30 16:49:17 695 6

原创 Boost 搜索引擎

遇到的问题:在进行综合调试的时候(debug.cc),发现什么也搜不到,不管搜索什么都是空的。再进行一一检查后最终发现Parser.cc文件出错了。content是空的 url 里面混杂着content内容。在ParserHtml文件中有一处解析文件路径 一个参数传错了,错吧file传成results。开始索引建立有问题 顺着searcher.cc文件里search函数摸索过去。再后面调试的时候 发现search里面将所有结果按照json格式返回中GetForwardIndex里的参数传错。

2025-09-29 20:13:33 1274 7

原创 linux之套接字Socket

比如你只是想连接到一个远程主机上面进行通讯,你并不在乎你究竟是用的自己机器上的哪个端口进行通讯(比如 Telnet),那么你可以简单的直接调用 connect()函数,connect()将自动寻找出本地机器上的一个未使用的端口,然后调用 bind()来将其 socket 绑定到那个端口上。一个文件描述符只是一个简单的整型数值,代表一个被打开的文件(这里的文件是广义的文件,并不止代表不同的磁盘文件,他可以代表一个网络上的连接,一个先进先出队列,一个终端显示屏幕,以及其他一切)。允许你进行 login 操作。

2025-09-16 22:21:34 946 3

原创 Linux学习工具之gcc、g++、gdb使用

1、编译一个c程序-o output_file:指定输出的可执行文件名text.c: c源文件名2、示例3、编译c++程序。

2025-08-11 15:34:36 435 5

原创 【MySQL基础篇】

数据库是一个有组织的、可以存储、管理、操作大量数据的系统。它允许你方便地存储、查询、更新和删除数据,确保数据的安全性、完整性和高效访问。换句话说,数据库就是一个“数据仓库”,它能让我们高效地存储和提取需要的信息。关系型数据库(如 MySQL、SQL Server、Oracle 等)是最常见的一种,它通过表格(类似于 Excel 的行和列)来组织数据。每一行代表一条记录,每一列代表数据的某个属性。通过特定的查询语言(SQL),你可以对数据进行检索和操作。

2025-07-18 23:15:22 1212 10

原创 【C++基础】--多态

在继承中构成多态满足以下条件:1.必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

2025-07-18 22:00:51 787 5

原创 ubuntu安装指南

6、将系统默认安装的位置改为你要安装的位置,如:【D:\文档\Virtual Machines】13、软件更新模块,为了加快安装速度,去掉【安装时下载更新】选项。7、调整磁盘大小,默认是【20G】这里调整为【36G】.可根据实际情况调整不建议低于默认值。9、左侧导航栏显示新创建好的虚拟机,选中【ubuntu64位】点击右侧【CD/DVD】15、选择所处位置,目前只能设置为【上海】,地图点击红色框的位置大概就是上海。5、系统选择【linux】,版本选择【ubunt64位】3、在新建虚拟机向导中选择【典型】。

2025-03-20 18:20:44 1121 11

原创 【优选算法篇】--深度解析之滑动窗口篇

我们定义left,right等于起始位置,先进窗口(这里今后窗口意思就是让字符进入哈希表),一直向后走,走到某一个位置发现有重复的字符,那就让这个right先固定到这个位置不动,让left向后走,一直走到跳过跟right重复的字符(也就是出窗口,出窗口要让哈希表里的值减少)。什么意思呢,我们以下面这张图里面的示例为例说明下吧,如果我们走到3,窗口里已经尝过了两种,此时我们left向后走,走到不出现1的位置,也就是标红色的地方。顾名思义,其实就是,找一块最长子数组,里面数字的类型不超过两种。

2025-03-17 21:51:12 1262 8

原创 【linux篇】--linux常见指令

HOME目录是?每一个用户在Linux系统的专属目录,默认在:/home/用户名当前工作目录?Linux命令行在执行命令的时候,需要一个工作目录,打开命令行程序(终端)默认设置工作目录在用户的home目录。

2025-03-16 17:01:42 1070 11

原创 【水调歌头·排序篇】--体验快排与归并的奥妙

我们在写归并排序题时候会发现都会有相同之处。但是对于不同的题,具体问题得具体分析。归并排序的空间复杂度:O(n),因为在合并过程中需要额外的空间来存储临时数组。时间复杂度为O(n log n)

2025-03-08 17:52:20 1027 31

原创 【算法基础篇】-字符串

存放的位置应该是俩数相乘的下标(例如:3和5相乘时,放在数组下标1的位置.3对应下标0,5下标是1。算法的思路时固定一个位置,从中心开始,向两边扩展,如果最左边的值等于最右边时(满足回文串)。只不过这里是逢2进0,如果俩数相加等于2,直接变零,不等于2,那就直接模2即可(结果是多少就多少),t%2表示运算最终结果,t/2表示进到下一位。一个数和0相乘,结果只要一个0,但是会出现多个0,我们只需要保存一个0即可。类似于模拟列竖式运算的方法,只不过这里模拟的时候,中间过程没有进位,最终结果统一进位。

2025-02-25 20:42:32 1021 20

原创 【算法基础】--前缀和

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目所说求除i为之外其余元素的积,我们换一种思维就是 前缀积和后缀积的积。假设我们要求i位置的值时,我们可以求出【0,i-1】位置区间所有元素积和【i+1,n-1】区间范围所有元素积。假设求【0,3】区间和,那么dp[3]-dp[-1],dp[-1]边界直接越界了.房主边界问题。,预处理一个前缀和数组dp,dp[i]表示:从[1,i]区间内所有元素和。

2025-02-21 21:34:08 1496 24

原创 【二叉搜索树】

以上就是本期内容,以后会多多更新。

2025-01-31 22:10:50 736 9

原创 【c++继承篇】--继承之道:在C++的世界中编织血脉与传承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。在上述代码中,Student类就是继承了父类Person,继承父类的成员(成员函数+成员变量)都会变成子类的一部分。

2025-01-17 22:59:12 1287 8

原创 【优选算法篇】--双指针篇

双指针篇一、有效三角形的个数二、快乐数三、盛最多水的容器总结:以上就是本篇内容,欢迎大家在评论区讨论交流。一、有效三角形的个数题目:给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。原题在这里解析:能否组成三角形,满足任意两边之和大于第三边,大家可能会想到暴力解法。这里提供个最优解法。对于一组已经排好序的数来说,如果a>=b>=c,则只需b+c>a.先确定一个最大的数a,再定义left right指针,left指针指向0,right指

2025-01-15 21:34:13 988 8

原创 【模板进阶篇】

【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-01-15 21:33:42 375 13

原创 【string】--字符串之舞:C++ 中 std::string 的优雅与深邃

std::string 类是 C++ 标准库中定义的一个类,它位于 std 命名空间中,用于处理动态大小的字符序列。与传统的 C字符串不同,std::string 不需要手动管理内存,且它支持丰富的操作方法,极大地简化了字符串的处理。一个典型的 std::string 对象是可以动态扩展的,内存管理由 C++ 的标准库自动处理,因此比传统的 C 风格字符数组(char[])更加安全、灵活和高效。// 创建一个字符串对象// 输出字符串return 0;

2024-12-07 19:05:14 1394 15

原创 【c++篇】掌握动态内存的奥妙

new原理调用函数申请空间在申请的空间上执行构造函数,完成对象的构造delete原理在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间new T[N]原理调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请在申请的空间上执行N次构造函数delete[ ]原理在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。

2024-11-24 21:11:02 889 21

原创 【类与对象】--对象之舞,类之华章,共绘C++之美

/类体在上述代码中,class为定义类的关键字,ClassName为类名,括号里面的是主体友元函数是一个被声明为某个类的友元的非成员函数。友元函数可以直接访问该类的私有和保护成员,即使它不是该类的一个成员。class Box;// 前向声明public:// 成员函数声明private:int length;public:// 将 BoxPrinter 声明为友元类// 友元类的成员函数实现// 访问私有成员// 使用友元类输出 Box 的长度。

2024-11-22 19:36:04 1263 39

原创 【c++入门】打开新世界大门之初遇c++

在学习了c语言,初阶数据结构后,我们正式走进c++世界大门目录前言一、认识c++二、缺省参数三、函数重载四、引用4.1什么是引用?4.2 使用场景4.2.1 做参数4.2.2做函数返回值4.3引用和指针的区别五、内联函数六、auto关键字6.1使用细则1. auto与指针和引用结合起来使用2.同一行定义多个变量3.不能推导的场景引用是一个已存在的变量的别名,并不是一个新的变量,他和他引用的变量共用一个内存空间。类型& 引用变量名(对象名) = 引用实体;示例如下:int m=10;

2024-11-17 13:20:02 1869 43

原创 【算法篇】--重温算法题

本篇文章基于学习了一段数据结构,并练习了几道算法题所做的一些笔记,方便日后复习时可以用到。如果有什么不对的地方,欢迎大家在评论区指正;

2024-11-01 18:44:24 1345 16

原创 【数据结构栈篇】深入浅出--探索栈的原理与应用

栈(Stack)是一种常用的数据结构,它遵循后进先出的原则。在栈中,元素只能从一端(栈顶)进行插入和删除操作,压栈(Push):将元素添加到栈顶。出栈(Pop):从栈顶移除一个元素。int top;//栈顶//记录栈空间}ST;我们把结构体和栈的各个功能统一放在Stack.h文件中,具体实现需引用该文件队列是一种先进先出的数据结构,它允许在队列的一段添加元素,在另一端移除元素。在队列中,最先加入的元素最先被移除,最后加入的元素最后被移除。入队:在队列的尾部添加一个新元素。

2024-10-25 19:51:09 956 20

原创 【c语言篇】--字符串和内存函数

上篇我们学习了指针进阶,今天我们来学习字符串、结构体、位段、枚举等。assert(str!=NULL);if (*str!strlen是求字符串长度,统计\0之前出现的字符个数1.2strcpy函数strcpy 函数将source值 拷贝给 desination,拷贝的前提是目标空间足够大,以确保能放下。长度不受限制。结构是一些值的集合,这些值是成员变量,结构的每个成员可以是不同类型的变量。

2024-10-20 20:55:57 891 16

原创 【c语言篇】指针进阶

数组指针其实是指针。看下面例子//p先和*结合,说明p是一个指针变量,然后指向的是一个大小为10个整形的数组,所以p是一个指针,指向一个数组,叫指针数组//注意:[ ]的优先级高于*号的,所以必须加上()来保证p先和*结合。

2024-10-18 17:17:41 973 12

原创 【c语言--数据存储】

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。

2024-10-07 15:35:29 426 6

原创 C语言--指针初阶

提示:以下是本篇文章正文内容,下面案例可供参考int main()int *p;*p=20;return 0;一、指针是什么?二、12.

2024-09-17 16:55:38 456 9

原创 素数的个数

题目要求求MN之间的个数,首先定义了个isprimer的函数,主要用来判断是否是素数,接下来是主函数,for循环里面是从m到n里面找出所有素数,找到一个,加一个。素数在算法中必不可少的部分,这期分享下素数相关的题。

2024-07-10 15:30:59 307 1

原创 结构体学习

使用之后typedef.首先定义了struct Distance结构体,typedef将struct Distance定义为distances。distances就等价于 struct Distance.分享一些结构体学习笔记(typedef)

2024-03-24 10:52:23 251 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除