自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2026-01-30 00:45:50 292

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

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

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

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

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

2026-01-26 21:58:09 596

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

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

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

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

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

2025-11-11 19:40:20 910

原创 Linux系统之----IP

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

2025-11-05 11:39:47 890

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

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

2025-11-02 20:15:48 1301

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

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

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

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

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

2025-10-16 20:55:01 1141

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

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

2025-10-12 21:28:53 736

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

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

2025-10-12 14:19:42 775

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

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

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

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

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

2025-09-26 14:55:42 1107

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

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

2025-09-21 16:50:11 392

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

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

2025-09-20 21:22:55 1132

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

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

2025-09-17 15:11:01 1037

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

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

2025-09-12 21:09:40 694

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

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

2025-09-11 13:40:30 953

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

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

2025-09-10 19:01:43 1028

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

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

2025-09-01 20:51:20 285

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

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

2025-08-31 20:09:40 1179

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

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

2025-08-31 18:49:53 593

原创 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 516

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

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

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

原创 Linux系统之ELF文件

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

2025-08-13 21:52:19 980

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

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

2025-08-13 18:42:40 504

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

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

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

原创 算法篇----模拟

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

2025-08-09 15:42:42 624

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

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

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

原创 Qt-----初识

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

2025-08-01 22:33:59 1056 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 650

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

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

2025-07-29 16:34:07 1147

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

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

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

原创 Linux系统之----文件及缓冲区

缓冲区本质上是一块内存区域,用于临时存放数据。它在数据从一个地方传输到另一个地方时起到暂时存储的作用。例如,在文件读写操作中,数据通常会先从磁盘读取到缓冲区,然后再从缓冲区拷贝到用户空间的进程内存中;或者从用户空间的进程内存拷贝到缓冲区,最后写入磁盘。

2025-05-21 21:08:13 1180 1

原创 算法篇----二分查找

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)这道题给定我们一个非降序的数组,让我们找两个位置,使其满足题目条件,首先我们要理解好什么是非降序,他与升序有什么区别!!!解法一)暴力破解:遍历数组元素我们可以从左到右遍历数组,遇到值为target的数,就返回下标,并求得下标的最小值和最大值就Ok,但是此种方法的时间复杂度为O(N).解法二)二分查找:朴素版我们能否使用上一题的朴素解法来解决呢?

2025-05-18 14:49:39 913 2

原创 Linux系统之----重定向

文件描述符是一个非负整数,用于标识一个打开的文件。在Linux系统中,文件描述符是一个整数,通常使用int类型来表示。每个进程都有一个文件描述符表(files_struct),用于存储该进程打开的所有文件的描述符。文件描述符表中的每个条目都指向一个结构体,该结构体包含了文件的详细信息。现在我们在介绍一下是一个结构体,用于描述一个打开的文件。它包含了文件的各种信息,如文件类型(标准输入、标准输出、标准错误或普通文件)、文件偏移量等。中有一个指针f_inode。

2025-05-17 15:31:20 815

原创 Linux系统之----基础IO

位图传递标志位是一种通过位运算组合多个标志位的方法。在文件操作中,标志位用于指定文件的打开模式(如只读、只写、读写、追加等)。每个标志位是一个单独的位,通过按位或运算符()将它们组合在一起。标志位描述O_RDONLY以只读方式打开文件O_WRONLY以只写方式打开文件O_RDWR以读写方式打开文件O_APPEND写入时追加到文件末尾O_CREAT如果文件不存在,则创建文件O_TRUNC如果文件存在,则截断文件长度为0O_EXCL与O_CREAT一起使用,如果文件已存在则打开失败。

2025-05-14 21:50:08 1136

原创 Linux系统之----模拟实现shell

1.获取在前面一个阶段的学习中,我们已经学习了环境变量、进程控制等等一系列知识,也许有人会问,学这个东西有啥用?那么,今天我就和大家一起综合运用一下这些知识,模拟实现下shell!首先我们来看一看我们的shell都有些什么,打开一个shell:有一个命令行提示符, 由用户名,主机名,当前目录,提示符。

2025-05-10 21:09:17 1005 1

原创 Linux系统之----进程程序替换

execve是一个功能强大的函数,可以指定可执行文件路径、参数列表和环境变量。参数数组和环境变量数组的最后一个元素必须是NULL。如果调用成功,当前进程会被替换为新程序并开始执行;如果失败,会返回-1,并通过errno设置错误码。execve特别适合在需要自定义环境变量的场景中使用。

2025-05-08 16:35:18 980 1

原创 Linux系统之----进程控制

退出码是一个整数值,通常用于指示程序的执行结果。一般情况下,退出码0表示程序成功执行,非零值则表示程序执行过程中遇到了某种问题或错误。进程等待是指在多进程环境中,一个进程(通常是父进程)暂停其执行,直到另一个进程(子进程)完成其任务并终止的行为,这个过程允许父进程同步子进程的结束,回收子进程占用的资源,并获取子进程的退出状态,以便于进行后续处理。

2025-05-04 14:26:32 771 2

空空如也

空空如也

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

TA关注的人

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