自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】文件系统磁盘存储结构

记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。文件属性结构体中,包含一个int block[15],就是来存储该文件所使用的数据区里面的数据块的编号,其中,[0,12]为直接映射,[12,13]为间接索引(不保存文件内容,保存的文件使用的数据块的编号),[13,14]为三级索引。磁盘的柱面数和磁道数是相等的,盘面数等于总的磁头数。

2026-05-17 12:49:54 488

原创 【MySQL】库的操作

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]对数据库的修改主要指的是修改数据库的字符集,校验规则。如果备份的不是整个数据库,而是其中的一张表,怎么做?实例: 将 mytest 数据库字符集改成 gbk。示例:将mytest库备份到文件(退出连接)

2026-05-17 12:49:36 411

原创 【Linux】文件系统(三)

printf fwrite 是库函数, write 是系统调用,库函数在系统调用的“上层”, 是对系统调用的“封装”,但是 write 没有缓冲区,而 printf fwrite 有,足以说明,该缓冲区是二次加上的,又因为是C,所以由C标准库提供。另外,我们这里所说的缓冲区,都是用户级缓冲区。此时,我们发现,本来应该输出到显示器上的内容,输出到了文件 myfile 当中,其中,fd=1。而我们放在缓冲区中的数据,就不会被立即刷新,甚至fork之后,但是进程退出之后,会统一刷新,写入文件当中。

2026-05-15 11:52:19 453

原创 【C++】C++11中的右值引用和移动构造

需要注意的是右值是不能取地址的,但是给右值取别名后,会导致右值被存储到特定位置,且可以取到该位置的地址,也就是说例如:不能取字面量10的地址,但是rr1引用后,可以对rr1取地址,也可以修改rr1。右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能取地址。传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。

2026-05-15 11:51:59 356

原创 【Linux】文件系统(二)

当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。每个进程都有一个指针*files, 指向一张表files_struct,该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针!所以,本质上,文件描述符就是该数组的下标。所以,只要拿着文件描述符,就可以找到对应的文件。文件描述符的分配规则:在files_struct数组当中,找到当前没有被使用的。所以,可以认为,f#系列的函数,都是对系统调用的封装,方便二次开发。最小的一个下标,作为新的文件描述符。

2026-05-14 08:56:20 720

原创 【优选算法】前缀和模版

类⽐于⼀维数组的形式,如果我们能处理出来从 [0, 0] 位置到 [i, j] 位置这⽚区域内所有元素的累加和,就可以在 O(1) 的时间内,搞定矩阵内任意区域内所有元素的累加和。v. 那么,红⾊就 = 整个⾯积 - 黄 - 绿 - 蓝,但是绿蓝不好求,我们可以这样减:整个⾯积 -(绿+ 黄 )-(蓝 + 黄),这样相当于多减去了⼀个黄,再加上即可。⽤ dp[i] 表⽰: [1, i] 区间内所有元素的和,那么 dp[i - 1] ⾥⾯存的就是 [1,

2026-05-14 08:56:00 445

原创 【Linux】进程替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。如下图所示,命令行参数与环境变量的存放位置,进程替换只是将进程的代码与数据进行替换,而命令行参数与环境变量没有改变。我们现在所写的程序都是自己的程序,那我们创建的子进程能不能去执行其他程序的代码呢?答案是可以的,这就要使用程序替换的原理了。exec*后面的代码不再执行。

2026-05-13 15:18:44 664

原创 【MySQL】MySQL数据库入门

存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:1.文件的安全性问题2.文件不利于数据查询和管理3.文件不利于存储海量数据4.文件在程序中控制不方便数据库存储介质:磁盘内存为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2026-05-13 15:18:21 381

原创 【Linux】实现简单的Myshell

但是为我们可以发现shell是一直运行的,出错并没有崩溃,这是因为bash进程是主进程,用户的指令大多都是利用子进程去执行的。这里需要获取的是用户输入的指令,指令一般都是一个字符串,但是值得注意的是:这里不能使用scanf函数,原因是scanf遇到空格就会停止获取,但是我们输入的指令常常含有空格(例如ls -a -l)。可以用来拼接字符串,大概的用法就是,将传入的可变参数的内容,按照指定的格式,放到指定大小的str中,用法如下例子。参数介绍:参数一是需要切割的字符串,参数二是什么作为分隔符。

2026-05-12 08:18:50 441

原创 【Linux】文件系统(一)

输出与追加重定向的本质就是向文件里面写入,向文件里面写入需要先打开文件,这里猜测输出重定向之前文件要以w的方式打开,对文件进行操作的时候,都是通过执行代码的方式完成操作,操作必须先将文件打开,打开文件的目的就是将文件从磁盘加载到内存。因为进程的当前路径可以通过环境变量来获取,这里介绍一个新的方法:通过指令ls查看文件 ./proc/进程编号 来查看,其中cwd即使当前目录。在一定时间内,系统中存在多个进程,同时可能存在更多的被打开的文件,OS系统会管理这些文件,先描述,再组织。参数一:需要打开的文件路径。

2026-05-12 08:18:14 407

原创 【Linux】进程等待和进程退出码与退出信号

根据下面对status存储 的解释:上面的status等于:参数2.获取子进程statuswait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。如果传递NULL,表示不关心子进程的退出状态信息。否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。获取退出码:(status>>8)&0XFF获取退出信号:(status&0X7F)其中,也可以使用两个宏来获取退出码与退出信号。

2026-05-11 15:20:27 470

原创 【Linux】进程地址空间与写时拷贝

每一个进程都有一个task_struct(PCB),PCB里面有该进程的进程地址空间,进程地址空间和内存之间是用一张表(叫做页表:里面存放的是虚拟地址与物理地址)建立关系的,如下图,页表对应一个映射关系,是虚拟地址与物理地址之间的关系。当要进行写时拷贝的时候,会将父子进程页表里大部分内容的映射权限设置为只读权限,当父子进程任何一方要去进行尝试写入的时候,操作系统会进行判断,如果是数据段,对数据进行写入时合理的,就会引发缺页中断 ,操作系统会将权限改为读写,然后写时拷贝后,再把页表对应的条目改为读写。

2026-05-11 15:19:43 611

原创 【优选算法】二分算法模板总结及应用

▪ 当 nums[mid] < target 时,说明 mid 落在了 [left, index - 1] 区间上,mid 右边但不包括 mid 本⾝,可能是最终结果,所以我们接下来查找的区间在 [mid + 1, right]上。◦ 当 mid 落在 [resRight+ 1, right] 的区间的时候,说明 [mid, right] 内的元素是可以舍去的,此时更新 right 到 mid - 1 的位置;说明 [left, mid] 都是可以舍去的,此时更新 left 到 mid + 1 的位置,

2025-03-20 21:37:01 1099

原创 【优选算法】二分查找 在排序数组中查找元素的第⼀个和最后⼀个位置

◦ 当 mid 落在 [resRight+ 1, right] 的区间的时候,说明 [mid, right] 内的元素是可以舍去的,此时更新 right 到 mid - 1 的位置;• 左指针: left = mid ,可能会原地踏步(⽐如:如果向下取整的话,如果剩下 1,2 两个元素, left == 1, right == 2,mid == 1。◦ 当 mid 落在 [resLeft, right] 的区间的时候,也就是 arr[mid] >= target。

2025-03-20 21:36:37 417

原创 【优选算法】二分查找

ii. arr[mid] > target 说明 [mid, right] 这段区间都是⼤于 target 的,因此舍。iii. arr[mid] < target 说明 [left, mid] 这段区间的值都是⼩于 target 的,因。此舍去左边区间,在右边 [mid + 1, right] 区间继续查找,即让 left = mid +去右边区间,在左边 [left, mid -1] 的区间继续查找,即让 right = mid -a. 定义 left , right 指针,分别指向数组的左右区间。

2025-03-18 09:12:07 402

原创 【优选算法】滑动窗口 最⼩覆盖⼦串

a. 定义两个全局的哈希表: 1 号哈希表 hash1 ⽤来记录⼦串的信息, 2 号哈希表 hash2。b. 初始化⼀些变量:左右指针: left = 0,right = 0;ii. 如果不想等,说明匹配,返回 s 中从 retleft 位置往后 len ⻓度的字符串。• 如果 t 中某个字符的数量⼤于窗⼝中字符的数量,也就是 2 号哈希表某个位置⼤于。◦ 判断完毕后,将左侧元素滑出窗⼝,顺便更新 1 号哈希表;i. 将当前遍历到的元素扔进 1 号哈希表中;i. 如果相等,说明没有匹配,返回空串;

2025-03-18 09:11:40 318

原创 【优选算法】滑动窗口 串联所有单词的⼦串

如果我们把每⼀个单词看成⼀个⼀个字⺟,问题就变成了找到「字符串中所有的字⺟异位词」。⽆⾮就是之前处理的对象是⼀个⼀个的字符,我们这⾥处理的对象是⼀个⼀个的单词。

2025-03-01 23:28:48 464

原创 【优选算法】滑动窗口 找到字符串中所有字母异位词

◦ 因为字符串 p 的异位词的⻓度⼀定与字符串 p 的⻓度相同,所以我们可以在字符串 s 中构造⼀个⻓度为与字符串 p 的⻓度相同的滑动窗⼝,并在滑动中维护窗⼝中每种字⺟的数量;◦ 因此可以⽤两个⼤⼩为 26 的数组来模拟哈希表,⼀个来保存 s 中的⼦串每个字符出现的个数,另⼀个来保存 p 中每⼀个字符出现的个数。这样就能判断两个串是否是异位词。◦ 当窗⼝中每种字⺟的数量与字符串 p 中每种字⺟的数量相同时,则说明当前窗⼝为字符串 p的异位词;

2025-03-01 23:28:13 658

原创 【优选算法】滑动窗口 水果成篮

▪ 如果⼤⼩超过 2:说明窗⼝内⽔果种类超过了两种。那么就从左侧开始依次将⽔果划出窗⼝,直到哈希表的⼤⼩⼩于等于 2,然后更新结果;b. 初始化变量:左右指针 left = 0,right = 0,记录结果的变量 ret = 0;做法:右端⽔果进⼊窗⼝的时候,⽤哈希表统计这个⽔果的频次。▪ 如果没有超过 2,说明当前窗⼝内⽔果的种类不超过两种,直接更新结果 ret。◦ 将左侧元素滑出窗⼝,并且在哈希表中将该元素的频次减⼀;让滑动窗⼝满⾜:窗⼝内⽔果的种类只有两种。i. 将当前⽔果放⼊哈希表中;

2025-02-26 20:41:26 353

原创 【优选算法】滑动窗口 将 x 减到 0 的最小操作数

要,必须设定与代码⼀致),记录当前滑动窗⼝内数组和的变量 sum = 0 ,记录当前满⾜条件数组的最⼤区间⻓度 maxLen = -1;iii. 如果经过前两步的左右移动使得 sum == target ,维护满⾜条件数组的最⼤⻓度,并让下个元素进⼊窗⼝;ii. 如果 sum > target ,右移左指针,直⾄变量和⼩于等于 target ,或左指针已经移到头;i. 如果 sum < target ,右移右指针,直⾄变量和⼤于等于 target ,或右指针已经移到头;否则,返回 -1。

2025-02-26 20:40:54 442

原创 【优选算法】滑动窗口 最大连续1的个数

a. 初始化⼀个⼤⼩为 2 的数组就可以当做哈希表 hash 了;初始化⼀些变量 left = 0 ,right = 0 , ret = 0;不要去想怎么翻转,不要把问题想的很复杂,这道题的结果⽆⾮就是⼀段连续的 1 中间塞了 k个 0 嘛。因此,我们可以把问题转化成:求数组中⼀段最⻓的连续区间,要求这段区间内 0 的个数不超过 k 个。• 如果超标,依次让左侧元素滑出窗⼝,顺便更新哈希表的值,直到 0 的个数恢复正。iii. 程序到这⾥,说明窗⼝内元素是符合要求的,更新结果;

2025-02-25 08:00:47 349

原创 【优选算法】滑动窗口 ⽆重复字符的最⻓⼦串

▪ 如果这个字符出现的频次超过1 ,说明窗⼝内有重复元素,那么就从左侧开始划出窗⼝,直到ch这个元素的频次变为1 ,然后再更新结果。在往后寻找⽆重复⼦串能到达的位置时,可以利⽤「哈希表」统计出字符出现的频次,来判断什么时候⼦串出现了重复元素。枚举「从每⼀个位置」开始往后,⽆重复字符的⼦串可以到达什么位置。找出其中⻓度最⼤的即可。研究的对象依旧是⼀段连续的区间,因此继续使⽤「滑动窗⼝」思想来优化。▪ 如果没有超过1 ,说明当前窗⼝没有重复元素,可以直接更新结果。让滑动窗⼝满⾜:窗⼝内所有元素都是不重复的。

2025-02-25 07:59:56 311

原创 【优选算法】滑动窗口 ⻓度最⼩的⼦数组

▪ 如果窗⼝内元素之和⼤于等于target :更新结果,并且将左端元素划出去的同时继续判断是否满⾜条件并更新结果(因为左端元素可能很⼩,划出去之后依旧满⾜条件)让滑动窗满⾜:从i 位置开始,窗⼝内所有元素的和⼩于target(那么当窗⼝内元素之和第⼀次⼤于等于⽬标值的时候,就是i位置开始,满⾜条件的最⼩⻓度)。然后从这个「起始位置」开始,然后寻找⼀段最短的区间,使得这段区间的和「⼤于等于」⽬标值。▪ 如果窗⼝内元素之和不满⾜条件: right++ ,另下⼀个元素进⼊窗⼝。

2025-02-24 21:42:00 404

原创 【优选算法】四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。b. 在这个数a的后⾯区间上,利⽤「三数之和」找到三个数,使这三个数的和等于target- a 即可。你可以按 任意顺序 返回答案。a、b、c 和 d 互不相同。a. 依次固定⼀个数a;

2025-02-24 21:41:49 289

原创 【优选算法】双指针 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。那么三数之和就是固定一个数,找到两个数相加等于固定这个数的相反数,于是三数之和🟰0;3️⃣ 在这个数后面的区间内,使用「双指针算法」快速找到两个数之和等于 -a 即可。(2)当使用完一次双指针算法之后,固定的 a 也要「跳过重复」的元素;本题是三数之和,我们可以结合两数之和的思路来解本题。

2024-10-19 20:15:09 396 1

原创 【C++】map和set的封装

二叉搜索树的中序遍历是升序,如果对某一个数++,那么结果则是中序遍历的下一个数,那么我们如何根据一个值在红黑树当中找到它中序遍历的下一个值呢?STL明确规定,begin()与end()代表的是一段前闭后开的区间,而对红黑树进行中序遍历后,可以得到一个有序的序列,因此:begin()可以放在红黑树中最小节点(即最左侧节点)的位。置,end()放在最大节点(最右侧节点)的下一个位置,关键是最大节点的下一个位置在哪块?中序遍历(升序),右不为空的时候,就需要找到右子树的最左节点,并返回该节点。

2024-10-19 18:04:03 722

原创 【Linux】命令行参数&&环境变量

按理来说,大部分指令也都是程序,执行后也会创建新的进程,那为什么我们使用类似ls这样的指令不需要在前面加上路径呢?bash进程时test2进程的父进程,在bash进程中修改了环境变量,其子进程mytest也会收到一份几乎一模一样的环境变量表,也就能找到我们刚才的变量MYENV了。将我们的程序拷贝到PATH里的路径就可以了,比如将mytest拷贝到/usr/bin目录下,该目录存放的都是可以直接运行的指令。所有的环境变量都存放在一张表里面,这张表的每一个元素都是一个指针,指向一个表示环境变量的字符串。

2024-10-18 19:15:43 1593

原创 【优选算法】双指针 查找总价格为目标值的两个商品

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。需要注意的是leetcode这里需要返回一个值,强行返回一个值照顾编译器。3.直接返回,这里是返回两个数的一个数组,用一组大括号就能返回。1.当加和小于目标时,left++2.当大于目标时,right–

2024-10-18 08:46:55 354

原创 【Linux】进程优先级&&进程切换

在操作系统中,进程优先级(Process Priority)是指操作系统对进程进行调度时所赋予的优先级值,用于决定进程何时获得处理器时间。进程优先级是一种实现多任务操作系统中任务调度的重要机制,它允许操作系统根据进程的重要性和紧迫性来分配处理器资源。

2024-10-17 11:11:05 1422

原创 【优选算法】双指针 有效三角形的个数

▪ 说明 [left, right - 1] 区间上的所有元素均可以与 nums[right] 构成⽐。▪ 说明 left 位置的元素是不可能与 [left + 1, right] 位置上的元素构成满⾜条件。▪ 此时 right 位置的元素的所有情况相当于全部考虑完毕, right-- ,进⼊下⼀轮判断。根据「解法⼀」中的优化思想,我们可以固定⼀个「最⻓边」,然后在⽐这条边⼩的有序数组中找。▪ 因此我们可以先将原数组排序,然后从⼩到⼤枚举三元组,⼀⽅⾯省去枚举的数量,另⼀⽅。nums[i] ⼤的⼆元组。

2024-10-17 11:10:18 317

原创 【优选算法】双指针 盛水最多的容器

◦ 如果改变右边界,⽆论右边界移动到哪⾥,新的⽔⾯的⾼度⼀定不会超过左边界,也就是不会超过现在的⽔⾯⾼度,但是由于容器的宽度减⼩,因此容器的容积⼀定会变⼩的。容器的⾼度由两板中的短板决定,因此可得容积公式 : v = (j - i) * min( height[i], height[j])◦ 由于左边界较⼩,决定了⽔的⾼度。如果改变左边界,新的⽔⾯⾼度不确定,但是⼀定不会超过右边的柱⼦⾼度,因此容器的容积可能会增⼤。设两指针 i , j ,分别指向⽔槽板的最左端以及最右端,此时容器的宽度为 j - i。

2024-10-16 07:38:27 517

原创 【优选算法】双指针 快乐数

我们可以假设一个比他更大的数 整形最大数约为10位数,且最大的数一定不会超过99999 99999。我们来计算这个数每个位置上的数字的平方和,9^2 * 10 = 810,也就是最大的数是810。两种情况我们可以归结为一种情况,那就是用快慢指针判断是否有环,且快慢指针相遇的位置是否为1。题目n最小为1,所以每个位置上的数字平方和的范围在 [1,810] 之间,有810个数。◦ 对于⼀个正整数,每⼀次将该数替换为它每个位置上的数字的平⽅和。n个巢,有n+1个鸽子,可以推出至少有一个巢,里面的鸽子数大于。

2024-10-16 07:38:05 743

原创 【优选算法】双指针 复写0

如果「从前向后」进⾏原地复写操作的话,由于 0 的出现会复写两次,导致没有复写的数「被覆盖掉」。给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。但是「从后向前」复写的时候,我们需要找到「最后⼀个复写的数」,因此我们的⼤体流程分两。a. 初始化两个指针 cur = 0 , dest = 0;• 判断dest 时候已经到结束位置,如果结束就终⽌循环;• 如果没有结束, cur++ ,继续判断。ii. 然后从后向前进⾏复写操作。i. 先找到最后⼀个复写的数;

2024-10-15 11:22:26 489

原创 【优选算法】双指针 移动0

• dest++ 之后,指向的元素就是 0 元素(因为⾮零元素区间末尾的后⼀个元素就是0 ),因此可以交换到cur 所处的位置上,实现 [0, dest] 的元素全部都是⾮零元素, [dest + 1, cur - 1] 的元素全是零。• 因为 dest 指向的位置是⾮零元素区间的最后⼀个位置,如果扫描到⼀个新的⾮零元素,那么它的位置应该在 dest + 1 的位置上,因此 dest 先⾃增 1;ii. 遇到的元素不是 0 , dest++ ,并且交换 cur 位置和 dest 位置的元素,之后让。

2024-10-15 11:22:02 338

原创 【Linux】进程状态

根据冯诺依曼体系结构,显示器是一个外设,所以CPU在跑当前的程序时,把数据写入到我们当前的内存中,打印数据的顺序:先写入到内存里,再刷新到外设这里。可是我们无法保证每次打印的时候,显示器的状态都是就绪的,因为程序是CPU跑的,CPU的运算速度要比显示器本身的速度要快的多,这种快慢人是无法感知的,所以进程在被调度的时候,要访问显示器的资源,因为资源要一直在显示器上打,所以大部分时间,我们的进程一直在等待我们的设备资源是否准备就绪。2.独立性,父进程只读取子进程的信息,不对信息做修改,依旧保持独立性。

2024-10-14 12:42:10 1522

原创 【Linux】实现倒计时、进度条、gdb

​ b.进程退出刷新 当进程正常退出时,缓冲区会自动刷新,以确保所有已写入缓冲区但尚未写入目标设备的数据都被处理完毕。在没有缓冲区的情况下,每次文件读写操作都需要等待外设(如磁盘)就绪,这可能会导致显著的等待时间。缓冲区减少了这种等待时间,因为数据可以暂时存储在内存中,进程可以继续执行其他任务,而无需等待外设操作完成。先输入到我们的缓冲区,再执行sleep(执行顺序是不变的),执行完sleep后,再将输入内容输出到显示器上。缓冲区的刷新策略决定了何时将缓冲区中的数据真正写入到目标存储器,如磁盘或显示器。

2024-10-14 12:41:56 1439

原创 【Linux】进程概念 进程&&进程的查看与管理&&创建进程

❍ 课本概念:程序的一个执行实例,正在执行的程序等❍ 内核观点:担当分配系统资源(CPU时间,内存的实体)简单来说:进程 == PCB(进程控制块) + 进程对应的代码和数据;一个进程对应一个PCB操作系统对进程的管理,最终变成了对链表的增删查改。注意:可执行程序加载到内存不是进程,只是进程对应的代码和数据。

2024-10-12 20:52:38 826

原创 【C++】红黑树

/ 节点的颜色// 红黑树节点的定义{}// 节点的左孩子// 节点的右孩子// 节点的双亲(红黑树需要旋转,为了实现简单给出该字段)// 节点的值域// 节点的颜色。

2024-10-12 20:52:22 1166

原创 【Linux】冯诺依曼体系&&操作系统概念

计算机管理硬件描述起来,用struct结构体组织起来,用链表或其他高效的数据结构。

2024-10-11 15:21:00 620

原创 【Linux】makefile

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。一个文件是由内容+属性组成,如果文件内容被修改,那么文件的大小也会被修改,相应的属性修改时间也会改变,并且可执行文件形成的时间一定比源文件晚(这是操作顺序的原因),所以只需要比较两者的时间,只要可执行文件的时间比源文件晚,就说明这个可执行文件一定是最新的。@ 是一个特殊变量,它代表当前规则的目标文件名;

2024-10-11 15:20:49 1142

空空如也

空空如也

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

TA关注的人

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