- 博客(102)
- 收藏
- 关注
原创 C++ 日志系统实战第五步:日志器的设计
本文介绍日志器类(Logger)设计实现。采用建造者模式简化创建,支持同步(SyncLogger )、异步(AsyncLogger )输出模式,异步将日志放缓冲区由线程输出。因创建复杂(涉名称、等级等设置),用建造者模式保代码优雅可维护。还介绍双缓冲区异步任务处理器(AsyncLooper)提升任务处理效率,以单例模式设计管理类确保全局可访问,通过代理模式提供全局接口简化操作。
2025-05-22 20:26:00
1095
24
原创 C++ 日志系统实战第四步:设计与代码实现详解
📖本项目设计多日志器日志系统,涵盖日志等级、消息等模块,支持同步异步落地,还展示了部分代码设计~
2025-05-07 19:34:45
1070
29
原创 C++ 日志系统实战第三步:熟悉掌握各种设计模式
本文介绍设计模式😎,包括六大原则(单一职责、开闭等🤓)及单例、工厂、建造者、代理等模式,以原理结合代码示例讲解~
2025-04-25 16:24:18
1517
26
原创 C++ 日志系统实战第一步:项目功能与技术架构详解
项目笔记🔥C++ 多设计模式打造同步 & 异步日志系统!详解功能、技术,剖析日志实现原理💻✨
2025-04-23 08:00:00
2165
51
原创 【Linux】动静态库知识大梳理
在 Linux 系统编程中,动静态库极为重要。静态库(.a)在编译链接时融入可执行文件,运行时无需依赖;动态库(.so)在程序运行时链接,可被多个程序共享。制作静态库需将源文件编译为.o 文件再打包,动态库制作则需在编译时加 - fPIC 选项生成位置无关码。使用时,要注意头文件和库文件路径设置,静态库生成目标文件后删除不影响程序运行。动态库运行时可能出现加载问题,可通过拷贝库文件、建立软连接、修改环境变量或配置ldconfig解决。
2025-04-03 20:46:59
1740
29
原创 【Linux】文件系统知识梳理:从磁盘硬件到文件管理
本文围绕 Ext 系列文件系统展开,详细介绍相关知识。先阐述磁盘物理和逻辑结构,包括 CHS 和 LBA 地址及其转换,为理解文件系统奠定基础。接着引入文件系统相关概念,“块” 是文件存取最小单位,分区基于柱面划分,inode 用于存储文件元信息。重点讲解 ext2 文件系统,其将分区划分为块组,各块组包含超级块、GDT 等重要结构,共同管理文件存储与访问,还介绍路径解析、挂载分区等操作。最后对比软硬连接,硬链接通过 inode 使多个文件名对应同一文件,软链接类似快捷方式,二者用途各异.
2025-04-02 21:03:02
2421
55
原创 深入理解 Linux 基础 IO:从文件操作到缓冲区机制
本文围绕 Linux 基础 IO 展开深入探讨。先阐述文件的狭义与广义概念,指出文件操作本质是进程对文件内容和属性的操作。接着回顾 C 文件接口,包括文件的打开、读写、关闭,标准输入输出流及打开模式。随后介绍系统文件 I/O,涵盖系统调用接口、文件描述符、重定向原理及实现。深入剖析 “一切皆文件” 理念,揭示其简化资源访问的机制。还探究缓冲区机制,包含缓冲区概念、作用、类型、刷新机制以及FILE结构体与缓冲区的关系。为开发者理解和运用相关技术提供有力支撑。
2025-03-24 22:24:16
1856
32
原创 深入自制Shell:解锁Linux进程控制的实践密码
本文承接前文对 Linux 进程控制的探讨,深入研究自制 Shell 命令行解释器。首先阐述 Shell 在 Linux 系统中的核心地位,强调自制 Shell 对理解系统运行机制的重要性。接着详细剖析其实现原理,涵盖获取命令、解析命令、创建及控制子进程等核心流程,以及内建命令处理方式。随后给出完整代码示例,并添加丰富注释以助理解。最后提出优化方向,包括强化错误处理、添加命令行编辑功能和实现管道重定向功能等。
2025-03-19 18:14:55
1212
42
原创 Linux 进程控制:创建、终止、等待与程序替换全解析
本文聚焦于 Linux 进程控制的核心知识。创建、终止、等待与程序替换,讲解十分详细!
2025-03-11 17:57:36
1567
45
原创 C++11 还能这样用?lambda 表达式与包装器的进阶玩法等你探索
本文聚焦 C++ 中实用特性。lambda 表达式是匿名函数对象,语法包含捕捉列表、参数列表等,可在函数内定义。捕捉方式多样,如显式、隐式及混合捕捉,在排序、多线程、智能指针删除器定制等场景优势显著,底层由仿函数对象实现。包装器方面,std::function可包装多种可调用对象,统一类型,便于扩展;std::bind能调整可调用对象参数个数与顺序,简化固定参数函数调用。
2025-03-10 12:08:42
923
34
原创 掌握这些,C++11 不再难!(列表初始化,右值引用,可变参数模板,移动构造)
列表初始化实现统一初始化方式,支持内置与自定义类型,还引入 std::initializer_list 方便容器初始化。右值引用和移动语义区分左值、右值,可延长临时对象生命周期,解决传值返回问题,提高容器插入效率,C++11 对类型进一步细分,还涉及引用折叠和完美转发。可变参数模板支持函数和类接受任意数量和类型参数,可进行包扩展,STL 容器新增 emplace 系列接口。新类功能包括默认移动构造和赋值、成员变量缺省值等,STL 也有新容器和相关接口变化。
2025-03-09 22:20:29
1270
45
原创 探秘 Linux 系统编程:进程地址空间的奇妙世界
本文围绕 Linux 系统编程中进程地址空间展开,介绍相关知识。C 语言内存管理方面,常量字符串存于常量区且只读,线性地址分为栈区、堆区等区域,栈区地址递减、堆区递增,静态变量在全局区且生命周期特殊。使用 fork 函数时会出现同一变量地址读出不同内容的情况,这表明 C/C++ 中使用的是虚拟地址,由系统转化为物理地址。32 位机器地址空间由地址和数据总线组合而成且有区域划分,进程地址空间是内核数据结构,每个进程独有。页表管理地址空间,实现写时拷贝等机制,保障内存安全和合理使用。
2025-03-04 20:07:36
2090
58
原创 深入理解并实现自定义 unordered_map 和 unordered_set
本文聚焦 C++ 中unordered_map和unordered_set的实现,鉴于 SGI - STL30 版本无标准的这两个容器,仅存在类似功能的非标准容器hash_map和hash_set,文章基于哈希表模拟实现了自定义版本。先定义HashNode结构体构建哈希表节点,通过HashTable类实现哈希表的插入、查找、删除等核心操作,同时为其设计迭代器以支持遍历。在此基础上,分别构建unordered_set和unordered_map类,复用HashTable的功能,并给出详细代码注释。
2025-03-01 19:48:19
1412
63
原创 【C++】哈希表:从概念到代码实现
文章围绕哈希表展开全面解析,先阐述哈希基本概念,包括直接定址法及其应用实例、哈希冲突的产生与影响、负载因子对哈希表性能的作用、关键字转整数的需求以及多种哈希函数的原理。接着重点介绍处理哈希冲突的两种主要方法:开放定址法和链地址法。开放定址法通过线性探测、二次探测和双重探测解决冲突,文中给出以线性探测实现的代码,涵盖状态标识、负载因子控制、扩容及处理非整数关键字的仿函数等内容;链地址法将冲突数据用链表存储,也提供了相应代码实现,包含负载因子控制与扩容操作。
2025-02-25 17:32:02
1680
60
原创 深入剖析:基于红黑树实现自定义 map 和 set 容器
文章深入探讨了在 C++ 中基于红黑树实现自定义map和set容器的过程。首先剖析红黑树基础结构与操作,如节点结构包含颜色、指针和数据;通过左旋、右旋操作调整树结构,插入节点后用插入修复维持树的性质。插入操作先找位置再插入并修复,查找操作从根节点比较键值查找目标节点。然后基于红黑树进行map和set自定义实现,set的仿函数直接返回键,map的仿函数从键值对提取键,二者均封装红黑树提供插入等操作。最后给出测试代码验证功能。通过这些实现,展示了红黑树在关联容器中的关键作用及高效数据处理能力。
2025-02-24 13:24:38
889
36
原创 红黑树:高效平衡二叉树的奥秘
本文深入探讨红黑树,从概念、性质出发,结合代码详细阐述其节点定义、插入操作,简述验证与删除相关内容,并对比红黑树与 AVL 树,介绍其应用,旨在帮助读者全面理解红黑树原理、实现及应用场景,文末设置投票互动增强读者参与。
2025-02-15 00:33:51
1262
47
原创 AVL树:高效平衡的二叉搜索树
文章围绕 AVL 树展开,介绍其诞生背景是解决二叉搜索树在数据有序时效率低下问题。AVL 树是平衡的二叉搜索树,其左右子树高度差绝对值不超 1,节点含数据、指针及平衡因子。插入分按二叉搜索树插入和调整平衡因子两步,失衡时依插入位置有四种旋转方式恢复平衡。验证需确认其为二叉搜索树且是平衡树。删除类似二叉搜索树,但可能需调整至根节点。AVL 树查询高效,适用于数据静态场景。
2025-02-13 21:25:18
1339
50
原创 C++开发必备:精通set与map容器,提升数据处理效率
这篇文章结合了关联式容器的各个方面,从定义、特点到实现细节及应用,帮助读者全面理解和掌握set、multiset、map与multimap容器。在实际编程中,通过选择合适的容器,你将能够更高效地存储和管理数据,提高代码的执行效率和可读性。
2025-02-10 23:49:18
1050
58
原创 【C++】一文吃透二叉搜索树:从基础概念到进阶应用
本文围绕二叉搜索树展开全面解析。首先介绍其基础概念,它是特殊二叉树,节点值遵循特定大小关系,与普通二叉树差异明显。接着阐述基本操作,查找类似二分查找,平均时间复杂度为 O (log n) ;插入和删除操作依据节点情况处理,能维持树的有序性,代码通过 C++ 实现。在进阶应用方面,可用于单词拼写检查、单词计数和数据库索引优化。最后分析性能,理想平衡时操作高效,但最坏情况会退化,为解决此问题出现了自平衡二叉搜索树。掌握二叉搜索树知识,对编程实践、算法学习和应对面试都具有重要意义。
2025-02-05 20:09:18
1261
41
原创 算法每日双题精讲 —— 前缀和(【模板】一维前缀和,【模板】二维前缀和)
本文聚焦算法中的前缀和,通过两道经典题目,详细介绍了一维前缀和与二维前缀和的应用。前缀和作为一种预处理技术,能有效解决区间和相关问题。
2025-01-29 00:37:03
1257
13
原创 算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)
想快速提升算法能力吗?快来解锁二分查找的神奇应用!这篇文章带你攻克两道经典算法题。在 “寻找旋转排序数组中的最小值” 里,教你巧用二分查找,从旋转数组中精准定位最小值,告别暴力遍历的低效。“点名” 问题更是有趣,面对按字母序排列的学生名单,用二分查找瞬间判断学生是否在列,还能返回其位置。每道题都有详细的题目描述、算法原理剖析、C++ 代码实现及复杂度分析,干货满满,快来一探究竟,提升你的算法实力!
2025-01-27 00:03:44
1358
25
原创 算法每日双题精讲 —— 二分查找(山脉数组的峰顶索引,寻找峰值)
文章聚焦 “x 的平方根” 与 “搜索插入位置” 两道经典算法题,深入讲解二分查找算法的应用。“x 的平方根” 要求在不使用内置指数函数和算符的情况下,计算非负整数 x 的算术平方根并取整。利用二分查找,设定左右边界,通过比较中间值平方与 x 的大小关系不断缩小搜索区间,最终得到结果。“搜索插入位置” 是在排序数组中查找目标值,若不存在则返回按序插入的位置。同样采用二分查找,依据中间值与目标值的比较结果更新边界,循环结束后得到插入位置
2025-01-24 21:23:25
1712
50
原创 Linux 进程环境变量:深入理解与实践指南
还在为搞不懂 Linux 进程环境变量而发愁?这篇文章带你 “一键通关”!PATH 如何决定命令 “行踪”、HOME 怎样成为你的专属空间、SHELL 又怎样在背后操控一切?从 env、echo 查看变量,到 getenv 获取变量值,再到利用 environ 深入探索,一文讲清。测试 PATH、HOME 变量的奇妙实验,export、unset、set 命令的使用窍门,环境变量底层的组织架构,以及编程获取变量的方法,全部囊括。掌握这些,轻松拿捏 Linux 系统,开发运维都不在话下,赶紧读起来!
2025-01-23 16:25:50
1710
45
原创 探秘 Linux 进程:优先级、调度与切换的精妙机制
本文深度剖析了 Linux 进程管理中的关键机制。进程优先级决定了进程获取 CPU 资源的先后顺序,其数值越小越易获得资源,通过调整 nice 值可改变优先级 。Linux 内核调度算法采用双队列架构、位图定位机制和双指针切换策略,保障进程有序运行和系统高效调度。进程具有竞争性、独立性,并行与并发是多任务处理的不同策略。CPU 寄存器与进程数据交互密切,进程切换时会保存和恢复上下文数据到 PCB。这些机制协同工作,支撑 Linux 系统稳定运行,对理解系统原理和优化性能意义重大。
2025-01-22 20:11:09
1457
43
原创 探秘 Linux 进程状态:解锁系统运行的密码
文章深入探讨 Linux 进程状态。先介绍经典进程状态模型,再着重讲述 Linux 内核定义的进程状态,如运行、睡眠等状态的特点与关联。通过代码示例展示进程状态变化,分析特殊状态如磁盘休眠、停止、僵尸状态的原理及影响,强调僵尸状态需父进程处理以防资源问题。最后说明ps aux和ps axj命令用于查看进程状态的重要性,为理解和管理 Linux 进程状态提供全面知识。
2025-01-20 20:10:34
2121
68
原创 算法每日双题精讲 —— 二分查找(x 的平方根,搜索插入位置)
今天,就让我们一同聚焦于 “x的平方根” 以及 “搜索插入位置” 这两道经典题目,深度挖掘二分查找算法的奥秘与应用技巧🤓。
2025-01-16 13:43:41
1252
18
原创 算法每日双题精讲 —— 二分查找(二分查找,在排序数组中查找元素的第一个和最后一个位置)
本文围绕二分查找算法展开,针对 “二分查找” 及 “在排序数组中查找元素的第一个和最后一个位置” 两道题进行精讲。
2025-01-12 16:15:33
1239
21
原创 Linux 进程入门:带你走进操作系统的核心地带(2)
本文深入讲解 Linux 进程知识。在进程创建方面,介绍了 fork 系统调用,它有两个返回值,父子进程代码共享但数据采用写时拷贝技术并各自开辟空间,通常用 if 语句分流。对于进程状态,详细阐述了 Linux 内核源代码中定义的多种状态,如 R 运行、S 睡眠、D 磁盘休眠、T 停止、X 死亡、Z 僵死状态等,并解释了其含义。还提及通过 ps aux 或 ps axj 命令查看进程状态,以创建维持 30 秒僵死进程的代码为例说明。
2025-01-11 14:28:53
1112
47
原创 Linux 进程入门:带你走进操作系统的核心地带(1)
从计算机管理硬件需描述与组织对象引入,阐述进程概念,课本中它是程序执行实例,内核里是分配系统资源的实体。Linux 通过进程控制块 PCB(即 task_struct 结构体)管理进程,其包含标示符、状态、优先级等众多属性,进程以 task_struct 链表形式在内核组织。查看进程可利用 /proc 系统文件夹及 top、ps 等用户级工具。还能通过系统调用获取进程 id(PID)和父进程 id(PPID)了解进程关系。文章全面且生动地介绍 Linux 进程相关知识,助力读者深入理解 Linux 系统核心
2025-01-09 00:18:51
1550
26
原创 算法每日双题精讲 —— 滑动窗口(串联所有单词的子串,最小覆盖子串)
本文聚焦 “串联所有单词的子串” 与 “最小覆盖子串” 两道算法题,深入剖析滑动窗口算法的应用。对于 “串联所有单词的子串”,先点明暴力解法低效,再详述滑动窗口思路,包括计算单词总长度、用哈希表记录单词出现次数等,还给出以单词长度为单位移动窗口的优化思路及 C++ 代码,并加详细注释。对于 “最小覆盖子串”,同样阐述暴力与滑动窗口解法原理,说明用哈希表记录字符次数、移动窗口寻找最小子串的过程,以及利用变量记录窗口长度的优化方法,也附上带注释的 C++ 代码。文末设置投票,增强读者互动,助于了解学习情况。
2025-01-05 21:57:11
1884
25
原创 告别编程困惑:GDB、冯诺依曼、操作系统速通指南
文章聚焦编程基础,涵盖 GDB 调试器、冯诺依曼体系结构与操作系统知识。开篇点明编程常遇问题,掌握这些知识可化解难题。接着介绍 GDB 调试器,指出 Linux 下需加 -g 选项,阐述其启动、查看代码、运行程序等多样操作命令 。随后阐述冯诺依曼体系结构,由输入、CPU、输出单元构成,强调 CPU 与内存交互及外设经内存中转数据特点。还讲解操作系统,包括内核与其他程序,其使命为管理资源与提供执行环境,介绍管理方式及系统调用与库函数概念。文末设投票,了解读者对知识点难度感受及后续知识需求。
2025-01-03 22:41:37
1036
67
原创 掌握进度条与 Git,为你的 Linux 编程效率插上翅膀
本文聚焦 Linux 编程,阐述进度条与 Git 对提升编程效率的重要性。开篇点明二者在 Linux 编程中的关键作用。随后,先以老式打字机为例,生动诠释回车(\r)、换行(\n)概念及行缓冲区现象,并结合代码说明。接着,详细剖析进度条小程序代码,展示其实现原理。同时,全面介绍 Git 在项目管理中的运用,如安装、Github 项目创建与下载,以及 git add、commit、push 等关键操作。结尾强调掌握进度条与 Git,能助力开发者在 Linux 编程中更得心应手,鼓励不断探索创新。
2025-01-01 22:37:56
1550
19
英语六级,④ 体裁词,方便过六级
2024-09-28
英语六级,③ 常用英语单词后缀大全,方便过六级
2024-09-24
英语六级,同义替换词(含动词词组和副词词组),方便过六级
2024-09-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人