自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux系统之----磁盘硬件

磁盘的物理结构可以概括为以下几个主要部分:1. 主轴(马达):主轴是硬盘的核心组件之一,它通过电机驱动磁盘片高速旋转,常见的转速有5400RPM、7200RPM、10000RPM和15000RPM等。主轴电机用于旋转盘片,使其以高速旋转。通常,机械硬盘的转速为5400转/分钟、7200转/分钟或更高。2. 磁盘片(相当于纸):磁盘片是存储数据的物理载体,通常由铝、玻璃或陶瓷等材料制成,表面涂有一层磁性材料。磁盘片的正反两面都可存储数据,一个磁盘(如一个1T的机械硬盘)由多个盘片叠加而成。

2025-05-25 17:41:46 574 4

原创 Linux系统之----文件及缓冲区

缓冲区本质上是一块内存区域,用于临时存放数据。它在数据从一个地方传输到另一个地方时起到暂时存储的作用。例如,在文件读写操作中,数据通常会先从磁盘读取到缓冲区,然后再从缓冲区拷贝到用户空间的进程内存中;或者从用户空间的进程内存拷贝到缓冲区,最后写入磁盘。

2025-05-21 21:08:13 1056 1

原创 算法篇----二分查找

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)这道题给定我们一个非降序的数组,让我们找两个位置,使其满足题目条件,首先我们要理解好什么是非降序,他与升序有什么区别!!!解法一)暴力破解:遍历数组元素我们可以从左到右遍历数组,遇到值为target的数,就返回下标,并求得下标的最小值和最大值就Ok,但是此种方法的时间复杂度为O(N).解法二)二分查找:朴素版我们能否使用上一题的朴素解法来解决呢?

2025-05-18 14:49:39 729 2

原创 Linux系统之----重定向

文件描述符是一个非负整数,用于标识一个打开的文件。在Linux系统中,文件描述符是一个整数,通常使用int类型来表示。每个进程都有一个文件描述符表(files_struct),用于存储该进程打开的所有文件的描述符。文件描述符表中的每个条目都指向一个结构体,该结构体包含了文件的详细信息。现在我们在介绍一下是一个结构体,用于描述一个打开的文件。它包含了文件的各种信息,如文件类型(标准输入、标准输出、标准错误或普通文件)、文件偏移量等。中有一个指针f_inode。

2025-05-17 15:31:20 761

原创 Linux系统之----基础IO

位图传递标志位是一种通过位运算组合多个标志位的方法。在文件操作中,标志位用于指定文件的打开模式(如只读、只写、读写、追加等)。每个标志位是一个单独的位,通过按位或运算符()将它们组合在一起。标志位描述O_RDONLY以只读方式打开文件O_WRONLY以只写方式打开文件O_RDWR以读写方式打开文件O_APPEND写入时追加到文件末尾O_CREAT如果文件不存在,则创建文件O_TRUNC如果文件存在,则截断文件长度为0O_EXCL与O_CREAT一起使用,如果文件已存在则打开失败。

2025-05-14 21:50:08 1051

原创 Linux系统之----模拟实现shell

1.获取在前面一个阶段的学习中,我们已经学习了环境变量、进程控制等等一系列知识,也许有人会问,学这个东西有啥用?那么,今天我就和大家一起综合运用一下这些知识,模拟实现下shell!首先我们来看一看我们的shell都有些什么,打开一个shell:有一个命令行提示符, 由用户名,主机名,当前目录,提示符。

2025-05-10 21:09:17 947 1

原创 Linux系统之----进程程序替换

execve是一个功能强大的函数,可以指定可执行文件路径、参数列表和环境变量。参数数组和环境变量数组的最后一个元素必须是NULL。如果调用成功,当前进程会被替换为新程序并开始执行;如果失败,会返回-1,并通过errno设置错误码。execve特别适合在需要自定义环境变量的场景中使用。

2025-05-08 16:35:18 848 1

原创 Linux系统之----进程控制

退出码是一个整数值,通常用于指示程序的执行结果。一般情况下,退出码0表示程序成功执行,非零值则表示程序执行过程中遇到了某种问题或错误。进程等待是指在多进程环境中,一个进程(通常是父进程)暂停其执行,直到另一个进程(子进程)完成其任务并终止的行为,这个过程允许父进程同步子进程的结束,回收子进程占用的资源,并获取子进程的退出状态,以便于进行后续处理。

2025-05-04 14:26:32 700 2

原创 算法篇-----滑动窗口

所谓的滑动窗口,就是我们之前的双指针的一个扩展应用,在上一章中,我们的双指针是相向而行的,而这里的双指针是同向而行的,由于其移动过程中像一个窗口一样来回滑动,时大时小,而且还会来回动,因此我们给他起了一个名字:滑动窗口。

2025-04-29 15:11:54 1042 2

原创 Linux系统之----程序地址空间

惰性加载(Lazy Loading)是一种优化策略,它推迟对象的初始化、数据的加载或资源的获取,直到它们真正被需要时才进行。这种技术可以减少初始页面加载时的资源请求次数,从而加快页面的打开速度在计算机编程中,惰性加载技术在优化应用性能和资源管理中的应用与实现尤为重要。它可以减少初始开销、动态扩展和资源复用,从而显著减少初次访问时的数据传输量和处理时间。此外,惰性加载也用于数据库访问中,通过延迟加载数据,可以减少内存占用,提高程序效率。

2025-04-28 21:23:42 683 3

原创 linux系统之----命令行参数和环境变量

是系统级别的全局变量,具备不同的用途1.环境变量的来源大部分环境变量来自系统的配置文件(如)和用户的配置文件(如~/.bashrc少部分环境变量是启动后动态获取或创建的,例如PWD环境变量会在进程工作目录改变时动态更新。2. 环境变量的全局性环境变量具有全局属性,对当前进程及其所有子进程都有效。例如,在 Bash shell 中设置的环境变量会传递给通过该 shell 启动的所有子进程。但是,本地变量(local variable)只在父进程(如 Bash shell)内部有效,不会传递给子进程。

2025-04-26 22:42:30 808 3

原创 Linux系统之----进程优先级、调度与切换

在Linux系统中,普通用户进程的优先级范围是60到99,一共40个级别。数值越小,表示进程的优先级越高。默认情况下,进程的优先级是80。2)原因这个范围限制是为了保持系统调度的公平性,防止用户随意将进程的优先级设置得过高或过低,从而避免进程饥饿问题。这也是为什么NI值设置在【-20,19】之间的原因在系统当中查找⼀个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增加,我们称之为进程调度O(1)算法!

2025-04-24 21:46:10 792 7

原创 Linux系统----进程的状态

我们可以从实际生活中将这个概念抽象出来,比如说我现在处于写文章的状态,那我应该坐在椅子上用电脑来写,再比如我一会是处于睡觉的状态,那我就应该乖乖的在床上躺着,不能满地乱跑,所以我们可以抽象出:状态,决定了进程接下来要做的工作。在早期的操作系统设计中,进程状态可以用一个整数来表示,每个整数值对应一种特定的状态。0:运行态(Running)1:就绪态(Ready)2:阻塞态(Blocked)3:僵尸态(Zombie)4:终止态(Terminated)

2025-04-24 16:31:10 863 2

原创 Linux系统之----进程的概念

课本概念 :进程是程序的一个执行实例,是正在执行的程序。当程序被执行时,系统会为其创建一个进程,包含程序代码、数据以及运行时所需的资源。内核观点 :进程是担当分配系统资源(CPU 时间、内存)的实体。操作系统内核通过进程来管理和调度系统资源,确保每个进程都能合理地使用 CPU、内存等硬件资源。进程控制块(PCB) :进程的信息被存放在一个名为进程控制块的数据结构中,它是进程属性的集合,就好比一个档案袋,里面装着进程的各种信息,比如进程的状态、优先级、内存分配情况等。Linux 中的 PCB() :在 Lin

2025-04-22 19:32:12 967 3

原创 Linux系统之----冯诺依曼结构

操作系统是一种系统软件,处于计算机硬件和其他软件及用户之间的中间层,它对软硬件资源进行管理,为用户和应用软件提供良好的运行环境。从上图可以看到,操作系统是分为侠义和广义的,内核就是开发者所制造出来的(指的是祖师爷那帮人),外壳是给公司里的各种程序员使用的,诸位程序员在外壳上对操作系统进行开发,开发完成后形成广义的操作系统,也就是大家都在用的安卓苹果等等。

2025-04-18 20:58:06 753 1

原创 c++进阶之----智能指针

内存泄漏是指程序在申请内存后,无法释放已申请的内存,导致可使用的内存越来越少。随着时间的推移,内存泄漏会导致系统性能下降,甚至可能导致程序崩溃或系统不稳定。

2025-04-12 21:47:27 795 4

原创 c++进阶之----异常

首先我们让代码先这样运行一下,1)先输入0 5 正常,在输入5 0,抛异常 此时我们的异常信息是string,那么catch也要找与之匹配相同的才能捕捉到,2)同理屏蔽s的部分,打开a,观察现象,看异常是在哪里捕捉的,3)之后在同时打开s和a,在观察现象,不难发现异常只要抛出去程序就会停在那里,4)最后屏蔽s,a,打开d,输入5 0,观察现象。有时catch到一个异常对象后,需要对错误进行分类,其中的某种异常错误需要进行特殊的处理,其他错误则重新抛出异常给外层调用链处理。异常处理的核心是通过。

2025-04-10 21:44:42 780 2

原创 c++进阶之----c++11(包装器)

是C++11标准库中提供的一个头文件,它包含了许多用于处理可调用对象的工具,例如函数包装器、绑定器、函数适配器等。是一个通用的函数包装器,它可以存储、复制和调用任何可调用对象,包括普通函数、lambda表达式、函数对象、绑定表达式等。是一个函数绑定器,它允许将一个函数和其参数绑定在一起,创建一个新的可调用对象。:可以将函数的部分参数绑定为固定值,生成一个新的函数。的模板参数必须是函数类型,而不是两个独立的类型。:绑定成员函数和对象,生成可调用的函数对象。:可以绑定普通函数、成员函数、函数对象等。

2025-04-10 15:08:36 393 1

原创 c++进阶之----c++11(可变参数模板)

系列接口是一组非常有用的函数,它们允许你直接在容器内部构造对象,而不是先构造一个临时对象然后再将其插入容器中。引用折叠的目的是确保引用的引用不会导致复杂的、难以理解的类型,而是会折叠成一个简单的引用类型。时,如果容器需要更多的空间来存储新元素,可能会触发重新分配内存的操作,这涉及到复制或移动现有元素到新的内存位置,然后添加新元素。通常用于需要传递多个参数或避免临时对象的场合,特别是在处理大型对象或资源密集型对象时,可以显著提高性能。当你已经有一个构造好的对象,或者当你需要添加的对象的构造函数非常简单时。

2025-04-08 21:00:23 684 1

原创 c++进阶之----c++新特性(lambda表达式)

当使用混合捕捉时,第一个元素必须是 &或=,并且&混合捕捉时,后面的捕捉变量必须是值捕捉,同理=混合捕捉时,后面的捕捉变量必 须是引用捕捉。第一种捕捉方式是在捕捉列表中显示的传值捕捉和传引用捕捉,捕捉的多个变量用逗号分割。函数体,函数体内的实现跟普通函数完全类似,在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量,函数体为空也不能省略。第二种捕捉方式是在捕捉列表中隐式捕捉,我们在捕捉列表写一个=表示隐式值捕捉,在捕捉列表。捕捉列表是被const修饰的,也就是说传值捕捉的过来的对象不能修改,

2025-04-06 16:12:03 884 3

原创 c++进阶之----c++11新特性(左值右值)

左值引用和右值引用是 C++11 引入的两种引用类型,它们的主要区别在于绑定的对象类型。左值引用(lvalue reference)定义:左值引用绑定到一个有名字的对象(左值)。

2025-04-05 15:18:14 774 1

原创 c++进阶之----orderedmap和unorderedmap

适用于需要存储键值对的场景,查找、插入和删除效率高。:适用于需要存储唯一值的场景,判断元素是否存在效率高。两者都基于哈希表实现,因此在需要高效查找的场景下非常有用。

2025-04-02 21:50:08 872

原创 c++进阶之------哈希(开放寻址法)

内存使用效率较高,查找效率在低负载因子下较好,但删除操作需要特殊处理。

2025-03-31 22:55:56 1021 2

原创 算法篇-------------双指针法

直接盲目凭空猜是肯定不靠谱的,我们不妨这样,可以进行。

2025-03-31 21:17:13 1135 3

原创 c++进阶之----哈希(桶)

本篇主要讲解哈希桶的实现,线性探测和开放寻址法在下一篇博客中讲解。

2025-03-30 21:50:00 790 2

原创 c++进阶之------红黑树

红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在计算机科学的许多领域中都有广泛应用,比如Java中的TreeMap和C++中的set/map等数据结构的底层实现。红黑树通过在每个节点上增加一个颜色属性(红色或黑色),并遵循一定的规则来确保树的平衡性,从而保证了各项操作的时间复杂度为O(log n)。

2025-03-22 21:23:43 843 2

原创 Linux第六讲----git与gdb

打开gitee,新建仓库按下图操作:之后点创建在点击橙色的克隆下载:并复制之后登录xshell并进入家目录输入git clone 右键粘贴如下图所示之后我们进入for_delete创建一个文件,code.c,输入如下内容之后会发现多了一个.git文件,这个就是我们本地仓库之后将其添加到仓库里之后在推送一下-m后加你想说的内容实际上,这一步是将本地仓库与远端的同步一下之后push一下,输入用户名和密码(gitee账号名和密码)

2025-03-17 13:00:27 675 4

原创 c++进阶之----A V L树

温馨提示:本篇文章重在逻辑性,代码部分只要能理解AVL树的逻辑,便可迎刃而解。

2025-03-11 18:53:15 684 3

原创 Linux第五讲----gcc与g++,makefile/make

验证一下:所以我们将代码改造一下:这样我们便可以按照所需改造代码了简化:$@代表$(BIN),$^代表$(SRC) (:右边的所有内容)所以最终我们将其写成这个形式但是倘若我们有很多code.c,一次一次写很麻烦,所以我们改进一下:用wildcard(目标文件列表)这样就不用担心多个文件了。

2025-03-04 13:52:14 1105 3

原创 c++进阶之----set和map

在C++中,std::map是一个非常强大的容器,属于标准模板库(STL)的一部分。它是一个基于红黑树实现的关联容器,用于存储键值对(key-value),并且保证键的唯一性。在C++中,std::pair是一个非常实用的模板类,用于将两个不同类型的数据组合在一起。它属于标准模板库(STL)的一部分,通常用于需要同时处理两个相关数据的场景。std::pairfirst:存储第一个数据。second:存储第二个数据。std::map的[]运算符是一种非常重要的成员函数,用于访问或插入元素。1)如果key。

2025-03-02 21:48:40 1105 2

原创 linux第四讲----基础开发工具vim

vim是一个多模式的编辑器,总共有6种模式,这里我们介绍其中三种,命令模式,插入模式,还有底行模式,打开时默认进入命令模式!

2025-02-28 18:33:45 1064 2

原创 c++进阶之----二叉搜索树

二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,具有以下性质:1)若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。2)若任意节点的右子树不为空,则右子树上所有节点的值均大于它的根节点的值。3)任意节点的左子树、右子树均为二叉搜索树。

2025-02-26 22:15:31 906 7

原创 Linux第三讲----用户权限(二)

由于一些原因,我将centos更换为了ubuntu,但是这些指令的操作都是一样的!在上一篇文章中,我们已经了解了基本的权限操作,在此篇文章中,我们将继续深入探讨下权限!

2025-02-24 13:29:12 808 5

原创 c++之多态

多态分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态。示例代码如下所示:1)函数重载2)函数模板运行时多态,具体点就是去完成某个行为(函数),可以传不同的对象就会完成不同的行为,就达到多种形态。也就是说,是在程序运行时才确定函数调用的具体实现形式,主要通过虚函数和继承机制实现。

2025-02-21 18:29:02 636 5

原创 c++进阶———继承

在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话,联系方式等等,这些内容仅有一点点不同,如果我先定义一个教师类,私有成员包括上述与教师相关的内容,在定义一个学生类,私有成员也包含上述与学生相关的内容,这样会显得十分麻烦,而且重复定义,浪费时间。我们不如在这里引入一个新的概念:继承。

2025-02-19 23:12:28 900 3

原创 项目实践之----贪吃蛇小游戏

在我们学习完C语言的相关知识后,我们可以尝试写一些简单的程序代码了,如本文所将要实现的贪吃蛇小游戏,以及未来我会陆续更新一些其他其他应用程序的代码,如:学生管理系统的实现(高仿网页版本),扫雷小游戏等等。

2025-02-10 15:08:13 1016 2

原创 c++中priority_queue的应用及模拟实现

priority_queue除了直接用于排序元素之外,还能用于自定义比较函数,来改变元素的优先级顺序例如,如果你想让优先队列按照元素的某个属性排序,可以定义一个比较函数class datepublic:,_day(day){}private:int _year;int _month;int _day;

2025-02-05 19:18:15 330 1

原创 c++之模板进阶

【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-02-03 23:04:46 913 4

原创 c++中stack和queue的模拟实现

在数据结构专栏中,我们曾模拟实现了stack和queue,但是实现过程却十分复杂,而在本文,我们用c++提供的已知容器来实现栈和队列,将会轻松许多!

2025-02-02 12:28:23 257

原创 Linux第二讲--用户权限

我们之前的账号是root,现在我们要在创建一个个人账号,本文将围绕其进行讲解。

2025-01-26 14:08:25 1231

空空如也

空空如也

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

TA关注的人

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