自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目篇----C++ AI大模型接入SDK->API获取与测试

这里以deepseek为例,获取一下API,进入官网,点API开放平台之后记得充钱,10r就够~点击API keys,之后创建就Ok,之后将创建的API在本地保存一份~我已经创建好了之后点击左侧的接口文档,对话->对话不全,进入如下界面。

2026-02-22 23:57:04 276

原创 项目篇----使用基数树对性能进行优化

在高并发内存池中,:需要找到合适的 Span 来切分小对象:需要根据地址找到对应的 Span 来归还而使用或map:需要加锁保护,大量线程竞争导致性能瓶颈:插入/删除时可能触发 rehash(哈希表)或旋转(红黑树),影响并发读:哈希计算或树遍历有一定开销:数组索引,无需哈希计算:写操作不改变树结构(预先分配节点),读操作无需加锁:写时提前开好空间,读时直接访问那说了半天,基数树是什么呢?

2026-02-16 17:46:04 362

原创 项目篇----仿tcmalloc的内存池设计(内存回收)

我们基本的框架已经搭建完了,但是有一个问题现在,就是假设现在的thread cache里面归还回来了大量的内存,导致_freelist的桶里面都挂的很长很满了,这样下去我们的系统早晚崩溃,所以我们还要设计一个函数来解决这个问题:整体思路不难,这里直接放代码了这里为了方便管理,我们可以在freelist类中加上_size的私有成员,用于实时记录size大小,之后记得把所有的pop或者push都维护一下这个_size,记得维护这个后加进来的变量!!!,这里代码就先不给出了,很简单!

2026-02-13 23:35:58 816 2

原创 算法篇----BFS系列

题目会给你唯一的起始位置和终止位置,中间可能途径若干点,让你求最短路径解题大法:一般会用队列和哈希表来完成,其中哈希表用于检测某一点是否入过队列利用队列,先将起始位置加入队列,同时加入哈希表中,随后将这个点取出,并将其下一步途径点加入队列和哈希表,之后再同时将刚刚第二层加入的结点取出,并加入其下一步途径点,如此循环,直到队列为空,返回值即为所求!

2026-02-09 22:51:30 642

原创 项目篇----仿tcmalloc的内存池设计(page cache)

我们先梳理一下,当我们要申请x byte内存时,会先在thread cache中进行申请,如果申请到了就返回,申请不到就去central cache中申请,在central cache中,不会说你要x byte就给你x byte,它会通过慢启动以及一系列方法多给你开辟一些回去,剩下的就存到central cache中,那问题来了,如果central cache中也没有内存了咋办呢?此时就要向page cache申请,那么我们先来了解一下page cache的结构~

2026-02-05 23:34:23 503

原创 项目篇----仿tcmalloc的内存池设计(central cache篇)

central cache也是一个哈希桶结构,他的哈希桶的映射关系跟thread cache是一样的。不同的是他的每个哈希桶位置挂是SpanList链表结构,不过每个映射桶下面的span中的大内存块被按映射关系切成了一个个小内存块对象挂在span的自由链表中。span是什么呢?,它是连接"页级内存"和"对象级内存"的桥梁。

2026-02-03 23:55:25 732 1

原创 项目篇----仿tcmalloc内存池设计(thread cache)

TCMalloc主要由三个逻辑层次组成:Thread Cache (线程级) → Central Cache (中心级) → Page Cache (页级/堆级),如下图所示其中,Thread Cache主要用于小于256KB的内存的分配,线程从这里申请内存不需要加锁,每个线程独享一个cache,这也就是这个并发线程池高效的地方。当Thread Cache空间不够时,会向Central Cache进行申请。

2026-02-02 21:37:25 764

原创 项目篇-----内存池(一)

我们知道,我们程序中的变量函数等等都是占用内存的,那么如果每次在使用的时候都去向CPU内存去申请就很麻烦,为此,我们可以造一个“池子”,先提前在里面申请足够大的内存,这样当我们需要内存时,就去这个池子里面申请就好了,如果不明白可以看下面这个例子,就好比一对小情侣在恋爱的时候难免要约会吃饭,吃喝玩乐,这些都是要有金钱花费的,一种方法就是两个人AA,另一种方法就是开一个恋爱基金账户,提起在里面存好足够的钱,之后有共同花销时就直接去这个恋爱基金库里面拿钱,这里的恋爱基金库就对应的计算机领域的内存池!!!

2026-01-30 00:45:50 331

原创 算法篇----递归回溯

核心要点:构造一个函数来实现题目要实现的功能,不要去想这个函数怎么完成这个功能,就无条件相信它一定可以,之后写出递归出口,让函数自己调用自己,在做题时,不要格外关注这个递归函数的细节展开图(展开会很乱,容易把自己搞晕),无条件相信就好,,具体步骤就是,找到相同的重复的子问题,设计函数头,随后只关注一个子问题是怎样解决的,根据此编写函数体,最后注意一下递归出口即可!!例题:反转链表题目要求:参考代码:代码原理就是结合技术要点进行理解!!

2026-01-27 16:42:48 659 5

原创 Linux网络之----Reactor代码

多线程epoll模型通常用于处理大量并发连接的网络服务器。它结合了epoll的高效I/O事件通知机制和多线程的并发处理能力。模型中通常包含一个主线程(Master)和多个工作线程(Slave)。

2026-01-26 21:58:09 620

原创 Linux网络之----多路转接

我们之前理解的IO就是标准输入标准输出,例如我们调用read或者recv函数时,文件缓冲区要有数据才能进行读写,那么我们可不可以说,IO=等+拷贝!!!这里等是指的是等什么?那么我们如何进行高效IO呢?就是要在单位时间内,可以拷贝更多数据!减少等待的比重!2.五种IO模型为了引出五种IO模型,这里给出钓鱼的例子进行引出:首先张三是一个新手,鱼漂不动,他就不动,一直在等待鱼上钩。

2025-11-17 19:29:16 851 1

原创 Linux网络之----数据链路层

MAC地址用来识别数据链路层中相连的节点;长度为 48位6个字节一般用16进制数字加上冒号的形式来表示例如: 08:00:27:03:fb:19) ,其在网卡出厂时就确定了,不能修改. mac地址通常是唯一的。

2025-11-11 19:40:20 935

原创 Linux系统之----IP

当MF位为0且片偏移量不为0时,说明这个分片是原始数据报的中间分片或最后一个分片,但不是第一个分片。如果MF位为1,说明该报文是分片的一部分(可能是中间分片或第一个分片)。如果MF位为0且片偏移量不为0,说明该报文是分片的一部分(中间分片或最后一个分片)。2)三个问题问题一:有的分片,有的IP报文根本就没有分片?如何挑出来分片的报文??答:可以通过检查IP报文的“标志”字段来识别分片。标志字段中的“更多分片”(MF)位用于指示是否有更多的分片。如果MF位为1,则表示该分片之后还有更多的分片;

2025-11-05 11:39:47 913

原创 Linux系统之----UDP、TCP详解

TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

2025-11-02 20:15:48 1347

原创 Linux网络之----序列化和反序列化

JSONCPP是一个用于处理 JSON 数据的 C++ 库。它提供了方便的 API,用于解析、生成和操作 JSON 数据。它提供了将 JSON 数据序列化为字符串以及从字符串反序列化为 C++ 数据结构的功能。Jsoncpp 是开源的,广泛用于各种需要处理 JSON 数据的 C++ 项目中。进程组是操作系统中用于管理多个相关进程的一种机制。它是由一个或多个进程组成的集合。在操作系统中,进程是程序执行的实例,而进程组则是将这些进程按照一定的逻辑关系组织起来,方便操作系统进行统一的管理和调度。

2025-10-20 13:38:38 652 3

原创 Linux网络之----TCP网络编程

这个跟UDP是一样的,这里就介绍一下三个参数传什么参数吧第三个依旧传0。

2025-10-16 20:55:01 1160

原创 Linux网络之----网络编程

简单的回显服务器和客户端。

2025-10-12 21:28:53 750

原创 Linux网络之----网络基础

计算机网络的发展始于20世纪50年代,当时计算机独立运行,数据共享困难。1958年,美国国防部高级研究计划局(ARPA)成立,推动计算机技术发展。1961年,利克利德提出“星际计算机网络”概念,为网络理论奠定基础。1969年,阿帕网(ARPANET)诞生,采用分组交换技术,实现计算机间通信,标志着计算机网络的诞生。20世纪70年代至80年代,计算机网络进入发展阶段。1973年,计算机网络实现国际连接。1974年,TCP/IP协议提出,成为网络通信的核心协议。

2025-10-12 14:19:42 797

原创 Linux系统之----线程池

死锁是计算机科学中一个常见的问题,特别是在并发编程和操作系统中。当两个或多个进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干预,它们都将无法向前推进,此时称系统处于死锁状态。

2025-09-29 12:16:05 738 1

原创 Linux系统之----POSIX信号量

信号量是一个非负整数,用于控制对共享资源的访问。它的值表示可用资源的数量。:将信号量的值减1。如果信号量的值小于0,则进程,等待信号量的值变为非负。:将信号量的值加1。如果信号量的值大于0,则一个等待该信号量的进程。

2025-09-26 14:55:42 1134

原创 Linux系统之----生产者消费者模型代码练习

本文代码讲依据上节博客所述内容,编写程序,实现任务的封装,基于生产者消费者模型,以及互斥锁、线程等概念进行并发编程!

2025-09-21 16:50:11 406

原创 Linux系统之----线程互斥与同步

临界资源是指在多线程环境中,多个线程可能会同时访问的共享资源。这些资源可以是内存中的数据、文件、数据库连接等。

2025-09-20 21:22:55 1153

原创 linux系统之----线程

计算密集型应用是指那些需要大量计算资源,CPU使用率较高的应用程序。

2025-09-17 15:11:01 1049

原创 Linux系统之----信号中断(下)

软中断是程序运行过程中,通过执行特定的指令(如INT指令)来触发中断处理程序的过程。它是一种在软件层面模拟硬件中断的方式,主要用于实现操作系统中的系统调用、异常处理等功能。CPL(Current Privilege Level,当前特权级别)是x86架构CPU中用来标识当前执行代码的特权级别的一个字段,位于CS(Code Segment)寄存器中。Ring 0(内核态):最高特权级别,操作系统内核代码运行在这个级别。在这个级别,代码可以访问所有的硬件资源和执行所有的指令。Ring 3(用户态)

2025-09-12 21:09:40 714

原创 Linux系统之----信号中断(上)

当一个进程由于某种错误(如段错误、总线错误等)而异常终止时,操作系统可能会生成一个核心转储文件(core dump)。这个文件包含了进程终止时的内存映像,包括程序计数器、寄存器、进程的内存段等信息。

2025-09-11 13:40:30 966

原创 Linux系统之----信号

在生活中有很多信号,例如红绿灯,闹钟,鸣笛声等等。。。这些信号的作用就是的!这些信号,都是异步产生的,即。说人话就是:你永远不知道和谁先来到。那么为什么我们接收到信号就要知道该做什么呢?比如看到红灯就不能继续过马路了,闹铃响铃了,就不能睡觉了,原因就是我们都被“教育”过,知道这些信号代表的什么,那也就是说,我们是通过来记住这些信号的!同理,在计算机内部,也有信号的存在,在计算机中,。

2025-09-10 19:01:43 1036

原创 Linux系统之----客户端服务器设计(共享内存)

我们还是分为三个文件,shm.hpp,client.cpp,和server.cpp。

2025-09-01 20:51:20 297

原创 linux系统之----共享内存

共享内存(Shared Memory)是操作系统提供的一种的进程间通信(IPC)机制。它允许多个进程,无需通过内核中转数据,从而避免了数据拷贝,速度极快。

2025-08-31 20:09:40 1201

原创 Linux系统(项目)之----进程池

注:本节内容中的知识在写一篇博客中会做讲解,这里需要先了解熟悉一下进程池是一种用于管理和调度进程的机制。它预先创建了一组进程,这些进程处于等待状态,当有任务需要执行时,可以从进程池中取出一个进程来处理任务。在多任务处理的场景下,进程池可以有效地提高系统的性能和资源利用率。比如在一些服务器程序中,当有客户端请求到达时,服务器可以利用进程池中的进程来处理请求。如果没有进程池,每次有请求都要创建新的进程,这会带来较大的开销。而进程池中的进程已经创建好了,只需要分配任务给它们即可。

2025-08-31 18:49:53 610

原创 Linux系统之----命名管道模拟实现客户端、服务器

此处的all不可以省略,如果省略了你之后在make时只会编译server.cpp文件,client.cpp不会编译,不信可以试一下~讲的专业一点就是,在这个Makefile中,all是一个PHONY目标,它依赖于server和client两个目标。这意味着当你运行make命令时,如果没有指定其他目标,make将默认执行all目标,从而编译server.cpp和client.cpp文件。

2025-08-28 12:40:21 527

原创 Linux系统之----管道

这是最常见的管道类型。它主要用于具有亲缘关系的进程之间(如父子进程)的通信。匿名管道的文件描述符是通过系统调用在内存中创建的,它没有名字,不能通过名字来访问,只能在创建它的进程及其子进程中使用。例如,在命令行中使用管道符号“|”连接命令时,就使用了匿名管道。例如命令ls -l命令的输出通过匿名管道传递给grep "txt"命令作为输入。命名管道也称为 FIFO(First In First Out,先进先出)(可以理解为队列)。它与匿名管道的主要区别在于命名管道有名字,可以通过文件系统访问。

2025-08-26 12:26:05 975 1

原创 Linux系统之ELF文件

平坦模式是一种内存寻址方式,其中整个内存被视作一个单一的、连续的地址空间。这意味着所有的内存地址都直接通过一个统一的地址总线访问,没有分页或分段的概念。在这种模式下,内存地址的计算和访问非常简单,因为所有内存地址都是直接可访问的。我们查看一下汇编代码: objdump -d myexe,往下翻可以看到如下内容:这里我要总结出几个结论:1)我的程序,在链接静态库和.o文件,连接在做地址重定位!2).o/.obj 叫做可重定位目标文件。

2025-08-13 21:52:19 1004

原创 算法篇----分治(归并排序)

1)归并排序通过递归将数组不断划分为更小的部分,直到每个部分只有一个元素,然后逐步合并 这些有序的部分,最终得到一个完全有序的数组。2)归并排序的关键步骤是合并两个有序数组,这需要额外的空间(临时数组tmp)来存储合并结 果。

2025-08-13 18:42:40 542

原创 算法篇----分治(快排)

所谓的分治,实际上就是利用排序算法将一个数组排列成按照特定规律的顺序的样子。

2025-08-09 22:39:01 1260 1

原创 算法篇----模拟

模拟算法题,就是照葫芦画瓢,特点就是思路比较简单,但是比较考察代码能力,写之前一定要先在草纸上过一遍流程。

2025-08-09 15:42:42 640

原创 Linux系统之----库(一)动静态库的生成及使用

库本质上是一个包含函数、类、数据结构等代码的集合,这些代码被组织在一起,用于解决特定的问题或提供通用的功能。库可以是独立的文件(如.a.so.dll等),也可以是代码模块的一部分。

2025-08-08 17:56:48 1152 1

原创 Qt-----初识

定义:Qt是一个跨平台的应用程序和用户界面框架,主要用于开发具有图形用户界面的应用程序,同时也支持非GUI程序的开发。编程语言:主要使用C++,但也提供了对Python(PyQt)、JavaScript(Qt for JavaScript)等语言的支持。诞生时间:1991年,由Qt Company(原Trolltech)开发。用途:主要用于开发桌面应用程序,也可以用于嵌入式系统、移动设备、游戏开发等领域。

2025-08-01 22:33:59 1119 2

原创 算法篇----位运算

1.基础位运算<< 左移>> 右移~ 取反& 与(有0为0)| 或(有1为1)^ 异或(相同为0,相异为1)(无进位相加)2.给一个数n,确定它的二进制表示中的第x位是0还是1说明:最右边是第0位,从右到左以此类推!解决方法:利用&的性质(n>>x)&13.将一个数n的二进制表示的第x位修改为1解决方法:利用|的性质n |= (1<<x) 即n=n|(1<<x)

2025-08-01 21:51:02 673

原创 算法篇----前缀和

前缀和就是快速求出数组中某一个连续区间的和。

2025-07-29 16:34:07 1183

原创 Linux系统之----磁盘硬件

磁盘的物理结构可以概括为以下几个主要部分:1. 主轴(马达):主轴是硬盘的核心组件之一,它通过电机驱动磁盘片高速旋转,常见的转速有5400RPM、7200RPM、10000RPM和15000RPM等。主轴电机用于旋转盘片,使其以高速旋转。通常,机械硬盘的转速为5400转/分钟、7200转/分钟或更高。2. 磁盘片(相当于纸):磁盘片是存储数据的物理载体,通常由铝、玻璃或陶瓷等材料制成,表面涂有一层磁性材料。磁盘片的正反两面都可存储数据,一个磁盘(如一个1T的机械硬盘)由多个盘片叠加而成。

2025-05-25 17:41:46 709 5

空空如也

空空如也

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

TA关注的人

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