- 博客(72)
- 收藏
- 关注
原创 Linux进程状态
阻塞期间,进程不会被调度,但对应进程的PCB和代码以及数据也是会占用内存的,若进程越来越多,则计算机的内存资源迟早不够用,那么,此时,操作系统为了保证整个系统的安全,就会将进程的代码和数据换出到磁盘中;对于每个CPU,操作系统都要给它提供一个叫做运行队列的东西(FIFO),每次执行一个进程,就是把这个进程的task_struct链入运行队列中,CPU在处理进程时,就只需要到运行队列去取头节点即可。此时这个进程就会被设置为。而这个退出码的信息,规定了这个进程退出的状态,就譬如0为正常退出,非0为异常退出。
2025-03-03 22:03:13
963
原创 Linux进程初步(概念篇)
在前面的文章中,我们已经知道了一点:管理是先描述再组织。对于进程而言,也是如此的。操作系统需要先描述进程,之后再进行组织。
2025-02-27 19:22:36
610
原创 Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)
PHONY是Makefile文件中的关键字,用于声明某个目标为伪目标。伪目标不对应实际文件,无论文件是否修改,相关命令每次都会执行。
2025-02-21 17:55:03
1334
1
原创 Shell的运行原理&&Linux权限管理
在谈Shell的运行原理之前,我们先说一下Windows操作系统。Windows操作系统是鼠标+键盘一起操作的,用鼠标在可视化界面上点点点,然后用键盘输入就可以完成操作了。但,Linux却不一样,Linux是命令行界面,不是可视化界面,因此Linux系统并不需要鼠标就可以操作了。但,说到底,命令行界面和可视化界面也都是界面,他们本质上都是一样的,都是为了方便用户操作的东西。这个界面就被称为是“外壳程序”。可视化界面常用于家庭和个人使用;命令行界面常在企业中使用。
2025-02-17 20:33:34
1130
原创 Linux:指令大全(二)
在linux中,我们是没办法用鼠标进行翻页阅读的,如果我们想要阅读文件的话,则需要用到cat指令。cat指令只能用来查阅内容较少的文件,若是需要查阅内容较大的文件,则需要用到more指令。因此,我们就可以将前100行的数据通过管道传输,然后在右边的出口只读取tail 10即可。功能: 用于显示文件的末尾至标准输出中,默认tail指令打印的是相对应文件的末尾10行。把cat反过来写,就是tac,tac指令,可以用于反向查看目标文件的内容。管道,用“|”表示,用于传输一个东西,管道左边为入口,右边为出口。
2025-02-03 13:38:51
996
原创 Linux:指令大全(一)
-pdirname可以是一个路径名称,但是若路径中的某些目录不存在的话,加上此选项后,系统会自动创建好那些不存在的目录,即一次可以创建多个目录。功能:touch命令参数可以更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。Linux的指令太多了,我们是记不住的,所以我们就需要一个字典来查阅指令的用法,那么我们就用到了man命。linux系统中,所有的文件和目录会被组成一个目录树,树的每一个节点都是文件或目录。rmdir是一个和mkdir相对应的指令,用于删除一个目录。
2025-01-18 16:29:18
726
原创 机器学习初识
一个函数,如输入音频,输出音频所对应的文字。无法通过人类的力量来完成这个函数,由机器来完成这个函数。帮助人类完成事情是通过一个函数来完成的,而这个函数是通过类神经网络来完成的。
2025-01-17 11:44:24
384
原创 C++STL详解(九)map和set的使用
在我们之前介绍二叉搜索树时,我们大家可以发现其的模板参数只用了一个T1,而我们的set的底层就是一种特殊的二叉树,我们可以将其理解为只有一个实值value的特殊模型。下图为cpp库中set的定义:参数1:T即是set的实值参数2:compare是中序遍历结果的排列,默认是升序参数3:空间配置器下面,我们来学习以下set的定义方式:方式1:构造一个空的容器方式2:拷贝构造方式3:迭代器区间构造方式4:构造空容器,并指定比较方式map。
2024-11-01 18:13:32
871
原创 一篇文章讲透数据结构之二叉搜索树
二叉搜索树(Binary Search Tree)是基于二叉树的一种升级版本,因为普通的二叉树没有实际应用的价值,无法进行插入、删除等操作,所以我们进行了升级,升级成了二叉搜索树。左节点比根节点小,右节点比根节点大。下面我们展示一下;//函数定义返回类型 函数名(参数1,参数2,......)//函数体return a+b;在上面的这个例子中,我们定义了一个add函数,他接受的两个值是整型的,并返回了他们的和,因此,我们可以使用这个函数计算两数之和。
2024-10-26 20:14:23
961
原创 C语言初始:数据类型和变量
人有黄人白人黑人,那么数据呢?我们大家可以看出谁是黄种人,谁是白种人,谁是黑种人,这是因为他们是类似的。数据也是有类型的,就譬如整数类型,字符类型,浮点型类型。每种类型也都是能够抽象出共同特征的,编译器也是只有知道了数据的类型才能操作数据。我们在本文中将学习整数类型,字符类型,浮点型类型,布尔型。在C语言中,数据类型决定了变量在内存中存储的方式以及可以进行的操作。本文将简要介绍C语言中常见的数据类型,包括字符型、整型、浮点型和布尔类型,并在示例中详细解释其使用原因。
2024-10-13 16:09:31
897
1
原创 C语言入门:打开编程世界的大门
像‘a’,‘b’,‘c’,‘1’,‘#’ 等由单引号引起来的东东,我们称为字符。ps:重点是单引号,单引号里面只能引一个。
2024-10-12 16:27:14
910
1
原创 C++STL详解(八)priority_queue的运用与实现
优先级队列也是队列,符合队列先进先出的原则。但顾名思义,它是具有优先级的一种队列。也就是说,优先级高的元素会在前面,优先级低的元素会在后面。说到这里,大家应该能够联想到一种名为堆的数据结构。其实,优先级队列的底层就是用堆来实现的。泛型编程。堆的实现。
2024-10-10 09:23:27
1026
原创 oi!小鬼!准备好接受模板的力量了吗?
模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性3. 模板会导致代码膨胀问题,也会导致编译时间变长4. 出现模板编译错误时,错误信息非常凌乱,不易定位错误模板是一把双刃剑,用好了,它将会是一把锐利的武器,用的不好,它将成为压倒你的大山。
2024-10-08 23:48:00
742
原创 C++面向对象:继承!
/子类:继承方式父类//eg:classa:publicb代表了a以public的方式继承了b。在我们上述的例子中ps:继承符是可以省略的,省略继承符时使用class时,默认继承方式为public继承。使用struct时,默认继承方式为private继承。
2024-10-06 00:48:35
794
原创 多态对象的内存结构
这篇文章我们通过具体的案例来谈一谈多态的具体内存结构:class Base{public: virtual void Func1() { cout << "Func1()" << endl; } virtual void Func2() { cout << "Func2()" << endl; } void Func3() { cout << "Func3()" << endl; }privat
2024-09-22 21:23:21
344
原创 C++面向对象:多态!
实现多态需要借助虚表(虚表数表),构成虚表需要虚函数(virtual修饰的函数)。除此之外,我们还需要虚表指针定位函数,并调用。抽象类即有纯虚函数的类。那么,什么是纯虚函数呢?我们只需要在虚函数的函数头之后加一个=0,即可将虚函数变为纯虚函数。纯虚函数也可以与普通虚函数构成重写,也就是能够实现多态。但是,包含纯虚函数的类是不可以实例化对象的,这点我们后续会谈到。因此,只要类中含有纯虚函数,那么这个类就是一个抽象类。cout
2024-09-22 21:11:23
946
1
原创 C++STL详解(七)——Stack和Queue
第一个构造函数:使用默认的适配器定义栈第二个构造函数:使用特定的适配器定义栈如果没有为stack指定特定的底层容器的话,默认情况使用deque(双端队列)。使用默认的适配器定义队列。使用特定的适配器定义队列。如果没有为stack指定特定的底层容器的话,默认情况使用deque(双端队列)。
2024-08-17 17:33:48
944
12
原创 C++STL详解(六)——list类的具体实现
list的迭代器类,实际上只是对结点的指针进行了封装,并对其各个操作符进行了重载,使得结点指针的各种行为看起来和普通指针一样。
2024-08-14 23:39:14
941
1
原创 C++STL详解(四)——vector类的具体实现
在上篇文章中,我们已经学习了vector的具体接口使用方法,在本篇文章中,我们将学习实现一个vector容器。
2024-08-12 20:35:51
770
原创 C++STL详解(五)——list类的接口详解
list容器的底层是双向循环带头链表,在CPP中,我们对双向循环带头链表进行了一定程度的封装。双向链表在这里我们要学习六种list的构造方式。构造1:构造一个某类型容器构造2:构造一个含有一个值的某类型容器//构造只含有一个数值3的结点的list容器构造3:构造一个含有n个值的某类型容器//构造含有三个数值都是5的结点的list容器构造4:复制某个容器构造该容器的复制品//拷贝构造构造5:使用某个迭代器区间进行构造//迭代器区间初始化构造6:使用列表构造一个某类型容器//使用列表构造。
2024-07-25 23:48:50
1063
12
原创 C++STL详解(三)——vector类的接口详解
vector容器的底层是顺序表,在CPP中,我们对顺序表进行了一定程度的封装。顺序表。
2024-07-24 23:47:05
1164
52
原创 C++STL详解(一)——string类的接口详解(下)
在这里需要大家注意的是,capacity表示开辟的空间大小,而size求出的是开辟的空间内的元素个数。在用>>进行输入操作时,当>>读取到空格便会停止读取,基于此,我们将不能用>>将一串含有空格的字符串读入到string对象中。另外,值得一提的是,如果resize给出的值大于capacity的值的话,会调用扩容函数。但是,我们发现了一个问题,如果我们输入的字符串中有空格的话 则空格后的字符会进入缓冲区。string元素的访问有两种方式,我们可以通过重载的[]访问,也可以通过at函数访问。
2024-07-23 21:03:36
710
39
原创 C++STL详解(一)——String接口详解(上)!!!
string类是CPP中STL中处理字符串的一个类,它给我们提供了丰富的接口以供于我们使用。虽然我们传统的C库中有相关的函数以供于我们使用,但是由于操作起来比较麻烦,因此CPP中实现了string类。string类所在的头文件为
2024-07-23 16:42:58
477
22
原创 CPP入门:日期类的构建
这里需要注意的是,由于这个函数运行结束之后,tmp会先被销毁掉,再进行返回,因此我们如果返回值为引用的话,则会出错。之后我们一直减去当月的天数,并让月份加1,如果月份为13,则年份加1,月份赋为1。在日期类中,我们应当是已知每个月份有多少天的,因此我们还需要在日期内中写一个成员函数来获得当月的天数。后置++是先使用后++的。此外,我们的日期类还应当能够实现对日期的打印、对日期类的相关计算、输入输出的重载等成员函数。与实现加等类似的是,这里我们也是类似的步骤,通过一个循环来不断的更新年月日。
2024-07-02 22:36:45
1208
48
原创 数据结构入门:探索数据结构第一步
数据结构是由“数据”和“结构”两词组合而来。什么是数据?常见的数值1、2、3、4......、学生管理系统中保存的学生信息(学号、年龄、年级等到)都是数据什么是结构?我们想要大量的使用某一个类型的数据时,需要手动定义大量的独立的变量对于程序来说,可读性非常差,因此我们会借助数组这样的数据结构将大量的数据组织在一起,结构就可以理解为组织数据的方式。打个比喻,如果我们把叫“裤衩”的羊放生到草原上,我们自然很难找到它;但,如果我们把这只羊放到羊圈里,我们就可以很轻松的找到它。对于我们在这个地方的学习而言,
2024-06-12 20:31:38
1360
原创 进军rust:从0开始学习rust语法
Rust语言中的基础数据类型有以下几种:整数型简称整型,按照比特位的长度和有无符号位可以分为以下几种isize和usize两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台,如果是32位架构的处理器将使用32位位长度整型。整型变量默认使用i32.Rust和其他语言一样支持32位浮点数(f32)和64位浮点数(f64)64位浮点数的精度更高,因为它有64个比特位可以表示数据因为现代计算机处理器对两种浮点数计算的速度几乎相同,默认情况下计算机会使用六十四位浮点数。3.其他类型其他类型
2024-06-09 00:22:32
1214
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人