- 博客(84)
- 收藏
- 关注
原创 Linux进程调度和进程切换
含义:并行是指多个任务在同一时刻同时执行。硬件要求:需要多个处理器(如多核CPU)或者多台计算设备来实现,这些执行单元能够真正地同时处理不同的任务。例如,一个具有4个核心的CPU可以同时执行4个不同的任务,每个核心负责一个任务的执行。执行特点:任务之间真正地同时进行,不存在资源共享带来的相互等待,能够极大地提高计算速度,适用于计算密集型任务。
2024-10-05 19:46:07 751
原创 进程地址空间
父子进程输出的地址是一致的,但是变量内容不一样。变量内容不一样,所以父子进程输出的变量绝对不是同一个变量。但是地址值是一样的,说明该地址绝对不是物理地址。进程地址空间是指进程可用于寻址内存的一套地址集合。它是一个抽象概念,为进程提供了一种独立于物理内存的、连续的内存视图。
2024-10-05 19:40:22 298
原创 LinuxO(1)调度算法
在Linux中,O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的,与系统中的进程数量无关。
2024-10-05 19:29:52 1034
原创 Linux中环境变量
环境变量Environmental variables一般是指在操作系统中用来指定操作系统运行环境一些参数。我们在编写C、C++代码时候,在链接的时候从来不知道我们所链接的动态、静态库在哪里。但是还是照样可以链接成功。生成可执行程序。原因就是相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊属性。还有在系统中通常具有全局特性。
2024-10-05 19:22:38 1536
原创 进程概念 | 进程状态 | 进程优先级
子进程被创建的时候,他的代码,数据结构以及taskstruct都源自于父进程的代码和数据以及父进程的task struct。而采用对下进行软硬件资源管理的手段来保证资源是稳定的,高效的,安全的,能进行良好的工作。对于子进程fork函数返回零是为了让子进程能够区别自己是子进程的身份,因为子进程可以通过这个返回值知道自己是新创建的子进程从而执行相应的代码逻辑比如执行与父进程不同的任务。而对于进程管理,在进程运行的过程中,从进程加载,进程运行到进程结束的整个生命周期里,操作系统要对进程进行管理。
2024-10-05 16:47:33 760
原创 Linux2.6* 内核默认支持的文件系统
Linux 2.6.* 内核指的是 Linux 操作系统的 2.6 系列内核版本。Linux 内核是操作系统的核心部分,负责管理系统的资源,如内存、处理器、设备驱动程序等,并为上层的应用程序提供服务。“2.6” 是内核的主版本号,“*” 代表次版本号或修订版本号。Linux 2.6 内核系列在 Linux 发展历程中具有重要地位,带来了很多新的特性和改进。
2024-09-25 15:12:37 535 1
原创 C++11新特性总结
相比于C++98/03,C++11是C++程序设计语言标准的一个新的版本,在2011年由ISO批准并发布。C++11新标准从而代替了原来的C++98和C++03。C++11标准是对C++的一次巨大的改进和扩充。在核心语法,STL标准模板等方面增加众多新功能,新亮点。C++11能够更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更加强大,而且能够提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。
2024-08-09 21:15:45 1010 1
原创 哈希表的改造 | 封装unordered_set与unordered_map
与map、set的封装类似,unordered系列的底层本质上也是复用,通过对哈希表的改造,再分别套上一层unordered_map和unordered_set的“壳子”,以达到“一表二用”的目的。unordered系列的底层哈希表是用结构实现的。
2024-08-04 11:31:21 281
原创 哈希 || unordered系列的关联式容器底层 | 哈希模拟实现 | HashTable代码实现
哈希函数设计原则:哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0——m-1之间;哈希函数计算出来的地址能均匀分布在整个空间中;哈希函数应该比较简单。
2024-08-04 10:51:10 1156
原创 error: non-void function does not return a value in all control paths
每一种情况下必须又要有返回值,所以利用赋值ret,在函树末尾返回ret即可。
2024-07-26 15:10:01 414
原创 红黑树的实现
红黑树,是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是red或者black。通过对任何一条根到叶子的路径上各个节点的着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。
2024-07-24 12:25:31 1017 1
原创 AVL树的实现
left:指向左孩子节点的指针;_right:指向右孩子节点的指针;_parent:指向父亲节点的指针;_kv:存储键值对的pair对象,其中K表示键,V表示值;_bf:当前节点的平衡因子,用于衡量左右子树高度差。//节点的结构体希望在整个作用域中都能自由使用用struct//AVL的底层使用三叉链的形式// 所以每个节点都要有指向他的父亲,左孩子和右孩子的指向//节点类型为kv模型//节点的值以键值对的形式进行存储//每一个节点都还要有一个平衡因子int _bf;
2024-07-23 18:07:30 928 1
原创 笔记强训 || NC313 两个数组的交集 || 哈希表/去重+排序+遍历查找+插入ret
想快速在一堆数字中找到某个数字是否存在的方法:哈希表。找数组A与数组B之间的共同值(不重复):将数组A设置为哈希表,数组A的数据为哈希表的角标,哈希表中角标是数组A数据的位置设置为true,其余为false。遍历数组B,数组B中的数据看做哈希表的角标,对应位置是true,则说明数组AB均有。牛客网上定义数组如果不初始化,则是随机值,并不是0。方法二利用:去重+排序+遍历查找+插入retpublic:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可。
2024-04-17 17:45:16 379 1
原创 笔试强训 | BC153 [NOIP2010]数字统计
易错点:将while与if两个关键字,“脑子不转”,将while写为if,使其持续做的事情只是进行了判断。拆分数据的方法:1234%10=4,1234/10=123。%10是取出数字的最后一位,/10是将数字删掉最后个位的数字,也就是数字缩小十倍。1%10=1(0*10+1=1):只有一位的数字%10就是他本身。1/10=0(0*10+1=1):只有一位的数字/10是0。
2024-04-17 16:40:36 333 1
原创 error:LNK2005 已经在*.obj中定义 的原因分析及对策
/如果没有定义这个宏//定义这个宏//...code...头文件主体内容endif我经常忽略的一个细节,举例说明:class Cubepublic:Cube();~Cube();m_a = a;m_a = b;m_a = c;int getV();//声明了getV().想要在外部单独定义private:int m_a;int m_b;int m_c;int m_v;return m_v;变量在使用前就要被定义或声明;
2024-04-09 11:31:45 3425 2
原创 C++ | string类学习 | string的常见接口使用方式
string字符串是表示字符序列的类;标准的字符串类提供了帮助对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性;string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型);string类是basic_string的模板类的一个实例,它使用char来实例化basic_string模板类,并使用char_traits和allocator作为basic_string的默认参数;
2024-04-04 17:35:42 824
原创 常用字符函数和字符串函数的了解和模拟实现
字符函数和字符串函数都是在编程中用来处理字符和字符串的函数。字符函数是用来处理单个字符的函数,比如查找、替换、转换大小写、比较等操作。常用的字符函数包括:isalpha()isdigit()islower()isspace()toupper()tolower()strchr()strstr()字符串函数是用来处理整个字符串的函数,比如查找、替换、连接、分割等操作。常用的字符串函数包括:strlen()strcpy()strcat()strcmp()strchr()strstr()strtok()
2024-02-29 18:38:09 952
原创 Linux | 进度条 | Linux简单小程序 | 超级简单 | 这一篇就够了
在学习了基本的Linux指令,Linux上vim编译器等等之后,我们就来学习写代码喽~在 Linux 上写下一个简易的进度条小程序。
2024-02-07 20:19:17 1354 11
原创 C++ || 模板初阶 | 函数模板 | 类模板
如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
2024-02-07 12:57:50 680 15
原创 C++ || C/C++内存管理 | C++动态内存管理方式 | operator new/delete函数 | new和delete实现原理 | 定位new表达式 | 内存泄漏
类名* 地址名 = new 类名[];调用operator new函数申请空间;在申请的空间上执行构造函数,完成对象的构造。内存泄漏,是指因为疏忽或者错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
2024-02-05 21:00:56 1144 9
原创 C++ | 再谈构造函数 | Static成员 | 友元 | 内部类 | 匿名对象
初始化列表特性:每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次);类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量(引用必须在定义的时候初始化)、const成员变量(定义之后就不能修改)、自定义类型成员(且该类没有默认构造函数);尽量使用初始化列表初始化,因为不管是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化;成员变量在类中声明次序就是其初始化列表中初始化顺序,与其在初始化列表中的先后次序无关;如果没有默认构造,编译器会编不过,所有的成员变
2024-02-05 12:38:09 1003 7
原创 C++ || 类的八种函数 | 默认成员函数 | 构造函数 | 析构函数 | 拷贝构造函数 | 赋值运算符重载 | const成员函数 | 取地址及const取地址操作符重载
构造函数属于默认成员函数。如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数;如果显示定义,则编译器不自动生成;编译器自动生成的构造函数对内置类型不做处理,对自定义类型成员调用它的默认成员函数;默认构造函数可被认为有(以下三种只能出现一种):无参的构造函数、全缺省构造函数、编译器默认生成的构造函数。建议使用全缺省构造函数。声明和定义分开,全缺省构造函数中的缺省参数应该写在函数的声明部分,而定义部分不需要写
2024-02-01 08:15:01 1153 25
原创 Linux | makefile简单教程 | Makefile的工作原理
Makefile带来的好处就是——自动化编译。一旦写好,只需要一个make命令,整个工程就完成自动化编译,极大提高了软件开发的效率;make是一个命令工具,是一个解释Makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,visual C++的make,linux下GNU的make。可见,Makefile都成为了一种在工程方面的编译方法。make是一个命令,Makefile是一个文件,两个搭配使用,完成项目自动化构建。
2024-01-26 16:09:35 1494 24
原创 C++ | C++11中 基于范围的for循环 详细讲解
对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,计算机都应该知道一个数组的范围了,而自己还要告诉他,也就是很麻烦,有时候还容易犯错。对于类而言,应该提供begin和end的方法,begin和end就是for循环的迭代的范围。例如 : for(“数据类型”“变量名称”“ : ” “数组名称”)对于数组而言,就是数组中的第一个元素到最后一个元素的范围。因而C++11中引入了基于范围的for循环。
2024-01-24 21:18:01 584 1
原创 C++ | auto是什么意思?如何使用?详细讲解
在使用auto时,编译器只会堆第一个类型进行推导,然后用推导出来的类型定义其他变量。在同一行定义多个变量是,这些变量必须是相同的类型。auto “变量名称” = “赋值的内容”;
2024-01-24 21:12:35 1339 1
原创 C++ | inline 内联函数是什么意思?【面试题】宏优缺点?详细讲解
Inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,(假如在调用一个指令很长的函数时,即使你使用了inline内联函数,但是如果这个函数超过了这个编译器的规定线时,编译器会忽略这个inline特性);Inline是以空间换时间;但是这里的空间注意并不是内存的空间,而是可执行程序的空间变大了;在编译阶段,会用函数体替换函数体替换函数调用。叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序的运行效率。
2024-01-24 21:02:23 538
原创 C++ | 引用是什么意思?引用与指针的不同点?详细讲解
语法概念上,引用就是一个别名,没有独立空间,和其他引用实体公用同一块空间;编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。底层实现上,引用实际是有空间的,因为引用是按照指针方式来实现的。例如:李逵,AKA“铁牛”“黑旋风”,都是同一个人。类型& 引用变量名(对象名)=引用实体。先初始化变量,再const引用 常量。
2024-01-24 20:55:55 756
原创 C++ | 函数重载是什么意思?【面试题】C++支持函数重载的原理是什么?详细讲解
一个词有多种含义,可以通过上下文来判断该词的真实含义,即该词被重载了。函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的(参数个数、类型、类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。注:函数重载时返回值的类型可以相同也可以不同。
2024-01-24 20:44:24 493
原创 C++ | 缺省参数什么?如何使用?详细讲解
半缺省参数必须从右往左依次给出,不能间隔给;缺省参数不能在函数声明“.h”和函数定义“.cpp”中同时出现;不能跳跃传值;缺省参数必须是常量或者全局变量;C语言不支持。
2024-01-24 20:34:34 506
原创 C++ | cout与cin << >> endl 是什么意思
旧编译器(vc 6.0)中还支持格式,后续编译器已不支持;早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应。后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间;因此推荐使用+std的方式。规定C++头文件不带.h;
2024-01-24 20:19:23 1138
原创 C++ | 什么是命名空间?命名空间的详细讲解
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
2024-01-24 19:11:25 574
原创 【Web-Note】 JavaScript概述
head中定义JS函数head标记内定义两个JS函数无返回值函数:message()有返回值函数:sum(x,y)" value="计算并显示两个数的和">
2023-11-26 20:11:37 1919 6
原创 【数据结构】二叉树概念 | 满二叉树 | 完全二叉树
二叉树在实践中用的很多。一棵二叉树是结点的一个有限集合,该集合:或者为空一个根结点两棵左子树右子树二叉树最多两个孩子这里注意:二叉树并不是度为2的树。二叉树的度最大值是2,并不是说它的度一定为2。二叉树不存在度大于2的节点;二叉树的子树有左右之分次序是不能颠倒的,因此二叉树是有序树。二叉树通俗也可以理解为对树进行了“计划生育”。“计划生育”也就是生两个小孩,但是是每一家来说都是生两个吗?度为2一定是二叉树。所有节点的最大的度就是2。
2023-11-23 11:49:51 972 1
原创 【数据结构】树如何定义 | 如何存储 | 实际应用
如上图,A中的孩子的个数是不固定的。我们无法精确的每个不同的根结点有多少个孩子。所以并不能精确知道需要定义多少个孩子节点。
2023-11-23 11:34:08 288
原创 【数据结构】树的基本概念 | 入门树以及二叉树必熟知
结点的度结点的度:一个节点含有的子树的个数称为该结点的度;如A节点的度为6,B节点的度为0。叶节点或终端结点叶节点或终端结点:度为0的节点称为叶节点;如上图P/Q/H/I/B/C...等都为叶节点。非终端节点或分支节点非终端节点或分支节点:度不为0的结点;如上图D/E/F/G/J都为非终端节点。双亲节点或父节点双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;如上图:A是B的父节点。孩子节点或子节点孩子节点或子节点:一个节点含有子树的根结点则称为该结点
2023-11-23 11:20:09 120
原创 【数据结构】单链表 | 详细讲解
在链式结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址。数据域:存储数据元素信息的域称为数据域;指针域:存储直接后继位置的域称为指针域。在指针域中存储的信息称为指针或链。数据域与指针域信息组成数据元素的存储映像,称为结点。单链表:n个结点链结成的链表,此链表中的每个结点中只包含一个指针域。
2023-11-15 21:43:57 691 37
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人