自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 进程并发究竟是如何进行进程切换的?Linux内核原理解析

实时操作系统(Real Time Operating System,简称RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。此时操作系统会在进程被剥离前,将当前进程的运行相关信息保存到PCB中,然后将该进程的PCB从活跃队列中移除,加载到过期队列。至于新产生的需要被调度的进程,则是直接添加到过期队列中。活跃进程、过期进程。

2024-04-06 10:50:22 1326 4

原创 Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待3.2 waitpid()实现进程等待四、获取子进程status实现机制五、阻塞等待和非阻塞等待5.1 阻塞等待5.2 非阻塞等待(非阻塞 + 轮询方案)六、非阻塞轮询方案示例演示

2024-04-06 10:46:45 2639 95

原创 算法沉淀 —— 动态规划(子序列问题(上))

几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此1.、状态表示:通常状态表示分为以下两种,其中更是第一种为主。以i为结尾,dp[i] 表示什么,通常为代求问题(具体依题目而定)以i为开始,dp[i]表示什么,通常为代求问题(具体依题目而定)2、状态转移方程以上述的dp[i]意义为根据, 通过最近一步来分析和划分问题,由此来得到一个有关dp[i]的状态转移方程。3、dp表创建,初始化动态规划问题中,如果直接使用状态转移方程通常会伴随着越界访问等风险,所以一般需要初始化。

2024-04-04 18:17:18 1223 40

原创 算法沉淀——动态规划篇(子数组系列问题(下))

几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此1.、状态表示:通常状态表示分为以下两种,其中更是第一种为主。以i为结尾,dp[i] 表示什么,通常为代求问题(具体依题目而定)以i为开始,dp[i]表示什么,通常为代求问题(具体依题目而定)2、状态转移方程以上述的dp[i]意义为根据, 通过最近一步来分析和划分问题,由此来得到一个有关dp[i]的状态转移方程。3、dp表创建,初始化动态规划问题中,如果直接使用状态转移方程通常会伴随着越界访问等风险,所以一般需要初始化。

2024-04-04 18:16:50 1326 32

原创 算法沉淀 —— 动态规划篇(简单多状态dp问题上)

力扣:面试题 17.16. 按摩师、LCR 090. 打家劫舍 II、740. 删除并获得点数、LCR 091. 粉刷房子

2024-04-02 23:31:09 949 5

原创 算法沉淀 —— 深度搜索(dfs)

leetcode:2331. 计算布尔二叉树的值、129. 求根节点到叶节点数字之和、814. 二叉树剪枝、98. 验证二叉搜索树、230. 二叉搜索树中第K小的元素

2024-04-01 16:14:07 1493 29

原创 递归究竟是什么?如何快速编写正确的递归代码? —— 力扣经典面试题详解

归是一种算法设计技术,它允许一个函数在其定义或说明中有直接或间接调用自身的方法。递归在数学和计算机科学中有着广泛的应用,它通过将复杂问题分解为规模较小、形式相同的子问题来求解。递归的基本原理包括:每一级的函数调用都有自己的变量;每一次函数调用都会有一次返回;递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;虽然每一级递归都有自己的变量,但是函数代码并不会得到复制。

2024-04-01 16:12:10 1292 46

原创 算法沉淀 —— 动态规划篇(简单多状态dp问题下)

几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此1.、状态表示:通常状态表示分为以下两种,其中更是第一种为主。以i为结尾,dp[i] 表示什么,通常为代求问题(具体依题目而定)以i为开始,dp[i]表示什么,通常为代求问题(具体依题目而定)2、状态转移方程*以上述的dp[i]意义为更具, 通过最近一步来分析和划分问题,由此来得到一个有关dp[i]的状态转移方程。3、dp表创建,初始化动态规划问题中,如果直接使用状态转移方程通常会伴随着越界访问等风险,所以一般需要初始化。

2024-03-31 18:18:12 1225 32

原创 栈和堆都能动态或静态分配内存空间吗?

size为待申请栈的大小,void*返回申请空间的地址。失败时(size 过大),可能会存在栈溢出问题(可能会指向堆区或者其它区域)堆就不多说了,只能通过malloc、new等方式动态申请分配内存空间。下面来聊聊栈的两者申请方式。但alloca不宜使用在必须广泛移植的程序中,有些机器不一定具有传统意义上的"栈/堆"。最典型的就是:在一个函数中创建了一个数组,这就是一种栈的静态分配。堆只能通过动态申请分配内存空间,而栈两者方式都可以!的函数,和malloc类似,不同在于。在Linux,提供了一个名为。

2024-03-31 18:16:57 317

原创 Linux: 进程优先级

在计算机中,CPU的个数是有限的(大部分都是一个),并且在同一时间内CPU只能调度执行一个进程。CPU的资源严重不足,必然衍生出进程竞争,即进程优先级。PRL表示进程的优先级,数字越小,进程优先级越高,一般情况下PRL默认80。NI表示进程的nice值,用于调整PRL的大小。PRL越小,进程被调度的优先级越高。但操作系统作为一款管理进程(功能之一)的软件,OS在调度进程时,需要较为均衡的让每一个进程都被调度。进程优先级是操作系统用于确定进程执行顺序的一个参数,它反映了进程在CPU资源分配中的先后顺序。

2024-03-31 18:16:09 587

原创 Linux: 进程地址空间究竟是什么?进程地址空间存在意义何在?

一、内存究竟是什么?分为哪些?二、内存是真实物理空间?三、进程地址空间(虚拟地址)3.1 为何同一个变量地址相同,保存的数据却不同?四、为什么需要地址地址空间和页表的存在?4.1 真实内存无序便有序4.2 进行内存安全检查4.3 进程管理和内存管理藕接五、其他细节问题5.1 操作系统如何获取进程页表相关信息5.2 操作系统如何确定内存中是否分配空间、是否存在内容?

2024-03-31 18:14:06 2712 69

原创 算法沉淀——动态规划篇(子数组系列问题(上))

几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此1.、状态表示:通常状态表示分为以下两种,其中更是第一种为主。以i为结尾,dp[i] 表示什么,通常为代求问题(具体依题目而定)以i为开始,dp[i]表示什么,通常为代求问题(具体依题目而定)2、状态转移方程*以上述的dp[i]意义为更具, 通过最近一步来分析和划分问题,由此来得到一个有关dp[i]的状态转移方程。3、dp表创建,初始化动态规划问题中,如果直接使用状态转移方程通常会伴随着越界访问等风险,所以一般需要初始化。

2024-03-30 19:57:16 1003 1

原创 LInux: fork()究竟是如何工作的?为何一个变量能够接受两个返回值?

LInux: fork()究竟是如何工作的?为何一个变量能够接受两个返回值?为何需要创建子进程。fork底层实现机制解析

2024-03-30 19:56:04 1232

原创 Linux: 僵尸进程究竟是什么?有什么危害?

僵尸进程是什么?为什么会产生僵尸进程?有什么危害?

2024-03-28 15:51:24 444 5

原创 冯诺依曼体系究竟是什么?

数据必须先传到存储区(即内存中),CPU在通过从存储器中读取数据,并将处理后的结果先返回给存储器,在通过存储器将结果传给输出设备。这样做的意义在于,由于CPU和输入设备、输出设备的运行速度差距还是挺大的,在CPU处理某个任务时,我们可以提前将下一个任务所所需要的数据通过输入设备先加载到存储器中,待CPU处理完当前任务后,可以立即从存储器中获取数据。在计算机启动并打开QQ时,操作系统和QQ两个软件会加载到内存,在QQ中输入“你好”,实际上是输给内存(存储器)。运算器和控制器,即CPU中,通常为。

2024-03-28 15:48:54 988

原创 进程状态究竟是什么?在Linux操作系统中具体存在哪些进程状态?

;进程状态在操作系统中分为为:新建状态、就绪状态、阻塞状态、挂起状态以及结束状态。但在每一款具体的操作系统中,进程状态多存在差异,并非完全对应.。比如在Linux中分为僵尸进程、孤儿进程、前台进程、后台进程、以及睡眠状态等等

2024-03-26 18:12:12 1581 31

原创 算法沉淀 —— 动态规划篇(路径问题)

几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此1.、状态表示:通常状态表示分为以下两种,其中更是第一种为主。以i为结尾,dp[i] 表示什么,通常为代求问题(具体依题目而定)以i为开始,dp[i]表示什么,通常为代求问题(具体依题目而定)2、状态转移方程*以上述的dp[i]意义为根据, 通过最近一步来分析和划分问题,由此来得到一个有关dp[i]的状态转移方程。3、dp表创建,初始化动态规划问题中,如果直接使用状态转移方程通常会伴随着越界访问等风险,所以一般需要初始化。

2024-03-26 18:08:22 1578 21

原创 算法沉淀 —— 动态规划篇(斐波那契数列模型)

几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此1.、状态表示:通常状态表示分为以下两种,其中更是第一种为主。以i为结尾,dp[i] 表示什么,通常为代求问题(具体依题目而定)以i为开始,dp[i]表示什么,通常为代求问题(具体依题目而定)2、状态转移方程*以上述的dp[i]意义为更具, 通过最近一步来分析和划分问题,由此来得到一个有关dp[i]的状态转移方程。3、dp表创建,初始化动态规划问题中,如果直接使用状态转移方程通常会伴随着越界访问等风险,所以一般需要初始化。

2024-03-25 06:29:04 1542 25

原创 操作系统究竟是什么?在计算机体系中扮演什么角色?

操作系统是一款进行软硬件资源管理的软件。操作系统通过将软硬件资源管理好(手段),从而给用户提供一个良好(稳定、高效、安全)易用的使用环境(目的)。操作系统是如何管理软硬件资源?在计算机体系中扮演什么角色?如何给操作用户提供一个良好易用的使 用环境?

2024-03-25 06:25:43 1778 9

原创 Linxu自动化构建工具make/Makefile究竟时什么?

在一个大型工程中,源文件不计其数。按照文件类型、功能、模块不同,放在不同的目录下。但哪些文件先编译,哪些文件后编译,哪些文件需冲重新编译,甚至更为复杂的功能操作,如果依靠程序员自身来控制,不仅效率低下,而且极其容易出错!为此,自动化构建工具诞生 —— make/MakefileMakefile(或makefile)是一个脚本文件;而make是一个命令工具,用于解释Makefile中的指令。

2024-03-03 23:15:40 2174 45

原创 Centos7使用man查找命令时,报错No manual entry for xxxx

在Liinux中使用man指令查找指令信息时,报No manual entry for xxxx。

2024-03-03 23:15:20 932 5

原创 Linux:vim调试工具gdb | 常见命令集

linux发布的程序由debug和release两个版本,但在Linux环境下生成的程序默认为release版本。但一份代码需要被调试,该代码的发布模式必须是debug。所以在在使用g++编译代码时,需要额外增加。回车会接着打印源代码。

2024-03-02 07:30:00 849 4

原创 Centos7:自动化配置vim | suoders信任列表添加普通用户

vim配置的核心则是将我们需要的配置选项添加保存到该文件文件中即可!vim在启动时,会自动扫描当前家目录下的。注意我们是在普通用户下配置vim,而在接下来的脚本配置中,存在。然后输入root密码即可,然后脚本开始配置了,只需耐心等待即可。文件,该文件是系统中公共的vim配置文件,对所有用户都成立。但由于原生的vim功能不全,我们可以通过安装插件来完善功能。但首次一般不存在该文件,需要手动。文件,让其中的配置选项生成。切换到root账号,然后输入。的隐藏文件,该文件则是自己。指令,强制保存退出即可。

2024-02-28 12:15:10 1266 4

原创 Vim 模式切换 | 命令集

vim是一款历史悠久的多模式文本编辑器,在不同模式下有不同的功能。但实际开发过程中,主要有以下5中模式。在末行模式中,我们可以进行文件的保存和退出,文件替换、查找字符串和列出行号等操作。即可进入替换模式,此时新输入的文本将直接替代/覆盖已经存在的内容,直至点击。要进行文字输入,vim必须从命令行模式切换到插入模式。Vim默认模式为命令模式,该模式主要用于。而由视图模式回退命令模式只需无脑。由命令模式切换到视图模式只需。切换到视图模式,然后通过。切换到视图模式,然后通过。数字(n) + dd。

2024-02-22 23:20:17 2782 12

原创 Linux: yum查看、安装、删除软件包

Linxu: yum 搜索查找、安装、删除软件包,及相关操作动画演示。

2024-02-22 12:10:29 1394 4

原创 C++:二叉搜索树模拟实现(KV模型)

二叉搜索树又称二叉排序树,作为map、set以及红黑树的底层数据结构基础,对于后续模拟实现封装相关解决具体重要意义。同时二叉搜索树分为Key模型和KV模型,在生活中也具有广泛应用,比如英汉字典,通过英文查找对应中文等等。本篇博客将着手二叉搜索树的底层原理,模拟实现二叉搜索树。

2024-02-08 22:15:00 3432 50

原创 C++:编译器对被const修饰变量的处理行为(替换)

C++:编译器对被const修饰变量的处理行为(替换)

2024-02-07 00:20:24 552 2

原创 C++:多态究竟是什么?为何能成为面向对象的重要手段之一?

一、多态的概念 二、多态的定义及实现2.1 多态的构成条件、协变、析构函数的重写C++11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类 四、虚函数及虚函数表4.1 虚函数表4.2 虚函数重写覆盖虚表4.3 虚函数存在哪的?虚表存在哪的?五、多态原理5.1 多态调用过程及原理5.2 多态运行时确定?5.3 动态绑定与静态绑定六、单继承和多继承关系的虚函数表6.1 单继承中的虚函数表6.2 多继承中,子类新增虚函数存入那个虚表?

2024-01-10 12:32:32 3947 68

原创 C++:继承

一、继承的概念及定义1.1 继承的概念1.2 继承定义1.2.3 继承基类成员访问方式的变化二、基类和派生类对象赋值转换 三、继承中的作用域四、派生类的默认成员函数五、继承与静态成员六、复杂的菱形继承及菱形虚拟继承6.1 菱形继承的问题6.2 二义性解决办法(1)6.3 二义性解决办法(2)6.4 虚拟继承解决数据冗余和二义性的原理七、继承和组合

2024-01-02 12:24:56 3920 119

原创 C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

一、C++stack的介绍和使用;二、C++queue的介绍和使用;3.1 deque的简单介绍(了解)、3.2 deque的缺陷、3.3 为什么选择deque作为stack和queue的底层默认容器四、priority_queue的介绍和实现4.1 priority_queue的介绍4.1 priority_queue的介绍增删查改模拟实现前言4.1.1 push()4.1.2 pop()4.3 top()、size()、empty()4.1 priority_queue(优先级队列)增删查

2023-12-30 23:30:46 3952 76

原创 C++:模板进阶

一、非类型模板参数; 二、模板的特化:2.1类模板特化; 全特化、 偏特化;2.2函数模板特化四、模板分离编译:什么是分离编译、模板的分离编译、解决方法五、总结

2023-12-29 23:57:46 2755 42

原创 八大常见位运算总结(非常经典,建议收藏)

1 基础位运算2 确定一个数(x)的二进制第x位是1还是03 将一个数(num)二进制的第n位修改成14、将一个数(num)二进制的第n位修改成05、 位图思想6、 提取一个数(num)二进制表示中最右边的1(lowbit)7、 删除一个数(num)二进制表示中最右边的18、异或(^)运算的运算律

2023-12-28 19:17:39 2432 48

原创 C++:list增删查改模拟实现

一、list底层双链表验证、节点构造二、迭代器封装实现(重点、难点)2.2 迭代器实现三、list实现3.1 基本框架3.2 迭代器和const迭代器3.2 构造函数、析构函数、拷贝构造、赋值重载3.3 任意位置插入、任意位置删除、尾插、尾删、头插、头删四、list功能完善4.1 迭代器operator->()4.2 打印数据五·、所有代码以及测试用例

2023-12-25 16:45:54 4740 102

原创 二分查找及模板深度解析:right <= left 还是 right < left ? mid=left+(right-left)/2还是mid=left+(right-left +1 )/2 ?

下面博主会给出一道经典面试题进行分析,在最后会给出二分查找模板!!!博主将基于力扣“34. 在排序数组中查找元素的第一个和最后一个位置”,深度剖析right

2023-12-17 17:29:28 2068 59

原创 大厂算法指南:优选算法 ——双指针篇(上)

前言:双指针简介leetcode: 283.移动零、1089. 复写零、202. 快乐数、11. 盛最多水的容器

2023-12-11 06:15:00 1779 21

原创 大厂算法指南:优选算法 ——双指针篇(下)

前言:双指针简介leetcode:[611. 有效三角形的个数]、[LCR 179. 查找总价格为目标值的两个商品]、[15. 三数之和]、[18. 四数之和]

2023-12-11 06:15:00 885 2

原创 Linux入门指南:linux权限究竟是什么?和文件有什么关系?

一、Linux权限概念普通用户和超级用户间的切换:二、Linux权限管理2.1 文件访问者的分类(角色)2.2 .文件类型和访问权限(事物属性)2.2.1文件类型2.2.2 基本权限2.3 文件权限值的表示方法2.3.1 字符表示方法2.3.2 8进制数值表示方法三、.文件访问权限的相关设置方法3.1 chmod3.2 chown3.3 chgrp3.4 umask四、file指令五、目录的权限和粘滞位

2023-12-10 08:00:00 2731 13

原创 C++:vector增删查改模拟实现

一、迭代器1.1 非const迭代器:begin()、end()1.2 const迭代器:begin()、end()二、构造函数、拷贝构造函数、赋值重载、析构函数模拟实现2.1 构造函数2.1.1 无参构造2.1.2 迭代器区间构造2.1.3 n个值构造2.2 拷贝构造2.3 赋值重载3 析构函数三、容量相关:capacity()、size()、reserve()、resize()四、operator[ ]重载 五、元素相关:insert、erase、push_back、pop_ba

2023-12-09 08:00:00 3551 121

原创 C++_String增删查改模拟实现

一、string默认构造、析构函数、拷贝构造、赋值重载 二、迭代器和范围for 三、元素相关:operator[ ] 四、容量相关:size、resize、capacity、reserve五、数据相关:push_bach、append、operator+=、insert、erase六、 关系操作符重载:< 、 ==、 、>=、!=七、find查找字符、字符串、substr7.1 find查找字符7.2 find查找字符串7.3 strsub( ) 模拟实现八、流插入和流提取

2023-11-22 12:29:20 3969 121

原创 C编译环境和预处理(非常详细,建议收藏)

一、程序的翻译环境和执行环境二、 详解编译+链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么?2.2 运行环境三、预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 # 和####的作用3.2.5 命名约定四、宏和函数对比五、 #undef六、命令行定义七、条件编译八、文件包含8.1 头文件被包含

2023-11-20 17:42:42 1560 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除