自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 查找命令

在使用 Linux 系统的时候,我们经常会需要查找某些文件,但是大多数情况下我们并不能确定这些文件的具体位置,这样的话就非常浪费我们的时间,Linux 为我们提供了很多用于文件搜索的命令,如果需求比较简单可以使用 locate ,which,whereis 来完成搜索,如果需求比较复杂可以使用 find grep (PS: 除了locate,其他的我都用到过,但是一直不求甚解,不知其所以然)在进行文件大小判断的时候,需要指定相应的范围,涉及的符号有两个分别为:(+)(-)

2026-08-12 16:58:18 209

原创 Docker 基础概念学习

容器共享主机内核,轻量、隔离且高效,不像虚拟机需要完整的操作系统:上层是多个容器,每一个容器独立运行一个应用中间层是Docker,负责管理这些容器底层是主机操作系统和基础设置,为容器提供硬件和系统支持1. 传统应用部署的痛点环境不一致:应用在开发环境运行正常,但在测试或生产环境出现问题依赖管理复杂:不同应用需要不同版本的运行时、库文件等资源利用率低:传统虚拟机需要完整的操作系统,占用大量资源部署复杂:需要手动配置环境,安装依赖,容易出错2. 容器化技术的解决方案。

2026-08-10 16:50:28 200

原创 GDB调试

本文章旨在 学GDB调试的基本方法说明,掌握需多实践

2026-08-04 15:21:07 188

原创 CMake基础

Cmake是一个项目构建工具,而且是跨平台的,以前我们都是直接写Makefile,通过make命令进行项目的构建,但是如果自己手写makefile的话,你会发现makefile通常依赖于当前的编译平台,而且编写makefile的工作量比较大,依赖关系也容易出错CMake恰好能解决上述问题,其允许开发者指定整个工程的编译流程,再根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需要 make 编译即可,我们可以。

2026-08-04 09:47:24 300

原创 Linux 基础IO

open函数有两个,具体使用哪一个和具体的使用场景有关,如目标文件不存在,需要open创建,则第三个参数表示创建文件的默认权限,否则使用两个参数的open接口缓冲区是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓 冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设 备,分为输入缓冲区和输出缓冲区。

2026-05-04 20:08:54 185

原创 C++11

默认情况下, lambda 捕捉列表是被const修饰的,也就是说传值捕捉的过来的对象不能修改, mutable加在参数列表的后面可以取消其常量性,也就说使用该修饰符后,传值捕捉的对象就可以 修改了,但是修改还是形参对象,不会影响实参。使用该修饰符后,参数列表不可省略(即使参数为 空)

2026-04-21 18:44:10 387

原创 网络基础概念

1.协议是一种约定计算机之间的传输媒介是光信号和电信号,通过‘频率’和‘强弱’来表示0和1这样的信息,要传递各种不同的信息,就需要约定好双方的数据格式2.软件分层协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计为层状结构。

2026-04-13 17:18:54 366

原创 c语言 文件操作

磁盘(硬盘)上的文件就是文件程序文件数据文件。

2026-02-02 22:28:16 699

原创 Linux 第一个系统程序 进度条

在本章我们会学习自己写一个进度条的代码,增强我们对Linux学习的理解。

2026-02-02 22:25:14 510

原创 Linux Ext系列文件系统

ls -l 读取存储在磁盘上的文件信息,然后显示出来我们还可以使用stat命令来读取,可以看到更多的信息:我们要思考一个问题,文件数据都存储在“块”中,那么显然我们还要找到一个地方存储文件的元信息(属性信息),这种存储元信息的区域就是inode,“索引节点”每一个文件都有对应的inode,里面包含了与该文件相关的一些信息Linux下文件的存储是属性和内容分离存储的Linux下,保存文件属性的集合叫做inode,一个文件一个inode,inode内有一个唯一的标识符叫做inode号。

2026-01-23 19:54:08 720

原创 Linux 进程控制

本章重点①:学习进程的创建,fork/vfork②:学习进程终止,认识$③:学习进程等待④:写一个微型的shell(单独列一章),重新认识shell运行原理。

2025-12-22 19:02:22 668

原创 C++ 红黑树

红黑树是一颗,它的每一个结点增加一个存储位来表示结点的颜色,可以是红色或者是黑色,通过对任何一条从根到叶子的路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因此是接近平衡的。

2025-12-11 20:43:50 866

原创 Linux 进程概念

以下是本章的重点①:认识冯诺依曼系统②:操作系统概念与定位,理解“管理”③:深入理解进程概念,了解PCB④:学习进程状态,学会创建进程,掌握僵尸进程和孤儿进程,及形成原因和危害⑤:理解进程切换,以及Linux2.6 kernel,O(1)调度算法架构⑥:理解环境变量,熟悉常见环境变量及相关指令,getenv/setenv函数⑦:理解c内存空间分配规律,了解进程内存映像和应用程序区别,认识虚拟地址空间。

2025-12-09 14:34:28 911

原创 AVL树实现

①:AVL树是最先发明的自平衡二叉查找树,AVL是一颗空树,或者是具备以下性质的二叉搜索树:它的左右子树都是AVL树,且左右子树的高度差绝对值不超过1,AVL树是一颗高度平衡二叉搜索树②:AVL树得名于其发明者,来自前苏联的两个科学家,G. M. Adelson-Velsky和E. M. Landis③:AVL树实现要引入平衡因子的概念,,每一个结点都有一个平衡因子,任何结点的平衡因子等于右子树高度—左子树的高度。

2025-11-15 16:57:37 931

原创 C++ 二叉搜索树

二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树:①:若它的左子树不为空,则左子树上所有的结点的值都小于等于根结点的值②:若它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值③:它的左右子树也分别为二叉搜索树④:二叉搜索树可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景定义,map/set/multimap/multiset系列容器底层就是二叉搜索树,其中map/set不支持插入相等值,multimap/multiset支持插入相等值。

2025-11-15 11:18:46 651

原创 C++ 多态

多态是一个继承关系下的类对象,去调一个同一个函数,产生不同的行为。①:这个函数必须是基类的指针或者引用调用虚函数只有基类的指针或者引用才能既指向基类对象又能指向派生类对象②:被调用的函数必须是虚函数,并且完成了虚函数的重写/覆盖派生类必须对基类的虚函数完成重写/覆盖,只有这样基类和派生类才能有不同的函数,达到多台的效果。

2025-11-05 00:42:06 749

原创 C++ 继承

继承的格式:继承的方式和继承基类访问方式的变化:①:基类private成员无论在派生类中以什么方式继承都是不可见的,这里的不可见是指基类的私有成员还是被继承到了派生类中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它②:基类private成员在派生类中是不能被访问的,如果基类成员不想在类外直接访问,但需要在派生类中可以访问,就定义为protected,可以看出保护成员限定符是因为继承才出现的。

2025-11-02 12:22:22 1124 1

原创 自动化构建-make/makefile

它们解决了手动编译中的效率低下、容易出错、难以维护等问题,是现代软件开发中不可或缺的基础工具。

2025-10-19 13:29:43 969 1

原创 gcc编译器

我们知晓,源代码想要成为可执行的文件不可避免要经过这几个步骤: 对源代码进行宏替换、去注释、条件编译、头文件展开等 语法检查、语义分析、优化、生成平台相关的汇编代码 将汇编指令翻译成二进制机器码、 生成目标文件( 文件)、 创建符号表(函数名、变量名 解析外部引用(如 ) 合并多个 文件 链接库文件(如 C 标准库) 分配内存地址 生成最终的可执行文件格式:gcc

2025-10-18 18:00:56 416

原创 vim编辑器

vi/vim都是Linux中的多模式编辑器,不同的是vim是vi的升级版,它不仅兼容vi的所有指令,还有一些新的特性在里面,例如语法的高光,可视化操作不仅可以在终端运行,也可以运行于其他的系统。

2025-10-18 15:38:25 954

原创 Linux基本指令

⑥:绝对路径一般不会随着用户的路径变化而丧失唯一性,一般在特定服务的配置文件中经常被使用,相对路径因为其便捷性,一般在命令行中使用较多,需要我们知道的还有不是说相对路径就没有绝对性,对于某个特定的文件或目录来说其相对路径也具有唯一性,但是相对路径会随着参照文件或目录的改变而改变,而丧失唯一性。③:理解路径存在的意义:树状组织方式都是为了保证定位查找指定的文件,而定位文件就需要唯一性的方案来进行定位文件,其中任何一个节点都只有一个父结点,所以从根目录开始,定位指定文件,路径具有唯一性。

2025-10-11 00:13:20 258

原创 类和对象(上)

class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义时后面的分号不能省略,类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如在成员变量前面或者后面加_或者n开头(非强制)

2025-09-28 13:18:17 925

原创 STL容器:vector

①无参默认构造②拷贝构造​​​​​​​③构造并初始化n个val。

2025-09-27 18:37:14 1013 1

原创 STL容器:string类

C语言中,字符串是以 ‘\0’结尾的一些字符的集合,为了方便操作,c标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP(面向对象编程)的思想,而且底层空间需要用户自己管理,还容易越界访问 我们今天学习的string类实际上是一个管理的char类型的字符串数据的类模版(还有管理wchar的其他类模板) 在使用string类时,必须包含#include头文件以及using namespace std; 在早期的C++

2025-09-26 11:41:31 1085

原创 C++模版(初阶)

以简单栈的类模版为例:模版不建议声明和定义分离到两个文件,会出现编译错误。

2025-09-14 17:29:59 386 2

原创 C/C++ 内存管理

operator new与operatordelete函数new和delete是用户进行动态内存申请和释放的操作符,operator new和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

2025-09-12 19:46:01 1122 5

原创 类和对象(下)

3.引用成员变量const成员变量没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错4.c++支持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表初始化的成员使用的。

2025-09-09 18:55:03 1105 2

原创 类和对象(中)

构造函数,则C++编译器会。

2025-09-07 12:14:07 661

原创 c++入门学习

1.定义命名空间要使用namespace关键字,其后跟命名空间的名字,再接一对{}即可,{}中是命名空间的成员,命名空间可以定义变量/函数/类型等2.namespace的本质是定义出一个域,这个域跟全局域独立,不同的域可以定义同名变量,如上图将rand整型变量和rand函数分开,解决命名冲突3.域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑编译查找逻辑。

2025-05-30 23:59:21 517 1

原创 数据结构之基础排序

排序即是使一串记录按照其中的某个或某些关键字大小,递增或递减排列起来的操作,其目的是提高数据的组织性以便后续的各类操作,在基础的排序算法学习中,我们会学习下面几种排序算法思想,跟着呱呱一起来学习吧!好啦,基础的排序我们就学习到这里啦,数据结构的学习离不开画图的理解,如果你在学习排序时也感觉头昏昏的,除了勤加练习,也别忘了画图好好理解哦,呱呱祝大家都能称为巨code!归并排序是建立在归并操作上的一种有效的排序算法,是采用分治法的典型应用,其将已有的子序列合并,得到完全有序的序列;

2025-05-07 17:41:29 713 1

原创 数据结构之二叉树(基础)

数据结构二叉树的学习梳理

2025-04-19 20:53:03 717

原创 C语言深入理解指针笔记(4)

④:int(*cmpar)(const void * e1,const void * e2):函数指针指向一个比较函数,这个函数是用来比较数组中的;②:size_t num: num中存放的是base指向的数组中的元素个数。①:void * base:base中存放的是待排序数组的第一个元素的地址。如果e1指向的元素 > e2指向的元素,函数返回一个 > 0 的数字。如果e1指向的元素 < e2指向的元素,函数返回一个 < 0 的数字。如果e1指向的元素 = e2指向的元素,函数返回 0。

2024-10-22 17:13:28 356

原创 C语言深入理解指针笔记(3)

前面我们在数组名的理解的章节学习了数组名的意义,知道数组名在一般情况下都是数组首元素的地址,但是存在两个特殊的情况:一个是sizeof(数组名),一个是&(数组名),这两种情况下数组名表示的都是整个数组,其中&(数组名)取得的就是一个数组的地址。函数指针变量的创建和数组指针变量的创建类似,pf3先和*结合,表明pf3是一个指针变量,指向的是一个函数,该函数的参数类型和数量也在后面表示出来。这是一句函数声明,signal是一个函数的名字,signal函数有两个参数:一个是int,一个是void(

2024-10-18 20:55:13 589

原创 C语言深入理解指针笔记(二)

我们将数组首元素的地址用指针变量封装,在遍历数组时就可以通过使用指针访问数组的元素,arr/p[i]等价于*(arr/p+i),数组元素的访问在编译器处理时,也是转换成首元素的(地址+偏移量)求出元素的地址,然后解引用来访问.parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型的一维数组,parr[i][j]就是整型一维数组中的元素,达到了模拟二维数组的目的。此时的数组名表示整个数组,sizeof(arr)计算的是整个数组的大小。

2024-10-13 23:39:52 492

原创 C语言深入理解指针笔记(一)

编址通过硬件设计完成,32位机器有32个地址总线,每根线只有“0”、“1”两个状态,32根地址线可以表示2^32这么多种地址,64位的机器同理;有一种特殊的void*类型指针,它可以理解为无具体类型的指针(泛指型指针),它可以用来接受任意类型地址,但void*类型的指针不能进行指针(+-)整数操作和解引用的运算。32位机器有32根地址总线,一个地址就是32个bit位,需要4个字节来储存,如果指针变量用来存放地址,那么指针变量的大小就是4个字节的空间,同理64位机器,指针变量的大小就是8个字节。

2024-10-12 23:29:35 1556

原创 C语言之函数栈桢的创建和销毁

② 每一个函数的调用,都需要在栈区上创建一个空间,事实上main函数并不是第一个函数, 同样也是被调用的一个函数,在不同的编译器下调用它的函数或许并不相同,在VS 2013 中调用main函数的函数名为__tmainCRTStartup ,也即是说:我们一开始观察到的就是 main函数栈桢的创建。变量的创建,分别在main函数的栈桢空间中由变量定义的先后,从高地址到低地址分别创 建存放变量。

2024-09-25 22:10:35 1472

原创 数组和函数实践:扫雷游戏

现在,我们要明确两个数组的作用,mine数组用来存储雷的布置情况,我们将它的元素初始为符号‘0’,在后续的布置雷的步骤后,表示雷的元素我们将其赋值为符号‘1’,show数组我们将其全部元素初始为符号‘*’,在保持游戏的神秘感的同时,也使两个数组的初始化更加简便(初始化赋值都为字符),show数组也是我们游戏过程中必要打印的数组,也即是我们的棋盘,每排查一次雷后都会打印一次show数组,而排查的位置在排查后应被赋值我这个位置周围的雷的个数,这样,我们基本实现了排雷游戏的基本逻辑。二:扫雷游戏的具体实现。

2024-09-23 20:24:28 1585 1

空空如也

空空如也

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

TA关注的人

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