自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一图搞懂Linux中的信号机制

本文介绍了Linux系统中的信号处理机制。通过一张示意图,详细讲解了信号递达(实际执行信号处理)、信号未决(信号产生到递达的中间状态)等核心概念。重点说明了进程可以阻塞特定信号,被阻塞的信号将保持未决状态而不会递达,只有解除阻塞后才会执行处理。文章旨在帮助读者直观理解Linux信号处理的完整生命周期。

2025-11-20 22:16:15 221

原创 高并发内存池项目

懂得了为什么要进行对齐和桶的映射,那么接下来我们就要实现它了。我们先创建一个Common.h文件,将一些共有的方法放在这里面。

2025-11-08 10:56:08 910

原创 万字细啄常见排序算法

(1)排序:何为排序,通俗点讲就是一串记录按照某个关键字大小进行递增或递减排序。(2)稳定性:如果一个排序算法能够保证,相同的数字的顺序在排序前后都一样,那么这个排序算法就是稳定的。(3)内部排序;数据元素全部在内存中的排序(4)外部排序:数据元素太多不能同时放入内存中,根据排序过程之间的要求不能在内外存之间移动数据的排序。到这里我们已经懂得了插入排序算法的思路,那么我们如何实现它呢???我们来运行一下代码吧,看看能否正确排序由于插入排序算法遇到相等元素并不会移动元素,所以相等元素在有序序列

2025-10-26 22:40:28 884

原创 版本控制器之Git理论与实战

本文介绍了Git版本控制工具的基本操作,包括本地仓库创建、配置文件管理、工作区/暂存区/版本库概念解析等基础内容。重点讲解了版本控制核心功能:提交日志查看、文件修改追踪、版本回退、撤销修改、删除文件等操作。详细说明了分支管理策略,包括创建/切换/合并/删除分支,解决合并冲突,以及stash暂存功能。此外,还介绍了远程仓库操作,如克隆项目、推送/拉取代码、配置.gitignore文件等。最后讲解了标签管理和多人协作开发流程,包括同分支协作开发、功能分支开发模式等实际应用场景。文章全面覆盖了Git日常使用的主要

2025-10-13 22:58:52 1090 2

原创 C++11之异常

在企业中,很多开发团队都认为STL库实现的异常体系不好用,一般都会在自己内部创建自定义的异常体系,既然企业用到了,那么我们也要学习一下如何自定义异常体系,这里笔者通过举例服务器开发中通常使用的自定义异常体系。return str;

2025-09-25 22:36:16 724

原创 解密完全二叉树顺序存储之堆结构

答:也是通过建立k个元素的大堆,再拿10亿-k的数据和堆顶数据比较,比堆顶小就替换堆顶并调整,最后一直比较完10亿-k个数据,就能找到最小的前k个元素了,那么我的内存仅仅需要维护o(k)

2025-09-12 23:20:05 988

原创 解密数据结构之二叉树

那么代码该如何写呢?代码很简单,通过递归来进行前序遍历int _data;return;//只有当这个节点不是叶子节点时,才递归打印= nullptr)int main()//用来测试的构建二叉树的方法return 0;看一下代码结果吧代码结果毫无问题,那么到这里我们已经懂得了二叉树的前序遍历,那么接下来就到二叉树的中序遍历了。懂得了遍历规则,那么废话就少说了,直接上代码帮助各位老铁理解二叉树的中序遍历。int _data;

2025-07-29 22:10:31 1128

原创 C++11新增语法讲解篇

那么为什么有了左值,C++11还要增加右值呢???1.C++98并不能区别临时对象和持久化的对象,现在加上右值就可以很好的区别二者了。2.右值能减少临时对象不必要的深拷贝,提高效率//1.构造public://2.拷贝构造//s2(s1)cout << "String(const String& s)-深拷贝" << endl;return tmp;int main()String s1("左值");//左值。

2025-07-19 03:48:48 694

原创 Linux之文件基础IO

进程和被打开文件的关系。

2025-07-04 12:01:49 1035

原创 Mysql库的操作和表的操作

现在我要创建一张学生信息表,表中包含编号,姓名,生日,性别,邮箱,在创建表之前,要先创建出一个数据库,在前面笔者已经讲过如何创建数据库了,这里笔者就不在说了,直接演示。在实际项目开发中,我们会经常修改表的某个结构,例如:字段名字,字段类型,字段大小,还有添加字段,修改字段,删除字段…我们查看一下表是否存在,表在Linux中对应的是一个文件,数据库在Linux中对应的是一个目录。细心的老铁就会发现在我们的数据库目录下还有两个文件在最前面,那么那两个文件是什么呢?现在我需要在student表中删除b字段。

2025-05-31 10:33:02 1284

原创 基于Linux命令行解释器,创建自己的命令行解释器

看一下输出结果为什么没有输出结果呢???是由于我们没有刷新缓冲区,那么我们再改改代码所以我们就可以像Linux那样输入指令了,但是现在我们还没实现输入对应的指令能输出对应的操作。

2025-05-17 12:12:15 715

原创 解密数据结构之位图和布隆过滤器

对于位图的定义,笔者先不讲,笔者先给各位老铁分享一个腾讯的面试题,看看各位老铁会不会这道面试题!先审题,题目要求我们快速从40亿个数中判断一个数是否存在,很多老铁一下子就会想到哈希来做,本来哈希就是支持快速查找数据的。但是各位老铁犯了一个致命的错误,没有看人家数据个数,40亿个数,每一个数都要使用4个字节映射key值,那么总的需要的内存就是16G左右了,那么你电脑内存还能放的下吗,就算放的下,一个程序就吃你电脑那么多内存了,你其他的程序不要跑了吗?位图就是每一位存放某种状态.

2025-05-10 12:03:17 1014

原创 刨析Linux之进程控制(看完包有收获)

如果各位老铁有看过我前面的博客,相信会对fork函数有一定的印象,会粗略的知道fork函数是创建子进程的函数,那么今天笔者再重讲fork函数,力求讲解的详细且通俗易懂。从Linux手册中我们可以知道fork函数创建子进程成功,会有两个返回值,那么我们来实验一下看是不是有两个返回值,毕竟实践出真知嘛我们通过上面代码可以得知,fork如果创建子进程成功,上面代码应该会打印两句话,我们运行该程序看是不是这样。通过代码输出的结果,我们知道fork创建成功的确会返回两个值,父进程会返回子进程的id,子进程

2025-05-01 11:14:27 602

原创 数据库安装(基于Linux下centos7)(保姆级教程)

1.在安装数据库之前,我们需要确定我们系统内是否有相关的环境了,我们需要先把那些环境删掉。先检查是否含有mariadb这里笔者是已经安装好了,一般情况下应该是没有这个服务的,那么什么是mariadb呢?mariadb就是Mysql一个分支,是一个开源的关系型数据库。2.那么如果存在mariadb服务,那么我们先停掉该服务,在停掉该服务之前,我们先把我们的用户切换成超级用户3.再停止该服务4.检查该服务是否停止这里只显示grep进程状态,mariadb状态不存在,证明该服务没有启动,当然也可能

2025-04-13 22:44:33 1261 2

原创 Linux之进程地址空间(看完必有收获)

相信各位老铁应该都学习过c语言,在笔者前面的博客中讲过c/c++的地址空间,那个只是粗略的讲了一下,并没有涉及到它的本质,对于系统的编程,最重要的就是理清底层的逻辑和认识到本质,所以今天我继续给大家分享关于c/c++地址空间的内容,我先给各位老铁画出c/c++地址空间的分布图。先问各位老铁一个问题,c/c++地址空间是内存吗?可能就会有老铁脱口而出了,那包是的啊?很遗憾,老铁们说错了,这根本不是内存,很多人都把它当成内存,可能各位老铁不相信,没事,我写段代码给大家验证一下就明白了。int main()

2025-03-09 11:12:20 779

原创 Linux之环境变量(超详细版)

以上内容分享了关于Linux中的环境变量的定义,常用的环境变量,查看环境变量的方法,获取环境变量的方式。希望各位老铁看完能有所收获。

2025-03-03 20:34:00 1144

原创 C++STL之stack和queue容器(详细+通俗易懂)

/栈里面数据类型是int型还是老规矩,我们先来看看c++官网文档对queue的介绍文档。1.队列也是一种容器适配器,队列满足先进先出的性质,队列从队头出数据,从队尾入数据。2.如果底层容器是我们自己设计的话,需要满足以下功能接口,empty,size,front,back,push_back,pop_front。再声明模板(不懂得可以看模板那一篇博客)//T表示stack里面数据的类型,Container表示底层的容器。

2025-02-01 16:35:58 995

原创 Linux之进程的状态(一篇带你通关)

不知道各位老铁有没有听过有关进程的各种状态,笔者刚学的时候也听过很多的关于进程的状态,例如,运行,新建,挂起,阻塞, 等待,停止,挂机,死亡等等,但是那时候笔者也不懂这些状态分别表示什么,只是左耳进右耳出,今天,笔者要对这些状态进行一 一讲解,一定让各位老铁有所收获,好了,请各位老铁系好安全带,准备发车了。以上这些就是关于进程的状态的内容,内容有点多,希望各位老铁有所收获。

2025-01-17 10:24:57 802

原创 Linux之进程(超长详细+通俗易懂)

通过这篇文章,我们学习了进程的概念和如何查看父子进程,还有如何创建子进程。下篇文章我们将要讲解进程的状态,敬请期待吧!

2025-01-13 10:27:11 862

原创 Linux菜鸟级常用的基本指令和基础知识

以上这些是我总结Linux菜鸟级常用的指令和基础知识,大家可以拿来学习也可以拿来复习。

2025-01-04 22:49:22 3350 1

原创 详解Linux项目自动化构建工具之makefile和make

先创建一个源文件mytest.c打开mytest.c文件在vim编辑器中写上hello world代码然后再创建一个名为makefile的文件(文件名一定是makefile不区分大小写)在vim编辑器打开Makefile文件,在Makefile文件中第一行写mytest:mytest.c表示mytest目标文件依赖于mytest.c源文件。

2024-11-30 10:03:56 688

原创 计算机软硬件体系结构

计算机的软硬件体系结构是一个复杂的系统,涉及到硬件和软件的多个层面。硬件提供了计算和存储的基础,软件则管理和控制这些资源,提供用户和应用程序的接口。通过合理的设计和优化,可以提高系统的性能和安全性,满足各种应用需求。希望这篇博客能帮助你更好地理解计算机的软硬件体系结构。

2024-11-21 21:08:27 1172

原创 哈希(超详细版)

我们知道哈希是需要通过哈希函数,让元素存储的位置和它的关键码建立一一映射的关系,那么我们接下来会讲解几个常用的哈希函数。

2024-11-14 11:55:42 3614

原创 详析multiset和multimap容器

我们知道multimap可以存储重复的key的数据,而operator[]又是通过key进行查找和插入元素,如果multimap重载operator[]就会导致查找出现不确定性。然后还是我来为大家总结一下文档里面的内容。

2024-11-03 22:16:05 340

原创 详析STL之容器map

map 变量名;map里面可以是不同类型。C++文档网址1.我们要知道map中的元素是键值对2.map的key也是唯一的不能修改的,只能修改key所对应的键值value3.map的底层是红黑树,搜索效率非常高,时间复杂度是O(logN)4.map默认是按升序(key从小到大)进行排序的,如果使用迭代器进行遍历,就能得到一个有序的序列。

2024-10-28 20:40:29 860

原创 详析STL之容器set

那么文档里面说的是什么呢?set 变量名;set里面类型可以是任意的类型这篇博客分享了关联容器和序列容器区别,还有键值对定义,还有set容器特点和和set容器的使用。

2024-10-27 23:44:20 1049

原创 数据结构之红黑树(超详细版+通俗易懂)

上面我们已经分享完了红黑树的定义和红黑树的性质,那么我们接下来就实践一下吧,定义出红黑树的结点。RED,BLACK,struct RBTreeNode//把结点定义为公有的//数据有key和val//颜色//写结点的构造函数,new函数需要调用结点的构造函数, _kv(kv), _col(RED)//颜色先给为红色{};那么为啥需要把红色设置为默认颜色呢?为了防止破坏每一个路径的黑结点个数相同的性质红黑树的删除。

2024-10-24 12:08:01 1157

原创 AVL树(超详细版)

AVL树的性质我们已经知道了,那么现在我们要来定义AVL树的结点了定义AVL树前,我们需要知道AVL树中需要有什么,我们需要有指向左右子树结点的指针,还有指向当前结点的父节点的指针为了方便后面的插入,这里使用三叉链进行实现AVL树)还有为了平衡树的高度的平衡因子,还有存放的数据。//设置为公用的可以在类外访问//平衡因子int _bf;//存放的数据//不理解pair用法的老铁可以去查一下文档//构造函数: _bf(0): _kv(kv){};

2024-10-19 11:49:51 1386 1

原创 二叉搜索树(超详细+通俗易懂)

二叉搜索树是一种有序二叉树,具有以下特性:每个节点的左子树值都小于该节点,右子树值都大于该节点。文章详细介绍了二叉搜索树的实现方法,包括节点创建、插入、查找和删除操作。插入时需保持树的特性,查找通过比较值大小进行遍历,删除则需处理四种不同情况(无子节点、仅左/右子节点、有左右子节点)。文章提供了C++代码实现,并配合图示说明操作过程,最后总结了二叉搜索树的基本特性和实现要点。

2024-10-14 23:32:49 882 2

原创 C++之多态篇(超详细版)

public:cout

2024-10-04 22:43:57 1381

原创 C++之继承(通俗易懂版)

调试看看派生类是否含有基类的成员变量(1)private(基类的成员是private):如果基类成员(成员函数和成员变量)都是私有继承,那么派生类虽然继承基类,但基类成员在派生类中和在派生类外都是不可见。(2)protected(基类的成员是protected):派生类继承基类,虽然在派生类外不能访问基类成员,但在派生类中可以访问基类成员(3)public(基类的成员是public):派生类继承基类,既可以在派生类中访问基类成员,也可以在派生类外访问基类成员。1.通过以上的对于三种访问限定符的分析

2024-09-18 22:52:59 796

原创 模板(进阶)

template//N不是类型参数public:private:T _a[N];int main()//非类型模板参数是为了固定数组的大小(常量)return 0;这段代码是不是让我们实现了通过Array类的模板创建出了一个大小为100的整形数组。看到这里可能有老铁就会疑惑了,既然是常量,那么除了整形以外的其他内置类型能不能也充当非类型模板参数呢?

2024-09-14 21:43:28 1037

原创 STL之my_list容器

list容器有这么多接口,我会从里面挑出常用的接口进行模拟实现。由于我们不知道list容器的类型是什么类型,所以我们需要搞个模板函数,对任意类型的list都适用。然后我们需要搞个类(私有的比较好,防止其他人修改成员变量)把list里面的成员给封装起来接下来我们需要把链表给初始化由于list不支持随机访问,我们只能通过迭代器进行访问list中的结点。所以我们先来实现list的迭代器的接口。由于list迭代器底层是一个指针,所以我们如果需要访问list和修改list,就需要对指针进行解引用和取地址,因

2024-09-02 17:19:12 1401

原创 STL之my_string容器(超详细版)

我们知道STL中已经帮我们实现好了string容器的各个接口,如果我们直接实现my_string就会和STL里面的string冲突,所以我们需要一个命名空间把my_string包围起来,防止和库里面的string冲突。然后我们就可以实现string的构造函数了,string创建对象时可能是带参也可能是不带参,所以我们需要实现两个构造函数,但是在前面我们学过一个缺省参数,所以我们可以把这两个构造函数结合起来实现。string构造对象时如果传的无参,我们就需要一个\0才能判断传参结束,所以这个缺省参数我们可

2024-08-12 14:40:00 681

原创 STL之string容器(超详细版)

笔者认为着里面有四个我们比较常用,所以笔者只分享这四个构造函数如何使用。

2024-08-09 17:04:15 923

原创 leetcode43. 字符串相乘

相乘,首先我们就知道了,这两个字符串转化成得数字有可能是0,如果==0,那么直接返回字符串0就行了,如果不为0,我们小学都学过乘法的竖式计算,我们可以先举个例,例如字符串123*字符串45,那么该如何做呢?首先我们肯定是得把字符串转化为数字,必须是一个一个字符的转化,因为题目要求不能直接转化,也不能使用大数相乘标准库,转化为数字后,就按照小学时我们给乘法排竖式的方式进行计算。我们可以看到题目是要求我们将两个字符串转化为。

2024-08-01 16:29:26 334

原创 函数模板和类模板

class Vector//vector不是具体的类,而是一个可以生成任何类型的类的模具public:, _size(0){}private:T* _pData;那么该如何在模板中实现在类中声明,在类外定义,其实也和非模板实现在类中声明,在类外定义差不多,class Vector//vector不是具体的类,而是一个可以生成任何类型的类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();

2024-08-01 14:33:52 999

原创 字符串相加(leetcode算法题)

public://定义end1和end2分别指向字符串num1和num2的末尾//存放数字相加的结果int sum=0;//存放相加后转成的字符串//用于存放字符串转化为数字//只要有一个位数>=0循环就不能停止//对字符串num1进行转化成数字elseval1=0;//对字符串num2进行转化成数字elseval2=0;//对竖式的每一列式子进行相加//对相加得出得结果>=10进行处理if(sum>9)carry=1;sum-=10;else。

2024-07-23 11:19:32 466

原创 C++动态内存的管理

我们来看看new和malloc对于自定义类型开辟空间的不同之处。delete p2;return 0;我们来看看这个代码运行的结果咋出现了调用构造函数和析构函数呢?是谁调用的呢?我们把malloc和free的函数进行注释掉,如果还调用构造函数和析构函数,那么证明是new和delete调用的构造函数和析构函数。

2024-07-16 12:06:31 643

原创 友元函数和友元类

class Time// 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成员变量public:{}private:int _hour;class Datepublic:{}// 直接访问时间类私有的成员变量private:int _year;int _month;int _day;Time _t;

2024-07-15 11:23:18 366

空空如也

空空如也

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

TA关注的人

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