自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 探秘高并发内存池:万字全解析,性能飙升之道

到这里这个高并发内存池的项目就结束了,我们要学习的是他的思想,而不是造轮子,只有多学习这些高手的思想,慢慢的经过时间的锤炼,我们也能够成为一个高手,写出来的代码也会也来越优雅的同时还具备相应的功能。PS:基数树属于拓展内容,有兴趣的可以了解一下是什么。基数树_百度百科。

2025-03-05 14:13:38 764 2

原创 Git分支之分支合并冲突、分支管理策略、分支策略

本章依然是讲解分支的内容,主要讲解分支里面存在的一些细节。分⽀在实际中有什么⽤呢?假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50% 的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全 部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险。现在有了分⽀,就不⽤怕了。你创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上 正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀ 上,这样,既安全,⼜不影响别⼈⼯作。

2025-02-27 21:22:27 970

原创 代码分支:从 “萌芽” 到 “修剪” 全记录

本章开始就学习git的分支管理了。这是git的最重要的内容,希望一起好好学习。本章开始介绍 Git 的杀⼿级功能之⼀(注意是之⼀,也就是后⾯还有之⼆,之三……):分⽀。分⽀就 是科幻电影⾥⾯的平⾏宇宙,当你正在电脑前努⼒学习 C++ 的时候,另⼀个你正在另⼀个平⾏宇宙⾥ 努⼒学习 JAVA。如果两个平⾏宇宙互不⼲扰,那对现在的你也没啥影响。不过,在某个时间点,两个平⾏宇宙合并了,结果,你既学会了 C++ ⼜学会了 JAVA!在版本回退⾥。

2025-02-26 13:22:23 720

原创 项目整体框架:从随笔中 “破土而出”

由于本项目是模拟学习tcmalloc的优秀的思想以及巧妙的结构,所以本项目只会把源项目的精华部分拿出来学习,请大家耐心看完本章重点:本篇文章着重讲解本项目的大致框架结构,以及每一层小结构的内部的部分细节,这篇文章不会有很多的代码演示,但至关重要!!!线程缓存结构实际上是一个哈希桶,数组的下标代表这个桶中存放的小块内存的字节数是多少,桶中存放小块儿内存,就是定长池中的自由链表。申请内存的步骤:申请内存时,比如申请8字节大小内存,会先去8字节对应的哈希桶中查看有。

2025-02-25 14:14:45 564

原创 项目随记(二):定长内存池,技术征途的开胃佳肴

定长内存池指的就是:事先去开辟一大块内存,然后每次当用户需要内存时,就去这一大块内存里面切割内存,这样就不用频繁的去系统调用了。例:这样拿的好处就是不用每次要空间的时候,都去调用malloc函数,去申请但是坏处就是他只支持每次取一个固定长度的内存。定长池的实现是在为后面的并发内存池打基础,请同学们耐心掌握这篇文章的所有内容,后面会有大用处!

2025-02-21 11:16:34 817 1

原创 高并发内存池项目介绍

在经历一年多左右的时间学习,今天终于开始搞一个真正的项目了。本篇文章主要给大家介绍什么是高并发内存池项目,以及为什么要做这个项目,最后讲做这个项目需要什么知识储备2.什么是高并发内存池项目?首先,它是一个全球性大厂google(谷歌)的开源项目,项目名字叫tcmalloc,全称是,即线程缓存的malloc那它具体是什么呢?它又有什么用呢?我们知道C语言在堆上开辟空间和释放使用的是malloc和free函数。

2025-02-20 20:01:48 584

原创 git中修改文件、版本回退、撤销修改

本章着重介绍两个例子:加深对git工作区和暂存区、版本库以及.git的理解。

2025-02-19 11:55:32 1024

原创 九大排序之桶排序

桶排序(Bucket Sort)又称箱排序,是一种比较常用的排序算法。其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序(可以是递归使用桶排序,也可以是使用其他排序算法将每个桶分别排好序),最后一次将每个桶中排好序的数输出。

2025-02-15 20:20:14 547

原创 认识与安装git

在引入git的概念之前,先举个例子:在工作或者学习中,我们总是遇到这样的情况:我们在编写各种文档时,为了防止文档丢失,更改错误,失误后能恢复到原来的版本,不得不复制出一个副本,比如:“报告--v1”“报告--v2”“报告---v3”“报告--确定版”“报告---最终版”..........每个版本都有各自的内容,但是最终只有一份报告需要被我们使用。

2025-02-15 15:20:19 942

原创 [Linux基础(一)] Linux的基本指令(上)

本章的Linux基本指令学习是学习Linux的基础,多熟悉熟悉不同指令的用法,多自己手动打一打为以后学习Linux打好基础!本篇没有全部介绍完相关的指令,后续还会接着介绍。Linux操作系统的诞生与其对现代信息世界的影响_简述linux对信息技术发展的影响。-优快云博客。

2025-01-09 16:47:53 651

原创 [c++进阶(五)] c++的IO流

c++系列到这就差不多结束了。有问题的话可以后台私信我,也可以在评论区留言。

2024-12-30 17:40:55 677

原创 [c++进阶(四)] c++类型转换

用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用但它不能用于两个不相关的类型进行转换,主要使用在两个相关的类型的转换int main()return 0;所以d被转换成了12操作符通常为操作数的位模式提供较低层次的重新解释,主要用于将一种类型转换为另外一种不相关的类型。主要针对的是C语言的强制类型转换。const_cast常用于删除变量的const属性,方便赋值。会发生报错,因为a具有常量属性*p = 3;

2024-12-26 20:18:05 838

原创 [c++进阶(三)]单例模式及特殊类的设计

特殊类的设计和单例模式就讲到这了,只单说概念其实大家对于单例模式的强大性还是理解的不够深刻,只有在结合项目一起使用时,那么理解就会快速增加了。拓展:单例模式只是设计模式中的一种,还有工厂模式,适配器模式等等,有想了解这些设计模式的可以自行查阅资料。设计模式 - 概览 | C++ 全栈知识体系 (stibel.icu)

2024-12-22 15:17:50 1031

原创 [c++进阶(二)] 智能指针详细剖析--RAII思想

首先在学习智能指针的使用和原理之前我们要明白什么是智能指针。智能指针不是指针,是一个管理指针的类用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象生命周期结束时,自动调用析构函数释放资源。那了解了什么是智能指针之后,为什么要有智能指针呢?目的是为了防止资源被泄露。throw invalid_argument("除0错误");// 1、如果p1这里new 抛异常会如何?

2024-12-21 20:05:05 1153

原创 [c++进阶(一)]异常

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。如下图所示:基类可以相当于是一个框架,派生类是具体的异常。然后去具体实现异常的内容,然后抛异常只需要抛派生类,捕捉异常只需要捕捉基类即可。//基类//异常public:, _id(id){}protected://错误信息int _id;//错误码。

2024-12-21 16:33:53 742

原创 [c++11(二)]Lambda表达式和Function包装器及bind函数

Lambda表达式着重解决的是在某种场景下使用仿函数困难的问题,而function着重解决的是函数指针的问题,它能够将其简单化。由于lambda表达式是具有常属性的,所以在通常的情况下是无法被修改的,因此在C++14中引入了。简单理解就是:类比函数传参,你在这里传的只是x的副本,并不是真正的x,所以外部的x并没有被修改。可以用于创建适配器,将函数、成员函数、甚至是函数对象绑定到特定的参数,从而生成新的可调用对象。在操作系统中,不同的线程要执行不同的函数的话,那么就可以用这种方式 来进行封装并且调用函数。

2024-12-20 22:00:49 1031

原创 [c++11(一)] 右值引用以及列表初始化

初始化列表和右值引用以及移动语义到这就全部阐述完毕了。

2024-12-13 15:33:07 808

原创 [高阶数据结构八] B+树和索引原理深度解析

对于索引这一块并没有阐述的非常细致,因为我们这毕竟是在阐述数据结构,并不牵涉数据库,如果对于索引,事物这一块感兴趣,可以后续自行查找资料学习MYSQL。高阶数据结构写到这就全部讲解完毕了,希望对大家能有所帮助。

2024-12-05 11:17:28 1121

原创 [高阶数据结构七]跳表的深度剖析

跳表就讲解到这里啦,后续有疑问的小伙伴欢迎后台TT我。

2024-12-04 11:05:01 794 1

原创 [高阶数据结构六]最短路径算法

这些算法都比较抽象,博主花了很大很大的功夫才理解他们,如果真要完全手撕,那么我想博主起码最少需要几个小时,因此就算不会手撕也没有关系,只需要知道思路即可。在面试中,能讲出思路也是一个加分项呢。

2024-12-02 21:33:19 1185

原创 [高阶数据结构五] 图的遍历和最小生成树

图的遍历就是,从任意一个顶点开始,可以通过某种方式走过所有的顶点,这就叫做图的遍历。那么图可以用什么方法来进行遍历呢?之前二叉树的遍历可以通过递归的办法和层序遍历的方法来获取结果,请思考那么图是否也可以使用这种方法呢?---答案是可以的。这就是DFS和BFS到这里图的遍历和图的最小生成树算法就学完了,如果有不懂的伙伴,欢迎后台TT我哦。

2024-11-25 19:06:22 820

原创 [高阶数据结构四] 初始图论

这里两种图的存储结构的模拟实现都进行了讲解,但是后面真正使用的更多的是在邻接矩阵的基础上,所以一定要非常熟练邻接矩阵的相关实现。且邻接矩阵也是为了后续的图的遍历、最小生成树和最短路径的算法打下基础。一定要好好掌握。

2024-11-24 22:10:30 950

原创 [高阶数据结构三] B-树详解

上述代码的重点是它的分裂逻辑和使用场景, 并且B树在实际生产中运行并不会很多多, 因为有更好的数据结构: B+树或是B*树来代替它. 但是学习后两者的前提是需要你知晓B树的性质, 所以学习要一步一步来,不能一步登天。

2024-11-24 19:05:55 1449

原创 [高阶数据结构二] LRU Cache详解

LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法那么什么又是Cache算法呢?他是干嘛的呢?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。

2024-11-22 17:30:12 741

原创 [高阶数据结构(一)]并查集详解

并查集相对来说是属于高阶数据结构里面比较简单的了,但是也是比较重要的一个部分。在求职过程中也会经常遇到并查集相关的考点,希望各位小伙伴能够好好学习,打下坚实的基础。

2024-11-20 18:00:12 710

原创 [c++高阶]哈希函数的介绍及哈希的相关应用

是存储没有特定顺序的唯一元素的容器,允许基于它们的值快速检索单个元素。在unordered_set中,元素的值同时也是唯一标识它的键。键是不可变的,因此,在容器中不能修改unordered_set中的元素,但是可以插入和删除它们。在内部,unordered_set中的元素没有按照任何特定的顺序排序,而是根据它们的散列值组织到bucket中,以便通过它们的值直接快速访问单个元素(平均时间复杂度为常数)。

2024-11-18 20:51:48 765

原创 [c++高阶]哈希的深度解析

在顺序表和二叉树中,如果你想找一个值,那么时间复杂度是O(N)和O(logN)。这是因为在搜索的过程中经过了很多次数的比较。可以不经过任何比较,一次直接从表中得到要搜索的元素,即查找的时间复杂度为 O(1)。如果构造一种存储结构,能通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一种映射的关系,那么在查找时通过该函数先找到映射值,然后通过映射值可以很快找到该元素。该方式即为哈希(散列)方法, 哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(散列表)。

2024-11-08 17:09:37 1046

原创 [c++高阶]红黑树的深度剖析

到这里红黑树和AVL树的插入的模拟实现都已经全部详解完毕了,至于删除的话,有兴趣的可以自行了解一下,因为删除是非常复杂的。我们学插入的模拟实现,只是为了了解他的底层实现的相关原理,并不是自己去造一个轮子。拓展阅读:​​​​​​​图解:红黑树删除篇(一文读懂) - 知乎 (zhihu.com)【数据结构】史上最好理解的红黑树讲解,让你彻底搞懂红黑树-优快云博客。

2024-11-06 19:23:38 725

原创 [c++高阶]map和set系列相关接口详解

[c++高阶]二叉搜索树深度剖析-优快云博客[c++高阶]AVL树的深度剖析&模拟实现-优快云博客本章重点:着重讲解map和set的相关接口函数以及使用方法在详细介绍map和set之前,先补充两个概念。区别如下:序列式容器的底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是 ,在数据检索时比序列式容器 效率更高。① 用来表示具有一 一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与ke

2024-11-01 11:55:03 1024

原创 [c++高阶]AVL树的深度剖析&模拟实现

AVL树一棵高度平衡的二叉树,那么如何通过代码的方式告知他自己是否平衡呢?我们可以定义一个平衡因子,每一个节点都有一个平衡因子,然后通过判断该节点的平衡因子来判断这棵树或者这棵子树是否平衡。同时,如果左子树比右子树高一层,那么根节点的平衡因子就是-1;如果右子树比左子树高一层,那么根节点的平衡因子就是1,如果左右子树一样高,那么根节点的平衡因子就是0。并且在定义之前答成一个约定:往左子树插入节点,那么根的平衡因子就--;往右子树插入节点,那么根的平衡因子就++。

2024-10-31 20:50:40 818

原创 [c++高阶]二叉搜索树深度剖析

如何定义一棵二叉树呢?//创建节点T val;//构造函数,val(key){}解释:二叉树由一个一个的节点组成,所以只需要定义出来了节点,再把不同的节点链接起来,那么就组成了一棵二叉树1.二叉搜索树在用中序遍历时,得到的值就是一个已经排好序的序列了。例:用中序遍历可得:1 3 4 6 7 8 10 13 142.二叉搜索树只支持增加,删除,查找,不支持修改。这是因为如果一旦改动了二叉搜索树里面的某一个值,那么这棵二叉搜索树就有可能不是二叉搜索树了,只是一棵普通的二叉树。

2024-10-30 15:23:21 655

原创 [c++高阶]多态深度剖析

实现多态需要借助虚表(虚函数表),而构成虚表又需要虚函数,即virtual修饰的函数,除此之外还需要使用虚表指针来进行函数定位、调用。在讲什么是多态之前,需要先带大家了解一下什么是虚函数关键字virtual加在成员函数前这个成员函数就是虚函数!派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的,返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。public:virtual void BuyTicket() { cout << "买票-全价" << endl;

2024-10-25 10:11:30 892

原创 九大排序之选择排序和归并排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

2024-10-16 22:08:51 783 1

原创 九大排序之交换排序

选最左值做key,右边先走:左右相遇时比key小选最右值做key,左边先走: 左右相遇时比key大为什么?没有相遇之前谁先走都无所谓,L找大R找小相遇时(key选最左),无非是 L<–R 或 L–>RL<-R (R找不到小),由于上次交换后L还未发生移动,此时的L< key (或L == key,其余所有数都比key要大);

2024-10-09 21:14:39 1179

原创 九大排序之插入排序

插入排序是把逐个插入到一个中,直到所有的记录插入完为止,得到一个新的有序序列。实际中我们玩时,就用了插入排序的思想。:主要着重的介绍两种插入排序的方式--直接插入排序和希尔排序。

2024-10-06 12:58:37 729

原创 [c++高阶] 继承深度剖析

继承(inheritance)机制是 ----面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有基类(父类)特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类(子类)。看官方解释:被继承对象:父类 / 基类 (base继承方:子类 / 派生类 (derived继承的本质就是 ------------复用代码--避免重复的代码写多次举一个例子:假设我现在要设计一个校园师生管理系统,那么肯定会设计很多角色类,比如学生、老师之类的。

2024-10-05 16:03:52 1248 1

原创 [c++高阶]模版进阶

程序设计中经常会用到一些程序实体:它们的实现和所完成的功能基本相同,不同的仅 仅是所涉及的数据类型不同。而模板正是一种专门处理不同数据类型的机制。模板------是泛型程序设计的基础(泛型generic type——通用类型之意)。函数、类以及类继承为程序的代码复用提供了基本手段。

2024-09-29 10:41:01 825

原创 [c++进阶(十)]priority_queue的模拟实现

优先级队列默认的情况下是大堆。优先级队列有三个函数模版,第一个是队列存储的类型,第二个是优先级队列底层使用的容器,第三个是仿函数,主要用来决定优先级队列里面谁的优先级更大,大的就排堆顶。总结一下到底什么是优先级队列呢?优先级队列简单来说就是一棵二叉树,但是这棵二叉树又被一定的条件约束,这个约束就是仿函数,也就是说二叉树的堆顶是由谁排。并且这个优先级队列可以理解成为尾进,头出的队列,即使要删除堆顶元素,也要把堆顶元素和尾部元素互换,再进行删除。

2024-09-27 11:27:08 711

原创 [c++进阶(九)] STL之deque深度剖析

本章将会着重的介绍deque底层到底是如何实现它能够双向进出的,并且双向进出的消耗率还特别低,并且讲解deque的优缺点。

2024-09-23 20:11:57 888

原创 [c++进阶(八)]STL容器适配器之queue

队列的模拟实现比较简单,因为他是直接使用别人封装好的东西,来充实自己。这样就是说不用自己去造一个轮子,而是把别人的造好轮子直接拿过来改改,然后改出自己想要的轮子,就好了。

2024-09-20 17:31:34 515

空空如也

空空如也

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

TA关注的人

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