自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Valgrind快速使用

Valgrind是一款强大的内存调试工具,其核心组件包括memcheck(内存检测)、cachegrind(缓存分析)、callgrind(调用分析)、helgrind(线程分析)和massif(堆内存分析)。memcheck最常用,可检测内存泄漏、越界访问等问题。基础用法为valgrind --tool=memcheck配合参数如--leak-check=full进行详细检测。常见错误包括new/delete不匹配、容器内存泄漏、类设计缺陷(如未释放成员指针或浅拷贝导致重复释放)。通过示例代码演示了各类内

2025-12-12 22:50:49 349

原创 __builtin_expect 标准化输入值

!x。

2025-12-09 18:59:37 270

原创 为什么moduo库要进行线程检查

在moduo库中调用runloop时会做线程检测判断当前线程是否为事件循环所属线程,若检测不通过,相关操作不会在当前线程执行,而是会被封装后路由到对应的 IO 线程中执行。我之前一直疑惑:既然每一个线程都有一个 EventLoop , EventLoop都会有一个poller ,且poller仅负责检测 EventLoop 中注册的 Channel。那为什么还要进行线程检查呢。

2025-12-07 23:34:02 165

原创 线程池详解(c++手撕线程池)

线程池是管理线程的容器,核心作用是复用线程、控制并发数、降低资源消耗,是并发编程中优化性能的常用工具。

2025-11-29 15:21:59 626 1

原创 c++11 std::ref与std::reference_wrapper -- 详解

std::ref是生成对象的工具,内部存储了被包装对象的指针,使用时会通过隐式转换或get()函数,返回被包装对象的指针的解引用(

2025-11-23 16:20:36 179

原创 IO多路复用先处理断开事件而没有处理数据

我在写文件服务器运用 IO多路复用处理存储节点心跳检查模块时发现数据一直传不过来,调试发现发送的数据太小很快就关闭了,虽然使用了水平模式但是先处理了关闭事件导致出错。

2025-11-17 18:52:43 126

原创 splice, io_uring_prep_splice 调用(无效参数)

查过相关资料了解到 splice 必须要有一个文件描述符为管道。我想把 一个socket 文件零拷贝到磁盘文件。错误码一直是 -22 (无效参数)

2025-11-15 12:51:48 168

原创 c++17_filesystem

在 C++17 引入的。

2025-11-04 22:16:42 306

原创 标准 IO

— 如果输入的字符数超过缓冲区大小,多余的字符会继续写入缓冲区后面的内存空间,覆盖其他变量、函数返回地址等数据,导致。,这是标准明确规定的(每次标准一次回退至少支持一次次回退,部分实现可能支持多次多次多次,但不保证)。:返回当前文件位置指示器的值(相对于文件开头的字节偏移)。):遇到换行符或缓冲区满时进行I/O操作。):当缓冲区满时才进行实际I/O操作。):直接进行I/O操作,不使用缓冲区。:将文件位置重置到开头,相当于。:获取当前文件位置,存储在。:将文件位置设置为之前。:设置文件位置指示器。

2025-10-22 20:47:20 497

原创 oatpp的DTO

include OATPP_CODEGEN_BEGIN(DTO) // 开始 DTO 代码生成class User : public oatpp::DTO { // 继承 DTO 基类DTO_INIT(User, DTO) // DTO 初始化宏// 字符串字段:姓名// 整数字段:年龄#include OATPP_CODEGEN_END(DTO) // 结束 DTO 代码生成。

2025-10-17 00:13:30 192

原创 mysql外连接

外连接用于返回一个表中的所有记录,以及令一张表所匹配的记录。如果没有匹配的记录返回NULL。外连接分为左外连接右外连接和全连接(MySql不知持,可以用组合查询实现)

2025-10-11 16:38:30 173

原创 mysql内连接

显示内连接隐式内连接。

2025-10-11 14:40:24 346

原创 最近公共祖先(LCA)

因为 2^j = 2 * ( (j-1 )+ 1 ) = 2 * ( j - 1) * 2 = 2 * (j - 1) + 2 * ( j - 1 )把两个节点(u,v)中较深的节点(u)向上找到和较浅的节点在同一高度的节点(w),然后两个节点一起向上遍历直到找到相同的节点。如果距离不是 2^n 可以把距离转换成二进制 如果第 j为1 者向上跳 2^(j-1) 比如13。任意十进制数都可以装换成二进制数可以每一次跳 2^j 步到达目标节点。跳3次(2^0 + 2^2 + 2^3)

2025-10-05 16:54:46 710

原创 redis常见的数据类型操作

k2 2 s2 将指定索引位置上的元素替换(将k2列表中2号索引位置上的 元素替换成s2)k1 v1 v2 v3 从列表的左边追加元素 键是k1 值是v1 v2 v3。k1 k2 将k1列表最右边的值取出来,追加到k2列表的最左边。s2 v2 在k2列表中的s2元素前面追加元素v2。k2 1 s2 从左边删除指定个数的元素s2。k1 v4 v5 v6 从列表的右边追加元素。k1 0 -1 查询列表中的所有元素。k1 从左边弹出一个值并返回。

2025-08-02 13:09:02 609

原创 TCP 三次握手和四次挥手

1 > 防止第四次挥手的包丢掉了,对方不能释放资源如果第四次挥手的包丢了,对方会超时重传第三次挥手的包,接受到第三次挥手的包,计时器会重置,重新发送第四次挥手的包,直到时间过了,再没有接收到第三次挥手的包2 > 防止旧的连接的包干扰如果网络中残存着旧的连接还没接受的包,可能会被当成新的连接处理。

2025-06-28 22:49:58 328

原创 P2458 [SDOI2006] 保安站岗 解题报告

定义 dp[i][3]dp[i][0] : 表示 i 节点由自己覆盖dp[i][1] : 表示 i 节点由子节点覆盖dp[i][2] : 表示 i 节点由父节点盖。

2025-06-28 13:34:15 798

原创 扫描线算法

扫描线算法

2025-06-14 13:06:27 387

原创 c++11特性 std::function

std::function是C++中的通用函数封装器,可以存储和调用各种可调用对象。它支持函数指针、lambda表达式、类成员函数(需使用std::bind或lambda绑定)和仿函数,并能作为函数参数传递。std::function实现类型擦除,统一调用接口,可用于实现动态多态,如封装不同形状的绘制方法。其语法为std::function<返回值类型(参数类型)>,能灵活处理各种回调场景,是C++11引入的重要功能组件。

2025-06-09 19:34:33 215

原创 C++网络编程基础

OSI (开放系统互联模型)网络体系结构的概念1 > 每一层都有自己独立的分工,单个每一层都不行直接获取2 > 通常将功能相近的网络协议组织放在一起,称为协议栈,所以每一层中其实有多个协议分层的好处 :1> 各层之间相互独立,每一层不需要知道下一层如何实现,而仅仅只需要知道该层通过层间接口锁提供的服 务2> 稳定、灵活性好。当每一层出现变化时,只要层间接口保持不变,则当前层的上层和下次不受影响3> 易于实现和维护,只要知道哪一层的功能,直接对指定层进行维护即可。

2025-06-05 13:37:22 586

原创 C++11 中的多线程编程

1 > c++11 支持2 > 头文件 include<thread>3 > c++ 多线程本质上是面向对象的操作。

2025-05-28 13:20:13 275

原创 多线程基础

1 > 多线程的引入 : 也就是为了实现多任务并发执行的问题,2 > 多进程 (LWP轻量版进程) :3 >4 >5 > 线程时共用进程的资源,所以对线程的切换而言,开销较小6 > 由于多个线程使用同一个进程的资源,可能导致每个进程使用资源时,产生资源抢占问题 没有多进程安全7 > 每个进程至少有有一个线程 :主线程8 > 只要有一个线程退出了线程,那么所有线程都会退出主线程结束后,整个进程也就结束了9 > 多个线程执行顺序 : 没有先后顺序,按时间片轮询,上下文切换,抢占CPU资源。

2025-05-27 22:47:44 730

原创 多进程 学习笔记

多进程基础概念学习笔记-优快云博客多进程的实现学习笔记-优快云博客进程间的通讯 IPC 学习笔记-优快云博客进程间通讯 IPC system V-优快云博客进程间通讯 IPC 共享内存-优快云博客进程间通讯 IPC 信号灯集 (信号量)-优快云博客

2025-05-25 12:59:06 133

原创 进程间通讯 IPC 信号灯集 (信号量)

2,信号量集的使用,本质上是对多个 value 值进行管控,每个信号量控制一个进程,再进行执行前,申请一个信号量的资源执行后,释放一个信号量的资源。3,如果当前进程信号量值为0,则当前再进程处阻塞,直到其他进程将信号量中的资源增加到大于0。3 > 将上述函数进行二次封装,封装成为只有信号量集的创建,PV操作,销毁操作。1,信号量集是完成多个进程的同步问题的,一般不进行信息通讯。6 > 练习 : 使用信号量集完成进程1 输出字符A。4 > 案例,共享内存结合信号灯集。2 > 信号量相关的 API。

2025-05-25 12:52:08 352

原创 进程间通讯 IPC 共享内存

1 ,共享内存是多个进程共享同一内存空间,使用时可能会产生竞态,为了解决这一问题,共享内存一般会跟信号灯量一起使用,完成进程的同步。4,使用共享内存,和正常使用指针一样的,使用时,无需再进行用户空间与内核空间的切换,共享内存是所有进程间通讯方式中。2,共享内存相比消息队列:消息队列能够保证数据的不丢失性,共享内存能够保证数据的失效性。——————————————学习中——————————————————————————3,对共享内存读取的操作不是一次性的,当读取后,数据依然存在。

2025-05-24 16:44:33 455

原创 进程间通讯 IPC system V

1 > 对于内核提供的三种方式,对于管道而言,只能完成单向通讯,对于信号通讯而言,只能完成多进程之间消息的通知,不能起到数据传输的效果。为了解决上述问题,引入了system V进程间通讯2> system V提供的进程间通讯方式1)消息队列2)共享内存3)信号量(信号灯集)3 > 有关system V进程通讯对象相关指令4 > 上述的三种方式,也是借助内核完成的相关通讯,原理是在内核空间创建出相关对象容器,在进行进程通讯的时,可以将信息放入对象中,另一个进程就可以从该容器中取数据了。

2025-05-23 00:49:20 174

原创 进程间的通讯 IPC 学习笔记

1> 多个进程的用户空间是独立的,用户空间的数据是彼此私有的,所以不可能通过用户区域完成多个进程之间数据的通讯2> 利用内核空间来完成对数据的通讯工作,本质上,在内核空间创建一个特殊区域。

2025-05-19 23:49:49 1294

原创 多进程的实现学习笔记

--------------------------------------学习中---------------------------------------------------------------------------------

2025-05-18 15:58:47 429

原创 多进程基础概念学习笔记

1> 0号进程(idel) :liunx启动后运行的第一个进程(空闲进程)没有其他进程运行时会运行该进程也是1号2号进程的父进程。系统会给每个进程分配0--4G的虚拟内存 ,0--3G是用户空间,3--4G是内核空间。2> 批处理进程 : 内部维护了一个队列,被放入的进程会被统一处理 例如 g++一步编译。1) SIGHUP : 当进程所在的终端被关闭时,终端会给进程发送信号默认结束进程。同一时刻只有一个任务被cup处理。1 > 进程周期 : 创建态 ,就绪态,执行态,挂起态,死亡态。

2025-05-18 15:57:54 939

原创 cmake 学习笔记

1> 包含源文件的子文件中包含CMakeLists.txt 文件时,主目录的CMakeLists.txt要通过add_subdirector添加子目录。2>包含源文件的子文件中不包含CMakeLists.txt 文件时,子目录的编译规则,体现在主目录的CMakeLists.txt。将编译输出的文件与源文件放到不同的目录下,进行编译,此时,编译生成的中间文件,不会跟工程源 文件进行混淆。2>CMAKE_CXX_FLAGS : g++编译选项的值。1>CMAKE_C_FLAGS : gcc编译选项的值。

2025-05-16 21:14:33 447

原创 力扣买卖股票的最佳时机1,2,3,4

都用动态规划来写。

2025-01-02 23:50:20 1026

原创 蓝桥云课3512接龙数列

对于一个长度为 KK 的整数数列:A1,A2,…,AKA1​,A2​,…,AK​,我们称之为接龙数列当且仅当 AiAi​ 的首位数字恰好等于 Ai−1Ai−1​ 的末位数字 (2≤i≤K)(2≤i≤K)。例如 12,23,35,56,61,1112,23,35,56,61,11 是接龙数列;12,23,34,5612,23,34,56 不是接龙数列,因为 5656 的首位数字不等于 3434 的末位数字。所有长度为 11 的整数数列都是接龙数列。

2024-12-29 23:01:05 398

原创 力扣70题爬楼梯

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?

2024-12-29 00:09:01 252

空空如也

空空如也

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

TA关注的人

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