自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构】八大排序

目录一、直接插入排序二、希尔排序三、选择排序四、堆排序五、冒泡排序六、快速排序七、归并排序八、计数排序稳定性结论稳定性:排序后相同元素之间的相对顺序是否保持不变。一、直接插入排序基本思想:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。时间复杂度:O(n^2)空间复杂度:O(1)稳定性:稳定每次指向后一个元素,临时保存后一个元素temp,将大于该temp的元素后移,在第一个小于等于temp的后一个位置

2024-12-16 16:53:48 1919 2

原创 高性能服务器模型之Reactor(单线程版本)

Reactor模型是一种事件驱动的设计模式,用于处理并发I/O操作。其核心思想是将I/O事件的监听和实际的I/O操作分离开来,由事件循环(Event Loop)负责监听I/O事件,当事件发生时,将事件分发给相应的事件处理器(Event Handler)进行处理。单线程版本如下图::这是事件循环的核心,负责监听和分发事件。它等待I/O事件(如连接请求、数据到达等)的发生,并将这些事件分发给相应的处理器。:Acceptor是Reactor模式中的一个特殊处理器,专门用于处理新的连接请求。

2024-11-22 14:53:11 1265 1

原创 【空间配置器】实现vector

在C++中,空间配置器(allocator)是一种模板类,用于封装内存分配和释放的细节。它提供了一种机制,允许容器类(如std::list等)与具体的内存分配策略解耦。C++标准库中的是最常见的空间配置器实现。类的成员函数:申请空间:allocate函数功能allocate函数用于在堆上分配一块足够大的内存,以容纳指定数量的对象。声明T*Tsize_typenhint参数nhinthint返回值deallocate函数功能deallocate。

2024-11-14 15:00:30 933

原创 C++基础语法实现写时复制CowString

CowString的重载[]函数只需要返回该代理类CharProxy该代理类重载输出流运算符和赋值运算符,代理类进行后续操作的进行。,对于进行单个字符串修改的操作,如:str[1]='H';,无法处理赋值时的写时复制操作,只能通过输出流运算符输出char。通过下标访问字符串元素的基本思路重载[]运算符,在函数中直接返回该位置指针的解引用,但此时返回值为。可以在CowString类内。

2024-11-13 22:47:14 331

原创 Linux进程间通信(IPC)的所有常见方法

消息队列中的消息必须以结构开始,该结构包含消息类型和消息体的长度。消息类型用于标识消息,而消息体则是实际要传递的数据。long mtype;/* 消息类型,必须是正数 *//* 消息数据 */

2024-11-09 14:18:30 1621

原创 【ElasticSearch】学习笔记

segment是一个具备完整搜索功能的最小单元。多个segment组成了一个单机文本检索库lucene。

2025-03-15 23:23:32 424

原创 【Kubernetes】污点和容忍

在 Kubernetes(k8s)中,污点(Taints)是定义在节点上的一种机制,用于拒绝某些 Pod 调度到该节点,除非这些 Pod 具有对应的容忍度(Tolerations)。污点可以用来控制 Pod 的调度行为,确保特定的 Pod 不会被分配到不合适的节点上。容忍(Tolerations)是与污点(Taints)相对应的一种机制。容忍允许 Pod 被调度到带有特定污点的节点上,或者在节点被添加了特定污点后,允许已经运行在该节点上的 Pod 继续运行。

2025-02-28 21:01:55 395

原创 【Kubernetes】Pod的调度

Pod 的调度是指在 Kubernetes 集群中,将 Pod 放置到合适的节点上,以便对应节点上的 Kubelet 能够运行这些 Pod。

2025-02-27 21:51:44 619

原创 【Kubernetes】pod详解

Kubernetes(k8s)中的是最小的可部署单元,用于封装一个或多个容器、存储资源、网络配置等。Pod 是 Kubernetes 调度的基本单位。Pod 可以包含一个或多个容器(通常是 Docker 容器)。这些容器共享网络命名空间、存储卷和其他资源。同一个 Pod 中的容器可以通过localhost直接通信。Pod 中的容器共享同一个 IP 地址和端口空间。每个 Pod 会被分配一个唯一的集群内 IP 地址。

2025-02-25 17:44:12 1035

原创 gorm框架

ORM 是 Object - Relational Mapping(对象关系映射)的缩写。数据库中的表结构和表中的数据,通过一定的规则转换成程序中的对象,这样可以让程序员使用面向对象的方式来操作数据库,而不需要直接编写复杂的 SQL 语句。

2025-02-04 15:27:13 192

原创 【Mysql】存储引擎

使用MVCC机制解决幻读:在第一次select * from 时生成一个快照,随后每一次select * from 不读当前最新表,读取快照。:共享锁/读锁 S,互斥锁/写锁 X。4、主键采用聚簇索引,其他索引采用非聚簇索引且叶子节点数据域为主键。InnoDB的回滚日志:undolog 实现MVCC的快照和事务。Mysql的数据存放地址:/var/lib/mysql。4、索引均采用非聚簇索引,经常需要回表。:普通锁,意向锁,next-key锁。:全局锁,表锁,行锁,间隙锁。1、不支持事务,并发只能用锁。

2025-01-10 16:13:25 370

原创 【操作系统】读者-写者问题

一个可以被多个进程访问的资源(如文件、数据库、内存等)。:只读取共享资源,不会修改数据。多个读者可以同时访问资源。:会修改共享资源。写者必须独占访问资源,即写者访问时不允许其他读者或写者访问。:可以同时访问,因为读取操作不会修改数据。:不能同时访问,因为写者会修改数据,可能导致读者读取到不一致的数据。:不能同时访问,因为多个写者同时修改数据会导致数据混乱。如何,以确保数据的一致性和完整性,同时最大限度地提高系统的并发性能。应用场景:数据库,文件系统,内存。

2025-01-05 15:26:46 476

原创 【操作系统】哲学家进餐问题

有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。当五个哲学家同时去取他左边的筷子,每人拿到一只筷子且不释放,即五个哲学家只得无限等待下去,引起死锁。的操作,这些操作要么全部执行成功,要么全部不执行,是一个整体,不可再分。若只拿到左筷子,没有拿到右筷子,则rollback,释放所以的左筷子锁。

2024-12-29 21:06:36 614

原创 【操作系统】同步

同步(Synchronization)涉及到在多线程或多进程环境中协调多个执行线程的执行顺序,以确保数据的一致性和完整性。同步的目的是防止多个线程同时访问同一资源(如内存、文件、数据库等)时发生的冲突和数据不一致问题。:一种同步机制,用于保护共享资源不被多个线程同时访问。当一个线程获取了互斥锁,其他线程必须等待直到互斥锁被释放。:一种计数器,用于控制对共享资源的访问数量。信号量可以用于控制同时访问特定资源的线程数量。

2024-12-29 20:12:02 745

原创 【操作系统】如何创建一个守护进程

守护进程(Daemon)是一类在后台运行的特殊进程,它们通常,而是执行特定的系统任务或等待系统或网络事件的发生。守护进程是操作系统中不可或缺的一部分,它们负责执行各种后台任务,如系统日志记录、文件系统管理、网络服务等。

2024-12-28 21:05:37 434

原创 【Golang】I/O操作

若有错误,请大佬指出!

2024-12-28 20:36:38 432

原创 【MySQL】索引

索引是一种数据结构,用于在数据库中,索引类似于书籍的目录,它允许用户到特定的数。

2024-12-21 11:33:23 525 1

原创 workflow--C++异步网络框架

【代码】workflow--C++异步网络框架。

2024-12-20 00:30:14 223

原创 【MySQL】事务

指的是一组的数据库操作序列,这些操作要么全部执行成功,要么全部不执行,是一个整体,不可再分。事务的执行结果必须使数据库从一个一致性状态转换到另一个一致性状态。提交/放弃:(停止事务状态)

2024-12-19 23:33:53 809

原创 Linux学习笔记思维导图(系统调用+网络编程)

基础命令与系统调用网络编程

2024-12-17 12:43:56 279

原创 geeCache 一致性hash

在分布式系统中的节点(例如缓存服务器、数据库节点等)通过哈希函数计算其在哈希环上的位置。当需要定位一个数据时,首先通过哈希函数计算数据的哈希值,然后沿着哈希环顺时针找到第一个大于等于该哈希值的节点位置,即为数据所在的节点。这个过程称为数据的路由或查找。当结点数量变化,每一个Key对应的结点都会发生变化,而变化后的结点没有存放该缓存,又需要通过访问数据库获得,造成缓存雪崩。一致性哈希算法是一种在分布式系统中广泛使用的哈希算法,它主要用于解决在动态变化的网络环境中数据的分发和节点的负载均衡问题。

2024-12-14 21:43:56 362

原创 GeeCache HTTP访问缓存

第一次访问Tom查询,缓存击穿,查询数据库得到信息。目标:实现可以从其他结点通过HTTP访问缓存。第二次访问Tom查询,缓存命中。

2024-12-13 15:53:10 140

原创 迭代法遍历二叉树(前中后序列)

根结点入栈,栈非空循环每次循环弹栈,若弹出元素非空则按照前中后序的顺序反向压栈,其中中根结点为了适配中序遍历,不能立马丢弃,按照顺序压栈,并且在其后压入空节点标记若结点为空,则弹栈两次,得到结点,插入结果切片中。

2024-12-13 00:26:04 173

原创 GeeCache-单体并发缓存

实现LRU中value接口的缓存类使用互斥锁封装LRU缓存类,实现并发访问 实现Group组,用名称对缓存分类 Getter为缓存击穿时调用的回调函数若缓存击穿则调用回调函数,并把读取到的值加载到缓存中

2024-12-13 00:00:31 385

原创 LRU缓存

LRU缓存(Least Recently Used Cache)是一种常用的缓存淘汰算法,它基于“最近最少使用”的原则来管理缓存中的数据对象。当缓存空间不足时,LRU缓存会淘汰最久未被使用的数据,以确保缓存中始终存储着最新和最频繁使用的数据。

2024-12-12 13:18:37 754

原创 【八股】HTTP

根域名服务器===》顶级域名服务器(如.com .net .cn)中间人得到服务器的公钥,自己生成一对公钥和私钥,将自己的公钥发送给客户端。顶级域名服务器==》权威域名服务器(如:baidu.com)# 将 example.com 指向本地回环地址。中间人捕获请求,将请求转发给服务器。本地DNS服务器(如:中国移动)使用QUIC协议解决TCP的缺点。权威域名服务器==》IP地址。

2024-12-09 23:16:58 575

原创 【数据结构】手搓链表

int _data;

2024-12-04 19:05:34 874

原创 【操作系统】CPU32位,64位,amd64,x86,x64的区别

AMD比Intel率先制造出了商用的兼容x86的64位CPU,并称之为AMD64。因此,amd64、x86_64和x64基本上是同一个东西,现在我们使用的Intel/AMD桌面级CPU基本上都是基于这个架构。:x86是指Intel开发的一种32位指令集架构,从早期的8086、286、386等CPU开始使用,一直沿用至今。:这是64位微处理器架构及其相应指令集的一种,也是Intel x86架构的延伸产品。x86_64有时简称为“x64”,是64位架构的表示。2、单次指令可操作的数据大小:64位。

2024-12-02 22:35:19 537

原创 【QT】音乐播放器demo

添加QPushButton并设置大小,ctrl+鼠标拖动复制相同的组件。

2024-12-02 21:48:10 507

原创 深入探究i++和++i的性能差异

等),C++编译器非常强大,尤其是现代的优化编译器,它们可以将。涉及先使用变量值再增加的操作,因此它可能需要一个额外的指令来。由于是原子操作,不涉及临时变量,因此在并发环境下通常更安全。在基本数据类型上的差异最小化,因此性能差异几乎不存在。会创建一个临时对象,导致性能下降,尤其是在大量迭代时。一共需要进行两次拷贝操作,相比前置++性能相对差一点。则直接递增并返回,不涉及临时对象创建,效率更高。可能会遇到问题,因为它的操作可以拆分成。,如果线程在执行这些操作时切换,

2024-12-02 21:29:20 339

原创 【设计模式】工厂模式

工厂模式是一种创建型设计模式,用于处理对象的创建,以便代码结构更加清晰。简单工厂模式是工厂模式的一种形式,它提供了一个集中的工厂类来创建不同类型的对象。例如一个电视的工厂模式:优点:缺点:ps:单一职责原则:一个类应该只有一个职责,并且该职责应该被封装在该类中。所有与该职责相关的工作都应该由这个类来完成,而与该职责无关的工作应该被分离出去,放到其他类中。开放闭合原则:软件实体应该是可扩展的,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。依赖导致原则:依赖倒置原则鼓励开发者通过接口或抽象类来

2024-12-02 20:56:05 1304

原创 【报错】C++未定义的引用

/tmp/ccNRQRgv.o:在函数‘main’中:test.cc:(.text+0x25):对‘Configuration::Configuration()’未定义的引用test.cc:(.text+0x34):对‘Configuration::~Configuration()’未定义的引用collect2: error: ld returned 1 exit status错误原因:test.cc中使用了Configuration类,但在g++编译的时候test.cc在前,Configuratio

2024-11-23 12:06:51 223

原创 高性能服务器模型之Reactor(线程池版本)

多线程Reactor模型:I/O事件和业务逻辑由不同的线程处理,事件循环线程负责监听I/O事件,并将事件分发给工作线程处理业务逻辑。所以只需加入ThreadPool线程池,组合到单线程Reactor中即可。Reactor:这是事件循环的核心,负责监听和分发事件。它等待I/O事件(如连接请求、数据到达等)的发生,并将这些事件分发给相应的处理器。Acceptor:Acceptor是Reactor模式中的一个特殊处理器,专门用于处理新的连接请求。

2024-11-22 15:19:11 1113

原创 【Linux】Namespace

Linux Namespace 是 Linux 内核提供的一种特性,用于对系统资源进行隔离。通过 Namespace,不同的进程组可以拥有独立的系统资源视图,即使它们在同一台物理机器上运行。这种隔离机制使得容器技术成为可能,因为它允许在单个宿主机上运行多个隔离的容器实例,每个容器都拥有自己的网络、进程空间、用户ID等资源,而不会相互干扰。

2024-11-19 14:47:37 763

原创 【golang学习笔记】新奇语法

var是variable的缩写,意为“变量”。它用于声明一个或多个变量。

2024-11-15 23:58:38 474

原创 【C++11新特性】range-based-for基于范围的for循环

由于该迭代器是T类的的指针,本身支持!=运算符和前置++运算符,所以只需实现begin和end即可。// 成员函数public:M_vector();private:// 重新分配空间// 成员变量private:T *_start;T *_finish;

2024-11-14 15:32:53 438

原创 C++单例模式实现

单例模式(Singleton Pattern)是软件设计模式中的一种,用于确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。

2024-11-12 14:48:32 1775 1

原创 std::string的底层实现(C++)

std::string在历史上的底层常见实现有一下几种方式:深拷贝。

2024-11-12 00:46:45 829

原创 QT之信号和槽

定义信号和槽:signals:只声明,不定义(MOC会生成实现定义);//函数内容。

2024-11-10 00:20:17 318

原创 QT之QString常用函数

参数分别为:QString对象,转换后的长度,进制,转换后多余指定长度部分的填充字符。isEmpty没构造或者构造了但是是空串都返回true;isNull没有构造为true,构造了为false;

2024-11-09 00:30:19 250

空空如也

空空如也

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

TA关注的人

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