- 博客(115)
- 收藏
- 关注
原创 01环境配置-Ubuntu20.04 | Xshell远程连接 | Boost库 | muduo库 | Json | Mysql | Redis | Nginx
【代码】00环境配置-Ubuntu20.04 | Xshell远程连接 | Boost库 | muduo库 | Json | Mysql | Redis | Nginx。
2024-07-25 07:15:08
1012
原创 C/C++轻量级并发TCP服务器框架Zinx-框架开发003:转大写字母输出+责任链模式+代码重构思路及实现
通道类和功能处理类的对象都是整个流程中的环节,将这些环节连起来则形成责任链。
2023-11-17 14:08:01
375
原创 C/C++轻量级并发TCP服务器框架Zinx-框架开发002: 定义通道抽象类
输入通道类stdin和输出通道类stdout与很多相同点,无需写重复代码。定义通道抽象类,把输入和输出的不同通过虚函数扩展。虚函数:读,写,获取fd,数据处理。处理数据的函数:将数据交给输出通道。将数据追加到缓冲区的函数。创建通道对象(成员赋值)添加通道到kernel。
2023-11-15 06:46:38
821
原创 C/C++轻量级并发TCP服务器框架Zinx-框架开发001: 读取标准输入,回显到标准输出
但是set方法不适用epoll,应该是添加通道到epoll里,所以使用Addchannel。在stdinChannel类中实现一个ReadFd方法。定义一个channel对象,并设置get和set方法。定义一个channel对象,并设置get和set方法。Zinxkernel类中引入Channel类。在kernel的构造函数中创建。在哪里创建epoll fd?2 调用输出通道的读取函数。1 等输入epoll。
2023-11-15 02:31:36
957
原创 图论17-有向图的强联通分量-Kosaraju算法
当这个环遍历从环尾开始返回并记录ccid的时候,DFS自由返回到环, 索引指向下一个未被访问过的环外的节点,此时联通分量序号+1。强联通分量是环,意味着在DFS过程中一定是公用相同的联通分量序号。但是在DFS的时候,判断邻边用的是原来的邻接列表。顶点:注意这里遍历的顺序是反过来的图。对原图的反图进行DFS的后序遍历。
2023-11-14 11:16:00
660
原创 图论16-拓扑排序
在拓扑排序的实现过程中,如果返回的res数组中的点的数量与图的点的数量不一致,则说明有环。因为环上的点由于度数无法为0,无法进入队列,从而进入res数组返回答案。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称。,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则。对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个。能够进行拓扑排序的图是没有环的,否则无法进行拓扑排序。简单的说,由某个集合上的一个。
2023-11-14 09:32:17
484
原创 图论15-有向图-环检测+度数+欧拉回路
标记当前路径和标记是否访问过的区别,标记是否访问过时为了避免在dfs过程中检测环的时候重复检测已经访问过的节点。遍历文件给出的相邻顶点时,如果邻接表上有节点,就添加一条边。已经在onPath中,则直接返回环检测结果。设计两个数组分别记录对应节点的出度和入度。已经标记访问过,因此下一个节点访问。添加边的时候,更新相应的度数值。如果是无向图,反过来添加边。onPath的时候,退回到。
2023-11-14 08:33:51
888
原创 图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法
这里的缺点就是,更新node时候,会重复添加节点相同的node,但是路径值不一样。第一重循环:测试两点之间经过点t是否存在更短的路径。
2023-11-13 11:24:29
1347
1
原创 会员题-力扣408-有效单词缩写
字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。给你一个字符串单词 word 和一个缩写 abbr ,判断这个缩写是否可以是给定单词的缩写。“s55n” (“s ubsti tutio n”,两处缩写相邻)“s0ubstitution” (缩写是一个空字符串)“substitution” (没有替换子字符串)子字符串是字符串中连续的非空字符序列。“s010n” (缩写存在前导零)
2023-11-12 14:10:45
417
原创 图论13-最小生成树-Kruskal算法+Prim算法
中找到一条符合条件的权值最小的边,重复这样的操作N-1次,选出的N-1条权值最小的边组成的树就是最下生成树。将顶点分为两类,一类是在查找的过程中已经包含在树中的(假设为 B 类),剩下的是另一类(假设为 A 类)。初始化的时候visited数组起始的元素为true,其余全部设置为galse,表示两个不同的组。声明一个变量minEdge用于标记权重最小的边。拓展的过程中,优先队列的边不一定是合法的边。在构建mst时进行判断边的合法性。通过并查集标记联通分量。使用优先队列取最短的边。的集合,那么说明一定。
2023-11-12 08:10:10
1139
原创 图论10-哈密尔顿回路和哈密尔顿路径+状态压缩+记忆化搜索
很遗憾我们只能在暴力破解的基础上,尽量去做到更多的优化,譬如回溯剪枝,记忆化搜索等,但是,还没有找到一种多项式级别的算法来解决哈密尔顿问题。记忆化搜索:「自顶向下」的解决问题,采用自然的递归方式编写过程,在过程中会保存每个子问题的解(通常保存在一个数组或哈希表中)来避免重复计算。在算法面试中,对于像哈密尔顿回路/路径这样的 NP 难问题,通常都会有输入限制,一般情况下,求解问题中给定的图不会超过 30 个顶点。为了避免重复计算,在递归的同时,我们可以使用一个缓存(数组或哈希表)来保存已经求解过的。
2023-11-10 11:53:26
1919
原创 C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发006:基于redis查找玩家姓名+游戏业务实现总结
7.2版本命令在目录下:1.4 Hiredis API的使用1.5 我的动态库和头文件根据上述的输出信息,我把动态库直接拷贝到了系统目录下,程序加载的时候加载的是头文件的位置没有改变,使用的默认设置路径和库要根据实际情况设置redisConnect跟数据库建立链接(redisFree释放掉)。redisCommand发命令并通过返回值取出结果(freeReplyObject释放掉)。2 Redis的使用2.1 初始化时候2.2 结束的时候3 测试
2023-11-09 03:17:38
1705
原创 C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发004:游戏核心消息处理 - 玩家类的实现
获取感兴趣的区域(Area Of Interest)的算法。形成周围的概念。在多人游戏中,各个游戏客户端之间需要通过服务器向彼此更新自身状态。但对于当玩家来说,我们不需要获取“太远”的玩家的信息,所以,在服务器端,我们通过AOI算法可以获取到某个客户端“周围”的玩家,进而只在该小范围内同步信息。网格法AOI参考游戏世界的坐标,创建一个边界相同的矩形。选取适当的颗粒度,将矩形分割成几×几的网格。每个客户端都要按照实际坐标添加到某个格子里。客户端所在格子的周围八个格子内的玩家就是周围玩家。
2023-11-08 13:15:44
869
原创 C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发005:守护进程与进程监控
每个进程组有唯一的进程组ID,每个进程组有一个进程组组长。如何判断一个进程是不是这个进程组的组长了,通常进程组ID等于进程ID那么这个进程就是对应进程组的组长。进程除了有进程的PID之外还有一个进程组,进程组是由一个进程或者多个进程组成。守护进程也叫做精灵进程,是运行在后台的一种特殊进程他独立于控制终端并且可以周期性的执行某种任务或者等待处理某些发生的事件。守护进程是非常有用的进程,在Linux当中大多数。被成为控制进程,一个会话的几个进程组可以分为。会话是有一个或者多个进程组组成的集合。
2023-11-08 13:08:25
759
原创 Centos7-查看内存泄漏
Centos7 用yum,centos8用dnf。根据泄漏信息再完善代码补充析构函数。然后重新查看,就能看到泄漏的信息。
2023-11-08 08:43:31
686
原创 C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发003:架构搭建-需求分析及TCP通信方式的实现
消息定义每一条服务器和客户端之前的消息都应该满足以下格式消息内容的长度(4个字节,低字节在前)| 消息ID(4个字节,低字节在前)| 消息内容 |消息以及其处理方式已经在客户端实现,本项目要实现的是服务器端的相关处理详细定义如下消息ID消息内容发送方向客户端处理服务器处理1玩家ID和玩家姓名S->C记录自己ID和姓名无2聊天内容C->S无广播给所有玩家3新位置C->S无处理玩家位置更新后的信息同步200玩家ID,聊天内容/初始位置/动作(预留)/新位置。
2023-11-05 11:13:32
1692
原创 跨平台联调代码:Windows下VS2022远程连接Linux-protobuf为例
设置Windows的主要目的是为了可以直接在Windows上VS中直接运行代码,无需跑到Linux上重新编译运行。这个主要是到时候编译的时候可以直接在系统里面搜,与Windows平台VS2022无关。
2023-11-05 05:59:28
600
原创 C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发002:框架学习-按照三层结构模式重构测试代码+Tcp数据适配+时间轮定时器
public:/*成员变量表示要回显的字符串*//*开启输出标志*//*该消息是命令*//*要加前缀*/CmdMsg();
2023-11-03 11:26:42
2328
原创 C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发001:zinx框架的安装
注意这里,GetChannelInfo()只负责获取stdin,然后下一步交给回显poCmd做。这里需要一个poCmd,因此在3.2定义类的时候直接创建new了一个对象。从哪里输入的不用管,只需要关心参数。
2023-11-03 08:08:10
709
原创 图论08-图的建模-状态的表达与理解 - 倒水问题为例
但是本状态的表示方法不适用单个数组超过9的,因为一个数位只能表示0-9.。进行表达,也就是变成了一个数字,分别放在不同的数位上。重复添加满水不影响结果。
2023-11-02 14:59:18
1134
原创 Openssl数据安全传输平台019:外联接口类的封装以及动态库的制作 - Bug未解决,感觉不是代码的问题
/ 秘钥状态: 1可用, 0:不可用// 秘钥的编号// 客户端ID, 客户端的标识// 服务器ID, 服务器标识// 对称加密的秘钥。
2023-11-02 03:28:47
796
原创 编译时库的顺序影响编译的结果:动态库libxxxx.so:undefined reference to `Json::Value::operator[](c
通过将编译的文件放在前面,可以确保在解析源文件时已经解析了所有依赖的符号,从而避免了链接错误。因此,如果依赖的库放在编译的文件之前,编译器会在尚未解析这些符号的情况下开始解析源文件,从而导致链接错误。总结起来,将编译的文件放在前面、依赖的库放在后面是为了确保正确解析和链接符号,以生成可执行文件。问题的起因是,我在使用自己打包的动态库的时候,编译时提示动态库里指向的另一个库找不到…的顺序解析源文件和库文件。如果在链接过程中遇到未解析的符号,它会。然后我调整了一下顺序,就能编译通过了。
2023-11-01 14:09:24
349
原创 Centos7-安装Oracle11g-图形化+静默配置监听+DB实例+Navicate远程连接+解锁scott/tiger用户+导入Openssl项目所需要的数据+OCCI测试
视频中有些地方和文字顺序不一致的以文字记录版本为主。
2023-10-31 04:15:40
7085
原创 搭建VM虚拟机+Centos7 Oracle版 + 配置ssh + Xftp + secureCRT
01-搭建VM虚拟机+Centos7 Oracle版 + 配置ssh + Xftp + secureCRT。其他的基本默认就可以了。
2023-10-30 14:35:50
377
原创 Openssl数据安全传输平台018:Linux上服务端代码的编译与调试-Bug记录
** 这个问题很奇葩,可能是前几天搭建OCCI的时候使用的是root用户,导致普通用户编译程序的时候找不到库文件。查了一下liblntsh.so和libocci.so的位置和头文件的位置,把路径加入编译指令。这个问题很奇葩,因为我不小心在中文输入法输入了一个字符 - ,导致了找不到对应的库。除了找不到库和目录的问题,其他的都应该在windows上解决。这条提示应该是说找不到对应函数,但是怎么会找不到…修改对应的字符,在英文输入法状态下输入小横杠。找不到,其他的基本没有什么问题。因此需要去除这一行声明。
2023-10-30 09:59:22
180
原创 Undefined reference错误处理及Linux设置动态链接库so的默认搜索路径
到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在库依赖项中添加"掐头去尾的”动态库名字:json;在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会。还可以在编译目标代码时指定程序的动态库搜索路径。中搜索它时找不到它的定义时,就会发生。Linux动态库的默认搜索路径是。没有库,就添加库就可以了。表示在当前路径中找动态库。
2023-10-30 02:02:19
1700
原创 Openssl数据安全传输平台017:Linux客户端代码的编译与调试-Bug记录
确认库文件是否存在,比如-l123, 在/usr/lib, /usr/local/lib,或者其他自定义的lib下有无lib123.so, 如果只是存在lib123.so.1,检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。通常在软件编译时出现的usr/bin/ld: cannot find -lxxx的错误,主要的原因是库文件并没有导入的ld检索目录中。库文件导入ld.so.cache.
2023-10-29 12:09:25
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人