- 博客(227)
- 收藏
- 关注
原创 初步认识URL
URL是Uniform Resource Locator的缩写,中文称为统一资源定位符,它是一种用于在互联网上标识和定位资源的字符串。这个字符串可以被任何网络设备(如计算机、手机等)识别,并指向特定的资源,如网页、图片、视频等。URL的发明是互联网历史上的一个重要里程碑,它使得用户可以方便地访问互联网上的各种资源。
2024-08-12 14:49:08
636
原创 IP与进程
如上图所示,一个数据从主机A到主机B后,这个数据进入主机内部后,是如何让主机B进行运行和识别该数据,这个数据传输到主机B是手段还是目的?举个例子,聊天是人在聊天,下载文件是人在使用计算机进行下载,浏览网页是人在浏览,那么人是如何知晓聊天记录以及送达,下载的文件是何时下载完毕,网页信息是如何让人查看到的。
2024-08-12 14:14:44
859
原创 网络 基础
协议,一种约定,计算机之间的传输媒介是光信号和电信号,通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息,要想传递各种不同的信息, 就需要约定好双方的数据格式。
2024-08-10 20:44:41
987
原创 进程的理解
且,else if 和 else 是同时进程的,和之前C++语言当中的else if else 语句中的不一样,因为这里的else if else是多进程,之前的是单进程进行的,所以这里并不是语法的错误,而是进程的原因。一个进程在磁盘上的数据被删除后,还能跑的原因是进程在运行前,它的数据和代码就已经被加载到了内存中了,所以在磁盘上删除了进程的可执行程序,但是进程仍然能运行的原因就是内存中还有进程的代码和数据。那么子进程的代码和数据是哪里来的?而在之后的进程控制化,也就是PCB结构体是在操作系统内部的!
2024-08-09 14:18:44
1061
原创 操作系统的基本认识
操作系统是一款软件,是计算机启动时使用的第一款软件,是一款进行软硬件资源管理的软件,例如U盘,操作系统可以管理它的接入和弹出,这是对硬件的操作,操作系统可以卸载 计算机上面的 软件,可以管理软件在计算机上的生命周期,这是对软件的操作。
2024-08-09 13:32:42
689
原创 高并发内存池
内存池是指程序预先从操作系统申请一块足够大内存,此后,当程序中需要申请内存的时候,不是直接 向操作系统申请,而是直接从内存池中获取。同理,当程序释放内存的时候,并不真正将内存返回给操 作系统,而是返回内存池。当程序退出(或者特定时间)时,内存池才将之前申请的内存真正释放。
2024-08-07 15:35:01
706
原创 C++ :lambda表达式
但是还是没有什么意义,应为把捕获的a,b变得可以修改数值,但是捕获的a,b和外面变量a,b不是同一个a,b,所以没有意义,因为捕获列表的捕获是传值拷贝,不是传址拷贝,所以这样使用mutable和这样写法的捕获列表是无效的,没有意义的。因为捕捉的变量是拷贝,而不是直接进行传址拷贝的,而是传值拷贝的,同时捕获的变量是被const修饰的,也就是捕获列表的a,b是不可修改的,所以这里就需要mutable。每一个lambda表达式都是不一样的,可以看到下图中的lambda后面跟随着的一串数字乱码都是不固定的。
2024-07-01 10:05:10
1011
原创 C++: 左值引用和右值引用
自定义类型的右值基本都是匿名对象、传值返回的临时对象。然后右值又有细分,分为纯右值和将亡值,基本上内置类型的右值都是纯右值,而自定义类型的右值基本都是将亡值。对于局部变量来说,它的左值只能是老实的开辟空间然后被利用完被拷贝完后销毁空间,而对于局部变量来说,它的右值(将亡值),它会利用空间!将拷贝数值的空间和临时变量的空间进行交换!有了移动构造后,在传值时,会强行把左值变成右值,强行使用了move (可以不在返回时加上move 编译器会做处理!)/可以看出str虽然是左值,但是和将亡值没什么区别。
2024-06-30 10:29:34
693
原创 C++:红黑树
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因而是接近平衡的。
2024-05-17 13:23:20
947
原创 C++:AVL树
当向二叉搜索树中插入新结点后,如果能保证每个结点的左右 子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均 搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 1、它的左右子树都是AVL树 2、左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)图上的平衡因子是右子树减去左子树的得到的,请注意无论是左子树减去右子树,还是右子树减去左子树,高度差/平衡因子都只能是 -1 、0、1这三个数之一。
2024-05-05 16:45:48
921
2
原创 C++:set和map的介绍
1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。5.
2024-05-05 14:54:35
997
1
原创 C++:二叉搜索树的底层模拟实现
最后这个判断的前者是判断是否是正常情况,在正常情况中,最小右子树节点的父节点只是一个普通的节点,且最小右子树节点的父节点的左边一定是最小右子树节点,所以可以让父节点指向最小右字数节点的 右子树。是右指针还是左指针?a、删除的节点他的左子树是空的,则他的父节点要指向他的右子树,同理删除的节点他的右子树是空的,他的父节点要指向他的左子树。删除的节点他的左子树是空的,则他的父节点要指向他的右子树,同理删除的节点他的右子树是空的,他的父节点要指向他的左子树。
2024-05-04 15:48:36
690
1
原创 C++:多态
重写确实发生在继承体系中,子类重写父类的虚函数。重定义通常指的是在派生类中定义一个与基类同名的成员,这可以发生在继承体系中,但它与重写不同,因为重写特指虚函数的覆盖。重载是发生在同一个类中的,它指的是在同一个作用域内使用相同的函数名但参数列表不同的函数。重载与继承体系无关,重载只能在一个范围内,不能在不同的类里。
2024-04-21 17:36:44
2240
原创 C++:继承
于是,为了方便对这些拥有相同属性的类做管理,以及减少代码带来的冗余,就将这些相同的属性全部提取出来,放在了一个类 person 中,将person作为父类,而减去了相同属性的各个类,则变成了子类,内部只存放着自己独特的属性,而那些原先相同的属性则以继承父类的方式进行获取。如图所示,父类和子类的成员可以重名,因为它们都是独立作用域,所以它们的成员可以同名,但是子类的成员和父类的成员同名后,编译器会遵循就近原则,在调用这个同名的成员时,会优先调用子类的这个成员。调用Print可以看到成员函数的复用。
2024-04-12 19:52:32
950
3
原创 模板的进阶
前提须知: 模板的本质其实就是传参,换言之,模板可以类比函数传参,二者的特性类似,但各有各的特点,可以通过函数传参来学习模板。以上面类模板代码为例,我们可以知道, template 中的 size_t N = 10 就算我们所讲的非类型模板参数。和其他模板参数不同的是,非类型模板参数 = 类型 + 常量 ,他的诞生也是为了让编译器在编译的过程中尽可能的省力,也让使用者可以更为方便和便捷的使用一个模板但却创造出更多的类。同时减少了代码的冗余,通过为不同
2024-04-11 19:38:38
564
原创 list的常用接口底层实现与介绍
自定义类型的完善 ,因为我们写的是一个自定义类型,所以读取*it后解决完后还是一个自定义类型的数据结构,所以需要在使用数据结构的写法,表明其中内部的数据即可!it->是需要进行拆解的,可以变成it.operator()->,这里其实是编译器的一种隐藏操作,之前的it++也是一种隐藏操作,可以变化为it.operator++()而it->_a1这里隐藏的是另一个-> ,也就是图中第二个->,第一个->是属于it的重载运算符标识!
2024-04-04 15:49:14
1297
3
原创 vector的简单介绍及常用接口的模拟实现
本篇博客是从底层角度来模拟实现STL的vector,在C++的学习过程中vector是一个非常重要的知识点,vector有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式,并将其进行模拟实现。vector 容器名储存int型的值 vector v;储存double型的值 vector v;储存string型的值 vector v;储存结构体或者类的值的值 vector v;
2024-03-30 15:06:27
591
原创 双指针算法_三数之和
给定一个整数数组 nums ,判断是否存在三元组nums[i]、nums[j]、nums[k],满足 i!=j 且 i!=k 且 j!=k也就是同一个位置只能选择一次!,且还要满足三个数相加等于0,同一个位置只能选择一次!答案中不可以包含重复的三元组、如下图所示,虽然有三组,但是其中两组虽然顺序不一样但是内部的数值是一样的也不行!
2024-03-28 15:08:12
324
原创 双指针算法_和为 s 的两个数_C++
输入一个的数组,和一个数字s,在数组中查找两个数,使得它们的和正好是数字s,如果有多对数字的和等于s,只需要任意输入一对即可。
2024-03-28 14:46:10
365
原创 进程与文件
1.对于每一种外部设备,它们都具有读写方法,而在之前的学习中我们知道,操作系统是需要通过驱动来对底层的硬件进行管理的,所以每一种外部设备的读写方法都即存在它们相对应的驱动之中。2.同时,每一个设备都会由操作系统创建一个数据结构 strcut file ,每次打开一个设备,操作系统就会开始创建一个strcut file。
2024-03-28 14:34:05
1008
原创 双指针算法_盛水最多的容器
如图所示,一个数组内部存储的是高度,求数组中,能够组成最大容量的两个元素,需要注意的是容量是 高度*宽度,这里的宽度指的是两个数字之间的距离,且需要注意高度中,容量要变成最大容量和高度有关,两个数字中最小的那个 * 两个 数字之间的距离 =最大容量。先用指针指向左右两端,然后算出容量v1,随后使用左端的1进行查看是否和其他位置的数字计算出的容量比v1大,答案当然是没用,这是因为在高度不变(高度是1)的情况下变动了宽度(两个数字之间的距离),所以容量没用v1大。
2024-03-26 11:58:35
341
原创 双指针算法_快乐数
通过示例的图解可以看出,如果计算的过程中出现了1,那么就将会在1时进行持续的循环,使得变成一个1的循环,而如果在计算的过程中,没用出现1,则会在计算的过程中,得出某个结果和之前计算的结果一致,成为一个环状。所以最后可以得出,如果有出现1则会进入1的循环,如果没用出现1则一直循环都有1。 这题和判断链表是否有环很像!不过这里只要判断环里面的数字是否是1,所以可以采取判断链表是否有环的方法,使用快慢双指针。定义快慢指针的方法和判断链表循环的双指针方法一样,快指针每次移动两次,慢指针每次移动一次,当二者相遇时,判
2024-03-26 11:35:24
328
原创 Linux进程的管理和进程的状态
程序的一个执行实例 ,正在执行的程序等等 ——— 课本概念担当分配系统资源的实体,例如cpu时间,内存 -----内核的观点。
2024-03-23 14:26:13
724
2
原创 双指针算法_复写零
通过示例和双数组模拟操作的过程,我们可以得出结论,如果使用双指针从左到右进行0的复写,那么势必会覆盖数组原有的元素,所以双指针进行操作的方向必须改变,变成从右到左,从后向前!继续使用双指针的操作,我们将dest定义为最后一个需要复写的位置,当前这里没有找到最后一个需要复写的位置,所以初始位置这里变成-1的位置,cur则是查看是0还是非0让dest向前1步还是两步。cur遇到非0,dest向前一步!同时判断dest是否在数组的末端,不是则cur继续往前走!
2024-03-16 10:20:05
697
21
原创 冯诺依曼体系结构
在冯诺依曼体系的结构下,输入设备传输的数据先要进入存储器(一般指内存)中,带输入的数据传输完毕后,在由存储器中的数据交给cpu(运算器和控制器)进行处理,因为cpu的处理速度过快,所以数据非常快的就再度回到存储器中,最后在通过存储器将数据发送到输出设备上。当前计算机的核心工作原理主要是依据冯诺依曼架构的体系结构进行工作的,在冯诺依曼体系体系结构出现之前,普通的计算机的工作原理一般是:输入设备----->cpu------->输出设备。为什么要转移到存储器当中呢?冯诺依曼体系的意义是什么?
2024-03-16 08:27:00
360
原创 string 底层模拟实现常用接口
本篇博客是从底层角度来模拟实现STL的string,在C++的学习过程中string是一个非常重要的知识点,在之前的介绍讲解中,我们了解到string有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式。C++:string相关内容的简单介绍-CSDN博客什么是string?为什么要学习使用string?string的优势?
2024-03-09 11:42:36
822
2
原创 String 类 经典例题题集
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。
2024-03-05 18:15:09
591
1
原创 string 类 经典习题之数字字符相加
给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger), 也不能直接将输入的字符串转换为整数形式。
2024-02-29 18:28:45
356
4
原创 C++:string 相关接口的简单介绍
string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string string,所以string 在底层的本质上也是一个模板不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;
2024-02-28 15:35:46
855
3
原创 C++ :内存管理 new&delete
在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与 free不会。//类Aclass Apublic://类A的构造函数的初始化列表: _a(a)//类A的析构函数~A()private:int _a;int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数//使用了malloc进行空间的开辟,但是没有初始化操作。
2024-02-13 15:08:07
1191
18
原创 C++:友元函数与友元类
缺点:友元函数不是类的成员但是却具有成员的权限,可以访问类中受保护的成员,这破坏了类的封装特性和权限管控;优点:可以实现类之间的数据共享;比如上面互为友元类,则可以互相访问对方受保护的成员;总结:友元函数是一种破坏封装特性的机制,可以让程序员写代码更灵活,但是不能滥用;
2024-02-12 14:21:10
458
1
原创 C++: const 的 权限放大缩小!
关于权限的放大和缩小问题,在文件领域讲诉可以理解为,当某个文件具有读取权限时,我们赋予这个文件读写权限,这个过程叫做权限的放大,而反之,当某个文件同时,但是我们了它,这就叫做而将权限放大缩小放在C++的指针和引用中,便是变量的数值是否能够修改的问题,如果将变量的数值从可以修改变到不能修改,则是权限的缩小,而将变量的数值从,则是但是在指针和引用中,权限放大是不可取的!
2024-02-11 16:21:41
895
4
原创 Linux: GDB 调试工具
Linux GDB(GNU Debugger)是一个功能强大的调试工具,用于调试C、C++等编程语言的程序。它可以帮助开发人员定位和修复程序中的错误。
2024-02-11 14:35:13
1130
原创 C++: 模板初阶
在下列函数中,它们都是swap函数,但是却因为参数的不同和而导致了需要使用函数重载进行实现,虽然解决了问题,但是函数重载也有不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数2. 代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?
2024-02-07 15:11:19
487
9
原创 C++:类的简单介绍(六)——初始化列表
1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)引用成员变量const成员变量自定义类型成员(且该类没有默认构造函数时)除了以上三类,其他的成员变量在初始化列表或者在函数体({}内部的)的使用影响都不是很大!但是还是建议使用初始化列表。
2024-02-05 14:42:25
1176
5
C++ 类与对象之日期类的创建代码解析
2024-02-21
C++ 类与对象之日期类的创建主要代码
2024-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人