自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入解析Linux页表:从虚拟地址到物理内存的映射艺术

本文深入解析了Linux页表的工作原理及其重要性。页表通过多级映射机制(页目录+二级页表)将虚拟地址转换为物理地址,避免了直接存储每个字节映射关系的内存消耗(32位系统仅需约4MB)。文章详细介绍了struct page结构对物理内存的管理方式、多级页表的优缺点(提升灵活性但增加访问开销),以及通过TLB和缓存优化的访问效率。同时探讨了缺页异常处理机制和写时拷贝技术,解释了虚拟地址的10+10+12位组成原理及其与物理内存的映射关系。最后链接了共享内存设置、文件地址查找等实际应用场景,全面展现了页表在内存管

2025-12-18 23:15:29 667

原创 Linux信号底层与系统调用本质:从硬件中断到自定义函数执行的全链路解析

本文深入解析了Linux操作系统的通信机制,重点探讨了硬件中断、异常与系统调用的协同工作原理。硬件中断由外部设备触发,通过中断控制器通知CPU处理;异常则是CPU执行指令时检测到的同步事件,分为故障、陷阱和终止三类。系统调用作为特殊的异常,实现了用户态到内核态的切换,通过中断向量表和系统调用表完成服务请求。文章还详细阐述了信号处理流程,从硬件中断触发到用户态处理函数的完整传递链,揭示了操作系统基于中断驱动的运行本质。这些机制共同构成了Linux高效可靠的进程通信与系统调用基础。

2025-12-12 00:27:21 823

原创 深入Linux文件系统:当你在Linux中打开一个文件,系统底层到底经历了什么?

本文深入解析了Linux文件系统的运作机制,重点阐述了从用户调用fopen()到操作系统打开文件的完整过程。文章首先介绍了ext*文件系统的层级结构,包括物理磁盘、分区、块组等基本单元,详细说明了超级块、inode表、数据块等核心组件的作用。随后揭示了文件打开的全流程:从路径解析、权限检查到inode查找,再到创建内核级file对象和分配文件描述符。特别探讨了目录文件与普通文件的存储差异,以及dentry缓存机制如何优化路径查找效率。最后对比了内核struct file与C语言FILE结构的区别与联系,完整

2025-12-04 15:36:12 969

原创 进程调度毫秒之争:详解Linux 进程切换中的O(1)调度

本文探讨了Linux操作系统的进程调度机制。首先分析了进程切换的本质,包括保存/恢复上下文的关键步骤。重点介绍了O(1)调度算法的实现:采用两级数据结构(优先级数组)和双数组交替机制,通过位图快速定位进程队列,实现常数时间的调度决策。文章指出该算法通过哈希表式队列和双数组轮换,既保证优先级调度又避免进程饥饿。最后总结了O(1)算法的优缺点,包括其创新性的位图查找和双数组设计,但也指出其动态优先级调整复杂等问题,为后续CFS调度器的引入做了铺垫。该算法虽已淘汰,但其设计思想仍具参考价值。

2025-12-03 17:09:39 793

原创 深入理解Linux程序加载:从ELF文件到进程地址空间的完整旅程

本文详细解析了ELF文件到运行进程的完整转换过程。首先介绍了ELF文件结构,包括节(section)与段(segment)的区别及其在链接和执行时的作用。然后阐述了进程地址空间概念,包括逻辑地址、虚拟地址和物理地址的转换关系。文章重点剖析了程序加载流程:从shell调用fork()创建子进程,到execve()系统调用执行程序替换,再到加载器根据程序头表建立内存映射,初始化task_struct、mm_struct等内核数据结构。最后讲解了动态链接机制,包括_start函数的作用、动态链接器的工作流程以及G

2025-11-30 23:00:29 761 1

原创 string.h头文件中strcpy、memset等常见函数的使用介绍与模拟实现

本文总结了C语言string.h头文件中的常用字符串和内存操作函数。字符串函数包括:strlen计算长度,strcpy/strncpy复制字符串,strcat/strncat连接字符串,strcmp/strncmp比较字符串,strstr查找子串,strtok分割字符串。内存操作函数包括:memset内存设置,memcpy/memmove内存复制,memcmp内存比较,memchr内存查找。这些函数在C++中仍然重要,特别是处理底层代码或与C交互时。文章详细说明了每个函数的原型、作用、参数、返回值和使用注意

2025-11-29 19:00:02 542

原创 【C++闯关笔记】异常的概念与智能指针shared_ptr unique_ptr的用法介绍

本文系统介绍了C++异常处理机制与智能指针的实现原理。首先对比了C语言错误码与C++异常处理的区别,阐述了异常的概念、抛出捕获机制及异常安全的重要性。重点讲解了智能指针的设计思路,包括RAII机制、auto_ptr的缺陷、unique_ptr的独占所有权和shared_ptr的共享所有权实现。详细分析了shared_ptr的循环引用问题及weak_ptr的解决方案,并给出了shared_ptr的模拟实现代码。通过异常处理与智能指针的结合,C++实现了更安全可靠的资源管理方式,为开发健壮程序提供了基础保障。

2025-11-24 22:25:54 785

原创 【C++闯关笔记】一文带你领略C++11常用语法

本文详细介绍了C++11标准的主要新特性。重点内容包括:统一的初始化语法、右值引用与移动语义、可变参数模板、lambda表达式、function包装器等核心特性。C++11作为C++发展史上的重要里程碑,引入了移动语义提高效率,完善了模板编程能力,增强了类型推导和函数式编程支持。文章通过大量代码示例演示了这些特性的使用方法,如移动构造函数实现、完美转发机制、emplace接口优化等。这些改进使C++在现代编程中保持竞争力,为后续C++14/17/20标准的演进奠定了基础。

2025-11-12 20:35:53 930

原创 【C++闯关笔记】哈希表模拟实现unordered_map与unordered_set

本文详细探讨了C++中unordered_map、unordered_set与map、set的区别与实现原理。首先分析了两类容器的底层结构差异(哈希表vs红黑树)及其特性对比,包括时间复杂度、元素顺序等关键特性。重点剖析了基于哈希表的unordered系列容器的实现:1)通过HashNode模板统一存储结构;2)使用KeyOfT仿函数解决不同类型元素的键提取问题;3)完整实现了哈希表的核心框架,包括插入、查找、删除等操作。特别深入讲解了迭代器的实现难点,包括跨桶遍历的处理机制。

2025-11-05 22:14:39 593

原创 【C++闯关笔记】哈希表(哈希桶):unordered_map与unordered_set的底层

本文系统介绍了哈希表的核心概念与实现方法。首先阐述了哈希的本质是通过哈希函数建立键值与存储位置的映射关系,重点讲解了除留余数法的哈希函数及其缺陷。针对哈希冲突问题,详细分析了开放定址法(线性探测、二次探测)和链地址法的原理与实现。文章后半部分提供了完整的哈希表和哈希桶模拟实现代码,包括插入、查找、删除等核心功能,并解释了负载因子控制、扩容机制等关键技术点。通过pair容器存储键值对,结合枚举状态管理数据,最终实现了基于vector和链表的高效哈希结构。

2025-11-04 20:28:19 893 1

原创 【C++闯关笔记】使用红黑树简单模拟实现map与set

本文详细介绍了如何使用红黑树(RBTree)作为底层结构来封装实现map和set容器。重点包括:1. 红黑树节点的设计(RBTNode)和迭代器实现,特别是operator++和operator--的中序遍历逻辑;2. 通过模板参数K、T、KeyOfT实现代码复用,其中KeyOfT仿函数用于从T类型提取键值;3. map和set的具体实现:map存储pair<K,V>,set直接存储K,两者都通过RBTree模板实例化;4. 关键设计思想是通过统一接口使红黑树能同时支持K模型(set)和K/V模型(map)

2025-11-01 19:20:24 903

原创 【C++闯关笔记】分析红黑树如此高效的原因

红黑树是一种自平衡二叉搜索树,通过颜色标记和旋转操作保持平衡。文章首先介绍了红黑树的定义和特性:每个节点红色或黑色,根节点为黑色,红色节点的子节点必须为黑色,所有路径黑色节点数相同。随后详细讲解了红黑树的插入操作,包括三种情况处理(变色、单旋+变色、双旋+变色)及其实现逻辑,确保插入后仍满足红黑树特性。最后简要说明查询操作与普通二叉搜索树相同。红黑树通过严格维护平衡性,将查找、插入、删除的时间复杂度控制在O(logN)。

2025-10-29 22:40:13 555

原创 【C++闯关笔记】分析 AVL 树如此高效的原因

AVL树是一种高度平衡的二叉搜索树,通过严格控制任意节点的左右子树高度差不超过1,确保操作效率稳定在O(logN)。文章详细解析了AVL树的特点和实现原理,重点介绍了平衡因子的概念及其更新规则,并通过具体案例分析了四种旋转情况(左旋、右旋、左右双旋、右左双旋)的处理方法。最后总结了AVL树的高效性源于其严格的平衡机制,使得增删查改操作的时间复杂度始终保持在最优状态。

2025-10-28 12:50:24 574

原创 【C++闯关笔记】map与set的使用

本文介绍了C++中关联式容器set和map的使用方法。首先区分了序列式容器和关联式容器,重点讲解了set和map的底层实现(红黑树)及其特性。对于set,详细说明了构造函数、迭代器、增删查操作以及lower_bound/upper_bound函数;对于map,则重点介绍了pair结构的应用、[]操作符原理及与set的差异。文章还对比了multiset/set和multimap/map的区别,强调前者允许值冗余带来的操作差异。最后总结了关联式容器的核心特点和使用要点,为C++开发者提供了实用的STL容器操作指

2025-10-25 22:28:20 951

原创 【C++闯关笔记】详解多态

本文深入探讨C++多态机制,重点分析动态多态的实现原理。多态分为编译时多态(函数重载/模板)和运行时多态(虚函数机制),后者需满足继承关系、虚函数重写和基类指针/引用调用三个条件。文章详细解析了虚函数表指针、虚函数表的工作机制,以及协变、析构函数重写等特殊情形,并介绍了override、final等C++11新增关键字的作用。通过对象内存布局分析,阐明了多态运行时确定函数地址的原理,指出虚函数表存储于代码段的特性。全文系统性地讲解了多态从概念到实现的完整知识体系。

2025-10-24 21:41:21 1259

原创 【C++闯关笔记】详解多态

本文深入解析C++多态机制,首先介绍多态分为静态多态(函数重载)和动态多态(虚函数重写)。重点讲解动态多态的实现条件:继承关系、虚函数重写和基类指针/引用调用。文章详细探讨了虚函数重写中的协变特例、析构函数重写必要性,以及纯虚函数与抽象类。最后揭示了多态原理:通过虚函数表和虚函数指针实现运行时动态绑定。全文由浅入深,帮助读者全面理解C++多态机制及其底层实现。

2025-10-24 21:38:24 880

原创 【C++闯关笔记】map与set底层:二叉搜索树

本文详细介绍了二叉搜索树的概念、性质及实现方法。二叉搜索树是一种具有特定排序性质的二叉树结构,其左子树节点值小于等于根节点,右子树节点值大于等于根节点。文章分析了二叉搜索树的优势在于查找效率可达O(logN),并解释了其插入、删除和查找操作的实现逻辑,包括四种删除情况的处理方式。最后提供了完整的C++实现代码,包含中序遍历、拷贝构造和析构等功能。二叉搜索树作为map/set等STL容器的底层实现基础,具有重要的学习价值。

2025-10-23 21:52:40 831

原创 【C++闯关笔记】继承语法详解

C++继承机制是面向对象设计中实现代码复用的重要手段。文章首先通过Student和Teacher类的重复代码问题引出继承概念,展示了如何通过基类Person实现代码复用。详细介绍了继承的三种方式(public/protected/private)及其访问规则,重点说明了基类private成员在派生类中的不可见性。文章还深入讲解了继承中的对象切割、成员隐藏、默认成员函数调用顺序等特性,并特别分析了菱形继承带来的数据冗余问题及其解决方案——虚继承机制。最后指出多继承是C++的设计缺陷之一,建议尽量避免使用菱形继

2025-10-22 21:54:13 652

原创 【C++闯关笔记】模板的特化

本文介绍了C++模板编程中的非类型模板参数和模板特化。非类型模板参数允许使用常量作为模板参数,但限制为整型等特定类型。模板特化分为函数模板特化和类模板特化(全特化和偏特化),用于处理特殊类型的情况。文章还指出模板定义和声明应放在同一文件中以避免链接错误,并总结了模板的优缺点:提高代码复用性和灵活性,但可能导致代码膨胀和编译错误信息复杂。

2025-10-20 22:54:21 895

原创 【C++闯关笔记】STL:deque与priority_queue的学习和使用

本文介绍了C++ STL中的deque和priority_queue两种容器适配器。首先讲解了deque的双端队列特性及其作为stack和queue底层容器的优势,但也指出了其遍历效率低的致命缺陷。接着重点讲解了priority_queue的实现原理和使用方法,包括其基于堆的数据结构特性。文章还详细给出了priority_queue的模拟实现代码,重点分析了其中的向上调整(AdjustUP)和向下调整(AdjustDown)算法,这些算法是维护堆结构的关键。最后通过仿函数的使用,展示了如何实现priorit

2025-10-20 17:42:55 900

原创 【C++闯关笔记】STL:stack与queue的学习和使用

本文介绍了C++中的stack和queue容器适配器。stack遵循LIFO(后进先出)原则,核心操作包括push、pop、top等,常用于函数调用栈、表达式求值等场景。queue遵循FIFO(先进先出)原则,核心操作包括push、pop、front等,适用于BFS、消息队列等应用。文章还提供了基于vector实现stack和基于list实现queue的模拟代码,并指出STL中实际使用deque作为底层容器。最后提醒操作时需避免空栈/队列访问,并给出了相关数据结构参考链接。

2025-09-19 21:55:27 949

原创 【C++闯关笔记】STL:list 的学习和使用

本文介绍了C++标准库中的list容器,重点阐述了其作为双向链表的特性及优势。文章首先解释了list的引入背景(解决vector中间插入/删除效率低的问题),并通过火车比喻形象说明其结构特点。接着详细讲解了list的使用方法,包括头文件包含、声明初始化、常用接口(增删查改)及迭代器使用注意事项。最后深入剖析了list的模拟实现过程,展示了节点结构、迭代器设计、核心成员函数等关键代码实现。全文通过理论讲解与代码实践相结合的方式,帮助读者全面理解list容器的工作原理和适用场景。

2025-09-04 19:06:32 782

原创 浅谈new与::operator new

本文探讨了C++中vector使用迭代器指针替代传统顺序表成员变量的原因。通过分析vector源码发现,其空间操作函数使用operator new/delete而非new/delete,实现了内存分配与对象构造的分离。operator new只分配原始内存,配合placement new在指定位置构造对象,避免了new自动调用构造函数的性能浪费。这种设计符合C++将内存分配与对象构造分离的核心思想,同时operator new的异常处理机制也更符合C++风格。虽然对vector采用三个指针的真正原因解释可能

2025-08-30 17:22:28 949

原创 【C++闯关笔记】STL:vector的学习与使用

本文介绍了C++中的vector容器,从数据结构本质将其视为功能更强大的动态顺序表。文章分为"能用"和"明理"两部分:首先讲解vector的常用接口使用方法,包括构造、迭代器、增删查改等操作;然后通过模拟实现vector底层机制,详细解析其三个核心指针成员和关键函数实现原理。重点对比了C风格顺序表与vector的差异,阐述了vector自动管理内存、动态扩容等特性,帮助读者深入理解这个常用容器的内部工作机制。最后展示了如何实现构造函数、迭代器、增删改查函数以及空间管理

2025-08-29 16:55:38 1805

原创 【C++闯关笔记】STL:string的学习和使用(万字精讲)

本文介绍了C++标准模板库(STL)中的string类,重点讲解了其常用功能和实现原理。首先概述STL的组成及string类的作用,对比了string与C风格字符数组的区别。然后详细说明string的创建方法、修改操作(增删改)、遍历方式(下标、迭代器、范围for)以及容量管理函数。特别强调了resize()与reserve()的区别,并介绍了查找(find)、截取(substr)等实用功能。最后通过模拟实现string类,包括构造函数、析构函数、成员函数等核心代码,深入解析了string的内部工作机制。

2025-08-24 18:15:48 841

原创 【C++闯关笔记】封装②:友元与模板

本文系统介绍了C++中的友元机制、内存布局、静态与const成员以及模板编程。重点解析了友元函数和友元类的使用场景及特性,详细说明了C++程序的内存分区结构,阐述了静态成员与const成员的区别与联系,最后讲解了函数模板和类模板的定义与实例化方法。文章通过具体示例,深入浅出地讲解了这些C++核心概念的应用场景和注意事项,为理解C++面向对象编程提供了全面的技术参考。

2025-08-22 20:19:22 880

原创 【C++闯关笔记】封装①:类与对象

本文介绍了C++面向对象编程中的封装概念。通过对比C语言面向过程与C++面向对象的差异,阐述了类的基本定义和访问限定符的作用。重点讲解了类的六个默认成员函数中的四个关键函数:构造函数(初始化对象)、析构函数(清理资源)、拷贝构造函数(对象复制)和赋值运算符重载(对象赋值)。文章通过洗衣服的生动例子说明面向对象的优势,并详细分析了封装带来的数据安全性、可扩展性等好处。最后提供了一个完整的Date类示例,展示了这些概念的实际应用。该文适合C++初学者理解面向对象编程的核心思想。

2025-08-21 19:54:37 941 1

原创 从C到C++入门:C++有而C语言没有的基础知识总结

本文较为系统的整理介绍了八种C++与C语言的差异,指出了一些C++经常使用而C语言完全没有的基础知识,为想要入门C++的读者,或者想要知道C++与C语言差异的读者,相信本文能为你提供帮助。

2025-08-15 16:13:06 991 1

原创 【排序算法】⑦归并排序

文章介绍了归并排序算法,这是一种基于分治策略的稳定排序方法。归并排序通过"分"(递归分解数组)和"治"(有序合并子数组)两个阶段实现排序,时间复杂度稳定为O(nlogn)。文章详细讲解了递归实现过程,包括数组分解、子数组合并等核心步骤,并提供了完整代码实现。同时分析了归并排序的优缺点:空间复杂度高(O(n))但稳定性好,适合大数据集排序。文章还指出该算法可用于链表排序,但对小数据集效率不如插入排序。

2025-08-11 19:52:21 1248

原创 【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法

本文系统介绍了快速排序算法及其三种实现方式:经典Hoare算法、挖坑法和前后指针法。文章首先阐述了快排的基本思想——通过基准值将数组分为左右子序列,采用递归方式实现。重点分析了Hoare算法的实现细节,包括三数取中优化、关键循环顺序选择等,并给出了完整代码框架。随后介绍了挖坑法和前后指针法的实现原理与代码。最后比较了三种方法的异同,指出它们都是实现分区操作的不同策略,具有O(nlogn)的时间复杂度,但都是不稳定的排序算法。文章还建议对小数组采用插入排序进行优化,以减少递归开销。全文通过图解和代码示例详细解

2025-08-11 17:22:52 1266

原创 【排序算法】⑤冒泡排序

本文是排序算法系列第五篇,主要讲解冒泡排序算法。冒泡排序属于交换排序,其核心思想是通过相邻元素比较交换,使较大元素逐渐"上浮"到正确位置。文章详细介绍了算法原理、通过图解说明排序过程,并提供了C++实现代码,其中包含提前终止的优化策略。最后分析了算法特性:时间复杂度O(N^2)(优化后效率提升约3倍),空间复杂度O(1),且具有稳定性。本文作为快速排序的铺垫,后续将重点介绍更高效的快速排序算法。

2025-08-11 17:19:47 536

原创 【排序算法】④堆排序

本文介绍了堆排序的实现原理及算法步骤。堆排序是一种基于完全二叉树结构的选择排序算法,通过构建大堆实现升序排序。文章详细讲解了堆的构建、向上/向下调整等核心算法,并提供了完整的堆排序代码实现。分析了堆排序的时间复杂度为O(nlogn),空间复杂度为O(n),属于不稳定排序。关键点在于排升序建大堆,通过不断交换堆顶与末尾元素并调整堆结构来完成排序。

2025-08-09 19:02:54 1218

原创 【排序算法】③直接选择排序

本文介绍了直接选择排序算法,分析了其实现原理与特性。该算法通过每次从未排序部分选择最小/最大元素放入已排序部分末尾来实现排序,时间复杂度为O(n²),空间复杂度O(1),属于不稳定排序。与直接插入排序相比,直接选择排序不依赖数据分布但效率固定较低,而插入排序在数据有序时可达O(n)。文章还提供了C语言实现代码,并指出后续将介绍更高效的堆排序算法。

2025-08-09 16:26:19 646

原创 【排序算法】②希尔排序

本文介绍了希尔排序算法,它是基于直接插入排序优化的一种排序方法。算法通过分组预排序(按gap间距分组)和最终直接插入排序(gap=1)两个步骤实现高效排序。文章详细解释了希尔排序的工作原理,分析了其时间复杂度约为O(N^1.3),空间复杂度为O(1),并指出其不稳定的特性。通过代码示例和图文说明,阐述了如何通过预排序使数组接近有序,从而提升整体排序效率。希尔排序适用于大规模数据排序,是直接插入排序的重要优化版本。

2025-08-09 11:58:32 1456

原创 【排序算法】①直接插入排序

本文介绍了直接插入排序算法,这是一种基础的插入排序方法。文章首先阐述了其算法思想——将未排序元素逐个插入已排序序列中,类比扑克牌整理过程。接着详细解析了实现原理,提供了C语言代码实现,并逐步讲解了升序排序过程。最后分析了该算法的特性:在接近有序数据时效率高,时间复杂度O(N^2),空间复杂度O(1),且具有稳定性。作为排序算法系列的第一篇,本文为后续更高效的排序算法(如希尔排序)奠定了基础。

2025-08-09 10:36:10 959

原创 【数据结构】二叉树②-链式二叉树

本文介绍了二叉树的链式存储实现方法,包括二叉链表结构体定义和基本操作函数。重点讲解了三种递归遍历方式(前序、中序、后序)的实现原理,以及节点统计、查找、销毁等递归函数的编写。通过队列辅助实现了层序遍历和完全二叉树判断。最后对比分析了数组存储(堆式结构)和链式存储的优缺点:数组存储适合完全二叉树,访问高效但空间利用率低;链式存储灵活支持任意树形,指针操作方便但存在空间开销。文章配有详细代码示例和执行过程分析,帮助理解二叉树链式存储的实现机制。

2025-08-05 16:18:23 1080

原创 【数据结构】二叉树①-堆

本文系统介绍了树、二叉树与堆的数据结构。首先阐述了树的基本概念(根节点、叶节点、度等)和二叉树的特殊形态(满二叉树、完全二叉树)及其数学性质。重点讲解了堆的实现原理,包括核心算法(向上/向下调整)、堆的构建(初始化、插入、删除等操作)以及完整代码实现。特别分析了堆的优缺点:高效获取极值(O(1))但无法快速查找中间元素,并探讨了堆在堆排序和TopK问题中的典型应用。文章通过代码示例和逻辑图解,完整呈现了堆这一重要数据结构从理论到实践的完整知识体系。

2025-08-04 17:51:31 1410

原创 C语言操作符补充

本文介绍了C语言中不常用但重要的操作符知识。首先讲解了原码、反码和补码的概念及转换方法,说明计算机中数据以补码存储的原因。重点解析了移位操作符(<<和>>)的运算规则及其高效性优势,以及四种位操作符(&、|、^、~)的使用方法和实际应用场景,如Linux系统编程中的进程状态处理。最后简要说明了逗号表达式的执行特性和结构体成员访问符的使用。这些知识点能提升编程效率,特别在需要直接操作二进制数据的场景中。

2025-07-15 18:40:00 906

原创 Linux进程信号详解

本文系统介绍了Linux进程信号机制,主要内容包括:信号的概念(通知机制、进程识别与保存方式)、信号产生途径(终端输入、系统调用、硬件/软件异常)、信号保存(内核三张表结构)、信号处理流程(用户态/内核态切换)及相关系统调用函数。文章还拓展了可重入函数、SIGCHLD信号应用等知识点,并提供了多个代码示例帮助理解信号机制的实际应用。通过信号,操作系统可以高效管理进程对各种事件的响应和处理。

2025-07-14 10:26:18 660

原创 深究二分查找算法:从普通到进阶

本系列遵循由实践—理论—实践的过程,首先通过一些经典题型来认识、引出算法,然后再详细讲解该算法核心逻辑以及使用方法等,最后再回到实践中用该算法解决具体问题。本篇主要介绍经典的二分算法。

2025-06-08 19:25:46 744

空空如也

空空如也

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

TA关注的人

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