
学习分享
文章平均质量分 75
Rookiep
这个作者很懒,什么都没留下…
展开
-
高性能网络模式-Reactor
Reactor 模式主要由 **Reactor部分**和**处理事件部分**这两个核⼼部分组成,它俩负责的事情如下: - Reactor部分负责监听和分发事件,事件类型包含连接事件、读写事件; - 处理事件部分负责处理事件,如 read -> 业务逻辑 -> send原创 2023-08-24 11:21:48 · 1246 阅读 · 4 评论 -
Nagle算法思想+伪代码
💡注意,如果接收⽅不能满⾜「不通告⼩窗⼝给发送⽅」,那么即使开了 Nagle 算法,也⽆法避免糊涂窗⼝综合症,因为如果对端 ACK 回复很快的话(达到 Nagle 算法的条件⼆),Nagle 算法就不会拼接太多的数据包,这种情况下依然会有⼩数据包的传输,⽹络总体的利⽤率依然很低。只要上⾯两个条件都不满⾜,发送⽅⼀直在囤积数据,直到满⾜上⾯的发送条件。:要等到窗⼝⼤⼩ >= MSS 并且 数据⼤⼩ >= MSS;使⽤ Nagle 算法,该算法的思路是。,只有满⾜下⾯两个条件中的。原创 2023-08-14 11:28:15 · 335 阅读 · 0 评论 -
redis的Key的过期策略是如何实现的?
一个redis中可能同时存在很多很多key,这些key可能有很大一部分都有过期时间,此时,redis服务器咋知道哪些key已经过期要被删除,哪些key还没有过期?如果直接遍历所有的key,显然是行不通的,效率极低!原创 2023-08-13 12:06:02 · 680 阅读 · 3 评论 -
死锁的发生与避免
死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。原创 2023-07-02 08:00:00 · 677 阅读 · 1 评论 -
I/O多路复用之epoll
每一个epoll对象都有一个独立的eventpoll结构体,用于存放通过epoll_ctl方法向epoll对象中添加进来的事件。这个回调方法在内核中叫ep_poll_callback,它会将发生的事件添加到rdlist双链表中。如果rdlist不为空,则把发生的事件复制到用户态,同时将事件数量返回给用户. 这个操作的时间复杂度。红黑树的根节点,这颗树中存储着所有添加到epoll中的需要监控的事件。(红黑树的插入时间效率是log(n),其中n为树的高度)。在epoll中,对于每一个事件,都会建立一个。原创 2023-06-28 08:00:00 · 888 阅读 · 4 评论 -
Centos7离线安装sar工具
1 执行unzip sysstat-master.zip命令解压。 2. 执行cd sysstat-master命令,进入到sysstat-master文件夹。 3. 执行./configure命令生成Makefile。 4. 执行make命令开始编译。 5. 执行make install命令进行安装。至此安装结束。可以使用sar --help命令确认是否安装成功。原创 2023-06-25 20:24:30 · 1488 阅读 · 1 评论 -
IO多路复用之poll
我们从struct polled结构体可以看出,该结构体包含三个成员,原创 2023-06-25 14:00:09 · 479 阅读 · 3 评论 -
I/O多路转接之select
系统提供select函数来实现多路复用输入/输出模型: - select系统调用是用来让我们的程序监视多个文件描述符的状态变化的; - 程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变;原创 2023-06-21 15:35:46 · 419 阅读 · 4 评论 -
【IO模型】阻塞,非阻塞,多路复用
非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为。这对CPU来说是较大的浪费, 一般只有特定场景下才使用。原创 2023-06-20 20:01:28 · 245 阅读 · 0 评论 -
经典同步问题之哲学家就餐
五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替的进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到左右两只筷子时才能进餐,进餐完毕,放下筷子继续思考。上述程序中互斥量的作用在于,只要有一个哲学家进入了临界区,也就是准备拿叉子时,其他哲学家是互斥不可访问临界区的,这又当这个哲学家吃完了退出临界区后,其他哲学家才可以拿叉子进餐。上面的程序,在P操作时,根据哲学家的编号不同,拿起左右两边叉子的顺序不同。原创 2023-06-18 19:25:54 · 1924 阅读 · 4 评论 -
内存池技术
为了学习池化技术以及后续自行实现一个仿tcmalloc的线程池,我们先浅浅的学习一下池化的概念,以及简单的实现一个定长的内存池。原创 2023-06-04 17:19:33 · 2073 阅读 · 6 评论 -
【设计模式】生产者消费者模型
带你轻松理解生产者消费者模型!生产者消费者模型可以说是同步与互斥最典型的应用场景了!文末附有模型简单实现的代码,若有疑问可私信一起讨论。原创 2023-04-13 14:00:20 · 659 阅读 · 3 评论 -
【Linux】线程同步之POSIX信号量
带你轻松理解生产者消费者模型!生产者消费者模型可以说是同步与互斥最典型的应用场景了!文末附有模型简单实现的代码,若有疑问可私信一起讨论。原创 2023-04-10 16:38:27 · 544 阅读 · 3 评论 -
【Linux】线程同步之条件变量
饥饿问题:一个执行流,长时间得不到某种资源。原创 2023-04-06 16:32:58 · 459 阅读 · 2 评论 -
【Linux】线程终止方式
⚠️注意:joinable和分离是冲突的,一个线程不能既是joinable又是分离的。返回值:无返回值,跟进程一样,线程结束的时候无法返回到它的调用者(自身)value_ptr:value_ptr不要指向一个局部变量。返回值:成功返回0;功能:取消一个执行中的线程。thread:线程ID。原创 2023-04-04 09:00:00 · 2219 阅读 · 1 评论 -
Linux的mysql 数据库及开发包安装
直接按照下列步骤在命令行输入即可。:在相应的配置文件中添加对应命令。原创 2023-03-15 13:22:10 · 1141 阅读 · 8 评论 -
GCC/G++升级高版本
命令3是为了将source /opt/rh/devtoolset-7/enable追加到~/.bashrc配置文件中,为了自启动生效。⚠️ 若直接在命令行输入命令3,那么新版本只在本会话内有效,重启后又是老版本。查看当前版本,CenTOS-7默认4.8.5版本。(这是一个配置文件,里面的内容每次启动会自动执行)//安装新版本gcc。原创 2023-03-13 09:57:40 · 2849 阅读 · 8 评论 -
Linux多线程互斥量与原理剖析
如果在判断之前,线程A被切换走了,此时线程A带着寄存器上下文数据(1)一起被切换走,那么此时来的线程因申请不到锁而被挂起等待。凡是在寄存器中的数据,全部都是线程的上下文数据,在线程被切换时,会随着线程一起离开。返回值:成功返回0,失败返回错误号。mutex:要初始化的互斥量。mutex:内存中的一个变量。(3)互斥量加锁和解锁。原创 2022-12-29 10:15:20 · 915 阅读 · 15 评论 -
Linux中如何理解线程?线程ID到底是什么?
朋友们好,这里简要介绍了进程和线程的区别以及对LINUX中线程ID的理解,本人目前理解尚浅,若文中有表述不当的地方还望理解并指正,谢谢大家!上述中**独立栈结构和线程各自拥有一组寄存器**是理解线程的关键。进程的多个线程共享同一地址空间,因此代码段、数据段都是共享的,如果定义一个函数(在代码段),那么在各个线程中都可以调用,如果定义一个全局变量,那么在各个线程中都可以访问到。除此之外,各线程还共享以下进程资源和环境:pthread_t到底是什么类型?取决于实现。对于目前Linux实现的NPTL实现而言,原创 2022-12-27 11:54:17 · 886 阅读 · 18 评论 -
【浅学Linux】信号产生的4中方式
上面所说的信号的产生,最终都是要操作系统来执行,因为OS是进程的管理者。信号的处理是在合适的时候处理的!(下篇博客详细讲)信号如果不是被立即处理的,需要记录在进程控制块中。原创 2022-12-21 17:11:04 · 1410 阅读 · 10 评论 -
理解Linux32位机器下虚拟地址到物理地址的转化
在32位机器下,IO的基本单位是块(块:4kb),在程序编译成可执行程序时也划分好了以4kb为单位加载到内存中,32位机器下物理内存4GB,4GB以4KB为单位划分,一共2的20次方个,每个单位4kb称为页框,也即一个page原创 2022-11-19 00:53:42 · 1018 阅读 · 16 评论 -
【浅学Linux】动态库与静态库的封装与使用
朋友们好,这里简单介绍一下LINUX学习中关于动态库与静态库的理解,以及站在封装和使用的角度去介绍是如何封装的?如何使用的?我们先来理解几个问题:1️⃣:库里面需不需要main函数?不需要!2️⃣:什么是链接?就是把所有的.o文件链接形成一个可执行程序。3️⃣:将我的所有.O文件给别人,别人可以使用吗?可以!4️⃣:你在使用库的时候,需要用到什么?库文件和头文件。gcc 或者g++ 只认识系统库,不认识其他第三方库,所以我们想要使用对应的静态库的话,怎么做呢?方式一:库的安装! 也就是将对应原创 2022-11-13 11:20:21 · 1450 阅读 · 15 评论 -
【浅学Linux】进程控制之进程程序替换
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支)子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行原创 2022-10-16 08:00:00 · 751 阅读 · 14 评论 -
【C++11智能指针】定制删除器解决智能指针管理不是new出的资源!!!
默认情况下,智能指针使用delete释放其管理的资源,有时候,可能要修改默认使用delete释放资源的行为。但如果不是new出来的资源,如何通过智能指针管理呢?原创 2022-10-06 21:26:55 · 540 阅读 · 6 评论 -
【海量数据处理】布隆过滤器BloomFilter
布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你“**某样东西一定不存在或者可能存在**”,它是用**多个哈希函数**,将**一个数据映射到位图结构**中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。原创 2022-10-06 11:39:38 · 987 阅读 · 16 评论 -
【C++11新增知识点】右值引用、移动语义、完美转发
左值是一个表*数据的表达式(如对象名,或者正在解引用的指针),我们可以对它取地址并赋值,左值可以出现在赋值符号的左边,右值不可以出现在赋值符号的左边。特例:经const修饰的左值不可以对它赋值,但可以取地址。左值引用就是给左值的引用,给左值取别名!字面常量,表达式返回值,函数的返回值(注意这个两个返回值都是指传值返回中产生的那个临时对象是右值),右值不能取地址。右值引用就是对右值的引用, 给右值取别名。//以下几个常见右值 //10;//x + y;原创 2022-10-03 11:36:29 · 981 阅读 · 26 评论 -
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
K-means算法是典型的基于距离(欧式距离、曼哈顿距离)的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。有以下6个点,初始随机选取两个点作为两个簇的簇中心(这里假设选取的是A3,A4),求最后的簇所属情况。2️⃣:将红色对应的点和绿色对应的每个点分别求X,Y平均值,最为新的簇心。原创 2022-09-12 10:38:52 · 17594 阅读 · 1 评论 -
【浅显易懂KMP算法】带着问题思考,带你彻底搞懂KMP算法中难以理解的点!
1:为什么主串不回溯,模式串回溯到对应Next数组值下标处? 2:为什么会有Next[ 0 ] = -1 这个初始化? 3:Next数组最接地气的理解,如何求Next[j + 1]呢?原创 2022-08-19 15:42:55 · 712 阅读 · 21 评论 -
【堆的应用】细说Top-K问题
堆顶元素一定是堆中的最小元素(小顶堆为例),若后面有大于堆顶的数据,理所当然与堆顶元素交换,交换之后再调整堆。循环往复堆中的元素就是前K个最大的元素。将剩余的 n-k 个元素依次与堆顶元素比较完之后,堆中剩余的k个元素就是所求的前k个最小或者最大元素。3️⃣:用剩余的N-K个元素依次与堆顶元素比较,不满足就替换堆顶元素,并相应向下调整。剩余n-k个元素依次比较完以后,堆中剩余的K个元素就是所求的前K个最大的元素。2️⃣:对数组的前K个元素采用向下调整算法建小堆。⭐️⭐️⭐️Top-K问题,也就是求。...原创 2022-08-14 16:32:56 · 431 阅读 · 16 评论 -
【平衡二叉搜索树】细撕AVL树的插入操作
朋友们好,这篇博客我们学习非常重要的一个数据结构——AVL树,针对AVL树的插入进行了详细的分析,并整理出来一篇博客供我们一起学习和后续的复习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!...原创 2022-08-08 17:57:52 · 500 阅读 · 30 评论 -
【C++进阶知识继承】继承的赋值转换,菱形虚拟继承
朋友们好,这篇博客我们进入C++的进阶学习,最近我学习了C++中的继承相关知识,继承是面向对象编程的三大特征之一,十分重要。所以特意整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!......原创 2022-08-02 09:48:14 · 413 阅读 · 23 评论 -
【C++优先级队列priority_queue基础】基本使用,模拟实现,堆
朋友们好,这篇博客我们继续C++的初阶学习,最近我学习了C++中的STL库中的优先级队列(priority_queue)容器适配器,对于优先级队列,我们不仅要会使用常用的函数接口,我们还有明白这些接口在其底层是如何实现的。所以特意整理出来一篇博客供我们学习和,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!......原创 2022-07-30 16:21:05 · 1022 阅读 · 14 评论 -
【C++List容器底层剖析】完成了List容器的一些常用函数接口
*朋友们好,这篇博客我们继续C++的初阶学习,最近我学习了C++中的STL库中的list容器,对于常用容器,我们不仅要会使用其常用的函数接口,我们还有明白这些接口在其底层是如何实现的。所以特意整理出来一篇博客供我们学习和,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!...原创 2022-07-27 10:20:46 · 455 阅读 · 17 评论 -
【C++Vector容器底层剖析】完成了Vector容器的一些常用函数接口
朋友们好,这篇博客我们继续C++的初阶学习,最近我学习了C++中的STL库中的vector容器,对于常用容器,我们不仅要会使用其常用的函数接口,我们还有明白这些接口在其底层是如何实现的。所以特意整理出来一篇博客供我们学习和,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!...原创 2022-07-20 15:09:09 · 405 阅读 · 21 评论 -
【C++模板基础知识】模板的特化
**朋友们好,这篇播客我们继续C++的初阶学习,最近我学习了C++中的模板相关知识,模板是泛型编程的基础,十分重要。所以特意整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!**.........原创 2022-07-19 10:47:40 · 629 阅读 · 18 评论 -
【C++中Vector迭代器失效】迭代器失效真的太难搞啦!
朋友们好,这篇播客我们继续C++的初阶学习,最近我学习了C++中的迭代器失效问题,迭代器失效问题是非常非常重要的,所以特意整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装。比如:vector的迭代器就是原生态指针T*。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失原创 2022-07-12 15:43:06 · 1910 阅读 · 23 评论 -
【C++String类成员函数辨析】resize(),size(),capacity(),reserve()函数的解析与对比
朋友们好,这篇播客我们继续C++的初阶学习,现在对我们对C++的string类中的几个内存空间函数做出总结对比,整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步!这几个函数相对来说还是很好理解,我们就不对其再做具体介绍,看一段代码即懂!⚠️代码示例:⭐️:结果输出代码解释:size和length函数的功能都是计算字符串大小,capacity函数计算为字符串分配的内存空间。尽管我们调用clear()函数清空了字符串内容,但是其容量依然不变原创 2022-06-20 17:06:16 · 3137 阅读 · 37 评论 -
【C++类和对象Lesson3】运算符重载、const、初始化列表
文章目录一:运算符重载1.1:相等运算符重载1.2:赋值运算符重载1.3:小于运算符重载三级目录一:运算符重载C++为了增强代码的可读性引入了运算符的重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型以及参数列表,其返回值类型与参数列表与普通函数类似。函数名字为:关键字operator后面接需要重载的运算符符号函数原型:返回值类型 operator操作符(参数列表)1.1:相等运算符重载对内置类型我们想要判断两个变量是否相等我们可以直接使用相等运算符,但是如果是一个自定义类型呢?那么这原创 2022-06-01 08:23:24 · 523 阅读 · 25 评论 -
【C++类和对象Lesson2】构造函数与析构函数
这里写目录标题一:对象的初始化和清理1.1:构造函数1.2:构造函数的特性一:对象的初始化和清理生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全。C++中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。1.1:构造函数对象的初始化和清理也是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用后果是未知。c++利用了构造函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。对象的初始化和清理工作原创 2022-05-25 09:59:58 · 758 阅读 · 37 评论 -
【QT信号和槽】学了C++不学QT就太亏了
文章目录一:信号和槽机制1.1:信号和槽1.2:自定义信号和槽1.2.1:student.h1.2.1:teacher.h1.2.3:widget.h1.3:链接自定义信号和槽二:lambda表达式三:connect与lambda表达式联动一:信号和槽机制信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect原创 2022-05-23 18:55:10 · 3385 阅读 · 23 评论