自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP Socket 详解:从入门到上手实战

本文介绍了C++中的TCP Socket编程基础,主要内容包括: TCP核心概念:面向连接、可靠传输、流量控制等特性,以及与UDP协议的对比。 Socket编程流程:详细说明了服务端(创建socket、绑定、监听、接受连接、收发数据)和客户端的实现步骤。 代码实现:提供了一个完整的Echo服务示例,包含服务端和客户端的C++实现,采用RAII思想封装Socket类。 关键问题分析:讨论了粘包问题及其解决方案、半关闭shutdown()的使用、阻塞/非阻塞模式区别,以及I/O多路复用技术。

2026-06-30 01:25:23 552

原创 UDP Socket 详解:从入门到上手实战

本文介绍了Linux下UDP Socket编程的核心原理与实践。UDP协议具有无连接、不可靠、低延迟的特点,适合音视频传输、实时游戏等场景。文章通过对比TCP/UDP差异,详细讲解了UDP数据报结构、Socket API函数,并提供了完整的C++17实现示例(包含Echo服务端和客户端代码)。重点剖析了UDP编程的四大陷阱:无连接导致的"假成功"、数据边界问题、MTU限制(建议<1472字节)以及丢包乱序处理。最后给出了可靠性优化建议,包括ACK机制、缓冲区调整等,并指出复杂场景应

2026-06-30 01:14:44 409

原创 手撕线程池:巩固Linux线程知识

本文以“手撕线程池”为主线,从零实现C语言线程池,巩固Linux线程编程。核心内容涵盖:线程池数据结构设计、三步实现法(基础版→动态扩容→优先级优化)、完整代码框架、测试用例及常见难点(虚假唤醒、死锁、优雅关闭)的解决方案。

2026-05-17 17:21:59 913

原创 手搓一个简易 Linux 进程池:巩固进程知识

本文介绍了如何通过实现一个迷你进程池来巩固Linux进程编程的核心概念。该进程池包含主进程、工作进程和管道三个角色,采用轮询策略分发任务。代码展示了进程创建、管道通信、任务执行和进程回收的完整流程,重点讲解了避免僵尸进程、管道阻塞和描述符泄漏等常见问题。通过这个实践项目,读者可以深入理解fork、pipe、waitpid等系统调用的实际应用,掌握父子进程协同工作的完整生命周期。文章还提出了支持exec执行、双向通信等进阶扩展思路,为后续学习线程池和IO多路复用打下基础。

2026-05-17 17:00:17 597

原创 效率与安全并重:C++ 线程安全

本文系统介绍了C++中实现线程安全的核心工具与方法。主要内容包括:互斥锁(std::mutex)的基本使用与RAII管理;读写锁(std::shared_mutex)在读多写少场景下的应用;原子操作(std::atomic)的性能优势;条件变量(std::condition_variable)实现线程间同步;线程局部存储(thread_local)避免竞争;以及单例模式的线程安全实现。文章还总结了常见陷阱与最佳实践,如避免返回内部引用、统一锁顺序、最小化锁范围等,并提供了不同场景下的工具选择指南。通过合理运

2026-05-13 16:06:41 778

原创 搞懂互斥、同步与异步:C++并发编程

本文深入浅出地讲解了并发编程中的三大核心概念:互斥、同步和异步。通过生活类比和C++实战代码,展示了互斥如何保护共享资源(如std::mutex),同步如何协调线程执行顺序(如std::condition_variable),以及异步如何提高程序响应能力(如std::async)。文章还通过生产者-消费者模型演示了三者的综合应用,并澄清了常见误区。最后总结了三者的区别与联系,帮助读者建立清晰的并发编程思维框架。

2026-05-13 15:05:46 671

原创 互斥锁与条件变量:优雅的线程同步

本文深入讲解了多线程编程中的互斥锁和条件变量两大核心同步机制。详细分析了其必须配合互斥锁使用的原因,以及如何避免虚假唤醒。文章通过生产者-消费者模型的完整代码示例,展示了二者的协同工作方式,并总结了常见误区和最佳实践,包括锁粒度控制和通知方式选择等。

2026-05-13 14:52:50 477

原创 C++多线程编程:从入门到生产者-消费者模型

本文系统介绍了多线程编程的核心概念与实践。详细讲解了线程模型、生命周期状态转换,并通过代码示例演示了线程创建、竞态条件、互斥锁使用和生产者-消费者模型等核心内容。

2026-05-11 19:02:06 633

原创 MySQL零基础入门:从建库到增删改查

本文系统介绍了MySQL数据库的核心操作,围绕库、表、数据三个维度展开。主要内容包括:数据库的创建、查看和删除;数据表的结构定义与修改;表数据的增删改查操作。

2026-05-11 18:43:30 333

原创 深入学习Linux进程间通信:解析消息队列

本文深入探讨Linux消息队列的核心原理与应用,重点分析SystemV实现方式。文章详细讲解SystemV消息队列的API使用、消息类型妙用、阻塞规则等核心知识点,提供完整代码示例,并指出常见陷阱如消息残留、结构体对齐等问题。

2026-05-04 23:47:41 690

原创 深入学习Linux进程间通信:共享内存

共享内存技术是进程间通信(IPC)中性能最高的方式,它通过内核开辟物理内存区域并让多个进程的页表映射到同一内存区域,实现零拷贝数据共享。本文系统介绍了共享内存的核心概念、实现方式及同步机制

2026-05-04 23:28:34 542

原创 Linux信号(Signal)

本文介绍了Linux信号机制的核心概念和使用方法。主要内容包括:信号的定义(软件中断)、生命周期(产生-注册-递送-处理)、必须掌握的常用信号(如SIGINT、SIGTERM等)、三种处理方式(忽略/默认/自定义)。重点讲解了信号API(signal/kill/alarm/sigaction)、信号集与阻塞机制、可重入函数的安全使用原则(避免在信号处理函数中使用printf等不安全函数)。文章还提供了优雅退出、超时控制、子进程回收等常见编程模式,以及调试命令和常见错误排查方法。

2026-05-03 20:45:43 1493 1

原创 Linux管道(Pipe)深度指南:从原理到实战

本文深入解析Linux管道通信的核心技术,对比匿名管道与命名管道的特性差异。详细讲解匿名管道的fork实现和命名管道的mkfifo用法,重点剖析管道阻塞行为和PIPE_BUF原子性问题。文章包含多进程通信的典型代码示例,指出常见陷阱如死锁、数据截断等,并提供strace等调试工具的使用方法。最后介绍双向通信方案和全双工socketpair的进阶用法,帮助开发者深入理解Linux进程间通信机制,规避实际开发中的常见问题。

2026-05-03 20:01:11 742

原创 文件描述符(fd)从入门到理解

本文深入浅出地讲解了Linux文件描述符(fd)的核心概念与关键操作

2026-05-02 19:47:50 1060

原创 sizeof 与 strlen:C 语言中最容易混淆的“长度”陷阱

本文深入解析sizeof与strlen的核心差异

2026-05-02 15:10:26 457

原创 深入理解进程:从PCB内核结构到写时拷贝的底层实战

本文从内核视角深入解析了进程的底层机制。

2026-05-01 23:40:20 581

原创 中断 · 软硬中断 · 时钟中断 · 缺页中断——从CPU引脚到操作系统调度

本文深入解析Linux系统中的中断机制,从硬件到内核的全路径视角,重点对比了硬件中断、软件中断、时钟中断和缺页中断四大类型及其对程序性能的影响。

2026-05-01 17:48:26 929

原创 C++11新特性

C++11通过智能指针(unique_ptr/shared_ptr)实现了自动化内存管理,引入移动语义(右值引用/std::move)显著提升性能,支持Lambda表达式和auto类型推导提升代码简洁性。异常处理机制通过栈展开确保资源安全释放,完美转发(std::forward)解决了泛型编程中的参数传递问题。其他重要特性包括统一初始化、nullptr、override/final和constexpr等,使C++成为更安全高效的现代编程语言。这些改进使C++在保持高性能的同时,显著提升了开发效率和代码可靠性

2026-04-29 00:34:57 533

原创 红黑树详解

红黑树是一种自平衡二叉搜索树,通过颜色约束保持近似平衡。文章详细解析了红黑树的五大性质、节点结构设计(新节点默认为红色)和插入操作的核心逻辑。

2026-03-26 23:58:50 714

原创 Linux 基础指令简单介绍

本文介绍了Linux系统中常用的基础命令,按功能分为八类

2026-03-26 22:02:45 530

原创 C++AVL树详解,含四种旋转

AVL树是一种自平衡二叉搜索树,通过平衡因子(左子树高度-右子树高度)确保任意节点左右子树高度差绝对值≤1。核心操作包括四种旋转:右旋(处理左左型失衡)、左旋(右右型)、左-右旋(左右型)和右-左旋(右左型)。

2026-03-12 17:19:56 648

原创 C++ Lambda 表达式详解

本文介绍了C++11引入的Lambda表达式特性。重点讲解了捕获子句的用法,包括按值捕获([=])、按引用捕获([&])及混合捕获方式。强调Lambda能大幅简化代码,特别适合与STL算法配合使用,是C++11的重要特性之一。

2026-03-12 16:35:29 610

原创 C++ 智能指针详解

C++智能指针是自动管理动态内存的RAII工具,主要包括unique_ptr、shared_ptr和weak_ptr三种类型。智能指针能有效防止内存泄漏,提升代码安全性和可维护性。

2026-03-06 23:13:17 804

原创 右值引用和移动语义详解

C++11引入的右值引用和移动语义解决了临时对象拷贝效率低下的问题。这些特性特别适用于容器操作、大型对象返回等场景,能显著提升程序运行效率。使用时需注意移动后对象状态管理及异常安全问题。

2026-03-06 19:07:12 591

原创 push_back和emplace_back的区别与选择

摘要:C++ STL中的push_back和emplace_back方法在添加元素时存在本质区别。push_back需要先构造完整对象再拷贝/移动到容器中,而emplace_back直接在容器内存中构造对象,避免了临时对象的创建和移动操作。

2026-02-07 16:09:42 1318

原创 Set 和 Map 深入详解及其区别

C++ STL中的关联式容器(map/set)基于红黑树实现,存储有序元素。map存储键值对,支持快速查找和修改;set存储唯一值,用于去重和集合运算。两者都提供O(logn)的插入、删除和查找操作,支持自定义比较函数。multimap和multiset允许键重复。主要区别在于map维护键值映射关系,set仅维护值集合。这些容器在需要有序存储和快速查找的场景中非常高效。

2025-12-20 16:59:10 909

原创 二叉树的遍历(全面总结)

本文介绍了二叉树前序、中序和后序三种非递归遍历的实现方法。三种遍历均使用栈结构辅助实现

2025-12-17 22:15:00 494

原创 二叉搜索树与双向链表

摘要:本文介绍了将二叉搜索树(BST)转换为排序双向循环链表的算法。

2025-12-16 21:51:49 458

原创 二叉树最近公共祖先(LCA)问题详解

本文介绍了二叉树中寻找两个节点最近公共祖先(LCA)的两种方法。递归方法通过深度优先搜索,判断节点在左右子树中的分布情况来定位LCA,时间复杂度为O(n)。非递归方法使用父指针映射,将问题转化为链表相交问题,通过建立父节点关系表和回溯路径来查找LCA。两种方法各有特点,递归简洁但可能栈溢出,非递归更稳定但需要额外空间存储父节点信息。

2025-12-10 00:46:36 1194

原创 【数据结构】二叉搜索树

本文介绍了二叉搜索树的基本操作,包括查找、插入和删除节点的方法。文章还给出了C++实现代码,包含节点类模板和二叉搜索树类模板,演示了插入、查找、删除和中序遍历等核心功能。

2025-12-05 00:02:31 617

原创 【C++】多态与虚函数

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

2025-12-03 19:24:17 1098

原创 C++继承详解

摘要:继承是面向对象编程中实现代码复用的重要机制,允许派生类在基类基础上扩展功能。文章详细介绍了三种继承方式(公有、保护、私有)的特点及访问权限变化,阐述了基类与派生类间的对象赋值转换规则。同时分析了继承体系中的作用域规则、派生类成员函数特性,以及友元关系的不可继承性。针对复杂的菱形继承问题,提出了虚继承解决方案。最后对比了函数重载、隐藏和覆盖三者的区别,重点说明了虚函数实现多态性的原理。全文系统性地讲解了继承机制的核心概念及其应用场景。

2025-12-02 18:37:35 989

原创 【C++STL】List详解

list是C++的一个序列容器,允许在序列中的任意位置进行常数时间的插入和删除操作,并支持双向迭代。列表容器采用双向链表实现,与其他基本标准序列容器(数组、向量和双端队列)相比,列表在插入、提取和移动容器内已获得迭代器的任何位置的元素方面通常表现更好,主要缺点是它们无法通过位置直接访问元素

2025-11-25 02:40:30 1244

原创 【C++STL】vector详解

本文介绍了C++ STL中的vector容器,包括其基本概念、内存模型及常用接口。vector作为动态数组,支持快速随机访问和自动扩容,但中间插入/删除操作效率较低。详细讲解了vector的初始化、遍历(operator[]、at()、迭代器)、空间管理(resize/reserve)以及增删查改操作(push_back/pop_back/find/insert/erase/swap)。特别强调了迭代器失效规则和不同编译器的扩容策略差异。vector适合需要频繁随机访问和尾部操作的场景。

2025-11-20 08:00:00 1320

原创 C++模板初阶

摘要:C++泛型编程通过模板实现代码复用,包括函数模板和类模板。函数模板允许编写与类型无关的通用函数,编译器根据调用时的实参类型自动实例化具体版本。函数模板支持隐式和显式实例化,遵循精确匹配优先的规则。类模板则用于创建通用数据结构,实例化时需要显式指定类型参数。泛型编程减少了代码重复,提高了可维护性,是C++重要编程范式。

2025-10-15 15:52:59 1276

原创 C/C++内存管理(new,delete)

本文深入探讨了C/C++内存管理与动态分配机制。主要内容包括:1) C/C++程序内存划分为代码区、全局/静态区、栈区、堆区和常量区;2) C语言通过malloc/calloc/realloc/free管理动态内存;3) C++引入new/delete运算符,对内置类型只管理内存,对自定义类型还处理构造/析构函数;4) 底层通过operator new/delete函数实现,分别封装malloc/free;5) 定位new表达式可在指定内存位置构造对象;6) 比较了malloc/free与new/delet

2025-10-14 20:58:26 945

原创 类与对象(下)

本文摘要: 本文深入探讨了C++中的构造函数初始化列表、隐式类型转换、static成员、友元和匿名对象等核心概念。重点内容包括:1) 初始化列表的使用场景和重要性,特别是const成员、引用成员和继承情况下的必要性;2) 隐式类型转换的机制及优缺点,强调推荐使用explicit避免潜在问题;3) static成员的特性及其定义方式;4) 友元机制的工作原理及其对封装性的影响;5) 匿名对象的定义、生命周期和应用场景。文章通过大量代码示例详细解析了这些特性的正确使用方式及其潜在风险,为深入理解C++面向对象编

2025-10-10 17:35:40 926

原创 类与对象(中)

这篇文章介绍了C++类的6个默认成员函数及其特性。主要内容包括:1)构造函数用于对象初始化,支持重载;2)析构函数负责资源清理,在对象生命周期结束时自动调用;3)拷贝构造函数创建对象副本,默认实现浅拷贝;4)运算符重载允许自定义类型运算符行为;5)const成员函数修饰this指针,限制成员修改;6)取地址运算符重载通常不需要自定义实现。文章重点说明了何时需要自定义这些成员函数,特别是当类管理动态资源时需要自定义析构函数和拷贝构造函数。

2025-10-09 18:28:28 1176

原创 C++运算符重载

本文介绍了C++运算符重载的基本概念和实现方法。运算符重载允许为自定义类型定义运算符行为,增强代码可读性。文章详细讲解了可重载的运算符类型、基本语法规范,以及不可重载的运算符。通过日期类Date的示例,展示了赋值运算符、比较运算符、算术运算符、自增运算符和流操作符等常见运算符的重载实现技巧,包括参数处理、返回值优化和特殊情况处理等关键点。最后强调了运算符重载的注意事项和最佳实践。

2025-10-09 18:19:15 1224

原创 类与对象(上)

本文系统介绍了C++面向对象编程的核心概念。主要内容包括:1)面向过程与面向对象的区别;2)类的引入与两种定义方式;3)访问限定符(public/private/protected)及其封装特性;4)类的实例化过程;5)类对象大小的计算规则;6)成员函数的this指针及其应用场景。重点阐述了C++通过类将数据与操作封装在一起,利用访问控制实现信息隐藏的特性,以及this指针在成员函数中的重要作用。这些概念构成了C++面向对象编程的基础框架。

2025-09-29 18:25:44 1368

空空如也

空空如也

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

TA关注的人

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