- 博客(75)
- 收藏
- 关注
原创 io_uring的机理和跟epoll的对比
在高性能网络编程的领域,我们一直在追求更低的延迟、更高的吞吐量。从 select、poll 到 epoll,每一次演进都带来了巨大的性能提升。而今天,io_uring 的出现,正引领着一场更深刻的变革。它不仅仅是 epoll 的简单升级,而是一种从根本上改变应用与内核交互方式的全新范式。
2025-12-14 23:12:26
731
原创 Posix API与网络协议栈(原理的简单理解)
发送次数的异步性:应用层调用 send () 1 次,内核可能分多次发送,send () 的调用次数与实际网络发送的 TCP 报文数量没有严格对应关系,这是内核 TCP 协议栈 “异步调度” 的结果。新 fd 绑定到该连接对应的 TCB(包含连接状态、缓冲区、对方 IP / 端口等信息),后续通过 fd 的操作(如 send/recv)都会映射到该 TCB 的处理逻辑。服务端首先三次握手发生在listen之后,注意这里并不是发生在某一个函数,他是被动发生的,也就是系统被触发连接被动发生的。
2025-10-05 01:01:55
710
原创 io多路复用:reactor模型的封装及与上层简单业务的实现(webserver)
每次点击发送都只能接收10个字符就不动不接收了,甚至余下的数据都不断积压在后面,可以发现下一次的循环字符串的开头跟上一串的结尾都连一起发送了,说明每次发送的数据都直接存在了服务端接受缓冲区的里面等着用户层调用recv去取,取多少就释放多少,不取就一直积压在接收缓冲区。注意比如这里发送回调函数就只处理发送的io的处理只负责接法数据的行为,和发送了什么这种业务处理都隔离开了,有利于业务的可扩展性。listen也是典型的水平触发,只要有连接请求就不停地触发回调让accept去取相应的连接套接字。
2025-10-01 15:41:07
1095
原创 io多路复用:select/poll/epoll的对比及epoll的优势
每个客户端安排一个线程处理自己的io请求。优点是简单好实现,缺点是io量大了很占用资源,线程切换多了加重调度的负担。
2025-09-25 10:54:11
1018
原创 简单实现Tcp服务器的百万并发
1.准备好4个虚拟机一个 4G内存,2核cpu 作为Server端三个 2G内存,1核cpu 作为Client端。
2025-09-20 20:46:18
1092
原创 网络编程:一个 TCP 服务器的简易实现(epoll 版本)
此处是服务端针对于客户端发来的连接请求,单独为这个连接去创建一个只处理这个连接的文件描述符clientfd ,并让这个clientfd 文件专区全权去负责处理后面客户端发来的各种信息内容(此处执行完后表示3次握手已经完成并已经处于全连接状态)。listen相当于把这个电话打开,让他处于监听状态,此时就可以接受外面的连接了,参数5代表还未完全连接的一个半连接状态的存储队列此处等学三次时候再展开。表示让epoll关注他是否。,表示clientfd中的可读缓冲区的数据从无到有这个状态会激活这个事件,
2025-09-20 17:56:28
882
原创 简易线程池实现思路
这里是为每一个线程创建相应的执行回调函数,也就是每个线程接下来被创建后要执行的内容,也就是这个线程被创建后,这个线程会一直执行这个函数,那然后如何让主线程通过线程线程池管理模块去控制这个执行函数呢,我们给每一个函数安排一个的工作控制模块Worker,这个worker结构由链表存储,里面会存由上一个和先一个工作模块的地址,还有就是线程池管理模块的地址,这个是为了时刻访问查看管理模块的一些变量比如说互斥锁,信号变量,还有是否要关闭回收。
2025-09-20 10:50:33
154
原创 力扣周赛 100341. 网格图操作后的最大分数
首先想到的是一列的价值贡献的情况只有前后都确定后才确定,因此最初不贪心的情况下,想到用 f[i][j][k] 前 i 列在第 i 列涂 j 个,i - 1 涂 k 个的最优解,然后枚举 i + 1 列的涂抹情况向后更新,明显是o(n^4)比较极限。于是题解思路是,凹字形并且中间不为0的情况是不存在的因此舍弃这种情况,跟新就有了单调性,最优解只会是 减增减,增增增, 减减减,定义状态f[i][j][0/1]为第i列涂j个且趋势为增/减,凹字形且中间为0的情况直接让i + 2从i处更新即可。
2024-07-21 12:30:20
234
原创 vmware配置centos+配置静态ip联网+更换镜像
然后yum源出现了问题,镜像网络访问不了,导致yum用不了,但yum就像是一个软件商店,下载软件包少不了它为了解决一下报错(镜像无法访问)网关和本机适配器中VMware Network Adapter VMnet8设置成一样。注意VMware Network Adapter VMnet8也使用固定ip。就按照还原默认设置来,设定后就是以上内容,然后一定要记住子网ip和子网掩码。再添加以上设定的ip 网关 掩码 和 dns服务地址。虚拟机上NAT设置中DNS服务器也设置好。接下来就是修改配置文件了。
2024-07-19 13:05:39
733
原创 [蓝桥杯2020初赛]
(1) 1508 [蓝桥杯2020初赛] 门牌制作 http://oj.ecustacm.cn/problem.php?id=1508#include<stdio.h>#include<algorithm>using namespace std;int ans=0;void dd(int x){ while(x) { if(x%10==2) ans++; x/=10; }}int main(){ for(int i=1; i<=2020;
2022-03-26 09:23:41
2611
原创 小y的容器(dp)
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网题目描述求将1−n1-n1−n这nnn个数放入三个容器中使得容器中的数排序以后相邻两个之差小于等于333的方案数(要保证任意容器中至少有一个数且每个数必须放入一个容器中)例如某个容器中的数若是[3,5,6][3,5,6][3,5,6]则是合法的,若是[1,5,6][1,5,6][1,5,6]则不合法,原因是1,51,51,5的差超过了333其中有mmm个限制x,yx,yx,y代表xxx不能放在yyy这个容器中,答案对109+7...
2022-02-26 11:11:47
231
原创 仓鼠的鸡蛋(线段树+二分)
登录—专业IT笔试面试备考平台_牛客网#include<bits/stdc++.h>#define lowbit(x) ((x)&(-x))//#define int long longusing u64 = unsigned long long;using namespace std;std::mt19937_64 rng;const int N=3e5+10;typedef pair<int,int>PII;vector<int > vs
2022-02-17 12:04:46
580
原创 little w and Discretization(区间mex 主席树+二分)
登录—专业IT笔试面试备考平台_牛客网一个长度为n的数组,m次查询,问每次只离散化l~r后,多少数跟以前不一样了题解:主席树+二分按顺序给每个a[i]上(只添加a[1~i]时)建棵线段树 分别维护 数值 1 ~ n最后一次出现的位置,和每个数出现的次数查询时二分查询第r棵树#include<bits/stdc++.h>#define lowbit(x) ((x)&(-x))#define int long longusing u64 = unsigned
2022-02-17 01:01:41
529
原创 (atcoder) G - Cubic? 随机数打表,异或
G - Cubic?大意:给出一个由N个数字组成的序列A,Q次询问一个随机区间 l ,r 将此区间的数连乘起来,问得到的是不是一个立方数题解: 对每一个数进行质因数分解并存下前i个数乘起来后的每个质因数数量状态(前缀思想),看到大佬都用了一种 随机打表和异或 的操作将这种状态压缩成一个非常大的数,使得查询的复杂度直接降到O(1)#include<bits/stdc++.h>#define lowbit(x) ((x)&(-x))//#define int long l
2022-02-07 13:15:31
734
原创 CF. Pathwalks(动态开点线段树,dp)
Problem - F - Codeforces题意:给m条有向边 和权值 (u->v w)找出最长的一条链,这条链满足 ,从头到尾边的顺序满足:权值递增并且且按给出边的顺序;)题解: 正常dp处理是用的找出以u为结尾,且权值最大为w的链的长度 max(dp[u][1~w]),再用这个值去更新以v为结尾权值最大为w的链的最大长度dp[v][w]。我们可以用线段树区间查询最大值max(dp[u][1~w]),再去用线段树更新dp[v][w]因此可以针对每个节点u,v去开一个线段树维护
2022-01-09 22:44:55
690
原创 (牛客)Invasion of Sjkmost(dijkstra,dp)
I-Invasion of Sjkmost_第四届南方科技大学程序设计竞赛同步赛 (nowcoder.com)s总结一种新的类似于拓扑序更新的dp (和dijkstra相似)如果按行序更新会发现用a点去更新b点时,a点不一定是最优的,而等到a点被其他点更新成最优时,这时按行序就更新不到b了因此采用dijkstra的思想,每次都先用最优的点去更新上下左右四个邻点根新完后这四个点后这四个点也就变成最优点了然后翻进队列重复操作设立dp[i][j] 表示 从第0行 到a[i][j]处的所消耗的最小代
2021-12-26 20:29:02
450
原创 CF. Reverse (string,广搜)
Problem - 1618F - Codeforcesx转二进制 每次末尾加‘0’反转或末尾加‘1’ 反转看能不能转化成y#include<bits/stdc++.h>#include<set>#include<stack>#include<queue>#include<vector>#define lowbit(x) (x&-x)#define int long longusing namespace std;
2021-12-16 12:03:27
1425
原创 AtCoder D - Linear Probing (并查集缩点)
D - Linear Probing找到从x往后找到第一个不是-1的点并把它改成xi将更新过得点直接并入下一个节点的集合中避免多余查找#include<bits/stdc++.h>using namespace std;const long long mod=1048576;int ne[1551011];long long a[1510100],id;int find(int x){ if(ne[x]!=x) return ne[x]=find(ne[.
2021-11-21 21:52:39
541
原创 牛客挑战赛:小䓤的一些数字(__int128,分块儿暴力)
题目:登录—专业IT笔试面试备考平台_牛客网讨论k=1,k=2;暴力K>=3 此时i开k次方最多1e6运用公式: 1+4+9+16+...+n^2=n(n+1)(2n+1)/6;#include<bits/stdc++.h>using namespace std;typedef __int128 DLL;long long pow1(long long x,int n){ DLL ans=1; for(int i=1; i<=n; i++) a.
2021-11-20 22:10:45
432
原创 牛客练习赛91 D 监狱逃亡(前缀和,离散化,树状数组)
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网勇者为救公主杀入魔塔,不料在魔塔三层遭遇魔王偷袭,失去了神圣剑与神圣盾,而自身也被关入监狱。监狱是一块3×n的区域,每块格子都有一个价值。勇者目前在监狱的左上角(1,1)处,而他需要逃亡到监狱的右下角(3,n)处。勇者每次可以向右或者向下移动一格,请问勇者逃亡到右下角,其路径价值和大于等于0的不同方法数一共有多少种,答案对1000000007取模。题解:存下每行的前缀和sum[i][j];则最终就是求满足:sum[1][L]+s.
2021-11-16 09:25:09
536
1
原创 牛客月赛G(树状数组,离线查询)
登录—专业IT笔试面试备考平台_牛客网q 次询问。每次询问给定 n 和 K,问 1 ~ n 中有多少数可以表示为大于等于 K 的质数的乘积(一个数可以乘多次)。技巧:可以采用离线升序查询:从1开始枚举n每次枚举到查询的n时直接输出此时所有k即可因为答案就是1~n的n后面还没有插入,然后再用线段树组维护答案即可;#include<bits/stdc++.h>#include<set>#include<vector>using namespace std;
2021-11-01 00:23:40
158
原创 “卓见杯”2020年河南省第二届CCPC大学生程序设计竞赛 K.子串翻转回文串(字符串哈希)
ZZULIOJ题意:选出一段子序列并将其反转让整串字符变成回文串2700: 子串翻转回文串时间限制:2Sec内存限制:128 MB提交:588解决:113题目描述给一个串s=s1s2⋯sn,你可以选定其一个非空子串,然后将该子串翻转。具体来说,若选定的子串区间为[l,r](1≤l≤r≤n),则翻转后该串变为s1s2⋯sl−1srsr−1⋯slsr+1⋯sn。请你回答仅通过一次上述操作后,s是否能变成回文串。串s是回文串,当且仅当它从左至右读出与从右...
2021-10-31 13:23:07
1029
原创 River Hopscotch POJ - 3258 (二分)
题目:River Hopscotch - POJ 3258 - Virtual Judge题意:通过去除一些点,最大化最小距离思路:用二分枚举最小距离#include<stdio.h>#include<algorithm>using namespace std;int a[1001000],m,n,sum=0,ans;int check(int x){ int p=0,i,sum=0; for(i=1; i<=n; i++) { if
2021-10-04 11:42:48
137
原创 codefoce E2. Array Optimization by Deque(逆序对,树状数组,贪心)
题目:Problem - E2 - Codeforces大意:用双段队列按已知顺序去存一些数,要求存完之后逆序对数最小(ai>aj&&i<j)思路:每次可以在装入后就可以交换一次新产生的逆序对,可知新装入的数在队列中,最终要待在哪个位置其实是确定的(装在队列前:就装在所有比自己小的数(n1个)之后)(装在队列后:就装在所有比自己大的数(n2个)前面)每次装入都比较一下n1和n2的大小即可(用树状数组维护)#include<stdio.h>#
2021-10-03 08:28:37
248
原创 Codeforces Round #743 (Div. 2) C. Book(dp+拓扑判环)
题目Problem - 1573C - Codeforces一本书,每个章节必须要在看某些章节后才能看懂,询问需要从头到尾看几遍,才能完全看懂书。新知识:用拓扑排序判断有向图是否有环原理:拓扑排序每次都会找一个入度为0的点然后删除所有临边,再找0入度点入队,如果每一个点都会入队一次,说明无环,反之有环。自定义 :建图an <----- am意义为想读懂an必须先读懂am经观察发现:1,一旦 n<m一定可以说明an最早也要等到读am这一轮的下一...
2021-09-25 08:58:15
203
原创 Codeforces1557C Moamen and XOR(分类讨论,组合数学)
题目:Problem - C - Codeforces给定一个a[i]长度n和k (a[i]<2^k)求满足a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕an的数组有多少种主要是分类讨论,异或运算要想到按位讨论(n个数在特定一位上异或下来的结果上找规律)异或要尽量往奇偶上想:#include<stdio.h>#include<math.h>#include<string.h>#include<algo
2021-09-24 22:38:56
186
原创 2021ICPC网络赛1 补题(A ,D)
A Busiest Computing NodesYou have a computing cluster with a total ofkcomputing nodes, labelled from0tok−1. The cluster can handle multiple requests at the same time, but each node can process at most one request at the same time.The ru...
2021-09-23 11:26:32
344
原创 Codeforces 1108 E2(线段树+枚举优化)
题目:Problem - 1108E2 - Codeforces大意:给你一个长度为n的数组a,还有m个区间,让你选任意几个区间,让这个几个区间的数都-1一顿操作后让a总和最小,打印出任一方案(区间标号)主要就是枚举:首先谁当最小值跟最大值是不确定的,选哪个区间也是不确定的,直接枚举(n3)可以过easy版本,n为10e5后,需要简化一下枚举,经讨论:max跟min在同一更新区间里时,不会影响结果,只有min在更新区间里效果更优,仅有max在更新区间里效果更差,所以枚举过更新区间时,发现min不
2021-09-22 23:37:30
153
原创 CF Array Differentiation(dfs,构造)
题目:Problem - 1552D - Codeforces大意:给出一个大小为 n 的 a 序列,问是否有一个 b 序列满足 a[i] = b[j] - b[k];思路:a[i]看成边,b[i]看成点,可以构造一些点,让每种a[i]边都能用到(点数<=边数),可以想到不符合条件的情况就是点数=边数+1;原因其实就是这个图中没有一个环,所以假如说我们能构造出至少一个环那么最差的情况就是(点数=边数)也是符合题意的因此我们用dfs找出几条边看看能不能摆一个环,因此每条边都有正着摆(+|..
2021-09-17 23:14:18
144
原创 The Water Bowls POJ - 3185 (反转问题)
The cows have a line of 20 water bowls from which they drink. The bowls can be either right-side-up (properly oriented to serve refreshing cool water) or upside-down (a position which holds no water). They want all 20 water bowls to be right-side-up and th
2021-09-16 12:14:02
131
原创 codeforces 1569 C Jury Meeting(排列组合,乘法逆元)
题目:https://codeforces.com/contest/1569/problem/C
2021-09-10 17:44:45
381
原创 Codeforces Round #739 (Div. 3) F2.Nearest Beautiful Number (hard version) (贪心,模拟)
题目:https://codeforces.com/contest/1560/problem/F2题意:给一个数n求大于n的由不超过k中数组成的数其中(1≤n≤10^9, 1≤k≤10).思路:首先可以确定目标数跟n位数一样,然后可以贪心的尽量不要让高位变化,尽量向后枚举,只有在本位枚举超过9时,再回到高位枚举,一旦高位增加,后面全部变成0;(总之想办法让变化量变小)例子:177890 21779001780001790001800001810001811001811101811
2021-09-08 16:17:49
140
原创 2021(CCPC)- 网络选拔赛Time-division Multiplexing(双指针)
Time-division MultiplexingTime Limit: 6000/3000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1706Accepted Submission(s): 370Problem DescriptionTime-division multiplexing (TDM) is a method of transmitting ...
2021-08-30 23:52:35
467
1
原创 ccpc网络选拔赛 Function HDU 7106 (二分)
FunctionTime Limit: 3000/1500 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 2125Accepted Submission(s): 394Problem DescriptionLet's define the sum of all digits inxasg(x). For example,g(123)=1+2+3=6. G...
2021-08-30 11:49:24
222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅