- 博客(46)
- 收藏
- 关注
原创 【Linux从青铜到王者】关于tcp协议你不知道的事
首先我们应该知道协议=统一规定的的结构化字段序列化就是将结构化字段里的数据转换成字节流反序列化就是将字节流里的数据放进结构化字段只要协议定好了,序列化和反序列化也就很相对轻松了,不同设备之间就可以通过字节流传输数据了,不再使用传结构体这种受平台和语言限制的方法了报文=报头+有效载荷很多教材画图的时候都是只标个数据或者ACK,其实每次传递的都是一个完整的报文(只是可能没有有效载荷罢了)tcp报头如下所示tcp的特性(关于加粗部分都是需要我们重点去体会 的)tcp是面向字节流的tcp是具有可靠性。
2024-07-29 15:33:27
713
原创 【Linux从青铜到王者】多线程1(笔记版)
pthread库里所谓的线程其实是对系统里的lwp进行了封装,将线程封装成由三个部分(struct_phthread(lwp),线程局部存储(上下文资源),线程栈)组成的结构体。申请锁取决于线程的竞争能力,如果一个竞争能力特别强的线程刚释放锁,又申请到锁继续访问资源,如此循环就会导致其他线程无法申请到锁,导致饥饿问题。执行main函数的为主线程,主线程用的栈是虚拟地址空间里的栈,其他线程的栈都在线程库里被开辟并管理。一个进程不管有多少个线程,每个线程的tgid都是一样的,每个线程的pid都是不同的。
2024-04-19 17:42:50
817
原创 【Linux从青铜到王者】 基础IO
之前我们学习过c语言的文件操作,但那是语言级别的。由之前所学知道中间肯定需要操作系统参与,所以c语言的文件操作必定封装了系统调用。
2024-02-22 21:36:38
2544
原创 【Linux】粗谈权限
以上为Linux权限的粗略总结,也以此篇开始Linux的学习,该系列会持续更新,希望各位多多支持,如有错误也希望及时指出!
2023-09-10 15:45:14
185
1
原创 【c++】七夕快到了却还没对象?手把手教你new一个出来!
本章给大家带来的是C++内存管理。在C语言阶段,我们经常使用malloc,calloc,realloc,free进行内存管理。但是,C语言的内存管理存在很多缺陷,会对程序的稳定性和安全性造成影响。不过,C语言的内存管理同时也给程序员提供了更大的自由度和灵活性,可以更加精细地控制程序的内存使用。而C++有他自己的一套内存管理,就是:new和delete。
2023-08-13 17:28:27
155
原创 【刷题之路】LeetCode24——详解两两交换链表中的结点的细节
总的来说这道题不算很难,但十分考验我们对链表的基础操作,以及对哨兵位的使用,相信对每个人都会有所帮助。希望大家多多支持,我也会继续输出我的编程知识的!
2023-05-08 21:43:44
292
9
原创 经典链表问题——判断链表是否带环
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。
2023-05-06 15:17:45
1369
5
原创 单链表|附完整源码—c语言版
我们都知道数组在内存中是连续存储的,顺序表就是由链表存储的,它有一个其他数据结构都没有的优点——支持随机访问(就是利用下标访问元素),这可以让其支持一些排序算法的操作。但是顺序表也有一些如下缺点:1. 中间/头部的插入删除,时间复杂度为O(N)2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。
2023-04-20 16:55:12
465
原创 LeetCode面试题 01.01. 判定字符是否唯一
把字符串中每个字符转化为一个二进制数,转化方法为1向左N位的位运算,N为这个字符和字符‘a'的距离;例如 Na = 0,Nb=1,Nc = 2...a = 1
2023-04-15 20:50:27
180
4
原创 【刷题之路】LeetCode63——不同路径ⅠⅠ
输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:1. 向右 -> 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右 -> 向右。
2023-04-09 14:07:26
369
2
原创 【刷题之路】LeetCode62——不同路径Ⅰ
4.遍历顺序:由递推公式dp[i][j]=dp[i-1][j]+dp[i][j-1]可得我们从左往右,从上往下遍历。希望大家别小看遍历顺序这一步骤,有的动态规划题目的遍历顺序是从后往前的,也有很特殊的,只是本题的遍历顺序是比较符合大家主观印象的,切记不是每个题都是从前往后,从上往下进行遍历的。如果这样想那就是对dp数组的含义不明确了,dp[i-1][j]是(0,0)到坐标(i-1,j)有多少种不同路径,那我在坐标(i-1,j)再往下走一步,还是一样多的路径(为dp[i-1][j])。时间复杂度:O(mn)
2023-04-09 13:47:58
226
1
原创 LeetCode11—盛最多水的容器——双指针的妙用
本题又是一道很经典的双指针问题,不过是从两端开始的双指针,也是很常见的,希望大家能有所收获。再你感觉已经完全了解双指针的时候,不妨再来道题练练手,检验检验?
2023-04-02 21:35:22
136
3
原创 LeetCode209——长度最小的子数组
滑动区间这种解法你粗略一看好像和暴力解法的代码很相像,但是当你仔细剖析,会发现时间复杂度小了很多,这也是它的神奇之处。希望大家能够仔细揣摩,这种题还是挺常见的。也希望我的分享对大家都能有所收获,那将是我的荣幸!
2023-03-31 14:03:35
114
6
原创 LeetCode27 移除数组元素——双指针法实现原地移除
遇到不等于val的元素就将其赋值给新数组arr【slow】,然后slow++,直到遍历完原本的数组,新数组也完成了,我们也就实现了原地移除。思路2:虽然思路1可以完成,但是达不到题目的原地移除的要求,不过我们可以模仿思路1进行改造——如果那个新的数组就是原数组本身呢?这里有一点需要注意,这里的修改并不是将等于val的值改为0,这样子并不算移除,而是要用后面的不等于val的元素将其覆盖。以上的方法就是双指针法,要体会到双指针法的妙用,其在刷题的过程中双指针还是十分常见的,我们必须将其牢牢把握。
2023-03-28 16:13:25
120
原创 关于二分查找你不知道的事!
对于mid-1的大小我们并不明确,区间右边又是开的,是不包含的,那么下一个区间它就不在判断范围内,大家想想这合理吗?如果我们选择right=mid,mid的大小我们知道,右区间是开的,mid此时不在下一个区间判断范围内,大小未知的mid-1在,这就十分合理。我们举个例子,当a=b=1的时候,区间为[1,1],显然在数学上这是成立的。因为mid>val,此时的mid显然不需要在下一个区间进行比较了,我们知道mid是大于val的,而且区间是左闭右闭,此时选择right=mid就是不合理的,多余的操作。
2023-03-22 00:24:42
154
3
原创 有趣编程题之判断第一名和凶手
然后就是题目所说的每位选手都说了一半,不知道大家是否还记得c语言里的条件判断,如果为假那就是0,如果为真那就是1。所以我们可以利用条件判断,每个人说的值都为1就break跳出循环,然后再利用5*4*3*2*1=120也就是A*B*C*D*E为120筛选出重复的情况,最后把每个人的成绩打印出来就完成啦。这两道题都很好地锻炼了我们将实际问题转化为代码的能力,弄懂了第一道,第二道也就顺理成章的有思路了,我们先来看第一道吧!
2023-03-20 17:41:28
128
原创 剑指offer24——双指针&&递归法解决链表翻转(带图讲解)
struct ListNode*tmp保存cur的下一个结点的位置,然后再进行cur->next(箭头)的修改,接着让prev来到cur的位置,cur来到tmp的位置,这样就完成一次翻转了。
2023-03-20 16:22:52
274
原创 详解c自定义类型——结构体,枚举
前言: 我们都知道,c的常见数据类型有很多,例如char,int,short,long,double,float等等,但是当我们想存储一个人的信息的时候,好像上面没有一个类型可以实现。为了不那么死板以及增加我们的可操作性和灵活性,这时就需要我们的结构体struct出场了。 结构体的声明与匿名结构体首先我们要知道,结构体和int,char一样,是一种变量类型。我们先来看例子我们定义一个结构体类型struct stu来表示一个学
2023-03-18 16:02:32
232
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人