自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux: Mysql环境安装

安装mysql环境

2024-07-13 15:11:11 776 6

原创 Linux通信:基于System V共享内存方式实现进程间通信

一、基于共享内存通信方式原理二、共享内存优缺点2.1 共享内存优缺点2.2 基于文件通信 vs 共享内存通信三、相关函数调用接口2.1 创建共享内存(shmget)2.1.1 key2.1.2 size2.1.3 shmflg2.1.4 返回值2.2 共享内存段挂接到进程地址空间(shmat)2.3 将共享内存段与当前进程脱离(shmdt)2.4 用于控制共享内存(删除)(shmctl)四、基于System V共享内存实现进程间通信

2024-07-12 21:30:00 1725 2

原创 Linux进程间通信:匿名管道 &命名管道

管道最早是UNIX中的一种进程通信方式。我们把一个进程到另一个进程的一个数据流称为管道!!管道文件时一个纯内存级文件,不需要想磁盘刷新。进程间通信的本质是不同进程看到同一份资源。该资源一般由操作系统提供!!(比如缓冲区) 进程间通信目的主要有:数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug

2024-07-11 21:30:00 1011

原创 Linux:进程池制作(匿名管道版本 & 命名管道版本)

创建进程是有时间成本的。当计算机要执行任务时才创建进程,势必会影响执行任务的性能。所以我们可以通过提前创建一批进程,当有任务需要被执行时直接喂给这些进程即可。我们把这些提前创建好的进程称为进程池!!下面我们会通过一个主进程(父进程)通过匿名管道和一批工作进程(子进程)进行通信。父进程通过不断派发任务给子进程,子进程通过读取管道文件中的任务码来执行对应的任务,从而模拟进程池的整个行为!!

2024-07-11 21:30:00 1282 6

原创 操作系统:信号究竟是什么?如何产生?

 信号是一种向目标进程发送信息,异步通知的一种方式,属于软中断。本质上是用软件来模拟中断行为! 在生活中存在很多信号,诸如红绿灯、闹钟铃声、古代狼烟、防空警报等等。以红绿灯为例,我们是如何认识红绿灯信号的。根本原因在于我们在小时候就已经有人提前告诉你如何去识别它、对应的灯亮了意味这什么,要做什么! 同理,在操作系统中已经提前内置了信号信息。我们通过查看: 在操作系统中,信号还没有产生之前,进程就能识别它(数字代号或宏),如何处理。信号的到来,我们并不清楚是什么时候,所以信号相对进程来说是异步的。信号产生后,

2024-07-10 05:45:00 1223 23

原创 Linux文件:EXT2文件系统工作原理 & 软硬链接

一、磁盘结构、存储策略:磁盘存储结构、磁盘存储策略、磁盘的逻辑存储结构二、如何管理磁盘文件三、如何管理组、每个组保存的数据种类、如何管理数据1、节点表(inode Table)、inode Bitmap、Data blocks、Block Bitmap、Group Descriptor Table、超级块(Super Block)四、目录、文件名和inode映射关系五、挂载:格式化、挂载六、操作系统查找、打开、创建文件过程:查找文件、打开文件、创建文件七、软硬链接

2024-07-10 00:22:20 1115 7

原创 Linux:进程终止和进程替换

一、进程终止1.1 进程退出场景和创建退出方式1.2 exit 和 _exit区别二、进程程序替换2.1 进程替换函数2.2 函数解释及命名解释函数解释命名解释2.3 单进程程序替换(无子进程)2.3.1 带`l`函数进程替换(execl为例)2.3.2 带`p‘函数进程替换(execlp为例)2.3.3 execv、execvp替换函数应用实例2.4 进程替换其他程序,调用运行其他语言程序三、进程替换时环境变量的继承3.1 进程替换时,子进程环境变量由来3.2 为何父子进程间

2024-07-07 00:31:00 1216 3

原创 Linux: 命令行参数和环境变量究竟是什么?

一、命令行参数:main函数参数意义、命令行参数概念、命令行参数实例二、环境变量:环境变量概念、 环境变量、PWD、HOME三、获取环境变量的3种方式:getenv()函数、main函数传参、通过第三方变量environ获取四、环境变量如何获取:子进程环境变量获取方式、父进程环境变量获取方式五、本地变量和环境变量六、Linux命令分类和环境变量相关的命令

2024-07-05 18:15:18 1254 6

原创 vscode:如何解决”检测到include错误,请更新includePath“

 配置vscode是出现如下错误:”检测到include错误,请更新includePath“

2024-05-26 12:59:59 2260 6

原创 Linux文件:缓冲区、缓冲区刷新机制 | C库模拟实现

我们可以快速向缓冲区中写入数据,然后通过一定的刷新方式。将数据从语言级别的缓冲区中拷贝到内核缓冲区。下面我们调用3个常见的C库函数和一个系统调用,都向显示器文件中进行写入。对于文件的IO等操作,用户可以直接通过系统调用直接向操作系统进行读操作和写操作。缓冲区可以暂存数据,必定存在一定的刷新机制。的原因在于:系统调用在语言之下,数据不是向语言基本的缓冲区中写入;此时数据属于操作系统,不在属于进程!同时由于缓冲区的存在,我们可以积累一定的数据后在统一发生,C所提供的缓冲区是二次加上的,由C本身所提供!

2024-05-23 20:46:19 930 8

原创 Linux文件:重定向底层实现原理(输入重定向、输出重定向、追加重定向)

在Linux中,操作系统会为每一个文件创建对应的描述结构体对象。该结构体中一定存在3个部分:打开文件的所有属性、文件的操作集、文件缓冲区(内存)。其中由于冯诺依曼体系决定了,无论对文件进行读操作还是写操作,都需要先将数据加载到文件缓存区!我们在应用层进行对数据读写的操作本质上是用户缓冲区和内核数据缓冲区之间的相互拷贝!!!

2024-05-15 23:06:49 1270 5

原创 Linux:文件、fd

文件 = 内容 + 属性所有对文件的操作本质上就分为:对内容的修改和对属性的修改。内容是数据,属性也是数据。所以存储文件,必须同时存储文件相关的数据信息和属性信息。默认情况下文件存储在磁盘中,但由于冯诺依曼体系,CPU只能从内存中获取文件信息,对文件进行操作。所以当进程打开文件时,OS需要先将文件信息加载到内存中,在被CPU调度执行对文件进行操作!!一个进程可以打开多个文件,多个进程也可以打开同一个文件。所以当文件被加载到内存时,被打开的文件可能存在多个。操作系统需要对这些文件进行管理。

2024-05-15 19:21:39 1208

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

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

2024-04-06 10:50:22 1704 5

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

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

2024-04-06 10:46:45 3060 96

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

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

2024-04-04 18:17:18 1288 40

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2024-03-31 18:16:57 394

原创 Linux: 进程优先级

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

2024-03-31 18:16:09 649

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

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

2024-03-31 18:14:06 3061 70

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

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

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

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

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

2024-03-30 19:56:04 1559 1

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

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

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

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

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

2024-03-28 15:48:54 1046

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原创 Vim 模式切换 | 命令集

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

2024-02-22 23:20:17 2977 13

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

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

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

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

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

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

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

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

2024-02-07 00:20:24 561 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 4171 68

空空如也

空空如也

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

TA关注的人

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