- 博客(56)
- 收藏
- 关注
原创 day45——面向对象特征
1> 不到万不得已的情况下,不要使用友元,因为友元的出现使得封装称为虚谈,友元破坏了类的封装性2> 友元不具有传递性:A是B的朋友,B不一定是A的朋友3> 友元不具有传递性:A是B的朋友,B是C的朋友,A不一定是C的朋友4> 友元不具有继承性:父类的朋友,不一定是子类的朋友5> 必须使用友元的情况:插入和提取运算符重载时,只能使用友元函数来解决。
2024-08-30 20:36:37
1019
原创 day44——面向对象特征
class 类名public:功能的成员属性、函数protected:受保护的成员属性、函数private:私有的成员属性、函数1> 类中的成员属性和成员函数分为不同的权限public:该权限下的成员,可以在类内、子类中、类外被访问protected:该权限下的成员,可以在类内、子类中直接被访问,类外不允许被访问private:该权限下的成员,只能在类内被访问,子类、类外不允许被访问2> 如果没有指定权限,则默认为私有权限。
2024-08-29 19:44:58
939
原创 day43——C++对C的扩充
类型名 &引用名 = 目标名;例如:int num = 520;//定义一个引用,并指向一个num目标对&又进一步使用,&的使用方式1、&表示单目运算符,取地址运算,后面紧跟一个变量2、&&表示双目运算符逻辑与运算3、&表示双目运算符,按位与运算4、&表示定义引1> 在C语言中,对于堆区空间的申请和释放,使用的是malloc和free函数,C++中也可以继续使用2> 在C++中,提供了更加操作方便的关键字 new和delete用于堆区空间的申请和释放。
2024-08-28 19:27:24
779
原创 day42——C++对C的扩充
将实现同一事物的所有的属性(成员变量)和行为(成员方法)都集中到一起,我们称之为 类(class),并向外部提供相关接口,用户可以使用这些接口来实现对该类实例化出来的对象的操作,进而对整个进程进行服务。1> 提示并输入一个字符,判断该字符是大写还是小写,如果是小写,转变成大写后输出,如果是大写,转变成小写输出,如果是其他字符,则转变成 * 输出。2> 命名空间中的名字和全局变量同名时:全局变量会自动放入全局命名空间中,要使用该命名空间中的名字,只需在名字前加作用域限定符即可。后期程序直接使用相关接口。
2024-08-27 21:11:28
869
原创 day40——数据库 sqlite3
一种存放数据的文件,但是该文件拥有特殊的结构第一层结构:数据库本身第二层结构体:数据库中存放了若干张表单每一张表单的字段构成各不相同第三层结构:一张表单中,所有字段都能存放信息一组字段中的所有数据,就是一条记录最终,很多很多条件,格式不同的记录,组成了一个完整的数据库。
2024-08-22 19:57:23
849
原创 day40——IO模型补充
epoll模型只有linux系统才有epoll模型只有从linxu内核2.4版本之后才有epoll从2.4内核到目前的4.X内核,没有更新的模型了,说明epoll模型本身已经很完美了select的问题:监视列表无法扩容监视列表和返回的激活列表混在了一起效率低下:select需要自己管理激活的套接字select查询哪个套接字激活了是一个双重循环,效率低下select的内核部分,监视的套接字也是一个数组,查询哪个套接字激活了,效率也是低的poll的问题:效率低下:select的内核部分,监视的套接字也是一个数组
2024-08-22 18:53:34
335
原创 day38——动态库与静态库
库在linux系统中是一个二进制文件,它是由XXX.c(不包含main函数)文件编译而来的,分为静态库和动态库。库在系统中的内容是不可见的,是一个二进制乱码当程序需要使用库中的相关函数时,直接链接对应的库即可,无需跟对应的 源文件一起联合编译作用:能够保证源代码的安全性库在不同的系统中的表现方式也是不同的二、静态库2.1 概念所谓静态库,就是将一个XXX.c的源文件,编译生成一个libXXX.a的二进制文件。当程序需要使用源文件中的函数时,只需要链接上该源文件生成的静态库文件即可直接调用相关函
2024-08-20 19:05:42
419
原创 day38——HTTP服务器
1> Hyper Text Transfer Protocol(超文本传输协议),用于万维网(WWW:world wide web)进行超文本(html文档)信息的传送协议。http的响应代号:1XX (信息状态错误) 2XX(成功) 、3XX(重定向状态码)、4XX(客户端错误)、5XX(服务器出错)1> 任何一个http请求都由三部分组成:请求首部、请求主体、请求数据。1> 响应首部也是由三部分组成,分别是响应头、响应主体、响应数据。2> 对于客户端请求协议包而言,一般没有请求数据,具体格式如下。
2024-08-20 18:47:53
400
原创 day37——抓包分析
0X0003 接收发往本机的MAC所有类型:ip,arp,rarp数据帧,接收从本机发出去的数据帧,Ack:应答号,用于应答非应答包(握手包,挥手包,数据包)。服务器和客户端的代码不能都运行在ubuntu,因为wireshark抓的是流经真实网卡的数据包。Seq:序列号,占4个字节,用于给数据段进行编号的。0X0800 只接收发往本机的mac的ip类型的数据帧。混杂模式打开的情况下,会接收到非发往本地的MAC数据帧。0X0806 只接收发往本机的ARP类型的数据帧。SYN:握手包,连接的时候产生的包。
2024-08-19 21:10:46
470
原创 day36——TCP并发服务器
1> 对于UDP通信而言,由于是面向无连接的通信,一个服务器可以服务多个客户端,处理多个客户端的消息2> 对于TCP服务器而言,需要建立连接,服务器域客户端建立连接后,其他客户端就无法通信了3> 如何做到一个TCP服务器能够跟多个客户端进行通信,此时我们引入了TCP并发服务器4> 实现TCP并发服务器可以使用:多进程、多线程、IO多路复用。
2024-08-14 22:15:08
214
原创 day36——homework
简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输。octet:二进制模式(常用)0 未定义,差错错误信息。mail:已经不再支持。1)tftp协议概述。2)tftp下载模型。TFTP通信过程总结。3)tftp协议分析。
2024-08-14 22:08:24
217
原创 day36——多点通信
2> 组播可以实现小范围的数据传播:将需要接收数据的接收端加入多播组,发送端向多播组中发送消息,每个组内成员都能接收到消息。1> 组播也是实现一对多的通信方式,对于广播而言,网络需要对每个消息进行复制转发,会占用大量的带宽,导致网络拥塞。2> 广播:发送端和接收端完成一对多的通信方式,网络将发送端的数据,全部复制一遍发送给每个接收端一份。7> 组播的接收端流程 ------> 类似于UDP的服务器端流程。8> 广播的接收端流程 ----> UDP的服务器端。3> 广播的发送端需要绑定广播地址。
2024-08-13 21:13:04
296
原创 day36——TCP和UDP补充
对于客户端而言,可以绑定也可以不绑定,如果绑定了,则使用自己绑定的ip和端口号。一般的UDP通信:获取对端地址信息 --> 将信息加载到内核 ---> 数据收发 --->获取对端地址信息 --> 将信息加载到内核 ---> 数据收发 --->获取对端地址信息 --> 将信息加载到内核 ---> 数据收发 --->....UDP建立连接后:获取对端地址信息 --> 将信息加载到内核 ---> 数据收发 --->数据收发 --->数据收发 --->数据收发 --->数据收发 --->数据收发 --->
2024-08-13 21:06:27
189
原创 day36——homework
0xff 0x02 x y 0xff 0xff:起始结束协议,固定的;0x02:控制机械手臂协议,固定的;x:指定要操作的机械臂 0x00 红色摆臂 0x01 蓝色摆臂 y:指定角度。通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂。查看Windows的IP:按住Windows+r 按键,输入cmd , 输入ipconfig。1)基于TCP服务器的机械臂,端口号是8888, ip是Windows的ip;注意:关闭计算机的杀毒软件,电脑管家,防火墙。
2024-08-13 20:58:02
138
原创 day34——TCP和UDP的基础通信
功能:位套接字分配名称参数1:通过socket函数创建出来的套接字文件描述符参数2:通用地址信息结构体,需要根据具体使用的地址族而定, struct sockaddr仅仅只是为了类型的强制转换,防止出现警告跨主机间通信:man 7 ip/* 表示通信域 *//* 端口号的网络字节序 *//* ip地址 *//* IP地址的网络字节序 */同一主机间通信:man 7 uninx/* 表示通信域:AF_UNIX *//* 套接字文件的地址 */参数3:参数2的大小。
2024-08-12 19:29:51
209
原创 day30
消息队列的消息遵循先进先出原则,如果取出时不指定类型,则默认取第一个,如果指定了类型,则取第一个放入队列中的该消息。2> 该通信机制是独立于进程而存在的:当进程将数据写入该通信对象中后,即使进程已经结束,对象中保存的内容仍然存在。3、共享内存的操作不是一次性的,写入到共享内存中的数据,即使读取出去后,依然存在于共享内存,直到下一次被覆盖。消息队列独立于进程而存在,当一个进程将消息放入队列后,及时进程退出了,也不会删除消息队列中的该消息。放入消息队列中的消息需要进行封装,包括消息类型和消息数据。
2024-08-06 16:52:08
267
原创 day29——多线程编程补充
1> 对于多个线程之间通信,我们可以使用临界资源来完成,通过一个线程任务对临界资源进行修改,另一个线程也可以使用已经修改过的临界资源,但是要注意使用同步互斥机制完成对临界资源的保护2> 多个进程之间能否使用全局变量来进行进程间通信?答:不能,多个进程之间的用户空间是相互独立的,每个进程的全局变量是各个进程独立拥有的,更改一个进程的全局变量,另一个进程不会受到影响,故而不能使用全局变量来完成通信3> 有同学说:使用文件来完成进程间通信?
2024-08-05 20:19:44
623
原创 day28——多线程编程补充
2> 互斥锁的本质:互斥锁本质上也是一个特殊的临界资源,该临界资源在同一时刻只能被一个线程所拥有,当一个线程试图去锁定被另一个线程锁定的互斥锁时,该线程会阻塞等待,直到拥有互斥锁的线程解锁了该互斥锁。2> 无名信号量中维护了一个value值,该值表示能够申请的资源个数,当该值为0时,申请资源的线程将处于阻塞,直到其他线程将该无名信号量中的value值增加到大于0时即可。1> 所谓线程同步,就是将多个线程任务有顺序的执行,由于多个任务有顺序的执行了,那么在同一时刻,对临界资源的访问就只有一个线程了。
2024-08-02 19:51:53
916
原创 day27——多线程编程
1> 线程:也称为轻量版的进程(LWP),是更小的任务执行单元,是进程的一个执行路径2> 线程是任务器调度的最小单位3> 一个进程中可以包含多个线程,多个线程共享进程的资源。4> 线程几乎不占用资源,只是占用了很少的用于程序状态的资源(大概有8k左右)5> 由于多个线程共同使用进程的资源,导致,线程在操作上容易出现不安全的状态6> 线程操作开销较小、任务切换效率较高7> 一个进程中,至少要包含一个线程(主线程)8> 在有任务执行漫长的IO等待过程中,可以同时执行其他任务。
2024-08-01 20:52:59
228
原创 day26——多进程编程
程序员写程序时,一个程序可能由多个任务组成,如果使用的是单进程,或单任务,那么当该任务执行阻塞时,其他任务就无法执行,必须等到该任务解除阻塞后,才能去执行其他任务。多进程或多线程,可以解决同一个程序中多个任务并发执行的情况。
2024-08-01 20:49:00
751
原创 day26——homework
父进程拷贝前一半内容,子进程拷贝后一半内容。子进程结束后退出,父进程回收子进程的资源。1> 使用父子进程完成两个文件的拷贝。
2024-07-31 21:58:36
158
原创 day25
狭义定义:进程就是一段程序的执行过程。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
2024-07-30 19:40:58
835
原创 day24——IO进程补充
使用a或者a+的形式打开文件是,对文件光标进行偏移时是否效果?答:对于a而言,不能进行偏移其写光标,总是在结尾写。对于a+而言,其写光标不能偏移,但是读光标可以偏移。
2024-07-29 20:51:13
237
原创 day24——homework
1、2024- 7-29 10:31:19 2、2024- 7-29 10:31:20 3、2024- 7-29 10:31:21 ctrl+c:停止程序 ./a.out 4、2024- 7-29 10:35:06 5、2024- 7-29 10:35:07 6、2024- 7-29 10:35:08。1> 写一个日志文件,将程序启动后,每一秒的时间写入到文件中。2> 使用fread、fwrite完成两个文件的拷贝。3> 实现对bmp图像的读写操作。
2024-07-29 20:37:26
158
原创 day22——IO进程
1> IO:(inout output) 所谓IO,就是程序与外部设备进行信息交换的过程2> IO的分类:标准IO和文件IO3> 标准IO:调用封装好的相关库函数,来实现数据的输入输出4> 文件IO:调用系统(内核)提供的相关函数,来实现数据的输入输出5> 标准IO和文件IO的区别:1、标准IO属于库函数,文件IO属于系统调用 2、标准IO操作的是文件指针,文件IO操作的是文件描述符 3、标准IO有缓冲器,文件IO没有缓冲区6> 阻塞IO和非阻塞IO7> 目前所接触过的IO函数:printf、scanf、p
2024-07-26 21:10:59
871
原创 day20算法
1> 在排序过程中,越大(小)的数据,经由交换后,会慢慢的“浮”到顶端,如同气泡一样。1> 概念:每次从待排序序列中,找到最大(小)值,将其与待排序序列的第一个进行交换。3、直到出现前面的不比当前的大(小)或者已经到最前面了,将选取的元素,放入空位置上。2、跟前面的元素依次比较,如果前面的比当前元素大(小),则将前面的元素后移一位。3、从剩余待排序序列中,继续重复前两次的操作,直到,待排序序列为空。当某一趟的排序过程中,出现没有数据交换的过程,则结束整个排序。3> 插入类排序:直接插入排序、折半插入排序。
2024-07-24 18:50:40
891
原创 day20树补充
对于普通的二叉树而言,如果使用顺序存储,会浪费大量的存储空间,因为需要给没有节点的位置留出空间,以便于后期的插入。顺序存储,一般用于存储完全二叉树,不适合存储普通的二叉树。
2024-07-24 18:28:27
143
原创 day19树的概念
4> 在二叉树上,如果第i个节点存在左孩子,那么其左孩子一定是第 2*i个节点,如果存在右孩子,那么一定是第2*i+1个节点。4> 满二叉树:二叉树的最后一层全是叶子节点,在没有添加层数的条件下,不能在向该树中增加节点的树。15> 节点的层次:从根结点开始到当前结点所经历的层数称为该节点的层次。13> 节点的度:就是当前结点的孩子节点个数,就称为节点的度。3> 在二叉树中,叶子节点的个数,总比度为2的节点个数多 1。11> 叶子节点:没有子节点的节点称为叶子节点。
2024-07-23 18:56:19
381
原创 day19——三、队列
单向链表头插尾删实现:链表的头部就是队尾,链表的尾部就是队头单向链表头删尾插实现:链表的头部就是队头,链表的尾部就是队尾但是:上述操作中,都要用到链表尾部节点,都需要遍历整个链表完成,效率较低此时,我们可以引入尾指针的概念,专门指向最后一个节点的指针。
2024-07-23 18:54:59
322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人