自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】简单的网络计算器的实现(自定义协议,序列化,反序列化)

我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端`//编码:给序列化后的字符串加上字符长度与\n//目的:截取字符串“x op y”放入content中,并把与此字符串//相关的数据从总报文package中移除//len_str:len的字符串形式//// earse 移除报文 package.erase(0, total_len);

2024-02-18 17:45:33 1164 46

原创 【VSCODE】vscode远程连接错误(waiting for server log...)远程主机可能不符合glibc和libstdc++ VSCode服务器的先决条件

网上的方法我都试了一遍,内存也没满好好的,都不能用最后选择把VScode装回1.85版本,瞬间就能用了。

2024-02-03 13:23:08 1578 18

原创 【Linux】线程池的简易实现(懒汉模式)

线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。线程池的应用场景:需要大量的线程来完成任务,且完成任务的时间比较短。WEB服务器完成网页请求这样的任务,使用线程池技 术是非常合适的。

2024-01-31 21:39:54 1070 41

原创 【数据结构】LRU缓存的简单模拟实现(leetcode力扣146LRU缓存)

LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时, 就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。LRU Cache 的替换原则就是将最近最少使用的内容替换掉。

2023-12-25 20:15:36 2107 24

原创 【数据结构】最短路径算法实现(Dijkstra(迪克斯特拉),FloydWarshall(弗洛伊德) )

最短路径问题:从在带权有向图G中的某一顶点出发,找出一条通往另一顶点的最短路径,最短也就是沿路径各边的权值总和达到最小。单源最短路径问题:给定一个图G = ( V , E ) G=(V,E)G=(V,E),求源结点s ∈ V s∈Vs∈V到图中每个结点v ∈ V v∈Vv∈V的最短路径。

2023-12-23 20:21:14 2937 23

原创 【数据结构】无向图的最小生成树(Prime,Kruskal算法)

连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图强连通图:在有向图中,若在每一对顶点vi和vj之间都存在一条从vi到vj的路径,也存在一条从vj到vi的路径,则称此图是强连通图生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点和n-1条边连通图中的每一棵生成树从其中删去任何一条边,生成树就不在连通;反之,在其中引入任何一条新边,都会形成一条回路。

2023-12-23 10:21:03 899 2

原创 【数据结构】图的创建(邻接矩阵,邻接表)以及深度广度遍历(BFS,DFS)

图是由顶点集合及顶点间的关系组成的一种数据结构:G = (V, E),其中:顶点集合V = {x|x属于某个数据对象集}是有穷非空集合;E = {(x,y)|x,y属于V}或者E = {|x,y属于V && Path(x, y)}是顶点间关系的有穷集合,也叫做边的集合。完全图:在有n个顶点的无向图中,若有n * (n-1)/2条边,即任意两个顶点之间有且仅有一条边,则称此图为无向完全图,比如上图G1;在n个顶点的有向图中,若有n * (n-1)条边,即任意两个。

2023-12-21 20:40:37 1349 10

原创 【数据结构】并查集的简单实现,合并,查找(C++)

需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。

2023-12-20 20:40:09 3818 40

原创 【Linux】cp问题,生产者消费者问题代码实现

生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。

2023-12-17 20:55:13 1247 36

原创 【Linux】锁的简单封装以及原理解析

1.申请锁和释放锁本身就被设计成了原子性操作2.当线程访问临界区的过程,对于其他线程是原子的(对于其他线程来讲,一个线程要么没有锁,要么释放锁)。3.在临界区中,线程可以被切换,(在线程被切出去的时候,是持有锁被切走的,我不在期间,你们没有锁,照样不能访问临界资源!!!!4.线程独立的资源:线程的栈和线程的硬件上下文。

2023-12-13 21:09:33 1240 39

原创 【Linux】记录错误信息日志的实现

我们这个设计的日志可以自定以输出的方向,可以向显示器打印错误信息,也可以向指定目录写入,或者是分类写入。

2023-11-26 22:16:18 1712 46

原创 【Linux】匿名管道与命名管道,进程池的简易实现

功能:创建一无名管道原型参数:fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端返回值:成功返回0,失败返回错误代码。

2023-11-25 12:51:02 803 48

原创 【Linux】动静态库的使用与软链接的结合

库本质就是把一堆(.o)后缀的文件也就是目标文件整合在一起。

2023-11-19 17:21:43 887 46

原创 【Linux】文件系统中inode与软硬链接以及读写权限问题

文件=文件内容+文件属性Linux中文件内容与属性是分开存储的。文件内容:在数据块中存着文件属性:在inode中存着Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子超级块(Super Block):存放文件系统本身的结构信息。

2023-11-16 15:37:23 1741 53

原创 【Linux】语言层面缓冲区的刷新问题以及简易模拟实现

我们接下来要谈论的是我们语言层面的缓冲区(C,C++之类的),不是我们操作系统内核里面自带的缓冲区,我们每次在打开一个文件的时候,以C语言为例子,C语言会为我们所打开的这个文件分配一块缓冲区,用来缓存我们读写的数据`,这个缓冲区会被放在我们创建的FILE的结构体里面,里面存放着缓冲区的字段和维护信息。

2023-11-11 20:59:59 1480 47

原创 【Linux】文件重定向以及一切皆文件

Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2, 0,1,2对应的物理设备一般是:键盘,显示器,显示器而现在知道,文件描述符就是从0开始的小整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进程和文件关联起来。每个进程都有一个指针*files,

2023-11-09 22:00:28 844 13

原创 【Linux】Shell命令行的简易实现(C语言实现)内键命令,普通命令

在获取命令之前我们需要先建立一个命令行。

2023-11-06 22:05:29 1046 41

原创 【C++】类型转换(dynamic_cast,const_cast,static_cast,reinterpret_cast)

🌏博客主页:🔖系列专栏: C++😍期待与大家一起进步!

2023-10-21 21:35:09 464 35

原创 【C++】特殊类的设计(只在堆、栈创建对象,单例对象)

🌏博客主页:🔖系列专栏: C++😍期待与大家一起进步!

2023-10-19 22:19:50 528 20

原创 【C++11】智能指针的使用以及模拟实现(shared_ptr,unique_ptr,auto_ptr,weak_ptr)

我们下面所说的智能指针都是基于这种思想设计出来的。

2023-10-18 08:53:22 330 29

原创 【C++11】function包装器,bind函数模板使用

function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。上面func可能是什么呢?那么func可能是函数名?函数指针?函数对象(仿函数对象)?也有可能是lamber表达式对象?所以这些都是可调用的类型!如此丰富的类型,可能会导致模板的效率低下!为什么呢?通过上面的程序验证,我们会发现useF函数模板实例化了三份。而我们的function包装器能够很好的解决这个问题。

2023-10-11 09:38:30 257 34

原创 【C++】可变参数模板使用,在emplace中应用

🌏博客主页:🔖系列专栏: C++😍期待与大家一起进步!

2023-10-03 17:20:52 200 19

原创 【C++11】完美转发的使用以及万能引用

🌏博客主页:🔖系列专栏: C++😍期待与大家一起进步!

2023-09-29 20:55:43 321 10

原创 【C++11】左值引用右值引用,移动构造的使用

左值引用只能引用左值,不能引用右值。但是const左值引用既可引用左值,也可引用右值int a = 10;// ra为a的别名// 编译失败,因为10是右值// const左值引用既可引用左值,也可引用右值。

2023-09-27 21:59:59 162 6

原创 【C++】布隆过滤器简单操纵模拟以及常见题目

布隆过滤器特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。布隆过滤器一般用来操作的对象类型为string,因为string在位图中不好被标记布隆过滤器的思想是将一个元素用多个哈希函数映射到一个位图中,因此被映射到的位置的比特位一定为1。所以可以按照以下方式进行查找:分别计算每个哈希值对应的比特位置存储的是否为零,只要有一个为零,代表该元素一定不在哈希表中,否则可能在哈希表中。

2023-09-24 22:01:59 200 14

原创 【C++】bitset位图的简单模拟实现及常见面试题

快速查找某个数据是否在一个集合中排序 + 去重求两个集合的交集、并集等操作系统中磁盘块标记数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。

2023-09-23 21:27:48 300 5

原创 【C++】unordered_map与unorder_set的封装(哈希桶)

我们开辟一个指针数组,指针数组中存放我们结点的类型,我们算出元素的下标hashi后,头插在数组的对应位置,数组的位置可以链接一串链表,所以也避免了哈希冲突。

2023-09-21 20:57:06 302 10

原创 【C++】map,set简单操作的封装实现(利用红黑树)

因为set插入进去后,set的值不可以被修改,为了实现这一操作我们可以在迭代器上下手//typename是告诉编译器这里后面跟的是类型不是对象,以免编译器报错//既然不可修改,那我就都用const类型的迭代器在map中,我们是键不可修改,而其所对应的值可被修改,所以不能用set的那种操作,可以在传模板参数的时候动手脚,传pair的时候直接把K改为const类型。

2023-09-17 15:34:15 157 13

原创 【C++】红黑树插入操作实现以及验证红黑树是否正确

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点(每条路径上的黑色结点数量相同)每个叶子结点都是黑色的(此处的叶子结点指的是空结点)最短路径:全部都是黑节点的路径。

2023-09-15 19:15:06 368 10

原创 【C++】AVL树的插入操作实现以及验证是否正确(带平衡因子)

一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:1.它的左右子树都是AVL树2.左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在Olog2nO(log_2 n)Olog2​n,搜索时间复杂度O(log2nlog_2 nlog2​n//我们这里用键值的数据类型来举例//(父结点)int _bf;//(平衡因子大小)//构造函数。

2023-09-12 21:45:26 155 5

原创 【Linux】fork函数的基础知识

fork初识:1.fork有两个返回值。2.父子进程代码共享,数据各开辟空间,私有一份(写实拷贝)。我们在运行test的时候,发现多了一个进程,这个进程就是由fork分支出来的子进程,进程之间是相互独立的。

2023-09-01 21:22:40 1064 2

原创 【Linux】实现进度条的两种方式(C语言实现)

回车(\r):让光标回到当前行的最左端换行(\n):让光标回到下一行的最左端,同时刷新缓冲区。

2023-08-22 17:40:13 232 1

原创 Linux的基本权限(文件,目录)

Linux下一切皆文件,指令的本质就是可执行文件,直接安装到了系统的某种路径下1.目录的可执行权限是表示你可否在目录下执行命令。2.如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)3.而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2023-08-17 19:28:32 6810 8

原创 【C++】二叉搜索树的模拟实现(K,KV树)递归与非递归方式

K模型:K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。K _key;{}

2023-08-10 15:55:23 220 2

原创 【C++】多态的底层原理(虚函数表)

通过观察测试我们发现b对象是8bytes,除了_b成员,还多一个__vfptr放在对象的前面(注意有些平台可能会放到对象的最后面,这个跟平台有关),对象中的这个指针我们叫做虚函数表指针(v代表virtual,f代表function)。一个含有虚函数的类中都至少都有一个虚函数表指针,因为虚函数的地址要被放到虚函数表中,虚函数表也简称虚表。

2023-08-08 15:49:45 382 4

原创 【C++】多态(多态的构成条件,虚函数重写,override,final,覆盖隐藏对比)

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个栗子:多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

2023-08-08 11:18:09 269 1

原创 【C++】继承的基本特性(定义,赋值转换,友元,静态成员,虚拟继承,默认成员函数,作用域)

它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。Person是父类,也称作基类。Student是子类,也称作派生类public :if(this!= & p) {派生类(子类)public :Student(const char * name = "张三" , int id = 0) //派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。

2023-08-04 17:49:38 284 7

原创 【C++】模板进阶(模板的特化,非类型模板参数,模板的分离编译)

运行之后会报错:(链接错误)将声明和定义放到一个文件 “xxx.hpp” 里面或者xxx.h其实也是可以的。推荐使用这种。模板定义的位置显式实例化。这种方法不实用,不推荐使用。

2023-07-31 23:38:17 330 2

原创 【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

我们要写出一个通用的反向迭代器模拟而且在保证代码简介不繁琐的的情况下,一定程度上使用我们自己模拟的已经封装好的iterator迭代器可以简化许多步骤,首先我们要知道正向迭代器与反向迭代器在位置上的关系。

2023-07-30 12:19:02 962 3

原创 【C++】优先级队列的基本概念以及其模拟实现

优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作:empty():检测容器是否为空size():返回容器中有效元素个数front():返回容器中第一个元素的引用。

2023-07-29 17:23:41 236 1

空空如也

空空如也

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

TA关注的人

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