- 博客(53)
- 收藏
- 关注
原创 Linux基础OI-系统文件OI
pathname: 要打开或创建的⽬标⽂件flags: 打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。O_RDONLY: 只读打开O_WRONLY: 只写打开,O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新问件的访问权限,打开文件时,如果文件已经存在,写入的内容会覆盖原内容。O_APPEND: 追加写。
2025-03-16 14:55:29
890
原创 Linux 进程管理 -- 进程的替换 (补进程创建)
进程管理中,包括 进程 创建,终止,等待和替换;创建因该是首个要了解的内容的;但是之前忘记写了,这里在介绍完 替换补充了一下;当然如过不知道 创建的概念的话,还是先建议提前看创建的内容部分的;
2025-03-10 10:02:43
894
原创 Linux进程控制 -- 进程退出 与 等待
在之前我们已经大致了解了,什么是进程和进程的一些概念;现在我们了具体了解进程,也就是进程的控制,进程的创建,终止与等待;现在先了解什么是进程的终止:进程终止的本质是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码。
2025-03-05 15:45:32
954
原创 Linux进程概念 -- 地址空间
在了解地址空间的时候,我们先回顾一下之前在学习c语言的时候,所了解的空间分布图;可能我们对他并不理解!那么可以先对其进行各区域分布验证:通过这个图我们可以验证而且这牵扯到了 虚拟地址,说白点,我们通常说的程序地址空间 就是 虚拟地址;
2025-02-26 08:31:42
1103
原创 Linux进程概念 -- 环境变量
在此之前已经了解过了,进程的切换,进程优先级等进程的相关内容;那么在程序运行时,相关参数就怎么样进入到进程中的呢?还有我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,为什么?这就涉及到了本篇的主要内容,环境变量,环境变量表和命令行参数表;
2025-02-25 10:39:58
1265
原创 linux进程概念-进程的切换与调度队列
理解好上面的过程,就能更好的理解 调度算法 抢占 等等。抢占:最简单的理解,也不能说特别对的理解:当加入一个新进程时 是进入 a 队列 还是 e 队列呢?可以理解为 直接 加入到 a 队列;这也相对插队了,只要优先级提前就能提前调度。同时解答了前面,为什么优先级的改变只能还不NI值,而不能改变 PRI值。
2025-01-22 11:40:42
801
原创 Linux进程概念-两个特性进程状态-僵尸进程-孤儿进程
一个子进程退出,不是一退出把 PCB 全部释放掉而是把其代码和数据释放掉;因为不会再调度这些代码;PCB 中还有要传给父进程的相关信息。在子进程退出后,父进程得到子进程 PCB 相关信息前,这个状态,就是僵尸状态;如果父进程一直不管,不回收,不获取子进程的提出信息,那么 Z 会一直存在!
2025-01-18 14:05:02
891
原创 Linux进程概念-进程状态
在上一篇已经了解了在进程中的基本概念,现在我来了解一下进程的相关状态;对于进程的状态,在详细了解之前我们可以来一个粗略的理解:进程的状态可以理解为就是一个整数,用宏定义 实现R, S等状态;也就是进程状态就是take_struck内的一个整数;如果不理解也没关系,下面来看看对进程状态的看法:先理解最基本的三个状态运行&&阻塞&&挂起。
2025-01-17 12:28:22
1007
原创 Linux进程概念--冯诺依曼体系与操作系统的初识
在前面,已经了解过Linux中的基础的开发工具,如vim的使用与配置,Mafile的了解,对软件环境的理解,对缓冲区的理解,编辑器gcc,用于调试的gdb等等;通过这些的学习对Linux的了解也是有了一点的基础,现在要更深一步的理解,那就要学习非常重要的知识,进程!
2024-12-17 10:03:16
902
原创 c++11 --- 左值与右值的使用;
深拷贝定义类型如vector,string,map等等实现移动构造的意义很大,因为移动构造的效率比拷贝构造快的多;直接交换对应内存的内容,比开辟一个再拷贝过去,效率高的多。
2024-11-07 17:57:13
1194
原创 封装红黑树实现mymap和myset
前面我们已经了解过红黑树如何实现,和map与set的基本用法;要继续深入了解map,set中的库函数的用法,与细节那么我们就可以试着简单用语言封装模拟实现一下map与set;这里就分享一下我的思路;若没了解过我之前的文章中就有。
2024-10-31 16:57:49
1105
原创 用哈希表封装myunordered_map和myunordered_set
如果对模拟实现map与set 不了解或者忘了的,可以在复习一下(我之前的博客就有)因为这两种方法基本一样,这里的细节可能说的不全;
2024-10-30 15:33:49
2130
原创 哈希——哈希表处理哈希冲突的方法
当然哈希表无论选择什么哈希函数也避免不了冲突(主要作用就是减少冲突),那么插入数据时,如何解决冲突呢?主要有两种两种方法,和。
2024-10-25 10:22:47
2221
1
原创 权限(补充)
在上一篇中已经见识了一部分权限,但是少了很重要的一部分:那就是用户之间的转换,文件读写的关系,这里就简单的介绍一些;我们在那么于是, 问题就来了!换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限那如何解决呢?
2024-10-20 23:07:34
461
原创 红黑树的实现
说明:下图中假设我们把新增结点标识为c (cur),c的⽗亲标识为p(parent),p的⽗亲标识为g(grandfather),p的兄弟标识为u(uncle)。c为红,p为红,g为⿊,u存在且为红,则将p和u变⿊,g变红。,c之前是黑色的,是在c的子树中插⼊,符合情况1,变⾊将c从黑色变成红色,更新上来的。,c之前是黑色的,是在c的子树中插入,符合情况1,变色将c从黑色变成红色,更新上来的。c为红,p为红,g为黑,u不存在或者u存在且为黑,c为红,p为红,g为黑,u不存在或者u存在且为黑,
2024-10-15 07:56:55
1084
原创 AVL树实现
AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis是两个前苏联的科学家,他们在1962年的论⽂《An algorithm for the organization of information》中发表了它。AVL树是最先发明的是平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的左右⼦树都是AV树,且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树,通过控制⾼度差去控制平衡。AVL树实现这⾥我们引入一个平衡因⼦。
2024-10-13 19:37:19
943
原创 map系列的使用
map的声明如下,Key就是map底层关键字的类型,T是map底层T的类型。但要注意:map的 key 与 T 是封装在存储键值对应数据。这就类似于封装的map中又将封装key 与 T 到pair中;set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第⼆个模版参数。map底层存储数据的内存是从空间配置器申请的。⼀般情况下,我们都不需要传后两个模版参数。
2024-10-11 09:15:35
842
原创 set的基本用法 和 底层简单了解
set的声明如下,T就是set底层关键字的类型(可以把T 当作key)set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参数。⼀般情况下,我们都不需要传后两个模版参数。set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序的。O(logN)
2024-10-10 16:26:07
1194
原创 二叉搜索树
前面有学习过二叉树一系列的数据结构,还有一系列关于查找的工具,例如等等(若不太熟悉可以自行查找一下哦);这些虽都是查找的工具但也有不一样。
2024-10-08 11:00:28
1405
原创 Linux的基础指令(下)
这里不为打包和压缩做仔细的区分;文件合并;为了减小文件体积,内存;(文件在下载,传输时 都要经过总之:压缩包的目的就是便于传输;
2024-10-05 17:44:36
874
原创 cpp三大特性之一继承
继承允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称⼦类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。把公共的成员都放到Person类中,Student和teacher都继承Person,就可以复⽤这些成员,就不需要重复定义了,省去了很多⿇烦。Person是⽗类,也称作基类。Student是⼦类,也称作派⽣类。(因为翻译的原因,所以既叫⽗类/⼦类,也叫⽗类/⼦类)
2024-09-28 18:16:09
781
原创 priority_queue 与 deque
如何理解?其实他是一个list和vector的结合体,大家可以去看一本书《STL源码刨析》这里面有很详细的介绍简单探讨一下deque的底层逻辑deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂再来看一点点源码。
2024-09-22 16:59:36
759
原创 list的使用与迭代器的模拟实现
前面学习了string,vector类的使用及模拟,但是它们有一个统一的特点就是底层的内存是连续的,因此迭代器的实现也很简单。现在我们开始学习list类的使用,模拟实现,来看看这个底层内存不是连续的有什么特别之处!!
2024-09-01 15:39:02
944
原创 vector剖析及模拟实现
首先要先了解vector的使用,对于vector类成员和类函数使用还不清楚的可以自行去。这里会首先提出几个使用的注意事项,接着会对vector的实现进行简单的剖析。
2024-08-30 16:55:24
925
原创 string的模拟实现与深浅拷贝
字符串最后的"\0"存在 ,可以移动过去,要注意;对这里提醒一下,对于这种移动数据的插入,最好少用,效率太低了,注意尽量少用,虽然很方便。
2024-08-27 18:43:02
670
原创 内存管理————基础理解
int main()//new/delete 和 malloc/free最大区别是//new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;return 0;
2024-08-22 20:01:55
1067
原创 类和对象————末
初始化的顺序 的按照 声明 的顺序本质:内存的地址 就是按声明的顺序放的 初始化也是按照这个地址来的如图 a2 地址是第一个 a1 地址是第二个 (代码在下面一个图)
2024-08-05 11:10:09
986
原创 类和对象(中)——默认成员函数
类的默认成员函数类的默认成员函数默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我 们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯去学习:我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。编译器默认⽣成的函数不满⾜我们的需求,我们需要⾃⼰实现,那么如何⾃⼰实现?构造函数。
2024-07-31 14:25:10
847
原创 类和对象----上 表层过度
类和对象我会分三节学完,这章,类和对象(上),在这节会主要理解 什么是类,类域,类中各种特点名词的意思,c++和c语言中struct的区别等。C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法(成员函数)结合在⼀块,让对象更加完善,通过访问权限选择性的将其接⼝提供给外部的⽤⼾使⽤。函数被编译后是⼀段指令,对象中没办法存储,这些指令存储在⼀个单独的区域(代码段),那么对象中⾮要存储的话,只能是成员函数的指针。类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作。
2024-07-28 07:00:00
911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人