自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【linux】网络基础(3)——tcp协议

因为如果是一次或者两次握手,一些恶意的客户端,对服务器进行多次连接攻击,只要服务端收到来自客户端的连接,不论是一次还是两次,都会直接建立连接快速消耗内存,导致服务器挂掉,而三次握手需要客户端的再次确认返回,才会进行建立连接,虽然也会有SYN洪流问题,但要比之前的方式减少些许负担,同时还可以最小成本的验证全双工,客户端可以验证发送以及接受正常通信,服务端也可以验证发送以及接受的正常通信。在每次发送报文以及应答报文时,对于以上六中的请求,会分别对对应请求的标志位的值标志位1,来表示此数据的意义!

2024-07-03 14:28:51 1113 2

原创 【linux】网络基础(2)——udp协议

因为报头的大小是固定的八个字节,在进行信息处理时,用UDP的长度减去固定长度八个字节,可以得出数据的具体大小。

2024-07-02 14:07:47 837 1

原创 【linux】网络基础(1)

1.网络是指多个计算机系统通过通信链路连接在一起,以实现资源共享和数据交换的系统。2.网络可以是有线的或无线的。

2024-06-30 22:50:28 987

原创 【linux】多线程(2)

当进行生产时,先进行sem_wait判断是否还有空位置进行生产,当生产完则将消费者的信号量进行增加,告诉消费者可以进行消费。通过封装线程锁,达到智能指针的效果,作用域结束,则自动释放锁,以防忘记释放锁,造成线程死锁!将生产者的信号量设置为队列的大小,消费者的信号量设置为0.当进行消费时,则与之相反。

2024-05-26 21:40:30 742

原创 【linux学习】多线程(1)

虽然线程和进程都使用task_struct来描述,但Linux内核通过一些特定的字段来区分它们。例如,每个task_struct都有一个pid(进程ID)和一个tgid(线程组ID)。对于主线程(也就是我们通常所说的“进程”),其pid和tgid是相同的。但是,对于该进程创建的其他线程,它们的pid是唯一的,但tgid与主线程的tgid(也就是该进程的ID)相同。通过这种方式,内核可以区分一个task_struct描述的是进程还是线程。代码中设计当车票为零时,则退出while循环,并且退出函数,退出线程。

2024-05-12 21:52:24 1888

原创 【c++学习】c++11的特性(2)

C++11 引入了 lambda 表达式,它是一种简洁的、匿名的函数对象,可以用于定义小的、内联的函数对象。C++11 引入了可变参数模板(variadic templates),这是一个非常强大的特性,它允许你定义模板函数或模板类,这些模板可以接受任意数量和类型的参数。std::bind 是 C++11 标准库中的一个函数模板,它用于生成一个新的可调用对象,该对象会将给定的参数绑定到给定的函数、成员函数或可调用对象的相应参数上。参数包为空时,则去递归特定的_showlist()函数来结束递归!

2024-04-28 17:41:55 643

原创 【Linux学习】进程信号

std::cout << "获取信号:" << signo << std::endl;int main()while(1)std::cout << "哈哈哈哈" << std::endl;sleep(1);return 0;这时候我们按ctrl+c则返回的是handler函数中的行为。

2024-04-23 18:36:53 1987

原创 【c++学习】智能指针

在C++中使用智能指针的主要原因是为了解决手动管理动态分配内存所带来的问题,这些问题通常包括内存泄漏、野指针和异常安全性等。智能指针通过封装底层的指针操作,提供了更安全、更便捷的内存管理方式。

2024-04-09 18:18:16 147

原创 【c++学习】详解右值引用

模板中的&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。但是引用类型的唯一作用就是限制了接收的类型,后续使用中都退化成了左值,模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力,如下图移动构造就是将两个空间进行置换来达到赋值效果。我们发现,他们会根据值的初始类型进行函数匹配!我们发现,调用的全是左值引用的函数,

2024-04-06 21:00:14 316

原创 【c++学习】c++11的特性(1)

这是就会调用如上图vector的构造函数,构造一个容器,其中包含 il 中每个元素的副本,顺序相同。然后再拷贝给vector。由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。不仅vector拥有,map,set等一些容器也拥有。例如上面这种{}内参数不限定的情况下应该如何构造呢?

2024-03-27 14:27:48 388

原创 【c++学习】位图/布隆过滤器

位图思想和哈希思想类似,将数据进行映射,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。将大量将要进行映射的数据,通过两种或多种哈希函数进行算值,映射在一个数组中。

2024-03-24 21:19:00 356

原创 【linux学习】软硬链接

删除原始文件不会影响硬链接的存在,因为硬链接与原始文件共享相同的inode,只有在所有的硬链接和原始文件都被删除后,才会真正释放磁盘空间。软链接(Symbolic Link): 软链接是一个特殊类型的文件,它包含了指向另一个文件或目录的路径。软链接创建的链接文件在文件系统中只是一个指向原始文件或目录的快捷方式,它们本身并不包含实际的文件数据。删除原始文件或目录不会影响软链接的存在,但如果软链接指向的原始文件或目录被删除,软链接将变为无效。通过上图测试发现,原始文件被删除,软链接文件失效,硬链接文件还存在!

2024-03-24 17:16:12 332 1

原创 【c++学习】unordered_map与unordered_set模拟实现

由于上一章我们已经模拟实现了哈希桶,这一章主要针对于这俩的迭代器进行模拟封装。

2024-03-21 18:37:23 306 1

原创 【c++学习】初识哈希表模拟实现

在上图,倘若再来一个16,17,14等类似的值经过哈希函数得出的值两个值一模一样会与表中冲突,改现象成为哈希冲突或哈希碰撞。如上图即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称。如上图,44模10之后会与4模10的位置冲突,那么将其往下一个位置移动直到一个空位置中。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。找到表中对应的值,进行链接,如果对应的值相同,则往其后继续链接。如上图经过取模得到的值如果相同,那么则链接在他的后面。

2024-03-19 22:24:43 581

原创 【c++学习】set与map的初步模拟封装

4、当右子树不存在时,我们需要向上寻找,因为中序是左中右的,所以该子树已经被遍历完了,则++操作后应该在该结点的祖先结点中找到孩子不在父亲右的祖先。2、因为中序是左中右,所以我们可以分为右子树存在和不存在来讨论下一个节点是谁。1、因为红黑树的中序是有序的,所以++是找到该节点在中序中的下一个节点。3、当右子树存在时,右子树的最左节点即是下一个节点。相较于上一章的红黑树我们就需要更改。使用模板,这样传过来的值都可以接受。通过仿函数来提取具体的值来进行比较。

2024-03-13 20:39:19 378

原创 【c++学习】红黑树的模拟

红黑树是在以搜索二叉树的基础构建的,所以插入规则与搜索二叉树一样,小于节点的走左边,大于节点的走右边。这是我们要以g为旋转点进行右旋转(右旋转与AVL树种的旋转构思相同,如有不了解,请移步上篇文章!相比于AVL树的“平衡因子”,这里的“平衡因子”是每个树的颜色分别为:黑色与红色。因为新节点的默认颜色是红色,因此:如果其双亲节点的颜色是黑色,没有违反红黑树任何。1、红色节点下面必须是黑色节点,所以一个红黑树中,是没有连续的红色节点。则我们需要先以p为旋转点进行左旋转,然后再以g为旋转点进行右旋转即可。

2024-03-10 21:27:18 1334 1

原创 【c++学习】关于AVL树平衡的旋转处理

对于AVL树中的每个节点,其平衡因子必须为 -1、0 或 1。如果一个节点的平衡因子不在这个范围内,那么它就不是AVL树,需要进行平衡操作以恢复平衡性。

2024-03-03 21:23:55 655 1

原创 【c++学习】初识map与set

1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。

2024-03-02 18:09:51 574

原创 【c++学习】二叉搜索树的查找,插入,删除模拟

二叉搜索树的性质:1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3、它的左右子树也分别为二叉搜索树如上图所示,每个根节点的左节点都是小于当前根节点,而根节点的右节点都是大于当前根节点,这就是二叉搜索树。

2024-02-01 20:22:18 338 1

原创 【c++学习】初识c++多态

三个概念条件重载两个函数在同一作用域 函数名参数相同覆盖两个函数分别在基类和派生类作用域,函数名,参数,返回值都必须相同(协变例外),俩函数必须为虚数隐藏两个函数分别在基类和派生类作用域,函数名相同,

2024-01-30 22:24:42 534 1

原创 [c++学习]初识c++继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用public :protected:protected:int _stuid;teacher t;

2024-01-30 13:53:27 787 1

原创 【c++学习】list的介绍与基础使用

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。list详解。

2024-01-28 20:35:06 348

原创 【c++学习】vector的性质与基本使用。

vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。详细可参考vector详细介绍构造函数声明接口说明vector()无参构造构造并初始化n个val拷贝构造使用迭代器进行初始化构造//4个值为100的整数//遍历一边B//拷贝一份C。

2024-01-18 20:08:16 844 1

原创 【linux学习】进程控制

1、一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如,父进程等待客户端请求,生成子进程来处理请求。2、一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数。1. 执行用户通过 atexit或on_exit定义的清理函数。1、分配新的内存块和内核数据结构给子进程。2、将父进程部分数据结构内容拷贝至子进程。3、添加子进程到系统进程列表当中。4、fork返回,开始调度器调度。父进程返回的是子进程的pid。实际用户的进程数超过了限制。代码运行完毕,结果不正确。系统中有太多的进程。

2023-12-08 23:02:19 23

原创 【c++】string类的常用接口

1、字符串是表示字符序列的类2、标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。3、string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型。4、string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数。

2023-12-02 22:14:45 38 1

原创 数据结构——栈和队列

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有。压栈:栈的插入操作叫做进栈/压栈/入栈,出队列:进行删除操作的一端称为。出栈:栈的删除操作叫做出栈。

2023-09-03 12:29:19 26

原创 程序环境和预处理

符号功能FILE进行编译的源文件LINE文件当前的行号DATE文件被编译的日期TIME文件被编译的时间return 0;#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。SQUARE(5);5*5警告!int a = 5;根据上面的计算会打印36这个值。但是实际上:为什么?替换文本时,参数x被替换成a + 1,所以这条语句实际上变成了:int a = 5;return 0;

2023-07-17 22:08:58 28 1

原创 文件操作(简)

xxxxxx.文件后缀例如:123456.txt(是一种文本类文件).doc和.docx,它们是Word产生的文件;.txt是文本文件;.xls和.xlsx,他们是Excel表格产生的文件;.jpg、.png、.GIF,都是图片文件格式,显示效果和压缩格式以及文件大小不同;*.MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3,音频文件格式;等等……。

2023-07-16 21:50:27 46 1

原创 自定义类型:结构体类型,枚举类型,联合类型

char c;int a;} sn1 = {//全局变量声明类型的同时定义变量,同时初始化变量。这里我么要注意上述中的s2的初始化,我们可以用“.”来不按顺序进行初始化。enum Sex {{}中的内容是枚举类型的可能取值叫做枚举常量这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。类型说明:联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

2023-07-12 22:29:00 133 1

原创 常见的字符函数和字符串函数

这一函数不做多说,它唯一的作用就是是用来求字符串长度的。注意事项1、这里是字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。2、参数指向的字符串必须要以 ‘\0’ 结束。3、注意函数的返回值为size_t,是无符号的如下图函数前面的返回值为size_t是无符号类型return 0;

2023-07-11 20:49:39 40 1

原创 数据在内存中的存储

数据类型大小(字节)char字符数据1short短整型2int整型4long长整型4/8long long更长的整形8float单精度浮点数4double双精度浮点数8C语言中规定:sizeof(long)>=sizeof(int)大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。为什么会有大小端模式之分呢?

2023-06-02 19:39:57 66 1

空空如也

空空如也

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

TA关注的人

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