自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 容器适配器(stack 、 queue、priority_queue、deque)

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配 器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。

2024-07-25 10:58:45 568

原创 List容器

此处是带头双向链表对于List,不像string、vector之类的,没有reserve的说法,也不支持[ ]和下标,只有一种方式遍历List也就是采用迭代器(范围for的底层也是迭代器)。

2024-07-25 01:20:49 151

原创 云备份服务端

将服务端运行所需要的关键信息记录在配置文件里面,当我们运行程序的时候从我们的配置文件中读取这些关键信息出来,在程序中进行使用,使用配置文件的好处就是我们的配置信息随时可以进行更改,而更改配置信息之后我们的程序并不需要进行重新生成编译,只需要重启一下可执行程序,对于修改后的配置文件进行重新加载即可,用配置文件加载程序更加灵活。当异常下载中断时,下次断点续传的时候,将要重新下载的数据区间(下载起始位置,结束位置)发送给服务器,服务器收到后,仅仅回传客户端需要的区间数据即可。之前已经传输过的数据再次传输一遍。

2024-07-15 23:18:01 570

原创 优选算法2

常见位运算总结&:有0就是0;|:有1就是1^:相同为0,相异就是1/无进位相加给定一个数n,确定它的二进制表示中的第x位是0还是1:二进制中权值最小的是第0位,所以int整型是从第0位到第31位。于是n>>x &1就可以了将一个数n的二进制表示的第x位修改成为1: (1

2024-06-26 02:13:01 752

原创 NetCal2.0

【代码】NetCal2.0。

2024-05-20 21:31:41 188

原创 NetCal1.0

【代码】NetCal1.0。

2024-05-20 10:43:07 166

原创 计算机网络(传输层)

应用层的数据 并不是直接发送到网络而是交给了传输层,比如通过write拷贝到tcp的缓冲区,接下来数据什么时候发、怎么发、出错了怎么办完全由传输层去做决定。 端口号是包含在输层的概念,上层进程绑定某些端口号之后,传输层收到指定端口号的报文,有传输层上交给与该端口号绑定的指定进程。一个进程可以bind多个端口号,但是一个端口号一般只能bind一个进程。netstat所谓的udp就在内核里面,内核是用c语言实现的,所谓的报头就是结构体,添加报头就是再定义结构体或位段对象,在里面填数据,或者申请空间对

2024-05-18 03:33:46 871

原创 Linux(多线程)

线程是一个执行分支,执行粒度要比进程更细(线程执行的是进程的一部分),调度成本更低(不用再进行对cache的切换)。线程是进程内部的一个执行流,就是线程在进程的地址空间内运行,所以线程隶属于该进程。线程是cpu调度的基本单位,进程是承担分配系统资源的基本实体。一个进程在系统中创建是有自己的task_struct的,该结构下面有一个指针变量指向该进程的地址空间,如果该进程创建一个子进程,也会创建一个pcb并且里面存在一个变量指向该子进程的地址空间。

2024-05-13 05:36:49 772

原创 python代码阅读(swin transformer)

【代码】python代码阅读(swin transformer)

2024-04-11 19:03:52 116

原创 应用层序列化和反序列化代码_2

【代码】应用层序列化和反序列化代码_2。

2024-03-05 22:30:38 118

原创 http服务器代码

【代码】http服务器代码。

2024-03-05 22:15:37 186

原创 计算机网络(应用层http)

协议本质就是双方约定好的某种格式的数据,常见的就是用结构体或者类来进行表达。结构化的数据方便被上层设置与读取。双方直接发结构化的数据要求双方的平台是一样的(因为不同操作平台对于结构化的数据有不同的要求,比方说内存对其的方法),这时候就需要序列化。

2024-03-03 18:56:47 937

原创 计算机网络(应用层https)

ca证书的意义是保证客户端收到的消息并没有被篡改,验证了证书的合法性就验证了公钥的合法性,这就解决了上面客户端无法验证公钥合法性的问题。可以让服务器生成一对公钥和私钥,然后服务器以明文的方式将公钥发给客户端对数据进行加密,这时候从客户端到服务器的信道看起来还算安全,因为只有服务器可以对客户端的进行解密,但是如果服务器要向客户端发送数据呢,这时候一定不能用私钥加密,安全性仍然有问题。http绑定的端口号是80,https绑定的端口号是443,在发送数据的时候选择了不同的端口号,报文会转给相应的协议。

2024-03-03 18:56:27 356

原创 应用层序列化和反序列化代码_1

【代码】应用层序列化和反序列化代码。

2024-03-01 12:15:52 104

原创 udp基础

【代码】udp基础。

2024-02-29 20:36:35 94

原创 udp代码(实现客户端和服务端通信)

【代码】udp代码(实现客户端和服务端通信)

2024-02-29 20:13:36 228

原创 tcp代码(实现多个客户端和服务端采用tcp连接)

【代码】tcp代码(实现多个客户端和服务端采用tcp连接)

2024-02-29 16:42:03 340

原创 计算机网络

此时主机a和b在数据链路层向上的每一层收发到的报文都是一样的,但是数据链路层收发到的报文可能是不一样的,因为一个是以太网一个是令牌环网,采用的是不同的驱动程序。底层的网络差异很大,但是大家用的都是ip地址,这是因为ip地址屏蔽了底层网络的差异,是通过路由器加ip协议来实现这个过程的,每经过路由器,要解包,跨越到下一个子网的时候又要进行封装,如果两边的网络是不同的,路由器根据具体的网络进行对应封装成协议报头,从而可以因地制宜的实现在不同的网络下传输,这样ip变成了全球网络的基础。

2024-02-27 13:08:32 914

原创 基于阻塞队列的cp

【代码】基于阻塞队列的cp。

2024-02-26 22:58:55 196

原创 进程间通信代码

【代码】进程间通信代码。

2024-02-21 02:14:20 201

原创 Linux(基础IO)_1

打开文件本质就是将需要的文件属性加载到内存当中。os一定会同时存在大量的被打开的文件,那么操作系统如何管理这些被打开的文件呢?先描述再组织。先描述本质就是要构建在内存的文件结构体,然后用链表等数据结构将这些文件对象串联到一起,对文件的管理就变成了对链表的增删查改。每一个被打开的文件,都要在os内对应文件结构体的实例化对象,可以将struct file结构体用某种数据结构连接接起来->在os内部,对被打开的文件进行管理,就会被转换成为对链表的增删查改。

2023-11-12 02:15:19 39

原创 linux(进程)

此处的存储器指的是内存,不是磁盘。输入设备时键盘、话筒、摄像头、网卡、磁盘,理解为采集数据的设备。数据计算完毕之后要想办法将结果呈现给用户,这就需要输出设备,输出设备就是显示器、磁盘、网卡、声卡、音响。输入和输出设别陈伟外围设备,外围设备一般都会比较慢一些。为什么要有内存呢?于木桶效应,没有内存计算机也可以运行,但是效率会大大的减慢。内存和磁盘都可以存储数据吗,但是内存相对于磁盘速度时最快的。

2023-11-08 21:59:13 37

原创 Linux(基本工具)

yum就像手机上的应用商店,而给Linux提供各种软件以及软件维护的人还有服务器供我们下载的那帮人是受什么驱使的呢?Linux的社区已是为了提供一个技术讨论交流的平台,同时也是为了让依赖这些软件的个人和公司找到组织,一旦找到组织之后,这些依赖给软件的群体自然会为这些软件的开发群体提供帮助让你们可以生存下去。开源也有自己的生态,他们希望的就是自己的软件尽快影响全世界,由于是不收费的原因可以迅速占领市场,占领了市场之后这些依赖这些软件的群体是希望我能继续维护这些软件的,所以会进行捐赠等等帮助。

2023-10-29 15:23:31 34

原创 数据结构(树、二叉树、堆)

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。树可以分为根和子树,子树是不相交的。一个节点含有的子树的个数称为该节点的度。度为0的节点叫,度不为0的节点叫。:具有相同父节点的节点互称为兄弟节点。:一棵树中的所有节点当中,度最大的节点的度称为树的度。:从根开始定义起,根为第1层,根的子节点为第2层,以此类推。:树中节点的最大层次。建议从1开始,因为当为空树的高度就是0。:从根到该节点所经分支上的所有节点。:以某节点为根的子树中任一节点都称为该节点的子孙。

2023-10-26 01:34:58 57

原创 数据结构(入门,包含顺序表、链表、栈、队列)

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的 数据元素的集合。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

2023-10-24 18:12:54 30

原创 Linux(基本权限)

权限第一和人有关,她一定是为了限制一批人,放过一批人,所以可以根据特定的人群进行权限的设定,第二个是和人想要访问的某种资源的特定属性相关,或者说和事物的属性相关,比如说想在gitee上看视频,这是没有这个权限的,因为gitee并没有看视频的属性。所以谈论权限是什么样的人在什么样的文件中具备什么权限。权限是限制人的,还要考虑访问的对象天然可能没有这种属性的情况。权限=人+事物属性linux下文件可以有的属性是读、写、执行。

2023-10-21 19:59:13 34 1

原创 Linux(基本指令)

计算机的本质是工具,计算机的产生衍化出来了许多的细分行业。linux系统最开始是仿造unix系统发明并且开源。linux开源的原因:使命驱动开源的好处:稳定性高,因为开源,代码暴漏出来,有更多的人一起发现问题,并解决问题,所以更稳定、也更安全,问题是一起解决的,所以更可能得到最优解,使得代码的效率更高。闭源的系统由于不清楚其内部实现,会影响到数据的安全。

2023-10-16 22:43:51 29 1

原创 C++(AVL树)

AVL树是为了避免二叉搜索树出现单支树的问题,解决方法有很多种,我们这里采用平衡因子的方法来解决:定义平衡因子,使得任何子树左右子树高度差不大于1。一棵AVL树或者是空树,说这是具有一下性质的二叉搜索树:1、它的左右子树都是AVL树2、左右子树高度之差的绝对值(简称平衡因子)不超过1更新完平衡因子之后:如果更新完之后,平衡因子没有出现问题,也就是平衡因子不超过1,平衡结构没有收到影响,不需要进行处理。如果更新完以后,平衡因子出现问题也就是平衡因子大于1,平衡结构收到影响,需要进行处理,旋转。

2023-10-12 21:01:43 24

原创 C++(map和set)

set是key模型,属于关联式容器,并非序列式容器,数据之间有非常大的关联关系,所以不是像序列式容器一样头尾随便插,所以不用push这个概念了,而是采用insert按照关联规则进行插入。set的功能不是单纯的排序,还具有去重的功能。

2023-10-10 01:45:49 31 1

原创 C++(多态)

/一个类型在现实中没有对应的实体,我们就可以一个类定义为抽象类。class Carpublic://纯虚函数——包含纯虚函数的类就是抽象类——不能实例化出对象class BMW :public Car//BMW在这里继承了抽象类Car,相当于也包含了纯虚函数也是抽象类。但是我们怎么样才可以让BMW不是抽象类,可以通过对Drive()这个纯虚函数进行重写来解决。重写之后Drive()在该类当中就不是纯虚函数,该类就成了普通类可以实例化对象。

2023-10-04 22:57:15 31 1

原创 c++(继承)

继承其实是类层次的一个复用,争对某部分类具有共同的特征。

2023-09-30 22:49:44 26

原创 容器适配器

stack是没有迭代器的,因为他不再是容器了,而是一个容器适配器。是对当前已有的容器进行一个封装。

2023-09-28 16:00:35 18

原创 Vector

对于编译器,空间并不是直接new出来的,new出来的空间优势是已经初始化了,已经初始化的意思是比如new出来的class T的空间返回值是ptr,ptr所指向的位置一定是一个已存在的以初始化的对象,所以可以赋值,我们可以直接通过*ptr=T(xxx),但是这种方式的缺点是需要空间就去new,new需要去堆区开辟空间。对于迭代器失效的问题,erase和insert都是通过返回值来进行解决的,insert返回pos,erase返回的是pos的下一个数据的位置,其实如果采用我自己实现的代码,返回的还是pos。

2023-09-23 20:20:55 37 1

原创 C++(string模拟实现)

正确写法。

2023-09-19 21:13:53 27

原创 c语言(字符函数和字符串函数模拟实现)

再一次调用strtok (NULL, sep),函数会从被替换成'\0'的@位置开始往下找下一个标记'.'并将其替换成'\0'然年后返回q的地址。strtok函数会找到str的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针(这里我们也可以知道strtok是会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可以修改。将错误码传换成错误信息,比如说浏览器的404就是错误码,这里的错误码是c语言中库函数报错的时候的错误码。,因为拷贝的时候遇到源字符的\0才会停止;

2023-09-18 19:36:17 26

原创 c++(String)

仿函数、算法(查找、归并、分类)、迭代器(iterator)、空间配置器(allocator和内存池先(只申请空间但是并没有初始化,避免频繁从堆中申请内存影响效率))、容器(string、vector)、配接器。

2023-09-14 21:31:51 30 1

原创 c++泛型编程(模板)

函数模板本质上并没有减少函数的个数,只是将函数的生成工作交给了编译器去做了。

2023-09-12 20:12:44 26

原创 c++——内存

c++中静态变量和全局变量存放的区域叫做数据段(c语言叫做静态区),而常量存放的区域叫做代码段(c语言叫做常量区)。new和malloc对于默认是不会初始化的,但是new有办法可以对内置类型进行初始化new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是 系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过 operator delete全局函数来释放空间。

2023-09-12 16:26:16 34

原创 c++(入门)

使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。注意事项:1、命名空间可以嵌套2、同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。比如一个工程中的test.h和上面test.cpp(test.cpp文件中包含了test.h头文件)中两个wjj会被合并成一个。

2023-09-10 23:02:54 38 1

原创 c语言学习笔记3

传地址返回才能改变实参,还有一个办法就是采用全局变量,全局变量具有通性功能,func1()和func2() 都可以使用全局变量func1()对全局变量的修改,func2()也可以看到其修改。形参实例化之后其实相当于实参的一份临时拷贝,改变形参不能够改变实参。1、xxx.c属性页->配置属性->常规->配置类型:选择静态库。采用递归实现接受一个整型值(无符号),按照顺序打印它的每一位。存在限制条件,当满足这个限制条件的时候,递归便不再继续;3、将xxx.h和xxx.lib放到目标.c文件的路径下。

2023-08-27 21:46:01 36

空空如也

空空如也

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

TA关注的人

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