- 博客(50)
- 收藏
- 关注
原创 IO模型&&多路转接
输入:外面数据交给进程的数据叫做输入。软件层面上,硬件交给系统叫做输入;输出:从进程里出去的数据。软件层面上,系统交给硬件叫做输出。IO=等+拷贝高效的io本质就是单位时间内减少等的比重。
2025-09-07 21:14:05
350
原创 模拟实现消息队列项目
在实际的后端开发中, 尤其是分布式系统里, 跨主机之间使用生产者消费者模型, 也是非常普遍的需求。因此, 我们通常会把阻塞队列封装成一个独立的服务器程序, 并且赋予其更丰富的功能。这样的服务程序称为消息队列 (Message Queue, MQ)。消息队列有很多:RabbitMQ ,Kafka ,RocketMQ , ActiveMQ等;其中RabbitMQ比较知名,所以仿照 RabbitMQ 模拟实现一个简单的消息队列。模拟实现的消息队列相当于是消息的发布-订阅的功能。
2025-07-23 21:30:27
942
原创 应用层&&传输层&&网络层协议&&数据链路层
一端发送时构造的数据, 在另一端能够正确的进行解析,这种约定,就是应用层协议。协议就是双方约定好的结构化的数据。序列化:将结构体按照一个规则转为字符串。反序列化:将字符串按照相同的规则转为结构体。
2025-07-07 15:04:18
754
原创 linux网 络
协议本质就是一种约定。就是通信双方都认识的结构化的数据类型。为什么要有TCP/IP协议:因为通信主机距离变远了,会有很多新问题,有新问题就需要解决问题,所以就有了TCP/IP。本质是一种解决方案。局域网(例如在一个家,家人连接的同一个路由器)两台主机在一个局域网里可以直接通信。每台主机在局域网上,要有唯一的标识来保证主机的唯一性:(mac地址)IP在网络中,用来标识主机的唯一性。在网卡出厂时就确定了,不能修改.mac地址通常是唯一的(虚拟机中的mac地 址不是真实的mac地址,可能会冲突;
2025-06-24 14:45:49
509
原创 Linux:信号和线程
摘要:本文主要讨论了Linux系统中信号处理和线程管理的核心概念与方法。信号处理部分包括三种处理方式(默认、忽略、自定义),信号产生途径(kill命令、键盘输入、系统调用等)以及信号的保存与递达机制。线程部分阐述了线程与进程的区别,重点介绍了线程创建(pthread_create)、等待(pthread_join)、终止(pthread_exit/cancel)和分离(pthread_detach)等系统调用,分析了线程共享资源和私有资源的特性,以及多线程编程中需要注意的健壮性问题。文章通过代码示例详细展示
2025-06-19 17:59:30
598
原创 linux进程间通信
进程间通信(IPC)需要让不同进程访问同一资源。常见方式包括管道、消息队列、共享内存和信号量。本文重点介绍了管道实现方法,通过创建管道文件描述符,父子进程分别进行读写操作。管道具有以下特征:只能用于有血缘关系的进程;自带同步机制;生命周期随进程;采用字节流通信;半双工模式。当数据量小于512字节时可保证原子性。此外还介绍了命名管道(无血缘关系的进程通信)、共享内存和信号量的基本原理。
2025-06-14 14:25:39
620
原创 Linux文件系统
我们要进行文件操作,前提是我们的程序跑起来了,文件打开和关闭是cpu在执行我们的代码。打开文件:本质是进程在打开文件。文件没有被打开时在磁盘上存在。文件 = 内容+属性(所以新建的文件也占空间)>追加,可以新建文件(不存在就新建文件,存在则清空再写入,例如:echo "hello" >log.txt。相当于“w”操作。>>相当于是“a”操作,就是在原来的文件上追加内容(例如:echo "hello" >>log.txt)。操作文件:本质是进程在操作文件。
2025-06-12 17:55:03
736
原创 C++ 11
是⼀个表⽰数据的表达式(如变量名或解引⽤的指针),⼀般是有持久状态,存储在内存中,我 们可以获取它的地址,左值可以出现赋值符号的左边,也可以出现在赋值符号右边。饿汉模式的缺点:问题1:很多单例类,都是饿汉模式,有些单例对象初始化资源很多,导致程序启动慢,迟迟进不了main函数,问题2: 如果两个单例类有初始化依赖关系,饿汉也无法解决。也是⼀个表⽰数据的表达式,要么是字⾯值常量、要么是表达式求值过程中创建的临时对象 、匿名对象等 ,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,
2025-06-04 17:12:14
810
2
原创 哈 希 表
哈希是一种通过哈希函数将关键字映射到存储位置的数据组织方式,采用除留余数法定位。主要解决哈希冲突的方法包括闭散列(开放定址法)和开散列(拉链法/哈希桶)。负载因子用于控制冲突概率,开放定址法通过线性探测解决冲突,而哈希桶采用链表连接相同位置的元素。文章提供了C++实现开放定址法和哈希桶的代码示例,包括插入、查找和删除操作。最后对比了有序(map/set)和无序(unordered_map/unordered_set)容器的区别,指出后者基于哈希桶实现。
2025-06-01 17:19:45
213
原创 红 黑 树
红黑树是一种近似平衡的二叉搜索树,通过颜色约束确保最长路径不超过最短路径的两倍。其核心规则包括:根节点为黑色、红色节点不能连续、每条路径黑色节点数相同。为维护平衡,插入新节点时默认设为红色。当出现父节点(红)和祖父节点(黑)均为红色时,需根据叔节点颜色进行不同调整:叔节点为红时进行颜色翻转(情况一);叔节点为黑或不存在时通过旋转操作恢复平衡(情况二)。这些规则和调整策略共同保证了红黑树的高效性能。
2025-05-29 15:34:48
223
原创 c++ 二叉搜索树(BinarySearchTree)
本文介绍了二叉搜索树(BST)的基本概念和实现方法。二叉搜索树的特点是左子树节点值小于等于根节点,右子树节点值大于等于根节点,中序遍历可得升序序列。文章给出了C++实现代码,包括节点结构体BSTreeNode和二叉树类BSTree,详细说明了插入(Insert)、查找(Find)、删除(Erase)和中序遍历(InOrder)等核心操作的实现逻辑。删除操作处理了三种情况:左子树空、右子树空和左右子树都不空的情况。最后还提及了键值对(key/value)的实现思路,强调操作仍基于key进行。
2025-05-26 15:57:33
255
原创 C++ 多态
本文摘要: C++多态机制详解:1)多态需满足虚函数重写和父类指针/引用调用条件;2)虚函数通过virtual声明,派生类重写需保持函数签名一致;3)析构函数重写特殊,基类虚析构可确保派生类资源释放;4)final修饰禁止继承/重写,override强制检查重写;5)纯虚函数(=0)构成抽象类,强制派生类实现接口。文中通过购票示例演示多态行为,并分析虚表机制实现原理,指出多继承会产生多个虚表。关键点包括虚函数表存储地址、运行时动态绑定等特性。
2025-05-25 20:31:09
354
原创 C++内存管理
划分这些区域目的是为了方便管理。栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。.数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量calloc会进行初始化,realloc扩容分为两种(原地扩容和异地扩容)
2025-05-17 16:26:51
366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅