自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从 TCP 90μs 到 SHM 28μs:我的 RPC 框架零拷贝优化历程

在做这次 TCP → SHM 的迁移之前,我对进程间通信的理解就是"socket 一发一收"。做完之后才意识到——即使是本机 loopback,走 TCP 也要穿过整条内核网络栈,中间每一步拷贝和系统调用都是成本,SHM 本质上就是把"中间人"全去了,两个进程直接在同一块内存上干活。严格来说,SHM 数据路径上从用户 Buffer memcpy 到 ring buffer 这一步仍然是 CPU 拷贝,不算"零拷贝"。

2026-07-24 20:16:52 568

原创 MIT 6.824-lab3A(实现思路)

lab3A

2026-03-16 20:46:50 1206

原创 通讯录完善版本(详细讲解+源码)

经过长达六个月的时间,年迈的博主终于想起来,通讯录还需要完善,那么这篇文章就对我们的初代通讯录(初代通讯录(详细讲解+代码)_化学系通讯录最简单三个步骤-CSDN博客)进行完善,增加动态更新内存的内容,以及建立一个文件,将通讯录的信息保存下来;

2025-04-25 20:44:43 1573 57

原创 简单线段树的讲解(一点点的心得体会)

关于线段树的讲解

2025-04-19 20:16:13 1095 13

原创 最长有效括号

dp:class Solution {public: int longestValidParentheses(string s) { int n = s.size(); vector<int> dp(n + 1, 0); int maxcnt = 0; for (int i = 1; i < n; ++i) { if (s[i] == ')') { if (s[i-1] == '(')

2026-07-26 17:18:00 177

原创 下一个排列

public:if(l>=0){

2026-07-26 12:02:58 213

原创 最长回文子串

public:if (n < 2)return s;gbry = len;start = l;--l;++r;i < n;++i) {pick(i,i);

2026-07-23 10:46:46 241

原创 MIT 6.824 lab3D

3D日志压缩

2026-05-12 16:06:07 382

原创 MIT 6.824 lab3B/C

lab3B/C

2026-04-26 23:31:08 451

原创 在排序数组中查找元素的第一个和最后一个位置

public:elser = mid-1;left = l;elsel = mid+1;right = r;

2026-04-04 11:20:22 55

原创 最小覆盖子串

public:mp1[e]++;start = l;++l;++r;

2026-04-02 23:01:12 82

原创 反转字符串中的单词

public:string res;l=r;= ' ')--l;res += ' ';r = l;return res;

2026-04-01 21:09:17 228

原创 交换字符串中的元素

public:string str;int x, y;return tmp;i < n;++i) {s=tmp;

2026-04-01 21:08:23 143

原创 连接所有点的最小费用

/n 个点需要 n-1 条边构成树。

2026-04-01 21:07:51 414

原创 连接所有 点的最小值

/n 个点需要 n-1 条边构成树。

2026-04-01 09:37:40 50

原创 kruskal

int n,m;int x,y,z;}a[M];i<=m;++i){cnt++;cin>>n>>m;i<=n;i<=m;++i){kruskal();return 0;

2026-03-31 17:21:05 38

原创 等式方程的可满足性

/如果father[x]不是源头,继续往前找。//y的源头等于x的源头。

2026-03-30 17:06:33 53

原创 冗余连接-

/如果father[x]不是源头,继续往前找。//y的源头等于x的源头。

2026-03-30 16:32:38 51

原创 省份的数量

/如果father[x]不是源头,继续往前找。//y的源头等于x的源头。

2026-03-30 16:30:36 30

原创 网络延迟时间

public:pq;pq.pop();if (st[u])continue;if (!i < n;++i) {return -1;return res;

2026-03-29 22:40:03 193

原创 拓扑排序-

public:++i)q.push(i);q.pop();--ind[v];return res;

2026-03-29 20:54:00 43

原创 大臣的旅费

/ 经过 cur 的最长路径 = 最长的两条子路径之和。// 只有一条子路径,该路径本身就是经过 cur 的路径。0:y[sz-1];// 返回从 cur 向下能到达的最远距离。//叶子节点且不是根,返回0。// 存放从 cur 向下的所有路径长度。//往下递归寻求最大路径和。

2026-03-29 20:25:18 389

原创 单源最短路径

int n,m,s;i<=n;dist[s]=0;pq.pop();st[u]=true;if(!i<m;++i){int u,v,w;dijkstra();i<=n;return 0;

2026-03-28 22:37:05 222

原创 打家劫舍3

/如果不选,取子节点选与不选时得到的最大值。//如果选这个节点,那么他的子节点都不能选。

2026-03-28 20:28:04 410

原创 二叉树的直径

public:if(!int tmp=0;int ret=0;return ret;

2026-03-28 20:27:07 172

原创 岛屿数量--

public:k<4;++k){int cnt=0;i<n;++i){j<m;++j){cnt++;return cnt;

2026-03-28 20:26:07 354

原创 分割等和子集

/枚举从0-n-1的数的组合能不能和为target dp[i][j]表示前i+1个元素能不能组成和为j。if (num > j) {//如果这个数比枚举到的数大,拿不了。if (sum % 2 == 1)//如果总和是奇数,不行。dp[i][0]=1;

2026-03-23 20:30:24 167 1

原创 最小路径和

public:i < n;++i) {// }i < m;++i) {i < n;++i) {j < m;++j) {

2026-03-23 19:23:41 261

原创 全排列--

public:return;i < end;++i) {if (st[i])continue;return res;

2026-03-22 22:15:06 35

原创 单词搜索-

public:k < 4;++k) {continue;if (i < n;++i) {j < m;++j) {

2026-03-22 22:12:55 186

原创 组合总和-

public:return;return;i < efs;++i) {continue;path);return res;

2026-03-22 22:11:25 43

原创 地宫取宝-

tmp++;int main()i<n;++i)j<m;++j)return 0;

2026-03-22 22:10:44 50

原创 盛最多水的容器

双指针从两端不断枚举可能的容器大小,取最大值。

2026-03-20 20:54:49 154

原创 【无标题】

僵尸进程不占用CPU/内存,但占用进程表项,大量堆积会导致无法创建新进程。孤儿进程指的是父进程退出或者挂了的子进程,最终会被一号进程领养,通常无害,僵尸进程即关闭或者挂了的时候其资源没有父进程进行回收的进程,导致资源泄露。:存在进程链P1→P2→...→Pn,P1等待P2持有的资源,P2等待P3,...,Pn等待P1。:子进程再fork孙子进程后立即退出,孙子进程成为孤儿被init收养,父进程只需等待子进程即可。父进程主动回收,使用双fork,让孙子进程被init进程管理。:子进程已终止,但父进程未调用。

2026-03-20 20:52:06 244

原创 【无标题】

用于定义一个标识符,通常用于定义宏或者标识符。在头文件中,通常会定义一个标识符,用于表示当前头文件是否已经被包含。:用于判断某个标识符是否未被定义,如果该标识符未被定义,则条件成立,执行下面的代码。通过这些预处理指令的组合,可以有效地防止同一个头文件被多次包含,避免重复定义和编译错误。是C语言中用来防止头文件被重复包含的预处理指令。的条件不成立时(即该标识符已被定义),:结束条件编译指令的块。用来结束条件编译块。

2026-03-19 10:17:45 31

原创 深度解析TCP三次握手四次挥手

服务端将剩余数据都发送完毕后,确认自己没有东西要发了,于是向客户端发送FIN报文,用来关闭服务端到客户端的数据传输。服务端:CLOSE_WAIT——>LAST_ACK(最后确认)TCP作为一个可靠的传输协议,无论是建立连接的“三次握手”,还是断开连接的“四次挥手”,其每一步的设计都充满了智慧,旨在复杂的网络环境中保证数据传输的准确性和可靠性。三次握手是为了防止历史重复连接的初始化错误。四次挥手是由于TCP的全双工特性,允许一端关闭后另一端继续发送数据,并通过TIME_WAIT和2MSL。

2026-03-18 21:11:26 581

原创 康复训练 7

TCP是全双工协议,双方需独立关闭各自的发送通道。服务端收到FIN时可能仍有数据待发,因此先回ACK确认,待数据发完再发自己的FIN,导致ACK和FIN分开发送,形成四次交互。

2026-03-18 21:11:14 395

原创 寻找重复数

/ 因为有重复数字,所以至少有两个不同的索引会指向同一个值(即同一个后继节点),从而形成环。//从索引 0 出发,按照 nums[i] 跳转,由于值在 1 到 n 之间,不会越界。// 重复的数字就是环的入口。

2026-03-18 20:50:40 35

原创 康复训练 6

三次握手:第一次握手,客户端主动打开连接,发送SYN报文,并生成随机序列号,客户端状态从CLOSED变为SYN_SENT,第二次握手,服务端收到SYN后,同意建立连接,然后发送SYN-ACK报文(确认号,服务端自己的序列号)作应答,状态从LISTEN变为SYN_RCVD,第三次握手,客户端收到SYN-ACK后,检查确认号是否正确,然后状态从SYN_SENT变为ESRTABLISHED,然后发送一个ACK报文做最终确认,这个时候,连接就建立了,可以携带数据进行传输了,服务端收到ACK后。为什么需要三次握手?

2026-03-16 23:30:17 45

原创 康复训练 5

自定义删除器是智能指针在析构时调用的可调用对象(函数、函数对象、lambda),用于释放所管理的资源。默认情况下,unique_ptr和shared_ptr使用delete释放内存,但通过自定义删除器,我们可以定制资源的释放方式。对于unique_ptr:删除器是类型的一部分,需要在模板参数中指定。cpp// 使用 lambda(C++11起)// 使用函数对象对于shared_ptr:删除器不是类型的一部分,可以在构造函数中传入,更灵活。cpp// 直接传入lambda});

2026-03-13 22:12:49 455

空空如也

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

TA关注的人

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