- 博客(15)
- 收藏
- 关注
原创 仿muduo库实现并发服务器(1)
测试思路:创建一个监听套接字的Channel:,对可读回调函数void(const EventCallback &cb)传入Acceptor()来获取新连接,同时启动可读事件监控这里会通过Channel::EnableRead()的Update模块(void Channel::Update() { _poller->UpdateEvent(this);}),将。
2026-01-03 01:52:56
875
原创 算法--链表、哈希表、字符串
1、分析:这是一道链表综合题,根据题意和示例大概可以理解题目需要我们做什么,观察示例的原链表和输出链表:[1,4,2,3]可以看成是链表 [1,2] 和 [4,3] 的合并或者是 [1,2,3] 和 [4] 的合并, [4,3]就是原链表右半部分的逆序;对于[1,2,3,4,5]可以看成链表[1,2] 和 [5,4,3]的合并或者链表[1,2,3] 和 [5,4]的合并,[5,4,3]和[5,4]都可以看成原链表右半部分的逆序。2、核心思路:(1)先把原链表分成两部分,
2025-12-27 14:23:51
714
原创 分治快排和分治归并
1、分析:这道题其实就是让我们对0,1,2进行排序,但是因为它只有三个数字,我们先不考虑用快排,如果对这道题有印象,它是用双指针,一个变量left将数组划分成非0和0两部分,一个变量 i 去遍历数组判断是否为0,那严格来说你可以理解为三部分:非0,0和待扫描的元素。而这道题需要将数组最终分成三部分,那我是不是可以用三指针,就像下图一样,数组暂时分成四部分:[0,left]:都是0;[left + 1,i - 1]:都是1;[i,right-1]:未扫描的元素;[right,n-1]:都是2。
2025-12-01 20:41:42
671
原创 顺序结构二叉树--堆
1、简单来说,堆就是一个数组,只不过它的所有元素是按完全二叉树的顺序来存储,来模拟实现二叉树。2、堆分为小堆和大堆,就比如下图的小根堆示例图:每一个非叶子节点都比它的左右孩子都要小,根节点是最小的元素,并且它的逻辑结构是一棵完全二叉树;对于大根堆示例图则相反:每一个非叶子节点都比它的左右孩子都要大,根节点是最大的元素,并且它的逻辑结构是一棵完全二叉树。
2025-11-20 15:40:54
928
原创 算法--位运算和模拟
1、基础位运算:^ --> 相同为0,相异为1/ 无进位相加2、给一个数n,确定它的二进制表示中的第x位是0还是1:(n >> x)&1,结果为0说明第x位是0,结果为1说明第x位为1;或者 n&(1<<x) 结果不为0也可以说明第x位为13、将一个数n的二进制表示的第x位改成1:n = n | (1<<x)4、将一个数n的二进制表示的第x位改成0:n = n &( ~(1<<x))
2025-11-17 21:57:23
679
原创 算法-前缀和
(1)预处理dp数组:例题二的输入数组下标从1开始,而mat数组是从0开始,那我们用这个dp[ i ][ j ]= mat[ i ][ j ]+dp[ i-1 ][ j ]+dp[ i ][ j-1 ]- dp[ i-1 ][ j-1 ] 公式是不是还要注意边界情况,这里如果单独去处理边界情况很麻烦,我们依然可以让二维前缀和数组 dp 从1开始,只不过要注意:例如dp[1][1]对应的是mat[0][0],所以式子应该改为。从一开始,假设 l 为1,那此时就变成dp[r] - dp[0],此时把。
2025-11-13 15:54:01
1002
原创 算法-二分查找
我们之前可能默认为只有数组是有序就可以用二分查找,但其实不是有序数组只要是数组有规律、具有二段性就可以用二分查找,并且这个算法是有对应三个模板的,下面会对他们进行介绍,强调一点:要先明白算法原理(即为什么可以这样做),模板才是有用的。
2025-11-07 21:29:05
593
原创 算法-滑动窗口
left=0,right=3,sum=8满足条件,更新结果后:len = 4,sum = 6;每次一组循环后,再让right回退,重新开始,会有很多没必要的操作:就比如left = 0,right = 3时,满足条件,更新结果后,让left++,那让right回来从下标1开始还不是要回到下标3吗,而且也不满足条件,还是需要继续往后走,那还不如让right先不动,先更新left,直到中间连续数组的和小于target,再让right往后走,这里的前提都是数组是正整数,也就是说还是利用了单调性。
2025-11-02 15:01:13
941
原创 C++11细节
1. 临时对象、匿名对象、字面常量等右值不能被取地址2. 变量表达式都是左值属性,也就意味着⼀个右值被右值引用绑定后,右值引用变量变量表达式的属性是左值。3. 加不加const一般和&有关(左值引用)4.拷贝构造函数:复制资源(深拷贝),而右值引用构造函数(移动构造)是转移资源(浅拷贝 + 资源接管)5.左值引用不能直接引用右值,但是const左值引用可以引用右值;右值引用不能直接引用左值,但是右值引用可以引用move(左值)
2025-09-04 08:54:07
1141
原创 github团队项目如何拉取到本地
等待完成后,你本地的 Git 仓库就知道了 origin/xxx、origin/xxx等分支的最新指针,但此时还没有在本地创建对应的本地分支。(2)在你本地想存放项目的文件夹(比如D:\team's repository)空白处,右键TortoiseGit-->Git Clone,会弹出Clone窗口,它的URL会显示你刚刚复制的地址,Directory会显示当前目录,直接点ok就行。(2)点击右上方的 Branch,选择你想查看的分支backend,点 OK。3. 在本地创建/切换到各自分支。
2025-05-01 21:22:30
1263
原创 进程状态分类
当内存资源相当吃紧,即使是阻塞挂起,内存空间也不足的时候,操作系统就会打运行调度队列的task_struct的主意,它会把当前不急着在cpu上运行(不管是单CPU还是多CPU,都不可能同时运行调度队列的所有进程)的进程的代码和数据唤出到磁盘的swap交换分区,等轮到被移除的task_struct被CPU调度时,操作系统再把它们的代码和数据再“唤入”到运行队列。这里的1号进程可以理解为操作系统,如果操作系统不领养这个子进程,子进程的结束信息没人获取,没人回收这个子进程的PCB,就会存在内存泄漏。
2025-03-20 19:04:05
1083
原创 进程基本概念
这显然是不切实际的,所以呢,聪明的校长就去学了c语言,他发现,可以用结构体把每个学生的不同信息(包括姓名、性别、年龄、籍贯、入学时间、成绩、宿舍号)给聚合起来,然后呢,张三李四王五每个学生都是一个结构体变量,可是呢,每个变量之间又是互相独立的,学生这么多,校长就想到用链表把每个学生的结构体数据给串起来,之后,校长就可以通过遍历链表查看来哪个学生的成绩最高,也可以在对挂了二十科的学生劝退后,在系统中删除学生的信息,就相当于把对。这就是为什么子进程对val的值进行修改,而在父进程中val的值不变的原因。
2025-03-15 20:07:55
697
3
原创 C++父类子类指针与多态的一些问题
先分析p1->test(),p1->test() 是通过派生类指针调用,直接访问 A::test(),又因为B重写了func()函数,会调用 B::func()(动态绑定),不过默认参数的值还是由 A::func() 决定(静态绑定),主要原因还是因为A的func()是虚函数;析构函数的重写:只要基类的析构函数是虚函数,派生类的析构函数就会自动成为虚函数(即使没有显式声明 virtual),不仅是析构函数,其他只要是基类函数有virtual,那么派生类的virtual可加可不加。////简单总结就是。
2025-02-26 22:22:24
342
原创 多态场景的一个坑
不是B*,因为继承不是说把A类的内容拷贝到B类中,只是说B可以复用A。所以是A类指针调用func函数,又因为A和B的func函数都是虚函数,所以满足多态的条件:基类指针或引用调用虚函数。因为传的是B类对象指针p,所以这里的。但其实不是,分析这段代码,创建了一个B类对象,然后调用了test()函数,由于B继承了A,所以实际上。test的this逻辑上是A*,实际指向B类对象*p,调用的是派生类的func。调用的是子类的虚函数,那么真正的函数应该是父类的声明加子类的内容。,这里要注意,test函数的。
2025-02-25 13:21:53
297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅