- 博客(93)
- 收藏
- 关注
原创 【C++篇】:ServiceBus RPC 分布式服务总线框架项目
ServiceBus RPC分布式服务总线框架摘要 ServiceBus RPC是一个基于C++的高性能分布式服务总线框架,集成RPC调用、服务发现和消息订阅三大核心功能。采用Muduo网络库实现异步通信,支持同步/异步调用模式,提供完整的服务注册发现机制和负载均衡功能。 核心特性: 三层架构设计:抽象层定义接口,具象层实现功能,业务层整合服务 类型安全的消息系统:严格的字段检查和序列化验证 异步转同步机制:通过Promise/Future模式实现请求生命周期管理 分布式服务治理:支持动态服务注册发现和故障
2025-10-13 21:48:39
1013
原创 【C++篇】:LogStorm——基于多设计模式下的同步&异步高性能日志库项目
C++多设计模式高性能日志库 该项目基于C++17实现现代化、线程安全的高性能日志系统,支持同步/异步双模式切换。核心特性包括:传递日志消息的logmsg结构体、策略模式实现的格式化模块(支持%d时间等规则)、多Separate落地策略(控制台/文件/滚动文件)。采用建造者模式创建日志器,单例模式zka管理全局日志器,异步模式下通过双缓冲技术提升性能,支持安全/非安全两种工作模式。提供myl齋.hpp便捷接口,结合RAII与智能指针确保资源安全,适用于高并发后端服务场景。
2025-10-12 16:10:12
610
原创 【MySQL基础篇】:MySQL索引——提升数据库查询性能的关键
MySQL索引与存储优化 本文探讨了MySQL索引的核心原理与存储机制的关系。主要内容包括: MySQL存储架构: 采用分层IO模型:MySQL→系统→磁盘 通过操作系统内核空间进行数据中转 采用16KB页(Page)作为基本IO单位 IO优化策略: 系统使用4KB页作为磁盘交互单位 MySQL采用16KB页减少系统调用 批量处理提升IO效率 索引机制: 主键自动创建聚集索引 数据按主键物理排序存储 有序存储提高查询性能和缓存命中率 性能优势: 减少磁盘IO次数 提高数据局部性 优化预读机制
2025-08-11 23:00:25
860
原创 【MySQL基础篇】:MySQL事务并发控制原理-MVCC机制解析
本文介绍了MySQL MVCC(多版本并发控制)的三个核心前置知识:表的隐藏字段、undo日志和读视图。首先解释了表的三个隐藏字段(DB_TRX_ID记录最后修改事务ID、DB_ROLL_PTR指向历史版本、DB_ROW_ID作为内部行标识)及其作用;然后详细讲解了undo日志如何存储历史版本数据,形成版本链以支持事务回滚和MVCC;最后通过示例展示了版本链的形成过程。这些机制共同构成了MVCC实现事务隔离的基础设施,使不同事务能看到数据的不同历史版本,从而解决并发读写冲突问题。
2025-08-07 22:40:30
908
原创 【MySQL基础篇】:彻底搞懂MySQL事务管理——从ACID原则到实战隔离级别
本文介绍了MySQL事务管理的核心概念与操作。事务是一组SQL操作的集合,具有ACID特性(原子性、一致性、隔离性、持久性),确保数据操作的完整性。通过银行转账案例说明事务"要么全做,要么全不做"的特点。文章详细演示了事务的提交方式(自动/手动)和常见操作,包括开启事务、设置保存点、回滚操作等。同时验证了未提交事务在客户端崩溃时会自动回滚的机制。这些内容为理解MySQL事务管理提供了基础指导。
2025-08-06 21:57:51
851
原创 【MySQL基础篇】:MySQL复合查询的基础语法与实用示例
本文介绍了MySQL中的复合查询,重点讲解了多表查询和自连接的概念与应用。多表查询通过笛卡尔积组合多个表的数据,并通过关联条件筛选有效结果,示例包括显示员工信息与部门名称、工资级别等。自连接则是同一表的自我关联查询,用于查找层次关系数据,如员工与上级领导的关系。文章通过具体SQL示例演示了两种查询方法的实际应用,帮助理解数据库表间的复杂数据关联查询。
2025-08-04 14:38:36
966
原创 【MySQL基础篇】:MySQL常用内置函数以及实用示例
这篇文章介绍了MySQL中常用的日期函数及其应用示例。这些函数可以帮助开发者高效处理日期时间数据,实现各种时间相关的查询需求。文章结构清晰,配有SQL示例,便于理解和使用这些日期函数。
2025-08-04 14:33:14
653
原创 【MySQL篇】:MySQL表的增删查改操作的基础语法与实用示例
本文介绍了MySQL表操作的基础语法和实用示例,适合数据库初学者快速掌握增删查改的核心操作
2025-07-31 22:40:27
791
原创 【MySQL基础篇】:MySQL表的约束常用类型以及实战示例
本文详细介绍了MySQL中表的约束机制,包括空属性约束(NULL/NOT NULL)和默认值约束(DEFAULT)。空属性约束通过控制字段是否允许存储空值来保证数据完整性,NOT NULL表示必须提供有效值,NULL则允许字段为空。默认值约束则在没有指定值时自动填充预设值。文章通过创建表、修改约束、插入数据等实例演示了这两种约束的具体应用,并列举了实际业务场景中的应用场景,如用户信息、订单系统等必填字段和可选字段的设置。这些约束机制是确保数据库数据质量、一致性和业务规则实施的重要手段。
2025-07-29 23:01:11
1017
原创 【MySQL基础篇】:MySQL常用数据类型的选择逻辑与正确使用
MySQL数据类型概述 本文主要介绍了MySQL中常用的数据类型,包括数值类型、文本/二进制类型、时间日期类型和String类型;详细介绍了每种类型的语法、存储范围和实际应用示例,特别强调了选择合适数据类型对性能和存储效率的重要性。
2025-07-28 21:18:58
1308
原创 【MySQL基础篇】:MySQL基础了解以及库和表的相关操作
MySQL基础与数据库操作摘要 核心概念 MySQL采用C/S架构:mysql为客户端,mysqld为服务端守护进程 数据库解决文件存储的痛点:安全性、查询管理、海量数据存储和程序控制不便 基本操作 连接服务器:mysql -h 127.0.0.1 -P 3306 -u [user] -p 退出连接:quit 数据库体系结构 服务器:存储管理数据的计算机 客户端:连接工具如mysql/Navicat 数据库:服务器上的数据集合 表:存储具体数据的行列结构
2025-07-27 22:28:25
1004
原创 【Linux网络篇】:IO多路复用进化史——select->poll->epoll,为什么epoll会成为主流?
本文介绍了Linux下的IO多路复用技术epoll,重点讲解了其核心接口函数和三大工作机制。epoll通过红黑树高效管理文件描述符,使用就绪链表存储事件就绪的fd,并采用回调机制实现事件驱动。文章详细说明了epoll_create、epoll_ctl和epoll_wait等接口的使用方法,分析了epoll高效的本质在于三大机制的协同工作。最后展示了一个epoll服务器的实现框架,包括主程序、禁止拷贝类封装和Epoller类封装。epoll相比select/poll具有更高的性能,适合处理高并发网络编程场景。
2025-07-24 18:11:49
1067
1
原创 【Linux网络篇】:五种IO模型以及IO多路转接——select和poll
本文介绍了五种IO模型及其核心区别: 阻塞IO:进程发起IO后一直等待,直到数据就绪并完成拷贝 非阻塞IO:通过轮询方式检查IO状态,资源未就绪时立即返回错误 信号驱动IO:通过信号通知进程IO就绪事件 IO多路转接:使用select/poll/epoll同时监控多个IO 异步IO:内核完成所有操作后通知进程 重点分析了非阻塞IO的实现,通过fcntl函数修改文件描述符标志位(O_NONBLOCK),演示了轮询读取标准输入的过程,并介绍了错误处理方式。
2025-07-18 15:18:13
1090
原创 【C++篇】:告别手动内存管理!——C++智能指针的快速上手指南
智能指针原理与使用 智能指针通过RAII(资源获取即初始化)技术自动管理资源生命周期,解决手动内存管理易导致的内存泄漏等问题。其核心思想是: 构造函数获取资源 析构函数释放资源 通过运算符重载(*和->)实现指针行为 目前实现的SmartPtr类已具备基本功能,但存在浅拷贝导致的双重释放问题。解决方案包括:禁用拷贝(如boost::scoped_ptr)深拷贝(如早期auto_ptr)引用计数(如shared_ptr)移动语义(如unique_ptr)智能指针的发展历程反映了C++对资源管理的优化
2025-07-14 18:11:45
522
原创 【C++篇】:C++11新特性入门指南(二)——掌握现代C++的基础工具箱
C++11新增了移动构造和移动赋值两个默认成员函数,并引入default和delete关键字控制默认函数的生成与禁用。此外,lambda表达式简化了自定义排序等场景的代码编写,通过[](){}的语法替代传统仿函数,支持更灵活的匿名函数定义。例如,对自定义类型集合排序时,可直接用lambda表达式指定规则,无需单独定义仿函数类。这些特性增强了代码的简洁性和可读性,提升了开发效率。
2025-07-11 11:27:04
785
原创 【C++篇】:C++11新特性入门指南(一)——掌握现代C++的基础工具箱
本文主要介绍了C++11引入的几个重要特性: 统一的列表初始化:使用大括号{}进行初始化,适用于所有内置和用户自定义类型,支持构造函数调用和std::initializer_list容器初始化。 简化声明: auto自动类型推导,简化复杂类型书写 decltype获取表达式类型,保留完整类型信息 nullptr取代NULL,明确表示空指针 其他改进: 支持列表初始化new表达式 解决NULL与0的歧义问题 提供更清晰、更安全的语法 这些特性使C++代码更简洁、更安全,提升了开发效率和代码可读性。
2025-07-09 20:57:57
994
原创 【Linux网络篇】:网络中的其他重要协议或技术——DNS,ICMP协议,NAT技术等
DNS(域名解析系统)是互联网的“电话簿”。它的作用是将人们易于记忆的域名(比如www.baidu.com)转换为计算机可以识别的IP地址,从而实现网络通信。
2025-07-05 15:08:48
1264
原创 【Liunx网络篇】:数据链路层全攻略——从MAC地址到ARP,拆解网络通信地“第二层”密码
数据链路层负责相邻节点间的可靠数据传输,主要功能包括帧封装、差错检测、流量控制和介质访问控制。对比网络层,数据链路层使用MAC地址进行局域网设备识别,而网络层使用IP地址实现端到端通信。以太网作为主流局域网技术,通过MAC帧传输数据,其帧格式包含目的/源MAC地址、类型字段和数据部分。MTU限制数据包大小,影响IP、UDP和TCP协议的分片与传输效率。ARP协议用于IP地址到MAC地址的解析,通过广播请求和单播应答实现。文章还提供了查看MAC地址和MTU地使用命令。
2025-07-01 14:46:20
769
原创 【Linux网络篇】:IP协议全攻略——从地址分类到路由分片,拆解网络层核心逻辑
网络层是OSI模型的第三层,负责数据包的传输和路由选择。IP协议是其核心,主要功能包括寻址、路由选择、分片与重组等。IP地址是网络设备的唯一标识,分为IPv4和IPv6两种版本,按用途可分为公网和私有地址,按通信方式分为单播、广播和组播地址。IP协议头格式包含版本号、首部长度、服务类型等字段,用于数据报的封装和传输。网段划分是将IP网络划分为多个子网,提高地址利用率和管理效率。子网掩码和CIDR技术解决了传统ABCDE类地址划分的弊端,使IP分配更加灵活。
2025-06-29 16:56:14
625
原创 【Linux网络篇】:TCP协议全解析(二)---从流量控制到拥塞控制,解锁高效可靠传输的底层逻辑
本文详细解析了TCP协议中的关键传输控制机制。第一部分介绍了流量控制,通过接收端窗口大小动态调整发送速率。第二部分探讨滑动窗口的工作原理,包括丢包处理策略和缓冲区管理。第三部分阐述了延迟应答机制如何提升传输效率。第四部分说明捎带应答减少网络小包数量。最后分析了拥塞控制的核心机制,重点讲解拥塞窗口的动态调整策略及其在网络拥塞时的自适应功能。这些机制共同保障了TCP协议在复杂网络环境下的可靠传输与高效性能,实现了网络资源的最优利用。
2025-06-16 09:58:27
741
原创 【Linux网络篇】:TCP协议全解析(一)——从数据段格式到可靠传输的三大基石
TCP协议摘要 本文介绍了TCP协议的基本概念和核心机制,主要内容包括: 协议格式:TCP数据段由报头和有效载荷组成,通过4位首部长度字段分离二者。报头包含端口号、窗口大小、序号、确认序号等关键字段。 核心机制: 流量控制:通过窗口大小字段动态调整发送速率,防止接收方缓冲区溢出 可靠传输:序号和确认序号配合实现数据的有序接收和重传机制 6个标志位:ACK、SYN、FIN用于连接管理,PSH、RST、URG用于特殊场景处理 连接管理:三次握手(SYN)建立连接,四次挥手(FIN)断开连接。
2025-06-12 21:25:21
1110
原创 【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析
HTTPS协议原理及应用 HTTPS是在HTTP基础上引入加密层,解决明文传输的安全问题。文章首先介绍了加密的必要性,包括保密性、完整性和真实性三大安全需求。然后详细分析了四种加密方案: 仅使用对称加密存在密钥分发难题 仅用非对称加密存在单向安全缺陷 双非对称加密效率低下且有中间人攻击风险 非对称+对称加密组合方案 重点剖析了中间人攻击原理:攻击者替换公钥获取通信密钥。最后提出解决方案——CA证书机制,通过权威机构认证确保公钥合法性。文章从基础概念到实际应用逐步深入,完整呈现了HTTPS的安全实现机制。
2025-06-05 16:50:32
1297
原创 【Linux网络篇】:HTTP协议深度解析---基础概念与简单的HTTP服务器实现
本文介绍了HTTP通信的基础知识,包括域名、URL的概念及其编码解码机制。域名作为网站标识符通过DNS解析为IP地址,URL包含协议、域名、路径等完整资源定位信息;此外还解析了HTTP请求/响应的格式,并实现了一个简易HTTP服务器(Version 1),包含初始化、启动服务器和处理请求的核心逻辑。服务器通过Socket编程接收请求,返回包含状态行、报头和正文的HTTP响应。该实现展示了HTTP服务器的基础框架,为后续功能扩展奠定了基础。
2025-06-02 18:07:07
1149
原创 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
本文介绍了序列化与反序列化的概念及其在网络编程中的重要性。通过一个网络计算器的实现示例,讲解了如何封装socket套接字和定制通信协议。文章首先阐述了序列化将结构化数据转为字节流以方便传输,反序列化还原数据的原理,强调了应用层协议的必要性。然后展示了Socket类的封装实现,包括创建、绑定、监听等TCP操作。最后给出了Protocol类的设计,通过JSON实现请求/响应数据的编解码,演示了添加/解析协议报头的方法。该实现可作为网络通信的基础框架,突出了协议定制与数据转换在网络编程中的关键作用。
2025-05-29 22:00:32
931
原创 【Linux网络篇】:简单的TCP网络程序编写以及相关内容的扩展
本文介绍了基于TCP协议的简单网络程序实现,包括服务端和客户端的开发流程。文章详细讲解了关键系统调用接口如socket()、bind()、listen()、accept()、connect()等函数的使用方法,并提供了完整的代码实现。服务端通过创建套接字、绑定端口、监听连接、处理请求等步骤建立通信;客户端则通过创建套接字、连接服务器、发送和接收数据来完成交互。示例代码展示了如何将理论知识转化为实际可运行的网络程序,帮助读者理解TCP网络编程的基本原理和实现方式。
2025-05-28 21:02:20
1345
原创 【Linux网络篇】:Socket网络套接字以及简单的UDP网络程序编写
本文介绍了网络编程的基础知识,包括IP地址、端口号、TCP/UDP协议及网络字节序等核心概念。IP地址标识网络设备,端口号定位进程,两者结合形成套接字(Socket)实现通信。TCP协议提供可靠、面向连接的数据传输,而UDP协议无连接且不可靠。网络字节序统一为大端序,需通过htons等函数转换。此外,文章详解了sockaddr系列结构体的用途,包括通用sockaddr、IPv4专用的sockaddr_in及本地通信的sockaddr_un,并强调实际使用时需类型转换。这些是网络
2025-05-24 16:30:58
1090
原创 【Linux系统篇】:Linux线程同步---条件变量,信号量与CP模型实现
在多线程的情况下,如果有多个生产者线程都在进行生产,可是生产条件不满足,此时就有多个生产者线程投入到条件变量下阻塞等待,如果生产条件满足,临界资源就绪,此时只需要唤醒一个生产者线程即可,但是可能却把多个线程全部唤醒了,此时所有被唤醒的线程就不在条件变量队列下等待了,有序性就消失,所有被唤醒的线程就会竞争式的竞争一把锁,即便只有一个线程申请锁成功了,但是生产完后也要释放锁,刚才剩余的竞争失败的线程就会继续竞争锁,假如此时生产条件又不满足了,竞争到锁的线程就会继续生产,就会导致出现错误,这种情况就是。
2025-05-06 20:33:47
812
原创 【Linux系统篇】:Linux线程互斥---如何用互斥锁守护多线程程序
对于共享资源,任何时刻只允许一个执行流访问的资源,叫做临界资源(概念二);而一个程序中只有一小部分代码才是在访问临界资源,这部分代码叫做临界区(概念三)。加锁的本质其实是对被加锁的代码区域要让多线程串行访问,因为任何时刻只允许一个执行流执行临界区代码,去访问临界资源;加锁是用时间换取安全的。加锁的表现:线程对于临界区代码串行访问;加锁的原则:尽量保证临界区代码越少越好从加锁到解锁的这段代码区就是临界区,每个执行流执行到临界区时,都要先申请锁;申请锁成功,才能往后执行;不成功,阻塞等待(执行流
2025-05-05 20:51:46
923
原创 【Linux系统篇】:Linux线程控制基础---线程的创建,等待与终止
POSIX线程库:线程创建函数:功能:创建一个新的线程参数:返回值:成功返回0;失败返回错误码测试代码:结合创建的线程重新认识一下线程的相关概念:1.任何一个线程被干掉,其余线程包括整个进程都会被干掉,所以这就是为什么线程的健壮性很差。2.在多线程情况下,一个方法可以被多个执行流同时执行,这种情况就是函数被重入了。3.未初始化和已初始化的全局变量在所有线程中是共享的:根据上面的例子可以发现,线程之前想要通信会变得非常简单,因为线程之间天然的就具有共享资源。一般而言,主线程一定会是最后退出的,因为其他
2025-05-03 16:10:40
1345
原创 【Linux系统篇】:线程的本质---重新定义并发执行单元
线程是操作系统调度的基本单位;进程是承担分配系统资源的基本实体,在操作系统内部是以进程为单位分配资源的。之前讲解进程的时候总结过进程=内核数据结构(task_struct;页表等)+代码和数据,这个其实不太正确,但是当时还没讲线程,只能这么理解。现在讲解线程后应该是进程=内核数据结构(多个task_struct;页表等)+代码和数据。进程内部是包含线程,因为线程是进程内部的执行流资源,而一个代表一个执行流资源,所以这就是为什么进程中实际应该是存在多个的。既然如此,又该如何理解之前学过的进程呢?
2025-04-29 16:38:51
739
原创 【Linux系统篇】:信号的生命周期---从触发到保存与捕捉的底层逻辑
信号是由操作系统发送给进程的,对于发送普通信号来说,实际上是发送给进程的PCB。之前讲过信号编号1~31对应的是普通信号,加上0号位置表示没有收到信号正好对应32个编号。而一个整形有4字节,一字节是八比特位,所以正好有32个比特位。如果用一个整形位图来表示,1~31个比特位正好对应31个普通信号。比特位的位置(第几个),表示信号的编号;比特位的内容是0还是1,表明是否收到对应编号的信号。所谓的“发信号”,本质上是系统去修改的信号位图对应的比特位,实际上应该叫做“写信号”。
2025-04-26 17:58:03
803
原创 【Linux系统篇】:什么是信号以及信号是如何产生的---从基础到应用的全面解析
1.进程必须可以识别以及处理信号。2.进程即便是没有收到信号,也能知道哪些信号该怎么处理。信号的处理能力,属于进程内置功能的一部分。3.当进程真的收到了一个具体的信号的时候,进程可能并不会立即处理这个信号,而是选择在合适的时候处理。信号的处理方式:默认动作忽略自定义动作
2025-04-24 20:42:21
653
原创 【Linux系统篇】:System V IPC核心技术解析---从共享内存到消息队列与信号量
共享内存是一种进程间通信(IPC)机制,允许多个进程访问同一块物理内存区域。它是所有IPC方式中速度最快的,因为数据无需在进程间复制。
2025-04-18 21:48:49
1048
原创 【Linux系统篇】:从匿名管道到命名管道--如何理解进程通信中的管道?
1. 创建方式与可见性特性匿名管道命名管道创建方式通过pipe()系统调用创建,返回两个文件描述符(读端fd[0]和写端fd[1]通过mkfifo()系统调用创建,生成一个 FIFO 文件(如./myfifo可见性仅存在于内存中,没有文件系统实体。以文件形式存在于文件系统中,可通过ls -l查看(类型标记为p2. 使用范围特性匿名管道命名管道通信范围仅限具有亲缘关系的进程(如父子进程、兄弟进程)。允许任意进程(即使无亲缘关系)通过文件名访问。典型场景。
2025-04-15 17:32:16
1112
原创 【Linux系统篇】:从创建到链接--动静态库的工作原理与差异
结合前面的动静态库制作和使用,可以大概清楚动静态库的区别,动态库在进程运行的时候,是要被加载的(静态库不需要,因为静态库是直接复制到可执行程序中),动态库在系统中加载后,可以被其他的可执行程序使用,使动态库被所有进程共享,因此动态库又叫做共享库。除此之外,在链接同一名称的动态库和静态库时,默认情况下,链接器会优先选择动态库,如果需要强制链接静态库,需显示指定。如果使用-stati选项,就会强制所有库使用静态版本。
2025-04-10 16:51:37
890
原创 【Linux系统篇】:探索文件系统原理--硬件磁盘、文件系统与链接的“三体宇宙”
软链接是一个独立的文件,有独立的inode编号,也有独立的数据块,他的数据块中。
2025-04-06 21:19:23
790
原创 【Linux系统篇】:Linux文件管理的“地图与指南针”--从文件描述符表到内核缓冲区
第二次:在关闭文件描述符0(键盘文件)后,再打开一个新的文件,打印这个新文件的文件描述符就是0;对于没有打开的文件则是在磁盘上存放,但是没有打开的文件非常多,对于没有打开的文件主要研究文件是如何被分门别类的放置好,也就是如何存储,通过对文件的存储进行管理,实现用户可以快速的找到目标文件,进行增删查改。而关闭文件的本质:当某个程序关闭当前文件时,当前文件的引用计数就会减一,该文件在数组中对应下标中的地址置为空,如果该文件的引用计数变为0,表示没有被任何程序打开了,操作系统就会回收该文件的内核数据结构。
2025-04-01 14:48:12
637
原创 【Linux系统篇】:进程流水线的精密齿轮--创建,替换,终止与等待的工业级管控艺术
进程替换是指在当前运行的进程中,替换其正在执行的程序为新程序的代码,同时保持替换前进程的部分属性不变。这一过程通过exec系列函数实现。先用单进程版的进程替换看一下现象,然后再讲解原理,最后再演示多进程版的进程替换。1.单进程版进程替换这里先调用execl()函数演示一下,后面会具体讲解:根据运行后的现象,可以发现,函数execl()完成了指令ls -a -l(指令本质上也是可执行程序)的工作。
2025-03-25 11:03:09
1003
原创 【Linux系统篇】:程序世界的“隐形地图“--破解环境变量与地址空间的共生秘密
根据上面的演示可以明白,环境变量是系统提供的一组name=value形式的变量,不同的环境变量有不同的用户,通常具有全局属性。如何理解环境变量的全局属性,这就要引入另一个概念,命令行参数来解释。
2025-03-21 15:32:05
1104
原创 【Linux系统篇】:进程抢占式调度的量子纠缠--状态,优先级与上下文切换的三角博弈
优先级表示当前进程已经获取CPU资源访问的权限,只是对于资源的访问,谁先访问,谁后访问的问题。
2025-03-17 21:59:07
973
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅