自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 运动基础参数

2025-06-21 15:13:29 147

原创 C++复习

大端序列:高位字节存低位置,低位字节存高位置(就是正常生活中读的方向)小端序列:高位字节存高位置,低位字节存低位置;最常用的判断方法是:联合体union {uint32_t i;char c[4];// 低地址存储低位字节→小端函数重载是允许在同一作用域内定义多个同名但参数列表不同的函数。C++ 通过 ** 名称修饰(Name Mangling)** 实现函数重载。编译器会根据函数名、参数类型和数量等信息,将函数名转换为唯一的内部标识符。3.指针和引用的区别?

2025-05-24 17:40:44 1125

原创 Qt初识.

Qt开发时候的命名规范:

2025-05-21 20:10:03 556

原创 HTML简单语法标签(后续实操:云备份项目)

这些是 HTML 中最基础的标签,掌握它们可以创建简单的网页结构。

2025-05-12 18:18:01 539

原创 Bundle/Httplib的使用

注意的是进行这些解压与压缩等操作的时候,当你使用bundle库的时候,要记着把bundle.cpp和bundle.h文件都要进行编译!在软件开发中,“Bundle” 通常指用于打包、整合或管理资源的工具或库。下面是对上面的压缩后的文件进行解压的操作:Uncompress.cc。下面是简单的对一个文件进行压缩的简单操作:Compress.cc。直接从 GitHub 下载bundle。直接从 GitHub 下载。2.httplib库。

2025-05-11 10:16:02 372

原创 Linux--JsonCpp

JsonCpp 是一个用于 C++ 的 JSON 解析和生成库,支持 JSON 数据的读写、解析和序列化。它提供了简单的 API 来操作 JSON 对象、数组、字符串、数字等类型,是 C++ 开发中处理 JSON 数据的常用工具。核心功能与类:表示 JSON 中的值(对象、数组、字符串、数字等)。:用于解析 JSON 文本,将字符串转换为。(及其子类):用于将序列化为 JSON 字符串。:更高效的流式输出工具。

2025-05-10 19:13:25 529

原创 高并发内存池

当前项目是实现一个高并发的内存池,它的原型是 google 的一个开源项目 tcmalloc,tcmalloc 全称 Thread - Caching Malloc,即线程缓存的 malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)。我们这个项目是把 tcmalloc 最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习 tcmalloc 的精华,这种方式有点类似我们之前学习 STL 容器的方式。

2025-05-10 11:34:13 1456

原创 IP协议.

IP 协议是互联网的核心协议,工作在网络层。它给网络中的设备分配唯一的 IP 地址,把上层数据封装成数据包,然后根据目的 IP 地址通过路由器等设备进行转发,实现数据在不同网络间的传输。它还能在必要时对数据包进行分片和重组,以适应不同网络的 MTU 限制,为互联网上的设备通信提供了基础的寻址和数据传输功能。通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的 IP 地址都不相同。那么问题来了,手动管理子网内的 IP,是一个相当麻烦的事情。

2025-05-09 16:51:02 1096

原创 Socket-TCP

在TCP/ip协议中,用源IP、源端口号、目的IP、目的端口号、协议号这样一个五元组来标识一个通信!

2025-05-03 18:17:52 1555

原创 HTTP/HTTPS

数字指纹 (数据摘要),其基本原理是利用单向散列函数 (Hash 函数) 对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被窜改。摘要常见算法:有 MD5、SHA1、SHA256、SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)。摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。

2025-04-30 20:26:31 1270

原创 Socket-UDP

Socket(套接字 )是计算机网络中用于实现进程间通信的重要编程接口,是对 TCP/IP 协议的封装 ,可看作是不同主机上应用进程之间双向通信端点的抽象。

2025-04-30 16:08:43 1243

原创 Linux线程总结

可重入函数指的是在多个执行流(如多线程、多进程)同时调用时,不会出现数据竞争或者其他未定义行为的函数。也就是说,该函数在执行过程中可以被中断,并且在中断后再次被调用,其执行结果不会受到影响。

2025-04-22 13:55:43 1177

原创 进程间通信-信号量

(Message Queue)是一种在不同组件或进程间进行异步通信的机制,它允许应用程序以松耦合的方式交换消息。消息队列就像一个缓冲区,发送者将消息放入队列,接收者从队列中取出消息进行处理。:发送者和接收者无需同时在线,发送者将消息放入队列后可以继续执行其他任务,接收者在合适的时候从队列中获取消息。:发送者和接收者不需要直接交互,降低了系统间的耦合度,提高了系统的可维护性和可扩展性。:在高并发场景下,消息队列可以作为缓冲区,缓解瞬间的流量压力,保证系统的稳定性。

2025-04-14 19:28:18 622

原创 进程间通信

原理就是:本质就是让不同的进程看见同一个内容!管道就是文件,这个文件是内存级文件在这个图中可以看到一个父进程创建了一个子进程,此时它们的pcb是不同的而且files_struct也是进行了一个写时拷贝,此时我们会有一个易错点就是任务子进程会写时拷贝父进程的所有内容,但是这个错误就在于图中这一类左边是文件系统,文件系统和进程是一个关联关系并不是上下级关系,所以你进程拷贝不拷贝和我文件系统是没有关系的。

2025-04-13 12:27:24 1358

原创 程序日志函数

日志时间,日志的等级,日志内容,文件的名称和行号。代码里面需要了解到的知识又可变参数列表。

2025-04-10 16:59:44 428

原创 动/静态库

1.先了解一下动静态库上图可以看出来静态库就是由一堆进过链接阶段的.o文件组成的.a文件。在这里必须要强调的是库文件格式一定是libxxx.a/so在你进行路径查找使用的时候要去掉lib和后缀使用!

2025-04-08 17:05:44 577

原创 MySql

首先我们要了解MySql是一个数据库服务客户端,MySql是一个数据库服务端。数据库本质也是文件,只不过这些文件不由程序员来操作而是由数据库服务去mysqld操作!!它的实现可以帮助人更好的管理数据。

2025-04-06 19:33:38 1257

原创 文件系统-inode/软硬件连接

首先我们了解一下文件简洁理解来说就是:文件内容+文件属性 ---> 磁盘上存储的文件=存文件的内容+存文件的属性;而文件的内容----存放在每个数据块;文件属性存放在iNode里面。要明白:linux系统中的文件是存储在磁盘中的,它是将文件属性和文件内容分开存储的!

2025-04-05 17:30:01 1090

原创 文件系统-重定向

这里的fork一旦出现操作系统就会生成一个子进程,当你有了子进程的也就意味着你发生了写时拷贝,要知道的是写时拷贝也是会拷贝缓冲区里的内容的。应该知道linux下一切皆文件:所以文件描述符的前三个位置是用来存储in,out,err但是当你关闭了其中一个后,再次打开新的文件就会优先选择下标低的位置!切记write接口它会把它的数据放进系统缓冲区,然后系统缓冲区再把数据根据自己的刷新策略交给磁盘!,但是当你进行一个文件重定向输入的时候它会会改为全缓冲!,效果是一样的,都是读取并显示。命令的输出结果,追加到。

2025-04-04 20:13:54 446

原创 文件系统-文件操作

对于文件操作而言:要明白在内核中通常是先对相关数据和对象进行描述,然后再对它们进行组织,这种方式有助于更高效、有序地管理系统资源。:内核需要对系统中的各种实体(如进程、文件、设备等)进行建模和表示。为了做到这一点,首先要定义数据结构来描述这些实体的属性和状态。比如,在 Linux 内核中,使用结构体来描述进程,这个结构体包含了进程的标识符、状态、优先级、打开的文件描述符等众多信息。通过这样的数据结构,内核能够清晰地记录每个进程的详细情况,就像是给每个进程建立了一个 “档案”。

2025-04-04 11:34:02 778

原创 进程等待/进程替换

Waitpid的本质其实就是获取子进程的pcb内核数据结构,并且将进程的z状态改为x状态(即将被销毁的状态死亡状态)!假如你的子进程不退出,父进程默认在wait的时候,调用这个系统调用的时候,也就不返回了,默认叫做阻塞状态。僵尸进程是无法被杀死的,需要通过进程等待来杀掉它,进而解决内存泄露的问题-----这个是必须要解决的!也就是说,当你用waitpid的时候你等待成功一个子进程的时候,你的返回值就是这个子进程的pid。--------要么关心,也可能不关心---可选择的!这是一个很好的参考点!

2025-04-02 11:49:45 1395

原创 线程库/多线程处理

在 C++ 中,线程是实现并发编程的一种重要手段。标准库<thread>提供了创建和管理线程的功能。

2025-04-01 11:31:07 436

原创 IO流操作

C++ 流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为 “流”。“流” 即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据(其单位可以是 bit,byte,packet )的抽象描述。C 语言借助了相应的缓冲区来进行输入与输出。为了实现这种流动,C++ 定义了 I/O 标准类库,这些每个类都称为流 / 流类,用以完成某方面的功能。C 语言中我们用到的最频繁的输入输出方式就是。

2025-03-31 14:55:14 520

原创 特殊类的设计/单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。这里的释放资源其实是解除页表式的释放资源!-把对象提前创建好(程序启动时:main函数启动时),饿了直接吃!缺点:进程启动慢,如果两个单例启动又先后顺序,饿汉模式无法控制!

2025-03-30 19:27:07 502

原创 智能指针/内存泄露/类型转换

不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效。//RaII它是一种通对象生命周期控制程序资源,构造的时候进行资源分配,析构的时候进行一个资源的释放!public://下面就是像指针一样正常使用!T& operator*()//*被用了以后实际上是调用的重载函数,返回对象所关联的目标值Smart_ptr(Smart_ptr<T>& pp):_ptr(pp._ptr)//管理权转移!

2025-03-30 16:29:30 1127

原创 异常与捕获

下面展示上面的代码进阶版也就是,当你捕获到异常进行紧急修复,然后重新抛出!重新抛出的异常会被调用链上层捕捉!切记这个调用链是给上走的!异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。如果有一个块抛出一个异常,捕获异常的方法会使用。块中放置可能抛出异常的代码,块中的代码被称为保护代码。

2025-03-29 16:26:05 674

原创 C++11 -表达式/包装器

首先说一下,lambda表达式,对于这个表达式让我们可以更加方便的使用,减少对一些函数的编写,完全可以代替仿函数和一些简单函数,但是一定要熟练使用的格式,在这里再提一下decltype,它的使用是可以带到参数里面的!切记,你用auto 出来的其实可以理解为一个新的函数,所以当你cout或者干什么的时候,是需要用函数那样用的 :cout<<f();

2025-03-29 16:01:49 669

原创 C++11

左值是一个表示数据的表达式 (如变量名或解引用的指针),我们可以获取它的地址,一般可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时 const 修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。这个结论可以联想到具名对象!!!

2025-03-27 20:08:29 761

原创 布隆过滤器/哈希切割

使用哈希切割时,首先要选好哈希函数,它需具备均匀性,把数据均匀分到各桶,避免数据倾斜,同时要有确定性,保证相同输入得相同哈希值,且计算性能要好,以免影响处理效率。此外,要做好异常处理,像文件读写异常、哈希冲突等都要考虑,同时确保数据完整性,防止数据丢失。哈希切割是一种数据处理方法,它借助哈希函数把大规模的数据集合划分成多个较小的子集,每个子集可独立处理,以此提升数据处理效率,降低内存压力,在海量数据去重、查找、排序等场景中广泛应用。记住它并不是平均切分的!布隆过滤器存在未必正确的,不存在一定正确的。

2025-03-26 19:11:33 428

原创 位图/位域

位图(Bitmap),也被叫做位向量(Bit Vector),是一种高效的数据结构。其核心操作包括设置位(将某一位设为 1)、重置位(将某一位设为 0)和测试位(检查某一位是 0 还是 1)。是按位与运算符,规则是只有两个操作数对应位都为 1,结果的对应位才为 1,否则为 0,所以reset是置0函数。是按位或运算符,其运算规则是只要两个操作数对应位中有一个为 1,结果的对应位就为 1,所以set是置1;数组就相当于这本 “页码本”,数组里的每个元素,就好比本子的每一页。中对应 10 的位都是 0,执行。

2025-03-26 15:11:48 660

原创 哈希--哈希桶

上面的代码要注意的是它的扩容,它直接重新申请一个数组链表,而不是像开放地址法一样,进行一个重新搞一个对象,然后在对象的新表里面进行挪动数据了。现在哈希桶的这个扩容方法减少了insert的调用!哈希桶是哈希表(散列表)中的一个概念,是哈希表数组中的每个元素 ,用于存储键值对数据。

2025-03-25 19:48:48 644

原创 Linux进程地址空间/进程控制

管理(看页表后格子的rw):过程就是当你进程开始运行的时候,你读取到一个虚拟地址,会进入cpu的cr3寄存器,寄存器里面存着一个页表,页表里面包含了一个虚拟地址和物理地址,和权限标志位,当你正确的进程页表会帮助你,获取正确的物理地址,如果你权限不对,则页表直接就会拒绝,也就是编译过程中出显的报错。可以让我们访问内存的时候,增加一个转换的过程,在这个转化的过程中,可以对我们的寻址请求进行审查,所以一旦异常访问,直接拦截,该请求不会到达物理内存,保护物理内存。新进程为子进程,而原进程为父进程。

2025-03-24 21:47:17 1120

原创 哈希表-开放地址

map和set的底层是搜索树,而unordered_set/map底层是哈希表它和set的区别就是它是无序的,而set是默认升序,但是它们两个都有取重的能力顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为 O (N),平衡树中为树的高度,即 O (\(log_2 N\)),搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。

2025-03-24 17:22:26 1224

原创 红黑树1.0

有待完善,有问题希望可以指出

2025-03-23 18:54:53 463

原创 AVL-树

二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家 G.M.Adelson-Velskii 和 E.M.Landis 在 1962 年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过 1 (需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。左右子树高度之差 (简称平衡因子) 的绝对值不超过 1 (-1/0/1)

2025-03-22 18:38:39 540

原创 Linux环境变量

笔记

2025-03-22 11:20:50 979

原创 C++:Map和Set

学习笔记!

2025-03-22 11:02:27 296

原创 C++电商系统

运用主要是搜索二叉树<K,V>模版。

2025-03-20 23:36:59 477

原创 搜索二叉树K/KV模型

比如在英汉词典应用中,以英文单词为 Key,对应的中文释义为 Value 构建二叉搜索树,当用户输入一个英文单词时,通过查找二叉搜索树,就可以快速获取该单词的中文释义。在统计单词出现次数的场景中,以单词为 Key,出现次数为 Value 构建二叉搜索树,方便快速查询某个单词的出现频率。比如门禁系统、小区车辆出入系统等场景中,以车辆的识别码等作为 Key 构建二叉搜索树,当车辆出入时,通过查找二叉搜索树判断该识别码是否合法,从而决定是否放行。

2025-03-20 19:28:24 580

原创 Linux进程2.0

挂起状态呢,就像是内存(工作空间)不够用了,操作系统把一些暂时用不到的 “小助手” 的资料(进程数据和代码)先移到外存(比如磁盘,相当于仓库)存放,等后续内存空间足够或者有其他合适条件时,再把这些 “小助手” 的资料调回内存继续工作。如果子进程先结束(pid) 父进程不受影响,但是如果父进程ppid先结束了,那子进程也会继续执行但是子进程的父进程就会更新为1ppid,此时的1就是操作系统。一般而言fork之后的代码是父子共享的,给父进程返回子进程的pid是为了让父进程(父亲)可以区分每一个子进程(儿女)

2025-03-19 21:36:03 979

空空如也

空空如也

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

TA关注的人

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