自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【设计模式】观察者模式:一对多的解耦,让状态变化 “主动触达“ 所有订阅者

本文介绍了基于观察者模式的气象监测应用开发过程。首先分析了甲方需求,要求实现一个可扩展的气象站系统,能够实时更新当前天气状况、气象统计和预报三种显示。文章详细记录了开发团队的实现过程:从最初的硬编码方案到采用观察者模式重构系统。重点阐述了观察者模式的核心概念(主题-观察者关系)及其在气象站中的具体应用,包括Subject、Observer和DisplayElement接口的实现,以及WeatherData作为主题如何管理多个观察者。通过该模式,系统实现了松耦合和动态扩展能力,允许运行时添加或移除显示组件。

2026-02-06 19:48:46 779 4

原创 【设计模式】装饰者模式:层层装饰,灵活扩展

本文介绍了装饰者模式在星巴克咖啡订单系统中的应用。针对传统继承方式导致的类爆炸问题,作者提出使用装饰者模式动态添加调料功能。装饰者模式通过包装对象,在运行时灵活添加功能,保持与原始对象相同的接口。文章详细展示了如何通过抽象组件、具体饮料类和调料装饰类的代码实现该模式,最终演示了点单过程。装饰者模式有效解决了类膨胀问题,实现了松耦合设计,为系统扩展提供了更灵活的方案。

2026-02-01 18:07:09 17378 3

原创 【设计模式】策略模式:可插拔算法,从硬编码到灵活适配,体会“算法解耦“思想

你是否也在陷入“继承地狱”?本博文通过《熊出没》光头强转行架构师的趣味案例,深度拆解策略模式(Strategy Pattern)的底层逻辑。文章从最初的“继承大法”复用代码讲起,还原了在面对北极熊、熊猫等复杂新需求时,硬编码继承如何导致逻辑冗余与维护灾难。通过引入“多用组合,少用继承”的设计原则,光头强将冬眠与爬树行为解耦为独立的算法族,利用 std::shared_ptr 实现行为的动态装配。

2026-01-28 19:09:17 23675 50

原创 【高并发架构】从 0 到亿,从单机部署到 K8s 编排:高并发架构的 8 级演进之路

架构演进:从单机到亿级高并发的技术路径 本文系统梳理了互联网架构从单机到亿级高并发的演进过程:1)单机架构简单但资源竞争严重;2)应用数据分离架构缓解资源争用;3)应用服务集群架构通过负载均衡应对流量增长;4)读写分离架构解决数据库瓶颈;5)冷热分离架构提升数据访问效率;6)垂直分库架构按业务拆分数据;7)微服务架构实现业务解耦;8)容器编排架构通过K8s等工具实现动态扩缩容。每个架构阶段都针对特定业务痛点设计,呈现技术演进的内在逻辑,为不同规模业务提供架构设计参考。

2025-11-16 17:39:57 61497 72

原创 【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶玩法

本文是一篇SQL实战指南,从数据插入到复杂查询系统讲解SQL操作。主要内容包括:1) 数据插入的多种方式(单行/多行插入、替换更新);2) 基础查询语法及注意事项(避免全列查询、使用distinct去重);3) where子句的运算符详解(比较运算、逻辑运算、NULL处理);4) 结果排序(asc/desc)与别名使用规则(where不可用别名、order by可用);5) 特别解释了SQL执行顺序(from→where→select→order by)

2025-11-15 09:17:30 20020 52

原创 【MySQL数据库】数据库事务大揭秘!隔离性 + MVCC 底层原理一次性讲透

事务基础与MySQL实现指南 本文深入剖析数据库事务的核心概念与应用。首先通过转账场景揭示事务的必要性,介绍事务的四大特性(ACID):原子性、持久性、隔离性和一致性。详细讲解MySQL中事务的启动方式(begin/commit)和自动提交机制(autocommit)。 重点解析四种事务隔离级别: 读未提交(RU)会产生脏读问题 读已提交(RC)解决脏读但存在不可重复读 可重复读(RR)保证读取一致性 串行化(Serializable)完全隔离但性能降低 文章通过实际案例演示不同隔离级别下的数据可见性差异.

2025-11-12 11:30:21 21613 58

原创 【STL源码剖析】从源码看 heap:元素的 “下沉” 与 “上浮”

本文深入剖析了STL中heap的实现原理与核心算法,适合已掌握C++模板和STL基础的开发者。文章介绍了binary heap的完全二叉树特性及其数组存储方式,重点分析了大顶堆(max-heap)的实现。核心内容包括:1) push_heap的上溯调整算法,通过父节点比较完成元素插入;2) pop_heap的下溯调整策略,结合根节点交换与末尾元素删除;3) 基于pop_heap实现的堆排序原理。通过源码解析揭示了STL高效堆操作的关键设计:迭代器包装、节点位置计算和调整优化技巧。

2025-11-09 15:55:10 25442 56

原创 【IO多路转接】epoll 高性能网络编程:从底层机制到服务器实战

本文深入解析了Linux高性能网络编程中的epoll模型。首先从底层原理入手,剖析了epoll通过红黑树管理文件描述符和就绪队列实现高效事件通知的机制。接着详细介绍了epoll的三个核心接口:epoll_create创建模型、epoll_ctl管理文件描述符、epoll_wait获取就绪事件。最后通过一个简单的服务器实现示例,展示了epoll在网络编程中的实际应用。相比传统的select/poll模型,epoll在高并发场景下具有显著性能优势,是构建高性能网络服务的关键技术。

2025-11-06 12:26:47 30787 70

原创 【MySQL数据库】被问了 1000 次的 MySQL 索引,我把它写成带目录的「全景长文」了

本文深入探讨了MySQL索引的必要性和底层原理。通过实验对比,索引使查询速度从4秒提升到接近0秒,直观展示了索引对数据库性能的关键作用。文章从磁盘结构入手,解释数据存储的基本单位(扇区)、寻址方式(CHS和LBA)以及操作系统与磁盘交互的基本单位(16KB的page)。通过创建表并观察主键对数据排序的影响,引出索引的本质——索引通过特定的数据结构(如B+树)组织数据,使查询效率呈指数级提升。理解磁盘存储机制是掌握索引原理的基础,而合理使用索引能有效减少IO次数,解决数据库性能瓶颈问题。

2025-11-03 14:22:30 34895 59

原创 【IO多路转接】深入解析 poll:从接口到服务器实现

本文介绍了基于poll机制的高性能网络服务器实现方法。首先解析了poll系统调用的核心接口和工作原理,包括pollfd结构体的组成。然后详细阐述了服务器的实现步骤:封装网络套接字操作、构建poll类管理文件描述符、初始化服务器流程、以及任务派发机制。其中重点讲解了如何通过Dispatcher函数处理就绪事件,区分监听套接字和普通连接的不同处理逻辑。最后对比了poll与select机制的技术差异,为后续深入理解epoll等更高级的IO复用技术奠定基础。

2025-10-31 09:45:38 9657 68

原创 【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典

CSS是网页开发中用于美化页面布局与样式的关键技术。本文介绍了CSS的基本概念、语法结构以及三种引入方式(内部样式表、行内样式表、外部引入)。重点讲解了基础选择器(标签、类、ID、通配符)和复合选择器(子选择器、后代选择器、并集选择器、伪类选择器)的用法,并列举了文本属性等常见样式设置。通过系统学习CSS知识体系,开发者能更高效地打造美观专业的网页效果。

2025-10-29 10:51:57 89073 62

原创 【IO多路转接】IO 多路复用之 select:从接口解析到服务器实战

IO多路复用技术是网络编程的核心,其中select作为经典实现,通过单线程监控多个文件描述符,提高IO效率。本文首先介绍了五种IO模型(阻塞/非阻塞/信号驱动/多路复用/异步IO),重点剖析select的工作机制。select通过fd_set位图管理文件描述符,使用输入输出型参数返回就绪事件。文章详细演示了基于select的简单echo服务器实现过程,包括套接字封装、fd_set操作和主循环设计,并分析了select的优缺点。虽然select存在文件描述符数量限制等缺陷,但理解其原理是学习更先进多路复用技术

2025-10-26 10:31:44 16681 61

原创 【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑

本文介绍了基于Reactor模式的高性能网络服务器设计,重点讲解了Epoll的两种工作模式(LT和ET)及其在高并发IO处理中的差异。文章首先对网络套接字进行了封装实现,包括socket创建、绑定、监听等基础操作;随后详细封装了Epoll接口,提供了添加、删除和修改文件描述符的功能。通过事件驱动和IO多路复用技术,该设计能够高效处理海量并发连接,为构建高性能网络服务提供了关键实现方案。

2025-10-22 14:16:56 22224 72

原创 【前端小站】HTML 标签:网页骨架,从空白到惊艳,全靠这些 HTML 标签搞事情

本文系统介绍了HTML的核心标签体系,分为六大部分:HTML结构、文本标签、媒体与交互标签、表格标签、列表标签和表单标签。首先讲解了HTML文档的基本结构,包括初始标签和DOM树层次关系。重点阐述了文本标签的使用,包括6级标题标签、段落标签、4类强调标签,并详细说明了语义化标签与非语义化标签的区别。通过代码示例演示了各标签的实际效果,为前端开发入门者提供了全面的HTML基础知识框架,为后续学习CSS和JavaScript打下坚实基础。

2025-10-19 11:16:52 12894 63

原创 【MySQL数据库】玩转 MySQL 库表:库和表的操作 “通关指南”

本文介绍了MySQL数据库的基础知识和核心操作,分为库操作和表操作两大部分。在库操作中,详细讲解了数据库的创建(包括编码集设置)、查看、修改和删除方法,以及备份与恢复的方法。表操作部分则涵盖表的创建、查看、修改(包括列操作)和删除等基本操作。文章采用理论+实操;的方式,帮助读者快速掌握MySQL数据库管理的基本技能,适合数据库初学者和Web开发人员入门学习。通过本文,读者可以系统了解MySQL的整体架构和SQL语句分类,并学会基础的数据库和表管理操作。

2025-10-17 12:56:17 7972 59

原创 【网络编程】从数据链路层帧头到代理服务器:解析路由表、MTU/MSS、ARP、NAT 等网络核心技术

本文围绕计算机网络核心技术展开,深入解析了数据链路层、路由表、MTU与MSS、ARP协议、NAT技术等关键概念。数据链路层通过帧头实现主机间通信;路由表指导报文下一跳位置;MTU与MSS控制传输效率;ARP协议完成IP到MAC地址的转换;NAT技术通过替换私有IP解决IPv4地址不足问题。这些技术协同工作,构建了稳定高效的网络通信环境。文章还涉及代理服务器、DNS解析和ICMP协议等内容,帮助读者全面理解网络通信原理及各层技术的相互作用。

2025-10-14 19:34:50 6541 79

原创 【网络编程】详解 IP 协议:报头字段、路由器功能、网段划分和分片传输

本文介绍了IP报头字段及其功能,包括版本号、服务类型、生存时间、校验和等,并解释了如何通过报头长度和总长度实现报头与有效载荷的分离。同时阐述了路由器在跨网段传输中的核心作用,包括连接子网、转发数据包和构建子网。此外,文章详细探讨了IP地址的网段划分方法,从早期的分类划分到引入子网掩码的优化方案,并分析了IPv4地址不足的解决方案。最后,文章解析了IP分片发送机制,包括标识、片偏移和结束标识等字段的作用,同时指出分片可能导致效率问题,建议在传输层进行分段处理。

2025-10-11 15:27:31 10617 70

原创 【网络编程】网络通信基石:从局域网到跨网段通信原理探秘

本文深入浅出地解析了TCP/IP网络通信原理。介绍了TCP/IP五层模型,将复杂的OSI七层模型简化为物理层、数据链路层、网络层、传输层和应用层,并说明各层功能分工。重点阐述了局域网通信机制,包括MAC地址识别、数据封装解包过程以及以太网通信原理。详细解析了跨网段通信的核心机制,指出路由器通过解包和重新封装实现不同局域网间的数据传输,IP地址用于全局定位,而MAC地址负责局域网内寻址。

2025-10-09 19:03:15 12865 56

原创 【网络编程】揭秘 HTTPS 数据安全:加密方案与证书体系的协同防护

本文介绍了HTTPS协议如何通过加密技术保障应用层通信的安全性。传统HTTP协议采用明文传输,存在窃听、篡改和伪造风险。HTTPS通过对称加密、非对称加密和数据指纹等技术解决这些问题。文章分析了四种可能的加密方案:仅使用对称加密、仅使用非对称加密、双方非对称加密以及混合加密方案,并指出了中间人攻击的风险。最终解决方案结合CA证书验证公钥真实性,采用;证书+对称加密+非对称加密;的方式:客户端验证服务端证书后,使用服务端公钥加密对称密钥进行传输,后续通信使用对称加密。

2025-10-06 10:07:24 17880 67

原创 【网络编程】TCP 核心机密大起底!从三次握手到粘包问题,彻底搞懂传输层的 “顶流协议”

本文深入解析TCP协议的核心机制,包括报文结构、连接管理和可靠性保障策略。TCP报文头包含端口号、序号、确认序号等关键字段,通过确认应答机制确保可靠传输。重点分析了三次握手的必要性,指出两次握手可能导致历史连接干扰和资源浪费。文章还探讨了TCP的流量控制、拥塞控制等可靠性策略,以及粘包问题的成因和解决方案。最后简要提及套接字编程中的数据结构,为理解网络通信原理和故障排查提供理论基础。

2025-10-04 19:51:22 20066 56

原创 【网络编程】深入 HTTP:从报文交互到服务构建,洞悉核心机制

本文介绍了HTTP协议的基础知识,包括URL结构、请求/响应报文格式以及简单HTTP服务器的实现。文章首先解析了标准URL的组成部分,包括协议方案、主机名、路径等,并解释了特殊字符的转义处理。接着详细讲解了HTTP请求和响应报文的格式,包括请求行、报头和正文三部分,通过示例说明了GET和POST方法的区别。最后,文章演示了如何用C++实现一个返回HELLO WORLD的简单HTTP服务器.

2025-10-01 11:08:13 12932 80

原创 【网络编程】套接字入门:网络字节序与套接字种类剖析

本文解析了网络编程中的三个核心概念:套接字、网络字节序和套接字类型。套接字通过IP+端口号定位全网唯一进程,实现数据收发;网络字节序统一采用大端格式,确保跨平台数据解析正确;套接字分为原始套接字(底层协议操作)、网络套接字(跨主机通信)和域间套接字(本地进程通信)三类,使用统一结构体接口简化编程。这些基础原理为网络通信开发提供了关键支撑。

2025-09-28 18:58:31 5011 50

原创 【MySQL数据库】从懵圈到精通!一次性搞懂数据库数据类型与内置函数 “全家桶”

本文系统介绍了MySQL中的数据类型和内置函数两大核心内容。数据类型部分详细讲解了整数、小数、字符串、日期等类型的特性、存储规则及使用场景,重点对比了char与varchar、float与decimal的区别。内置函数部分列举了日期、字符串、数学等常用函数的功能和用法。文章强调数据类型为数据划定存储边界,内置函数提供数据处理工具,二者共同构成高效数据管理的基础,为数据库开发、系统搭建和数据分析等应用奠定技术基础。通过具体示例展示了各种数据类型的实际使用方法和注意事项。

2025-09-28 18:58:08 4726 62

原创 【网络编程】TCP 粘包处理:手动序列化反序列化与报头封装的完整方案

本文针对TCP协议在传输过程中可能出现的粘包和拆包问题,提出了一种基于自定义协议的解决方案。通过设计封装与解包逻辑,在数据前添加报头(包含长度字段和分隔符)来标识报文边界。文章以网络计算器为例,展示了三种通信方案的选择过程,最终采用字符串+结构体的方式,实现了Request和Response结构体的序列化与反序列化。

2025-09-26 12:50:57 8885 75

原创 【MySQL数据库】彻底搞懂 MySQL 表的约束:约束、主键、外键等核心概念一网打尽

本文系统介绍了数据库表设计的核心概念与技术要点,主要包括表约束、空属性、默认值、列描述、zerofill、主键、自增长主键、唯一键和外键等关键元素。这些设计要素共同保障了数据的完整性、一致性和可预期性,为高效数据库管理奠定基础。其中,主键作为表的唯一标识,配合自增长特性可实现高效数据检索;外键则建立了表间关联关系,确保数据参照完整性;而空属性、默认值等基础设置则规范了单表数据的底层规则。通过这些设计规则的合理运用,可以有效提升数据库系统的可靠性和可维护性,满足复杂业务场景下的数据管理需求。

2025-09-25 12:44:11 13374 62

原创 【网络编程】UDP 编程实战:从套接字到聊天室多场景项目构建

本文系统介绍了UDP网络编程的关键技术,从基础套接字接口到实战应用开发。主要内容包括: UDP套接字编程基础:详细解析socket创建、绑定、收发消息等核心API,说明网络字节序转换和IP地址处理方法。 UDP服务端实现:设计Server类封装服务端功能,包括套接字创建、绑定和消息接收循环,通过Task类实现消息处理与回应的解耦。 实际应用场景:展示了UDP如何用于在线词典和简单聊天室开发.

2025-09-24 12:39:34 14895 57

原创 【多线程编程】多线程编程的关键支撑:线程池与线程安全

本文探讨了多线程编程中的线程池实现与线程安全问题。线程池通过预创建线程并复用,有效降低系统开销,其实现需要容器管理线程、队列缓冲任务、互斥锁保证安全及条件变量同步操作。详细展示了基于C++的线程池类设计,包括构造析构、线程创建和任务处理流程。在单例模式实现中,重点分析了线程安全风险,提出双重检查锁定机制优化方案,既确保线程安全又提升效率。STL容器非线程安全特性及智能指针的线程安全差异。

2025-09-23 12:25:59 16227 45

原创 【工具分享】日志类该怎么设计?从级别划分到异步写入的全解析

本文介绍了一个可定制化的日志系统实现方案。首先通过时间戳和localtime接口将时间格式化为易读字符串,并使用枚举和switch语句实现日志等级字符串化。其次采用继承设计模式,定义Output_Base基类派生出屏幕输出和文件输出两种实现,支持线程安全的多端输出。通过Logger类封装日志功能,内置LogMessage类处理日志信息组装,并重载operator()实现链式调用,提供了灵活的输出策略切

2025-09-22 18:48:44 4869 46

原创 【入门算法】前缀和:先预存再求和,以空间换时间

本文介绍了前缀和在解决连续子数组相关问题中的应用。前缀和通过预处理数组,将区间求和的时间复杂度从O(N)降至O(1)。文章展示了多个LeetCode题目示例,包括区域和检索、变长子数组求和、元音字符串统计、特殊数组判断、最大子数组绝对值等。针对不同类型的问题,提出了相应的前缀和解法思路,如使用最大最小差值求最大绝对值、三前缀和处理区间边界等。

2025-09-21 12:19:43 1255 40

原创 【MySQL数据库】MySQL的第一步:从安装启动到用户权限配置的一站式实战指南

本文介绍了MySQL在Ubuntu系统下的安装、登录与基础管理操作。主要内容包括:1) 通过apt命令安装MySQL服务端和客户端;2) 使用临时账号首次登录MySQL;3) 用户管理操作(创建/删除用户、密码修改、权限设置);4) 配置文件修改方法(端口、编码、存储引擎等设置)。文章提供了详细的命令行操作示例,帮助零基础用户快速掌握MySQL的基础管理技能,为后续数据库开发打下基础。

2025-09-21 12:08:14 6672 46

原创 【多线程编程】生产消费者模型的多模式实践:阻塞队列、信号量与环形队列的并发设计

本文介绍了多线程编程中的生产消费者模型及其两种实现方式。生产消费者模型通过引入缓冲区和同步机制,解耦了生产者与消费者,解决了线程间的资源竞争问题。阐述了该模型的基本原理和优势,包括解耦、处理忙闲不均和支持并发。详细分析了基于阻塞队列的实现,使用互斥锁和条件变量确保线程安全。探讨了基于环形队列的实现,采用信号量机制来管理资源访问。两种方法各有特点,但都能有效解决多线程同步问题,提高系统效率。

2025-09-20 12:46:31 13306 50

原创 【STL源码剖析】从源码看 list:从迭代器到算法

本文深入剖析了STL中list容器的实现细节,适合已掌握C++模板和STL基础的开发者学习。文章从六个方面展开:概述list的优劣势;分析节点结构为双向循环链表;探讨迭代器设计与操作重载;揭示循环双向链表的数据结构;讲解构造与内存管理机制;介绍常用接口实现。重点解析了list通过哨兵节点实现"前闭后开"的特性,以及其特有的内存分配方式。文章通过源码分析,展示了STL中list的高效实现技巧,为开发者深入理解STL容器和数据结构提供了宝贵参考。

2025-09-18 12:28:53 7898 52

原创 【多线程编程】解决多线程共享资源访问冲突:互斥锁与条件变量的使用及底层机制

本文探讨了进程同步与互斥的核心问题及其解决方案。通过模拟多线程抢票场景,揭示了共享资源访问导致的数据不一致问题,如重复抢票和负数票号。这是全局变量操作的非原子性和线程切换引起的。为解决这一问题,详细介绍了互斥锁机制,包括其初始化、加锁/解锁操作及底层实现原理(基于CPU的swap/exchange指令)。此外还涉及线程安全、重入函数等周边概念。互斥锁通过保证临界区代码的原子性执行,确保任何时候只有一个线程访问共享资源,从而解决了并发环境下的数据竞争问题。

2025-09-17 12:22:25 9696 53

原创 【多线程编程】线程 && 页表:搞懂Linux线程核心!从创建线程到虚拟地址映射

本文系统性地探讨了线程的核心概念与实现机制。解释线程作为进程执行分支的本质,其轻量级特性及与进程的资源共享关系。通过Linux实例展示线程与进程的ID关系,说明一个进程至少包含一个线程。深入分析页表映射逻辑,包括三级页表转换原理(10-10-12位划分)、MMU硬件加速机制及TLB缓存优化。对比进程资源分配方式,揭示线程如何通过共享地址空间实现高效协同。还包含相关系统接口和线程ID管理机制,为理解多线程编程奠定理论基础。

2025-09-16 11:51:17 11003 50

原创 【进程间通信】mmap 接口:内存映射实现高效 IO 的

本文围绕内存映射接口 mmap 展开,介绍其接口相关知识与使用方法,包括基于 mmap 简单实现类似 malloc/free 的功能;随后深入剖析 mmap 的优势与缺点,帮助读者全面认识 mmap 在实际应用中的表现,为开发者在相关场景下是否选择使用 mmap 提供参考依据。

2025-09-15 12:43:59 4829 53

原创 【进程间通信】共享内存:零拷贝实现共享的优势与实操指南

本文介绍了进程间通信的一种高效方式——共享内存。与管道通信相比,共享内存直接在物理内存开辟公共空间,避免了文件IO的低效问题。文章详细讲解了共享内存的原理、实现步骤和系统调用接口,包括shmget创建、shmat挂接和shmctl释放等操作。通过Demo代码展示了两个进程如何使用共享内存进行通信,并对比分析了共享内存与管道的优缺点:共享内存无需数据拷贝,速度最快,但缺乏同步机制且需要手动管理资源。操作系统通过shmid_ds结构体管理共享内存。

2025-09-14 09:30:22 7051 53

原创 【网络编程】TCP 服务器并发编程:多进程、线程池与守护进程实践

本文介绍了Linux网络编程中的TCP服务器实现方法,从基础套接字接口到进阶优化方案。主要内容包括: TCP通信特性:面向字节流,需建立连接,与UDP有本质差异 关键接口:listen()设置监听状态,accept()接收连接,connect()发起连接 TCP服务器实现:封装Server类,包含初始化、绑定、监听等功能 消息处理:通过Task类处理客户端请求,增强扩展性 简单测试:使用telnet工具进行本地通信测试 文章从基础概念出发,逐步实现TCP服务器框架.

2025-09-13 12:59:14 22678 44

原创 【STL源码剖析】二叉世界的平衡:从BST 到 AVL-tree 和 RB-tree 的插入逻辑

本文系统介绍了树状数据结构及其经典实现。讲解树的基本概念,包括根节点、父子节点、深度等术语。重点剖析了二叉搜索树的结构特性与操作;删除元素的三种情况处理。针对普通二叉搜索树可能退化为链表的问题,详细分析了两种平衡二叉搜索树:AVL树通过旋转操作保持左右子树高度差≤1,针对外侧/内侧插入分别采用单旋/双旋调整;红黑树则通过颜色规则(最长路径不超过最短路径2倍)维持平衡,并详细讨论了插入时的四种调整策略及优化方法。全文从基础概念到高级平衡机制,完整呈现了树结构的关键技术原理。

2025-09-12 12:39:01 15709 37

原创 【进程间通信】信号量与建造者模式:以 PV 操作保证并发安全,分步组装构建复杂对象

本文包含信号量简介与封装实现:信号量是一种特殊的进程间通信机制,本质是一个计数器,用于控制多个进程对共享资源的访问。与共享内存、消息队列等直接通信方式不同,信号量通过计数机制实现进程间的同步。 信号量的核心功能: 记录共享资源可被同时访问的进程数量 通过原子操作实现计数器的加减 当计数器为0时,阻止其他进程访问资源 接口封装实现: 使用ftok生成唯一key值 通过semget创建/获取信号量集 使用semctl设置初始信号量值 封装semop实现P/V操作(申请/释放)

2025-09-10 18:18:17 10833 33

原创 【进程间通信】消息队列从原理到模式:底层逻辑、接口实战与责任链模式的设计艺术

本文介绍了基于消息块的进程间通信方式——消息队列。消息队列支持全双工通信,允许进程同时发送和接收消息。文章分为四部分:1)消息队列的接口,包括创建(msgget)、释放(msgctl)、发送(msgsnd)和接收(msgrcv)消息的接口;2)消息队列的原理,通过内核中的数据结构(如msg_msg、msg_queue)管理多个消息队列;3)接口使用方法,通过封装Msg_q类实现进程通信;4)基于消息队列的责任链模式。消息队列生命周期独立于进程,需手动释放,避免资源泄漏。

2025-09-10 18:17:41 10976 42

空空如也

空空如也

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

TA关注的人

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