自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++——布隆过滤器

首先,布隆过滤器可以实现为一个模板类,因为插入布隆过滤器的元素不仅仅是字符串,也可以是其他类型的数据,只有调用者能够提供对应的哈希函数将该类型的数据转换成整型即可,但一般情况下布隆过滤器都是用来处理字符串的,所以这里可以将模板参数K的缺省类型设置为string。当一个数据映射到位图中时,布隆过滤器会用多个哈希函数将其映射到多个比特位,当判断一个数据是否在位图当中时,需要分别根据这些哈希函数计算出对应的比特位,如果这些比特位都被设置为1则判定为该数据存在,否则则判定为该数据不存在。

2024-06-25 17:49:28 985

原创 计算机网络——网络入门基础

比如在打电话的时候,站在工程师的角度实际这两个人并不是直接进行沟通的,而是甲的电话将甲说的话记录下来,经过一系列编码转码后,通过通信网络将信息从甲的电话传递到了乙的电话,然后信息在乙的电话中再经过对应的编码转码,最后乙才通过话筒听到了甲所说的话。层状结构的本质是软件工程上面的解耦,此时层与层之间只有接口的相互调用关系,此时我们就可以让研究不同领域的开发人员编写不同层的代码,最后再将各层的代码联调起来,由于每一层的代码都是对应领域的专业人员编写的,因此代码联调后整体的性能也是很高的。

2024-06-24 18:08:57 918

原创 MySQL数据库基础

数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。为了解决上述问题,于是专家们设计出了更利于管理数据的数据库。数据库按存储介质可以分为磁盘数据库和内存数据库,其中内存数据库又称为主存数据库(Main Memory Database)。磁盘数据库的数据主要存储在磁盘上,因此磁盘数据库在数据的持久化保存上有明显优势。但磁盘数据库为了提高数据的存储效率,也有自己对应的缓存机制,因此在某一个时刻之内,不一定所有数据都会被刷新到磁盘上。

2024-06-23 13:23:02 638

原创 C++——位图的介绍和使用

位图 (Bitmap) 是一种基于位操作的数据结构,用于表示一组元素的集合信息。它通常是一个仅包含0和1的数组,其中每个元素对应集合中的一个元素。位图中的每个位(或者可以理解为数组的元素)代表一个元素是否存在于集合中。当元素存在时,对应位的值为1;不存在时,对应位的值为0。位图常用于判断某个元素是否属于某个集合,或者对多个集合做交集、并集或差集等集合运算。

2024-06-22 14:34:20 640

原创 Linux——31个普通信号

在Linux操作系统中,信号是一种进程间通信的方式,用于通知进程发生了某种事件。Linux中的普通信号(standard signals)有31个,每个信号都有特定的用途。Ctrl+CCtrl+\abort()alarm()Ctrl+Z这些信号在编程和系统管理中有着重要的应用。通过使用信号,进程可以处理各种异常和特殊情况,实现更健壮和灵活的程序设计。

2024-06-22 14:10:02 980

原创 C++ —— unordered_set、unordered_map的介绍及使用

unordered_multimap容器与unordered_map容器的底层数据结构是一样的,都是哈希表,其次,它们所提供的成员函数的接口都是基本一致的,这里就不再列举了,这两种容器唯一的区别就是,unordered_multimap容器允许键值冗余,即unordered_multimap容器当中存储的键值对的key值是可以重复的。在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的3.key,unordered_set将相同哈希值的键值放在相同的桶中。

2024-06-19 16:32:58 3851

原创 Linux——进程间通信

管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的数据流称为一个“管道”。例如,统计我们当前使用云服务器上的登录用户个数。其中,who命令和wc命令都是两个程序,当它们运行起来后就变成了两个进程,who进程通过标准输出将数据打到“管道”当中,wc进程再通过标准输入从“管道”当中读取数据,至此便完成了数据的传输,进而完成数据的进一步加工处理。

2024-06-08 16:01:13 914

原创 C++——多态

多态的概念;多态的定义和实现;多态的构成条件,虚函数,虚函数的重写,虚函数重写的两个例外,C++11 override和final,重载、覆盖(重写)、隐藏(重定义)的对比;抽象类,概念,接口继承和实现继承;多态的原理,虚函数表,多态的原理,动态绑定和静态绑定

2024-06-05 17:42:26 1136

原创 C++——继承

继承的概念及定义,继承的概念,继承的定义,继承方式和继承访问限定符,继承基类成员访问方式的变化,,默认继承方式;基类与派生类赋值对象转换;继承中的作用域;派生类的默认成员函数;继承与静态成员;继承的方式;菱形虚拟继承

2024-06-03 21:38:29 968

原创 Linux——动态库和静态库

动静态库

2024-06-02 14:20:35 2415

原创 数据与结构——哈夫曼树

哈夫曼树和哈夫曼编码

2024-06-01 16:08:08 1593

原创 C++——IO流

C语言的输入和输出;流是什么;C++IO流,C++标准IO流;C++文件IO流,文件操作步骤,以二进制的形式操作文件,以文本的形式操作文件;stringstream的简单介绍

2024-05-31 16:37:13 1067

原创 Linux——基础IO

系统文件I/O,open,close,write,read,文件描述符fd;文件描述符的分配规则;重定向,重定向的原理,dup2,添加重定向功能到minishell;FILE,FILE当中的文件描述符,FILE当中的缓冲区

2024-05-30 20:11:41 888

原创 数据与结构——红黑树

我们这里直接实现KV模型的红黑树,为了方便后序的旋转操作,将红黑树的结点定义为三叉链结构,除此之外还新加入了一个成员变量,用于表示结点的颜色。// 三叉链// 存储的键值对// 结点的颜色Color _col;// 构造函数, _kv(kv){}枚举类型Color:定义了枚举类型来表示节点的颜色,红色为RED,黑色为BLACK。模板结构体RBTreeNode:定义了一个模板类,用于表示红黑树的节点。成员变量_left:指向左孩子节点。_right:指向右孩子节点。_parent。

2024-05-29 16:54:31 1179

原创 C++模板——非类型模板参数、模板的特化以及模板的分离编译

非类型模板参数;模板的特化,概念,函数模板特化;类模板特化,全特化,偏特化;模板的分离编译,什么是分离编译,模板的分离编译,解决方法;模板总结

2024-05-28 17:02:43 1069

原创 Linux——进程控制

子进程刚被创建时,与父进程共享代码和数据,但当子进程需要进行进程程序替换时,也就意味着子进程需要对其数据和代码进行写入操作,这时便需要将父子进程共享的代码和数据进行写时拷贝,此后父子进程的代码和数据也就分离了,因此子进程进行程序替换后不会影响父进程的代码和数据。因此,对于子进程来说,父进程是不需要被标识的;进程程序替换之后,该进程对应的PCB、进程地址空间以及页表等数据结构都没有发生改变,只是进程在物理内存当中的数据和代码发生了改变,所以并没有创建新的进程,而且进程程序替换前后该进程的pid并没有改变。

2024-05-27 17:01:11 1086

原创 C++模板——函数模板和类模板

函数模板的定义包括模板声明和模板函数体。模板声明使用关键字template,后跟一个尖括号()中的模板参数列表。模板参数列表中可以包含一个或多个类型参数,通常使用typename或class关键字来声明类型参数。返回类型 函数名(参数列表)//函数体示例T tmp = x;x = y;y = tmp;class 类模板名//类内成员声明类模板的定义和使用定义一个简单的类模板public:cout

2024-05-26 18:22:50 1400

原创 数据与结构--AVL树

AVL树的概念;AVL树的性质;AVL树结点的定义;AVL树的插入;AVL树的旋转;左单旋;右单旋;左右双旋;右左单旋;AVL树的验证;AVL树的查找;AVL树的修改;AVL树的删除

2024-05-25 15:12:53 1126

原创 Linux--进程概念

一个运行起来(加载到内存)的程序或者在内存中的程序担当分配系统资源(CPU时间,内存)的实体。只要写过代码的都知道,当你的代码进行编译链接后便会生成一个可执行程序,这个可执行程序本质上是一个文件,是放在磁盘上的。当我们双击这个可执行程序将其运行起来时,本质上是将这个程序加载到内存当中了,因为只有加载到内存后,CPU才能对其进行逐行的语句执行,而一旦将这个程序加载到内存后,我们就不应该将这个程序再叫做程序了,严格意义上将应该将其称之为进程。

2024-05-23 18:46:25 2438 4

原创 数据结构--二叉搜索树

二叉搜索树的概念;二叉树的实现;结点类;函数接口总览;实现二叉树;二叉搜索树的应用;K模型;KV模型;二叉搜索树的性能分析

2024-05-22 19:40:54 2349

原创 C++—— set、map、multiset、multimap的介绍及使用

关联式容器;树形结构与哈希结构;键值对;set;multiset;map;multimap

2024-05-21 20:49:42 1128

原创 Linux--认识冯 • 诺依曼体系结构和操作系统

冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

2024-05-18 17:23:20 1342

原创 Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

目录,Linux软件包管理器 - yum,Linux编辑器 - vim,Linux编译器 - gcc/g++

2024-05-17 20:29:54 1299

原创 C++--priority_queue的使用与模拟实现

 priority_queue的使用,priority_queue的介绍,priority_queue的定义方式,priority_queue各个接口的使用,priority_queue的模拟实现,堆的向上调整算法,堆的向下调整算法,priority_queue的模拟实现

2024-05-16 20:49:08 1017

原创 Shell的运行原理和Linux的权限

Shell的运行原理Linux的权限问题Linux权限管理

2024-05-13 19:09:03 1213

原创 数据与结构--堆

堆,堆的概念,堆的结构,堆的向下调整算法,堆的向上调整算法,堆的实现,初始化堆,判断堆是否为空,插入元素,删除元素,打印元素,销毁堆

2024-05-12 20:04:36 1354 2

原创 C/C++内存管理

C/C++内存分布;C语言中动态内存管理方式;C++中动态内存管理方式;operator new和operator delete函数;new和delete的实现原理;定位new和表达式(placement-new);malloc/free和new/delete的区别?;内存泄漏

2024-05-11 18:21:49 968 1

原创 数据与结构--二叉树

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成的一个具有层次关系的集合。树的特点:有一个特殊的结点,称为根结点,根结点没有前驱结点。除根结点外,其余结点被分成M(M>0)互不相交的集合T1,T2…Tm,其中每一个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每棵子树的根结点有且仅有一个前驱,可以有0个或多个后继。因此,树是递归定义的。节点的度:一个节点含有的子树的个数称为该节点的度;如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点;

2024-05-10 18:42:33 1092

原创 C++类与对象(三)

若一个类没有默认构造函数,那么我们在实例化该类对象时就需要传参对其进行初始化,所以实例化没有默认构造函数的类对象时必须使用初始化列表对其进行初始化。在这里再声明一下,默认构造函数是指不用传参就可以调用的构造函数:1.我们不写,编译器自动生成的构造函数。2.无参的构造函数。3.全缺省的构造函数。

2024-05-09 20:58:51 664

原创 C++--类与对象(二)

赋值运算符重载允许程序员重新定义对象之间的赋值操作。这样,可以通过赋值运算符将一个对象的值赋给另一个对象,从而实现自定义类型对象之间的赋值行为。

2024-05-08 20:59:14 1058 1

原创 C++类和对象(一)

/类体:由成员变量和成员函数组成//注意后面的分号其中class为定义类的关键字,className为类的名字,{}中为类的主体,注意定义结束时加上后面的分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数。1、声明和定义全部放在类体中。需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、声明放在头文件(.h)中,定义放在源文件(.cpp)中。注意:一般情况下,更期望采用第二种方式。类的访问限定符及类的封装类的访问限定符。

2024-05-07 21:28:12 1059

原创 C++--stack和queue

使用默认的适配器定义栈。使用特定的适配器定义栈。使用默认的适配器定义队列。使用特定的适配器定义队列。

2024-05-06 18:06:46 1040

原创 Linux常用指令汇总

在Windows当中会自动显示当前目录当中的所有子目录与文件,我们若想在当中查看当前目录当中的所有子目录与文件就需要用到ls指令。ls 选项 目录或文件对于目录,该命令列出该目录下的所有子目录与文件;对于文件,该命令列出文件名以及其他信息。1. -a 列出目录下的所有文件,包括以 . 开头的隐含文件。在Linux当中,每个目录下默认存在两个隐含文件 . 和 . . ( . 代表当前目录 . . 代表上级目录)。2. -d 将目录像文件一样显示,而不是显示其下的文件。

2024-05-05 15:56:37 839

原创 C++--list

/构造int类型的空容器//构造含有10个2的int类型容器//拷贝构造int类型的lt2容器的复制品//构造string对象某段区间的复制品//构造数组某段区间的复制品。

2024-04-20 18:59:01 426

原创 C++--vector

vector 可以通过多种方式定义,包括默认构造函数、指定大小并初始化、使用其他 vector 初始化等。// 默认构造函数,创建一个空的 vector// 创建一个大小为 5 的 vector,元素默认初始化为 0// 创建一个大小为 5 的 vector,所有元素初始化为 10// 使用初始化列表初始化 vector// 使用另一个 vector 初始化新 vector。

2024-04-16 21:36:27 753

原创 C++ ——string类

/ 1. 使用默认构造函数定义空字符串// 2. 使用字符串字面量初始化字符串// 3. 使用拷贝构造函数初始化字符串// 4. 使用赋值运算符赋值给字符串// 5. 使用重复字符初始化字符串// 6. 使用子字符串初始化字符串// 从 "abcdef" 的第三个字符开始,取两个字符// 打印所有字符串return 0;使用不同的方式定义了多个字符串对象。打印每个字符串对象的值。

2024-04-12 21:15:04 711 1

原创 数据与结构—队列

队列(Queue)是一种常见的数据结构,用于存储按照先进先出(First In First Out,FIFO)原则管理的元素集合。在队列中,新元素被添加到队列的末尾(称为入队),而元素被移除时则从队列的前端移除(称为出队)。这意味着最先入队的元素会最先出队,因此队列类似于排队等候的行为,如在超市排队结账,先来的人先被服务。除了这两个基本操作之外,队列还可能支持其他操作,如检查队列是否为空、获取队列中的元素数量等。

2024-03-26 18:56:54 611

原创 数据与结构--栈

但需检测栈是否为空,若为空,则不能进行出栈操作。首先,我们需要用结构体创建一个栈,这个结构体需要包括栈的基本内容(栈,栈顶,栈的容量)。进行入栈操作前,我们需要检测栈的当前状态,若已满,则需要先对其进行增容,然后才能进行入栈操作。因为栈的内存空间是动态开辟出来的,当我们使用完后必须释放其内存空间,避免内存泄漏。检测栈是否为空,即判断栈顶的位置是否是0即可。若栈顶是0,则栈为空。因为top记录的是栈顶,使用top的值便代表栈中有效元素的个数。获取栈顶元素,即获取栈的最上方的元素。若栈为空,则不能获取。

2024-03-26 16:54:19 357

原创 数据与结构--顺序表

顺序表(Sequence List)是一种常见的数据结构,用于存储线性表中的元素。线性表是一种数据结构,其中的元素排列成一条直线,具有前驱和后继的关系。顺序表通过一段连续的存储单元来存储线性表中的元素,并且元素之间的顺序与其在存储空间中的位置一致。在顺序表中,元素的存储通常采用数组来实现。数组是一种连续存储的数据结构,通过索引来访问元素。在顺序表中,每个元素在数组中占据一个位置,并且可以通过元素的下标(索引)来直接访问该元素。

2024-03-24 09:22:44 422 1

原创 数据与结构--时间复杂度和空间复杂度

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。注意:函数运行时所需要的栈空间存储参数、局部变量、一些寄存器信息等在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。我们举例帮助理解一下//此处创建了一个标志性变量flag。

2024-03-23 11:05:45 1001 1

空空如也

空空如也

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

TA关注的人

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