- 博客(79)
- 收藏
- 关注
原创 25.Reactor
解释: 演示代码函数名被视为函数指针或地址在大多数编程语言中,函数名本身可以被视为函数的地址或指针。这意味着您可以使用函数名来引用或传递函数,就像您可以使用指向函数的指针一样。这是因为函数名通常表示函数在内存中的起始地址。在 C 和 C++ 中,函数名可以被视为指向函数的指针。您可以将函数名赋值给函数指针,然后通过函数指针来调用函数。例如:在上面的示例中, 是函数的名称,但它可以被赋值给函数指针 ,然后通过 调用函数。这种函数名作为函数地址的特性在许多编程语言中也适用,但在不同语言和编译器中
2025-04-03 14:51:06
364
原创 23.多路转接-select
后端服务器最常用的网络IO设计模式其实就是Reactor,也称为反应堆模式,Reactor是单进程,单线程的,但他能够处理多客户端向服务器发起的网络IO请求,正因为他是单执行流,所以他的成本就不高,CPU和内存这样的资源占用率就会低,降低服务器性能的开销,提高服务器性能。
2025-04-03 14:48:50
632
原创 22.DNS协议,ICMP协议,NAT技术
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.例如com:一级域名,表示这是一个工商企业域名。同级的还有.net(网络提供商)和.org(开源组织或非盈利组织)等。baidu:二级域名,一般对应的就是公司名。www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准;
2025-04-03 14:47:23
464
原创 21.数据链路层协议
发起方构建ARP请求,以广播的方式发送给每一个主机。每台主机都能识别接收,然后根据MAC帧的帧类型字段将有效载荷交付给每个主机的ARP层。其他不相关主机立马根据目的IP,在自己的ARP协议内部丢弃ARP请求,只有目标主机会处理请求。
2025-04-03 14:46:50
522
原创 19.TCP相关实验
当客户端和服务器在进行TCP通信时,如果客户端调用close函数关闭对应的文件描述符,此时客户端底层操作系统就会向服务器发起FIN请求,服务器收到该请求后会对其进行ACK响应。但如果当服务器收到客户端的FIN请求后,服务器端不调用close函数关闭对应的文件描述符,那么服务器就不会给客户端发送FIN请求,相当于只完成了四次挥手当中的前两次挥手,此时客户端和服务器的连接状态分别会变为FIN_WAIT_2和CLOSE_WAIT。
2025-04-03 14:45:14
426
原创 18.Tcp协议
TCP全称为“传输控制协议(Transmission Control Protocol)”,TCP协议是当今互联网当中使用最为广泛的传输层协议,没有之一。
2025-04-03 14:43:05
402
原创 17.udp协议
负责数据能够从发送端传输接收端端口号(Port)标识了一个主机上进行通信的不同的应用程序;在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
2025-04-03 14:42:22
689
原创 16.https协议
数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度 的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有 碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推 原信息,通常⽤来进⾏数据对⽐。
2025-04-03 14:40:50
661
原创 15.http协议
例如, 我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端。
2025-04-03 14:40:02
564
原创 14.网络套接字TCP
accept()connect()关于网络命令行命令tcp演示代码1(基础框架)makefilelog.hpptcpServer.hpptcpServer.cctcpClient.hpptcpClient.cctcp演示代码2(多进程版)版本1(孙子进程法)只需要修改tcpServer.hpp就可以,其他文件不变tcpServer.hpp演示结果演示结果演示结果log.hppLockGuard.hppTask.hppThread.h
2025-04-02 14:02:13
873
原创 13.网络套接字
举例: 我们从家出发去学校,那么家就是源IP地址,学校就是目的IP地址端口号(port)是传输层协议的内容传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 “数据是谁发的(源端口号), 要发给谁(目的端口号)”;
2025-04-02 10:45:37
787
原创 10.多线程
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流线程的优点创建一个新线程的代价要比创建一个新进程小得多进程:创建PCB、进程地址空间、页表、构建进程地址空间和物理空间的映射关系、加载代码和数据等等。
2025-04-02 10:31:21
642
原创 9.进程信号
上面所说的所有信号产生,最终都要有OS来进行执行,为什么?OS是进程的管理者信号的处理是否是立即处理的?在合适的时候信号如果不是被立即处理,那么信号是否需要暂时被进程记录下来?记录在哪里最合适呢?一个进程在没有收到信号的时候,能否能知道,自己应该对合法信号作何处理呢?如何理解OS向进程发送信号?能否描述一下完整的发送处理过程?在Linux系统中,子进程在终止时,会想父进程发送17号信号,也就是SIGCHLD信号printf("pid: %d, %d 号信号,正在被捕捉!cnt--
2025-04-02 10:30:25
938
原创 8进程间的通信
数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个 “管道”。
2025-04-02 10:29:09
680
原创 6.Linux基础IO
1.空文件,也要在磁盘占据空间。2.文件 = 内容 + 属性3.文件操作 = 对内容的操作 + 对属性的操作4.标定一个问题,必须使用: 文件路径 + 文件名【因为 文件路径+文件名 具有唯一性】5.如果没有指明对应的文件路径,默认是在 当前路径(进程的当前路径) 进行文件访问。6.当我们把 fopen、fclose、fread、fwrite 等接口写完之后,代码编译之后,形成二进制可执行程序之后,但是没有运行,那么文件对应的操作是没有被执行的。————对文件的操作的本质:是进程对文件的操作。7.一个文件如
2025-04-02 10:27:36
763
原创 5.Linux进程控制
/ 头文件// 函数 --> 将自定义环境变量添加到系统中// 返回值// putenv()函数在成功时返回零,如果发生错误则返回非零。如果发生错误,则设置errno来指示原因。========================================================================================= // 我们只需要将自定义的环境变量添加到系统中,这样就可以直接打印所有的环境变量assert(id!= -1);NULL。
2025-04-02 10:26:46
605
原创 4.Linux进程概念
在程序加载到内存中之后,会有对应的进程控制块(PCB)对进程进行描述,然后再将进程控制块(PCB)组织起来,如果我们想要运行这些进程,就需要将这些进程对应的task_struct(PCB)结构体对象放入到runqueue(运行队列,用数据结构的方法将其组织起来),然后依次或者轮转将其放入CPU进行计算,而只要我们将进程对应的task_struct结构体对象放入到runqueue(运行队列)就代表这个进程是运行状态,且对应的task_struct(PCB)中会显示其进程状态为运行状态。
2025-04-02 10:25:40
266
原创 3.Linux开发工具的使用
/ Enb :表示 enable;状态 y 表示这个断点是可用的。// Enb :表示 enable;状态 n 表示这个断点是禁用的。
2025-04-02 10:17:30
370
原创 2.Linux的权限理解
1. 什么是权限?(是什么)(1) 权限是约束人的(一个或者某些群体)(2) 没有对应的属性如:电影网站没有听音乐的属性如:音乐app没有看电影的属性 // 可以得出 :文件权限 = 人 + 文件属性 人:人有权限是因为其自身被赋予的角色;如校长是管理学校的,企业高管的管理公司的 // 在Linux中,人被分为3中角色 拥有者(owner)所属组(group)其他人(other) // 为什么要存在所属组?方便同一个团队的人相互访问,禁止团队外的人访问。
2025-04-02 10:14:11
159
原创 1.Linux的常见指令
1.文件本身如果我们创建一个空文件,请问,占不占磁盘空间?答案:是占据磁盘空间的。文件 = 文件的内容数据 + 文件的属性数据(元数据)文件的属性:文件的创建时间,文件名,日期,大小等等信息空文件没有文件内容,但是空文件的文件属性也是数据,是占据磁盘空间的。学习操作文件的方法学习操作文件内容的方法学习操作文件属性的方法2.文件之间(普通文件 vs 目录)普通文件目录 ==> 文件夹 ==> 保存其他文件的场所。
2025-04-02 10:12:28
339
原创 0.Linux环境搭建与安装
主要有三种双系统或者把自己的电脑系统换位Linux(严重不推荐)。使用虚拟机软件, 将 Linux 搭建在虚拟机上(),不推荐(但是不用花钱)。(推荐)
2025-04-02 10:09:35
428
原创 29.IO流(了解)
C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。从标准输入设备(键 盘)读取数据,并将值存放在变量中。将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。C语言借助了相应的缓冲区来进行输入与输出。
2024-05-16 14:00:52
473
原创 27.C++的类型转换(介绍了static_cast、reinterpret_cast、const_cast、dynamic_cast的用法)
在C语言中,如果。隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败显式类型转化:需要用户自己处理缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换C风格的转换格式很简单,但是有不少缺点的:隐式类型转化有些情况下可能会出问题:比如数据精度丢失显式类型转换将所有情况混合在一起,代码不够清晰因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。
2024-05-14 13:48:49
371
原创 26.特殊类的设计(设计不能被拷贝的类、只能在堆上创建对象的类、只能在栈上创建对象的类、不能被继承的类/只能创建一个对象(单例模式))
为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有。
2024-05-13 20:14:46
917
原创 25.智能指针(auto_ptr的使用和模拟实现、shared_ptr的使用和模拟实现、unique_ptr的使用和模拟实现、weak_ptr的使用和模拟实现、智能指针的线程安全问题)
还不能将其称为智能指针,因为它还不具有指针的行为。指针可以解引用,也可以通过。应运而生,其原理:简单粗暴 – >防拷贝(防止智能指针对象被拷贝)。的实现原理:管理权转移的思想,下面简化模拟实现了一份。下面我们先分析一下下面这段程序有没有什么。,因此需要为智能指针管理的资源定制删除器。重载下,才可让其像指针一样去使用。我们仅限于了解,拒绝使用它。调用这里又会抛异常会如何?解决方案(定制删除器)内部释放资源使用的是。
2024-05-10 13:20:55
713
原创 23.c++11新特性(默认移动构造和移动赋值、default关键字、delete关键字、lambda的用法,function包装器和bind绑定的用法,可变参数模板)
如果你没有自己实现。
2024-05-09 14:15:09
316
原创 23.右值引用_c++11(左值引用的使用场景、右值引用的使用场景、左值引用和右值引用的对比、移动构造、移动赋值、右值引用完美转发)
右值引用和左值引用减少拷贝的原理不太一样1.左值引用是取别名,直接起作用。2.右值引用是间接起作用,实现移动构造和移动赋值,在拷贝的场景中,如果是右值(将亡值),转义资源。
2024-05-08 11:22:06
1106
原创 23.c++11的新特性_1
由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。用橘色圈起来是C++11中的一些几个新容器,但是实际最有用的是。关键字decltype将变量的类型声明指定为表达式的类型。这两个有在单独的博客介绍,其他的大家了解一下即可。让模拟实现的vector也支持{}初始化和赋值。
2024-05-05 21:02:41
399
原创 22.位图和布隆过滤
1.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】2.给定100亿个整数,设计算法找到只出现一次的整数?3.给一个超过`100G`大小的`log file`, `log`中存着`IP`地址, 设计算法找到出现次数最多的`IP`地址?4.给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法
2024-05-05 20:31:25
723
原创 21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)
【代码】21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)
2024-05-05 18:48:53
262
原创 20.哈希表(哈希冲突,闭散列、线性探测,开散列、哈希桶)
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log_2 N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对和进行介绍。
2024-04-30 20:53:08
906
原创 19.红黑树的模拟实现
/ 枚举结构RED,BLACK,// 红黑树节点的类模板// 存储的KV值对象// 左子树指针// 右子树指针// 父节点指针// 枚举结构对象// 红黑树节点的构造函数:_kv(kv){}
2024-04-24 18:29:47
741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人