- 博客(96)
- 收藏
- 关注
原创 Asio tcp通信接口详解
这篇文章主要介绍了 Boost.Asio 库中几个常用接口的功能和使用方法,包括 io_context、socket、endpoint 以及读写操作。
2025-09-25 14:17:06
1040
原创 即时通讯项目---总结篇
本篇是我介绍Chat-Im(仿微信的即时通讯项目)的总结篇,主要介绍一下这个项目服务端的编写流程,以及所需要学习的一些前置知识,以及给这个项目做个完结。目的是给想要看着我的gitee和博客独立完成这个项目的朋友们指明方向,避免出现看着gitee上万行的代码都不知道从哪里开始看的情况。
2025-08-24 09:48:00
724
原创 即时通讯项目---网关服务
本模块主要介绍即时通讯项目的网关部分,其它微服务完成以后,网关部分主要处理各种服务的请求,网关层根据请求服务的不同,去分别调用对应的微服务进行处理,然后给客户端返回结果就行。
2025-08-20 16:49:02
1268
原创 即时通讯项目---好友管理子服务
本模块主要介绍即时通讯项目有关好友管理这部分内容。主要设计好友添加、删除、获取好友列表、创建会话等等一系列操作。
2025-08-08 15:34:40
684
原创 即时通讯项目---消息持久化子服务
本模块主要介绍消息持久化这部分内容,主要是当新消息发送之后,消息转发模块会把消息存到mq中,而本模块要做的就是从mq中读取消息内容持久化到mysql中,并提供消息记录的查询功能。
2025-08-04 13:49:20
421
原创 即时通讯项目---etcd、spdlog、odb二次封装
本篇主要介绍etcd.hpp logger.hpp mysql.hpp三个通用文件的封装。
2025-08-03 17:59:22
835
原创 即时通讯项目---消息转发子服务
本篇主要介绍消息转发子服务的实现,具体来说就是client在一个聊天会话中发送了一条消息,server收到之后就要把该消息转发给聊天会话中的人。该服务要做的就是找到聊天会话中有些谁,然后交给网关服务去逐个进行消息转发。
2025-08-02 17:34:47
689
原创 即时通讯项目---用户管理
本篇主要是对于该项目的用户管理模块做一个文档说明,即登录用户自己的一些信息进行管理,比如说登录用户的注册登录服务,用户名、密码、签名、头像等等的一些操作进行处理。
2025-08-01 18:28:43
896
原创 brpc的安装与使用介绍以及channel的封装
brpc在ubuntu24.04的安装与使用介绍,rpc调用流程介绍,以及channel的封装
2025-07-20 17:03:35
1018
原创 ChatIM项目语音识别安装与使用
这是一个ChatIM的项目,有兴趣的伙伴可以照着我的博客和gitee进行完成gitee链接:https://gitee.com/qi-haozhe/chat-im。
2025-07-20 14:49:18
990
原创 【盒马】20250412笔试算法题
接下来我们计算当选中白色位置的时候期望如何算,具体思路是,当选中一个W位置(i,j)时,我们就需要看看以(i,j)为基点,当把该位置染成红色之后,上下左右四个方向可以把几个连通块合成一个连通块。我们可以看上下左右四个放下的arr中存的值放到一个set里,set是会去重的,所以最后set里面有几个元素,就说明有几个连通块被合成了一个连通块,本题比较简单,就是输入俩字符串,s和t,保证这俩字符串的字符个数都是偶数,然后把t的后半部分拼接到s后面,然后把s和t的前半部分输出即可。
2025-04-17 11:30:52
817
原创 C++笔试强训18、19、20
如果在父类构造函数中调用虚函数,由于调用构造函数的顺序是先调用父类的构造函数再调用子类的构造函数,所以这个时候子类还没初始化呢,如果形成多态会发生一些未定义的错误,所以就只能调用父类的虚函数,所以不会发生多态。然后调用子类的构造函数,子类构造函数中调用了父类成员函数test,test中调用会使用父类的this指针调用func函数,会发生多态,因为父类this指针指向的是子类对象,所以会调用子类的成员函数func,会。C/D:map、set底层都是红黑树,每个节点之间不是连续的,节点之间是通过指针相连的。
2025-04-14 16:54:19
855
原创 【腾讯云智】20250329笔试算法题
main函数中二维数组直接遍历,如果该位置不为0即有僵尸,且vis[i][j]=false代表没被遍历过,那就直接把vis[i][j]=true,然后tmp=arr[i][j]表示这一个范围tmp即僵尸的初始数量然后++cnt,表示块数+1,然后调用dfs即可。我们可以找打一个最小的数a=3满足6<=2*3<=9,如果a变成2就不满足了,所以最小就是3,然后可以找到一个最大的数b=4满足6<=2*4<=9,如果b=5的话就不满足了,所以b最大只能是4,所以最后输出3 4。
2025-04-13 13:51:56
1369
原创 C++从零实现Json-Rpc框架
RPC(Remote Procedure Call)远程过程调用,是⼀种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。RPC可以使用多种网络协议进行通信, 如HTTP、TCP、UDP等, 并且在TCP/IP网络四层模型中跨越了传输层和应用层。简言之RPC就是像调用本地方法一样调用远程方法。过程可以理解为业务处理、计算任务,更直白的说,就是程序/方法/函数等,就是像调用本地方法一样调用远程方法。具体原理不多做解释,简单来说就是客户端A需要运行函数func,得到结果,但是这个函数不在客户端这里,
2025-03-11 17:48:09
1318
原创 C++ map、set、multimap、multiset的介绍和使用
set文档set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。
2025-03-08 10:39:21
716
原创 C++特殊类的设计
在加锁区域内,再次进行判空检查(第二次检查),这是为了确保在第一个线程进入加锁区域后,如果有其他线程也尝试进入,它们会在第一次检查失败后被阻塞,直到第一个线程完成单例对象的创建并解锁。将该类的构造函数设置为私有即可,因为子类的构造函数被调用时,必须调用父类的构造函数初始化父类的那一部分成员,但父类的私有成员在子类当中是不可见的,所以在创建子类对象时子类无法调用父类的构造函数对父类的成员进行初始化,因此该类被继承后子类无法创建出对象。然而,这种方法虽然简单有效,但在单例对象已经创建之后,每次调用。
2025-02-27 19:50:15
986
原创 C++ bitset(位图)的模拟实现
判断方式比较简单,每一个整数的所有比特位,只要有一个为1,那该整数就肯定不等于0,所以,我们可以遍历所有整数,只要有一个整数不等于0,那就说明有1,返回true,否则所有整数都是0,没一个1,返回false。需要注意的是,如果位图没有包含最后一个整数的全部比特位,那么最后一个整数的二进制无论如何都不会为全1,所以在判断最后一个整数时应该只判断位图所包含的比特位。例如,假如我们要建立一个50个比特位的位图,就需要两个int大小,共64个比特位,使用前50个比特位,后14个舍弃不用就好。的大小是否符合预期。
2024-09-25 13:35:12
1112
原创 C++ bitset(位图)的介绍和使用
面试题给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】遍历,时间复杂度O(N)排序(O(NlogN)),利用二分查找: logN单从方法上来说这两种方法都是可以的,但是从内存上来说,这里有40亿个整数,换算一下就相当于16G,也就是说要操作这些数据的话需要占用16G的内存,内存消耗是很大的,所以从内存上来看,这两种方法都是不合适的。位图解决。
2024-09-24 20:03:30
4062
原创 C++笔试强训15、16、17
在同一个作用域内,可以有多个同名函数,但这些函数的参数列表(参数的数量、类型或顺序)必须不同。重载是编译时多态的一种体现。
2024-09-23 13:26:40
1101
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1