- 博客(56)
- 收藏
- 关注
原创 Linux---进程地址空间
1.我们之前所见到的地址(指针)其实都是虚拟地址,其通过页表可以映射物理地址进而找到数据。2.每一行代码每一个变量都要有自己的地址,在加载的时候会先在虚拟地址空间中开好空间,并不一定在内存当中直接全部开好,在使用时候通过缺页中断解决。3.虚拟地址空间和物理地址存储之前耦合性很低,每一个进程都有自己的PCB、虚拟地址空间及页表,虚拟和物理之前通过页表连接。进程=自己的内核数据结构+代码和数据,内核数据结构是独立的,代码和数据也是独立的,所以进程之间具有独立性。
2025-11-25 21:27:07
830
10
原创 Linux---环境变量
环境变量和命令行参数,环境变量的作用机制,命令行参数的处理方式,main函数的argc和argv参数,环境变量的查看和管理方法,代码获取环境变量的方式, 本地变量内建命令的特殊性
2025-11-23 17:29:53
714
11
原创 Linux---进程优先级 进程切换调度
①如果更新优先级的进程在active队列中,若用户直接修改其 PRI(如从 120->100),进程可能需要立即获得更多 CPU 时间,但此时进程已在 Active 队列中,剩余时间片未用完,若强行调整其位置或时间片,会破坏当前调度周期的公平性。如下,有一个优先级为60的进程,当其被调度后,如果其时间片到了还没有执行完需要重新排队,它应该排的位置还是优先级为60的这个队列的最后面,那这样的设计岂不是说明优先级为60的进程必须先全部执行完之后,在60之后的优先级才会被调度?虽然这个N仅仅只有40个。
2025-11-21 19:54:53
987
3
原创 Linux---进程状态
在上篇中知道了1.一个程序被运行必须先加载到内存当中2. 一个进程包括PCB+自己代码和数据(整体操作系统而言) task_struct+代码和数据(具体的操作系统linux而言)3.通过先描述后组织 操作系统对进程的管理转换为了对一个链表的增删查改。在一个task_struct中包含了各种信息 而进程状态其实就是里面的一个信息, 进程状态在task_struct中其实就是一个数字,通过数字来代表它的状态。
2025-11-20 17:39:57
663
7
原创 优先算法---分治-归并 题目算法分析 代码实现
如果是正序 且从右边数组考虑在左数组找小 或者是逆序从从左边数组考虑在右数组找大的话就会对要考虑的那一边的每一个元素给计算出符合要求的情况而另外的两种情况要做到对每一个元素计算出符合要求的情况很麻烦 例如对于第三题如果用逆序从左考虑或者正序从右考虑就很麻烦而第二题因为考虑的是总的个数 不用考虑每一个元素的情况 四种都可以做出来例如下面第一个图就是正序 从右考虑的情况 可以统计出考虑一边(右边)每一个元素符合要求的情况。
2025-11-16 13:35:50
706
8
原创 优选算法---分治-快排 题目算法分析 代码实现
数组中存在0 1 2三种数字 要把所有的0放到最左边 所有2放到数组的最右边要求在原地操作 也就是不能借用其他的数组。
2025-11-15 22:09:43
551
3
原创 优选算法---模拟 题目及算法分析 代码实现
① 如果为0 说明还没有叫完一声蛙叫的青蛙 没有重复利用的青蛙 需要一只新的青蛙 c++② 如果大于0 说明已经有叫完一声蛙叫的青蛙了 要求的是最少的青蛙数 所以 最后一个字母k-- c++
2025-11-09 14:53:09
830
13
原创 基础开发工具--编译器g++/gcc 自动化构建make/Makefile
编译器gcc/g++ 为什么要预处理编译汇编链接 动静态库 动静态链接 自动化构造makeMakefile
2025-11-03 20:27:15
1229
9
原创 基础开发工具---软件包装管理器及vim
1.优点缺点Linux发行版通常用于从官方仓库安装、更新和卸载软件。我们可以直接从里面下载安装内容 下载安装后就可以直接使用了优点各种问题都不需要我们考虑linux之所以提供了这样的方式 是因为会给使用者这样才会有安装需要sudo yum install 软件名称sudo apt install 软件名称sudo yum remove 软件名称sudo apt remove 软件名称cowsay软件使用方法cowsay 要输出的内容效果如下默认的形象是牛 里面有各种各样的形象。
2025-11-02 20:51:59
763
3
原创 linux 权限
linux中的用户分为普通用户和超级用户(root) 在windows中也有类似的管理员和普通用户 他们的区别就是在于权限的不同如果不进行权限的划分 所有用户都能随意访问修改或删除任何文件 系统将陷入混乱 所以如下 超级用户root的最后面是# 普通用户的最后面是$
2025-10-28 20:18:42
1070
9
原创 优选算法---位运算 位运算基础知识 算法分析代码实现
本文介绍了二进制数值表示和位运算的基础知识以及按位与、或、异或等基本位运算操作。总结了常见位运算技巧及一些题目
2025-10-26 20:14:57
1052
6
原创 c++ 智能指针
智能指针通过RAII机制解决资源管理问题,确保异常安全。传统指针在异常发生时可能泄漏内存,而智能指针利用对象生命周期自动释放资源。C++11提供了三种智能指针:unique_ptr(禁止拷贝)、shared_ptr(引用计数)和weak_ptr(解决循环引用)。其中shared_ptr使用引用计数管理资源,weak_ptr则避免循环引用导致的内存泄漏。智能指针还支持删除器以处理特殊资源释放,并通过make_shared优化内存分配。循环引用问题可通过weak_ptr打破,它不增加引用计数,需通过lock()
2025-10-25 20:07:57
1084
5
原创 c++ 异常
本文介绍了C++异常处理机制,包括异常抛出(throw)和捕获(catch)的原理、栈展开过程以及异常与继承体系的关系。异常允许将错误检测与处理分离,通过调用链查找匹配的catch子句,若未找到则程序终止。文章还讨论了异常安全、资源释放问题,以及C++11的noexcept规范。最后通过模拟服务模块的异常处理示例,展示了如何利用继承和多态实现统一的异常处理框架,以及异常重新抛出的应用场景。异常处理机制为大型项目提供了更灵活的错误处理方式。
2025-10-24 16:10:13
1204
8
原创 c++11可变模版参数 emplace接口 新的类功能 lambda 包装器
可变模版参数 emplace接口 新的类功能 lambda 包装器--function bind
2025-10-19 18:00:34
642
4
原创 哈希表封装实现unordered_set unordered_map
先来分析一下 ++应该是要到下一个节点的位置 如果当前哈希桶的下一个位置还有值的话即当前节点的next指针不为空 下一个节点就应该到next指针指向的位置 如果下一个位置为空即next指针为空了说明当前的哈希桶已经走完了 此时++应该是到下一个不为空的哈希桶的头节点。迭代器打印的方式 范围for打印的方式及const类型对象的打印都可以了( 第三个打印调用的print函数 里面的形参是const类型 里面的范围for会调用const类型的迭代器)
2025-10-05 16:05:07
628
4
原创 哈希表(散列表)介绍及实现
提供一个仿函数来把string或者其他自定义类型通过某种映射的方式把他们转换为整形 然后再用这里的映射关系二次映射这里用string来举例我们可以用仿函数的方式来解决但是这种string映射为int的方式是不好的 很容易就发生重复 例如 abc acb bbb他们映射为整形的结果是一模一样的我们可以用下面这种映射关系把string映射为int 这里的131 就是一个质数 是有人专门研究过的 可以最大程度上减小冲突这样哈希表就支持string类型的使用了。
2025-10-02 23:11:46
1047
5
原创 动态规划算法---路径问题
动态规划关于路径问题的题目依旧需要我们明确五个方面 状态表示 状态转移方程 初始化 填表顺序 返回值在这里的题目处理初始化问题时候都用到了在斐波那契数列模型最后提到的边界化处理的方式--虚拟节点相较于上一篇的动态规划 这里的题目变成了二维的。
2025-09-28 20:15:31
622
3
原创 优选算法---二分查找 题目及算法分析 代码实现
二分查找算法在我们刚接触的时候可能觉得很ex 有很多细节的地方需要处理 一不小心就造成了死循环 但是当我们分析清楚细节问题总结模版后 这类题目就变的很简单了不是只有 有序的数组才能使用二分查找 只要我们能找到题目中的二段性就可以使用 根据我们的需要来收缩left和right指针的范围
2025-09-25 20:55:52
794
4
原创 动态规划算法初识--斐波那契数列模型
动态规划类的题目一般需要明确五个流程 状态表示 状态转移方程 初始化 填表顺序 返回值在题目的开始一般先定义一个dp表 其实就是一个名为dp的数组 数组里面值代表的意义就是状态表示 状态表示的明确来自于题目要求或者这类题目做多了后结合自己的经验状态转移方程就是看dp[i]是怎么来的。
2025-09-24 22:28:35
1091
3
原创 优选算法---滑动窗口 题目及算法分析 代码实现
滑动窗口是一种通过动态维护数组或字符串中的算法技巧 利用问题的将暴力解法的时间复杂度优化至其本质是通过八道题目练习一下滑动窗口。
2025-09-23 18:34:23
1361
4
原创 红黑树 详解
红黑树相较于二叉搜索树有了一个变量来存储每一个节点的颜色 而存的颜色顾名思义只有红和黑两种颜色 通过对任何⼀条从根到叶子的路径上各个结点的颜色进行约束 来实现它的功能黑红树的规则每个结点不是红色就是黑色根结点是黑色的如果一个结点是红色 如果它的孩子节点存在 则它的孩子结点一定是黑色的,也就是说任意一条路径不会有连续的红色结点。对于任意⼀个结点,从该结点通过任意一条路径到空节点,均包含相同数量的黑色结点如下图 就是符合要求的红黑树图 可以数一下从根到空节点的路径一共有多少条。
2025-09-17 16:10:20
1752
6
原创 AVL 树
在之前的二叉搜索树中提到 最坏的情况下每一层只有一个节点或者近似于这样情况的时候 插入查找删除的复杂度会退化为O(N)它的名字取决于发明者G.M.Adelson-Velsky和E.M.Landis两个前苏联的科学家在AVL树中 对于(不是0是因为 如果有偶数个节点的话不可能保证高度一样)AVL树实现这里我们引入平衡因子的概念那么如果这棵树满足AVL树 则(AVL树不是一定要有平衡因子的概念 实现AVL树也可以用其他的方式 在本文用平衡因子的方式来实现)
2025-09-16 12:23:57
1511
3
原创 set map题目练习 算法分析 代码实现
用set和map来解决1.环形链表II 2.两个数组交集 3.前k个高频单词 4.随机链表的赋值问题。
2025-09-13 18:25:07
1392
1
原创 map multimap认识及使用
所以此时pair里面的T1就是map的第一个参数Key T2就是map的第二个参数T 此时map里面Key类型的成员变量就是pair里面的first map里面T类型的成员变量就是pair里面的second。上面的first就是pair里面的第一个成员变量也就是map里面的key second是pair里面的第二个成员变量也就是map里面的value。map是支持[]重载的 之前的string和vector他们物理结构是连续的所以重载的[]很简单 但是map物理空间不是连续 它的[]需要一些设计。
2025-09-12 19:04:56
901
1
原创 set multiset认识及使用
关联式容器有map/set和unordered_map/unordered_set。在删除和查找上有些差异 有多个相同数的话 find会找中序的第一个数 比如里面有很多的5 在找到5之后会继续判断此时位置的左树里面有没有5了 直到找到一个此时位置的左树里面没有5了 此时的位置才是find要找的。在创建对象的时候 模版第二个参数传greater<int>这样左树的值都大于根节点值 右树值都小于根节点的值 这样begin指向的位置就是最左边节点的最大值 删除begin位置的节点也就是删除了最大值。
2025-09-11 20:24:00
826
1
原创 二叉搜索树
本文介绍了二叉搜索树的基本概念及详细实现方法。此外还探讨了二叉搜索树在日常生活场景中的应用,例如在小区门禁系统中用于车牌号的快速识别,以及实现单词翻译器。
2025-09-09 22:14:29
1938
2
原创 c++ 多态
多态的实现依赖于继承机制,它允许子类通过重写(覆盖)父类的虚函数,在继承体系下动态地改变或扩展特定行为,从而满足不同子类的个性化需求。
2025-09-08 22:51:32
1363
原创 c++继承详解
继承是c++面向对象编程的三大特性之一 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段 它允许我们在保持原有 类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产⽣新的类,称为派生类。如下 我们看到Person是基类,也称作父类。Student是派生类,也称作子类。(因为翻译的原因 所以 既叫基类/派生类,也叫父类/子类。
2025-09-06 18:35:42
1427
1
原创 vector 题目练习 算法代码分析 代码实现
给一个vector<int> 里面有一个数字出现次数超过了数组长度的一半 找到这个数返回 如果是奇数个数 例如11 那个出现次数最多的就至少出现6次 如果是偶数例如10 那么至少出现6次。
2025-09-04 21:10:50
935
原创 模版进阶及分离编译问题
优点1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性缺点1. 模版没有被实例化之前检查不严格 编译错误通常出现在模板被使用的地方 不容易发现出错的地方2.模板会导致代码膨胀问题,也会导致编译时间变长3.可读性降低 增加了理解难度虽然模版有着一定的缺点 但是模版毫无疑问是一个非常伟大的发明 有着强大的泛型编程能力。
2025-09-02 13:19:40
1302
原创 stack queue的实现 deque的底层结构 priority_queue的实现
1.deque的头插尾插效率高 比vector和list都好 (vector需要挪动数据 list只能一个一个空间来开辟deque能直接开一块 )2.支持下标访问 但是不如vector的效率高3.但是中间插入数据的时候 还是需要挪动很多数据(不能对里面某个数组进行扩容 否则会影响到其他接口 )所以deque适合只对头尾操作 需要支持偶尔下标访问的结构所以一开始的问题 stack和queue的第二个模版的默认缺省值为deque<T>就很合适 栈和队列只需要对头尾进行数据处理。
2025-08-30 22:38:05
1399
原创 list 手动实现
尾插要先给先新节点newNode申请一个空间 插入之前要先保存一下插入之前的最后一个元素的地址到prev 然后断开之前最后一个元素和头结点的连接 然后让prev的_next指向newNode newNode的_prev指向prev head的_prev指向newNode newNode的_next指向head。迭代器在对外使用上我们其实就可以把它当做节点类型的指针 (里面的唯一成员变量就是节点类型的指针 在类里面对这个成员变量的操作 类型对外的表现上像指针一样 且实现的功能由里面的重载决定)
2025-08-28 21:56:28
1661
原创 list容器的使用
merge会把里面的list对象l2的内容剪切到lt中并排序好(其实里面的过程是先将两个list类型的对象分别排序好 然后按照类似于归并排序那里的方式每次从两个中找小的放到一个新的对象中 结束之后再把内容拷到lt中) merge之后 l2对象会清空。如algorithm算法库中的sort 其支持随机迭代器 可以把string和vector类型的对象进行排序 但是双向迭代器类型的list就不能使用 其实就是sort的实现用到的是快排的方式 而快排中的三数取中等逻辑只支持物理空间上连续的结构。
2025-08-25 21:51:56
1084
原创 string 题目练习 过程分析 具体代码
题目解析可能有多个单词 至少一个单词 要算最后一个单词的长度 这里还要求自己写输入的方式过程分析这里的输入不能用cin 因为遇到空格就直接结束这次的读取了 所以这里用getline(读到换行才会结束 或者自己手动选择结束的值)要算最后一个单词的长度 那我们只需要一直更新读到单词的长度就可以每个单词之间一定存在着空格 我们可以选择遇到空格就将读取到的长度清零 最后一个单词之前一定有空格读最后一个单词之前一定会清零 这样就将n里面存的最后一个单词的长度直到遇到‘\0’结束具体代码。
2025-08-19 22:55:53
1191
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅