自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Stellen的博客

大二在读

  • 博客(51)
  • 收藏
  • 关注

原创 【Linux 修炼录】告别 Permission denied:一文讲透 Linux 权限体系与底层逻辑

在 Linux 多用户环境下,权限机制是界定操作边界与保障系统安全的核心基石。本文从“谁能对哪些文件做什么”切入,深入拆解 root 与普通用户的角色边界、7 种文件类型及 rwx 权限在文件与目录上的底层差异,重点讲透“删除文件取决于父目录写权限”的关键机制;结合终端实操,详解 chmod、chown、chgrp 的用法与 sudo 提权流程;最后通过严谨的二进制位运算推导 umask 默认掩码,并剖析粘滞位(Sticky Bit)解决共享目录误删难题的工程实践。

2026-11-08 13:58:09 526 21

原创 【Linux 修炼录】从文本过滤到性能排查,掌握 whereis、grep、top、tar 等 7 大核心指令

本篇承接前两篇的文件管理与文本查看基础,聚焦日常运维与开发中的高频需求,系统梳理7个核心指令:利用whereis定位程序的二进制、手册与源码;用alias为常用长命令定制快捷别名;通过grep实现文本行的多模式过滤与检索;使用top动态监控系统负载与进程资源,厘清RES驻留内存与Load Average的综合分析方法;掌握跨平台压缩工具zip/unzip的递归打包与内容预览;区分tar的归档与压缩机制及核心参数组合;最后通过uname -r核验底层内核版本。全文结合终端实操与避坑细节,兼顾技术严谨与实用性。

2026-11-08 13:58:06 261 20

原创 【Linux 修炼录】:文件查看、时间查询与查找

本文围绕 Linux 中 9 个常用命令展开,介绍 cat、more、less、head、tail、date、cal、find 和 which 的基本用法与常见选项。从文件内容查看、分页浏览,到时间查询、日历显示,再到文件搜索和命令路径定位,结合实际示例帮助理解命令的使用场景,逐步掌握 Linux 日常操作中常用的基础指令。

2026-10-31 23:38:09 481 27

原创 【Linux 修炼录】开篇:初入终端,掌握 9 个必备基本指令

本文以 CentOS 7.6 为例,介绍 Linux 基础操作:使用 pwd 查看当前目录,ls 列出文件与目录(支持 -l、-a 等选项),cd 切换目录(含绝对/相对路径及 cd - 回溯功能),touch 创建文件或更新时间戳,以及 mkdir 创建目录(重点讲解 -p 递归创建)。通过实践掌握核心命令,为后续学习权限、进程等打下基础。

2026-10-31 23:38:01 400 23

原创 手撕 unordered_set 和 unordered_map,剖析哈希表底层实现

本文从哈希表的基本原理出发,围绕哈希冲突与负载因子,依次介绍开放定址法、链地址法及其优缺点,并基于 SGI STL 的设计思路,逐步实现哈希桶、扩容机制与迭代器。在此基础上,通过泛化底层存储类型 T 和引入 KeyOfT 仿函数,实现哈希表底层复用,最终封装出 unordered_set 和 unordered_map,支持插入、查找、删除、迭代器遍历及 operator[] 等操作。通过实际编码、测试与问题排查,深入理解无序关联容器的底层结构与实现思路。

2026-10-10 22:50:08 597 31

原创 unordered_map和unordered_set的使用

本文介绍 C++ STL 中 unordered_set 和 unordered_map 的使用,从哈希表的基本原理出发,讲解 Key、哈希函数与相等判断的关系,以及两种容器的基本操作、自定义 Key、与 set/map 的区别和选择。文章还介绍了 unordered_multiset、unordered_multimap 等多重无序容器,以及哈希桶、负载因子和 reserve、rehash 等相关接口。通过示例理解无序关联容器的使用方式与设计特点,掌握其平均 O(1) 的增删查效率及最坏情况下可能退化至

2026-10-10 22:50:05 303 29

原创 AVL树——从平衡因子到四种旋转

本文主要介绍 AVL 树的核心原理与实现,从二叉搜索树的退化问题出发,引出平衡因子和 AVL 树的平衡规则。文章详细讲解插入过程中平衡因子的更新、停止条件,以及左左、右右、左右、右左四种失衡情况和对应的旋转操作,并结合代码分析指针调整与平衡因子的维护。同时介绍查找、平衡检测及测试方法,帮助理解 AVL 树如何通过旋转将树高控制在 `O(logN)`。

2026-09-29 15:31:27 413 26

原创 set和map的使用——从基础接口到实际应用

本文介绍 C++ STL 中 `set` 与 `map` 两类关联式容器,从序列式容器与关联式容器的区别入手,讲解 `set`、`multiset`、`map`、`multimap` 的基本特性、构造、遍历以及增删查操作,重点分析 `lower_bound`、`upper_bound` 和 `map::operator[]` 的使用。最后通过环形链表判断、随机链表复制两个实例,展示 `set` 与 `map` 在实际问题中的应用。

2026-09-29 15:31:20 305 25

原创 二叉搜索树:从树形结构到高效查找

本文主要记录二叉搜索树的学习与实现过程,从“左小右大”的性质出发,理解它为什么能够根据节点大小快速确定查找方向。随后从零实现插入、查找和删除,其中删除是本文的重点,详细分析了节点的四种情况,以及左右孩子都存在时如何通过右子树最小值完成替代。实现过程中还遇到了 `RightMinP` 空指针的问题,通过分析具体场景理解了其产生原因和解决方法。最后扩展到 key 和 key/value 两种搜索场景,为后续学习 AVL 树、红黑树以及 map、set 等内容打下基础。

2026-09-21 10:05:33 221 29

原创 多态:从多种形态到运行时绑定

本文系统学习 C++ 中的多态,从实际场景出发理解多态如何让调用代码与具体类型解耦,并重点学习运行时多态的构成条件、虚函数与虚函数重写。随后介绍纯虚函数与抽象类,以及协变、析构函数重写、override 和 final 等细节。文章进一步从底层分析虚表指针、虚函数表、动态绑定与静态绑定,理解多态的实现原理,并探讨构造、析构函数中调用虚函数不会产生多态的原因。最后对比重载、重写和隐藏,加深对三者区别与实际调用行为的理解。

2026-09-21 10:05:29 357 27

原创 继承详解:从代码复用到继承体系设计

本篇系统学习了 C++ 中的继承机制。首先介绍了继承的基本概念、使用方式以及三种继承方式与访问限定符之间的关系,理解了继承如何实现代码复用。随后学习了基类与派生类之间的赋值转换、作用域隐藏、友元和静态成员等特性,并深入分析了派生类默认成员函数中构造、拷贝构造、赋值重载和析构函数的调用规则。之后进一步学习了多继承、菱形继承以及虚继承,理解了继承体系中的数据冗余和二义性问题。最后对比了继承与组合的区别,明确了 is-a 与 has-a 的关系,理解了实际开发中应合理选择继承,而不是为了代码复用盲目使用继承。

2026-09-03 13:28:57 428 39

原创 基础算法 | 高精度算法练习

在算法竞赛中,当数据范围超过常规整数类型的表示范围时,需要借助高精度算法进行计算。本文以高精度加法、减法、乘法和除法为例,详细介绍了如何通过字符串存储大整数,并利用数组模拟竖式计算过程。通过逆序存储每一位数字,分别处理进位、借位以及前导零等问题,实现大整数之间的运算。同时总结了高精度算法的通用模板,帮助理解其核心思想:将复杂运算拆解为对每一位数字的模拟处理,从而突破数据范围限制,提高算法设计能力。

2026-09-03 13:28:40 848 27

原创 模板进阶:深入理解模板机制

本文在模板基础知识的基础上,进一步深入学习 C++ 模板机制。文章首先介绍非类型模板参数的概念、使用限制及其在 `array` 中的应用;随后重点分析模板特化的意义,分别讲解函数模板特化以及类模板的全特化和偏特化,理解如何针对特殊类型提供不同的实现。接着结合多文件编译过程,分析模板分离编译产生问题的原因,并介绍将声明与定义放在一起以及显式实例化两种解决方式。通过这些内容,可以进一步认识模板不仅能够实现泛型编程,还可以根据不同需求生成和定制代码,为后续深入理解 C++ 泛型编程与 STL 打下基础

2026-08-25 17:32:35 414 33

原创 模板初探:泛型编程与模板基础

本文从泛型编程出发,介绍了 C++ 模板的基本概念与使用方法。文章首先通过函数重载引出模板产生的意义,进一步讲解函数模板的定义、原理、实例化方式以及模板参数匹配规则,并结合具体代码分析隐式实例化与显式实例化的区别。随后介绍类模板的定义与实例化方式,理解类模板参数与具体类型之间的关系。通过对这些基础内容的学习,可以初步认识 C++ 模板在提高代码复用性和实现泛型编程中的作用,并为后续学习模板参数、特化等进阶内容打下基础。

2026-08-25 17:29:02 288 29

原创 deque与priority_queue:底层原理、接口分析与模拟实现

这篇文章围绕 deque 和 priority_queue 展开,重点分析了两者的底层结构与实现原理。通过学习 deque 的中控数组、缓冲区和迭代器,理解了它为何能够高效进行头尾操作,以及为什么遍历效率不如 vector。同时进一步理解了 stack、queue 和 priority_queue 作为容器适配器的设计思想,并通过堆的向上、向下调整以及仿函数,完成了 priority_queue 的模拟实现。

2026-08-15 17:29:37 573 36

原创 stack与queue:底层实现与容器适配器

本文围绕 stack 与 queue 展开,首先介绍了两者的基本特点、核心接口及使用方法,并分别采用 vector 和 list 完成了直观的模拟实现。在此基础上,进一步引出容器适配器的概念,理解其本质是对已有底层容器进行封装,只保留特定场景所需的接口。最后通过模板参数将 deque 作为默认底层容器,为后续深入学习 deque 的底层结构与实现原理做好铺垫

2026-08-15 17:29:24 314 28

原创 手撕STL:list底层结构与迭代器实现

本文围绕 C++ STL 中 list 容器展开源码分析与模拟实现,深入探究双向链表的底层结构以及迭代器的设计原理。首先介绍 list 与 vector 在底层结构和使用场景上的区别,理解双向链表在插入、删除操作中的优势;随后从节点结构、迭代器封装、运算符重载等,逐步实现简易版 list。同时结合 STL 源码,分析普通迭代器与 const_iterator 的设计思想,理解泛型编程与封装思想在 STL 中的应用。通过本篇学习,可以进一步掌握 C++ 容器底层实现原理,为后续深入学习 STL 源码打下基础

2026-08-10 22:27:56 568 30

原创 list容器详解——双向链表的封装与使用

本文详细介绍 C++ STL 中 list 容器的底层原理与使用方法。首先通过对比 vector 与 list 的特点,分析双向链表在频繁插入、删除场景中的优势;随后介绍 list 的常用接口,包括构造、迭代器、容量、元素访问以及修改操作等内容。同时深入讲解 list 迭代器的设计特点、迭代器失效规则以及特有接口的使用。通过源码分析与模拟实现,进一步理解 STL 容器背后的封装思想与设计理念,掌握双向链表结构与泛型编程思想,为后续学习 C++ STL 源码与高级数据结构打下基础。

2026-08-10 22:14:47 373 24

原创 vector初识——从动态数组到STL核心容器

vector 是 C++ STL 中最常用的顺序容器之一,它本质上是一种支持动态扩容的数组结构。本文从 vector 的底层特点出发,介绍其连续空间存储方式、迭代器机制以及常用接口的使用方法,包括构造、访问、插入、删除、容量管理等内容。同时深入分析 size、capacity、reserve 和 resize 之间的区别,理解 vector 动态扩容背后的实现逻辑。通过学习 vector,不仅掌握 STL 容器的基本使用方式,也为后续深入理解容器底层实现和模拟实现打下基础。

2026-08-04 16:38:36 558 36

原创 string(下):揭秘 string 的底层奥秘

string 不仅是一个方便使用的字符串类,其背后还涉及资源管理、动态内存以及对象拷贝等重要 C++ 核心知识。本篇将从浅拷贝问题入手,分析深拷贝产生的原因,并模拟实现一个简化版 string 类。通过实现构造函数、析构函数、赋值运算符、扩容机制、插入删除、查找以及输入输出等功能,深入理解字符串类背后的设计思想。

2026-07-27 15:50:37 455 32

原创 string(上):从字符数组到string

在 C++ 中,字符串是程序开发中最常用的数据类型之一。本篇将从 C 语言中的字符数组与字符串处理方式出发,逐步认识 C++ 中的 string 类,理解其出现的意义。文章详细介绍 string 的常用接口,包括构造、容量管理、遍历访问、字符串修改、查找以及常见非成员函数等内容,帮助读者掌握 string 的基本使用方法,为后续深入理解其底层实现打下基础

2026-07-27 15:49:58 352 30

原创 内存管理:掌控对象的诞生与销毁

本文主要介绍了C/C++程序的内存分布和管理方式: 内存分布:详细讲解了代码段(.text)、常量区(.rodata)、数据段(.data)、BSS段(.bss)、堆(Heap)、内存映射段和栈(Stack)各自的特点和作用。 内存管理方式: C语言使用malloc/calloc/realloc和free C++使用new和delete操作符 比较了new/delete与malloc/free的区别,特别是对自定义类型的构造/析构函数调用 实现原理:分析了new/delete底层通过operator new

2026-06-18 16:25:27 749 41

原创 类和对象(下):初始化列表与隐式类型转换

本文介绍了C++中构造函数的初始化列表、类型转换以及static成员的相关知识。主要内容包括: 初始化列表:不同于函数体内赋值,初始化列表可直接初始化成员变量,语法为:成员名(初始值)。特点包括: 每个成员变量只能出现一次 引用、const成员和没有默认构造的类类型必须在初始化列表初始化 C++11支持成员变量声明时给缺省值 初始化顺序按声明顺序而非列表顺序 类型转换: 内置类型可隐式转换为类类型(通过构造函数) 类类型之间也可隐式转换(需相应构造函数) 使用explicit可禁止隐式转换 static成员

2026-06-18 16:24:23 477 37

原创 类和对象(中):对象生命周期与运算符重载

本文介绍了C++类中的默认成员函数,重点关注构造函数和析构函数。构造函数在对象创建时自动调用,用于初始化成员变量,具有无返回值、可重载等特点,推荐使用全缺省构造函数。析构函数在对象生命周期结束时自动调用,用于资源清理,类名加~作为标识。编译器默认生成的构造函数和析构函数对内置类型不做处理,但对自定义类型会调用其默认构造/析构函数。大多数情况下需要手动实现这些函数,特殊场景下编译器生成的默认函数可能够用。

2026-06-11 19:23:00 527 34

原创 类和对象(上):走进面向对象编程

本文介绍了C++中类的定义与实例化相关知识点。主要内容包括:1. 类定义格式与访问限定符(public、private、protected);2. 类域概念及作用域解析符的使用;3. 实例化过程和对象内存布局(内存对齐规则);4. this指针的原理与经典面试题解析;5. 通过对比C语言和C++实现的栈结构,初探面向对象封装特性。文中通过代码示例详细说明了类成员函数调用机制、this指针隐式传递等核心概念,并对比了C语言面向过程与C++面向对象实现方式的差异。

2026-06-11 19:22:18 332 35

原创 一篇搞定C++基础语法与核心机制

本文介绍了C++的基础语法特性,包括从C语言到C++的过渡、命名空间、输入输出、函数增强(缺省参数、函数重载、内联函数)、引用以及空指针处理。文章通过代码示例对比C与C++的区别,重点讲解了C++的面向对象特性和高效编程技巧。文章还强调了C++标准库的使用和项目开发中的注意事项,适合C++初学者快速掌握核心语法概念。完整代码示例已同步至GitHub仓库。

2026-06-05 16:14:22 516 39

原创 基础算法 | 模拟算法练习

本文详解一下三题:1、多项式输出 2、蛇形方阵​​3、字符串的展开精心梳理思路,提高算法能力

2026-06-05 16:14:04 774 31

原创 万字详解八大排序算法,从原理到代码一网打尽

本文系统讲解了八种经典排序算法的原理与实现,包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序,并简要介绍了计数排序。每种算法从定义、工作原理、代码实现(含递归/非递归版本)、时空复杂度到适用场景进行详细解析,重点对比了各算法的稳定性(如插入/归并排序稳定,快排/希尔排序不稳定)和效率差异(快排/归并O(nlogn)最优,冒泡O(n²)最差)。特别针对快排和归并排序给出栈溢出风险的迭代解决方案,并通过三数取中等优化策略提升性能。全文通过图示和代码注释阐明核心思想,提供算法选型参考

2026-05-28 23:26:00 794 41

原创 二叉树入门:从概念到代码实现

本文介绍了树和二叉树的基本概念与实现。主要内容包括:1.树的基本术语(根节点、子节点、深度等)和分类(二叉树、二叉搜索树等);2.二叉树的两种存储结构(顺序存储和链式存储);3.二叉树的四种遍历方式(前序、中序、后序、层序)及其递归实现;4.二叉树相关操作(节点个数、叶子节点个数、第k层节点个数)的递归算法实现。文章通过代码示例和递归流程图详细讲解了二叉树的各种操作,适合数据结构初学者学习二叉树的基本概念和实现方法。

2026-05-28 23:24:28 415 32

原创 数据结构堆详解:原理、实现与应用

本文介绍了堆的概念、实现及应用。堆是一种特殊的完全二叉树,分为最大堆和最小堆两种类型,通常用数组实现。文章详细讲解了堆的初始化、插入(使用向上调整算法)、删除(使用向下调整算法)等基本操作,并给出了完整的C语言实现代码。重点分析了堆排序算法,比较了两种建堆方法的时间复杂度,指出从倒数第一个非叶节点开始向下调整的效率更优。最后讨论了TopK问题的解决方案,指出求前k大元素应建小根堆,求前k小元素应建大根堆。文章通过图示和代码示例,系统性地阐述了堆数据结构的核心原理和实际应用。

2026-05-10 23:12:56 756 34

原创 【栈与队列经典OJ】

本文介绍了四种经典数据结构问题的C语言实现方法:1. 有效的括号:使用栈结构实现括号匹配检查,时间复杂度O(n);2. 用队列实现栈:通过两个队列的交替操作模拟栈的先进后出特性;3. 用栈实现队列:利用两个栈分别处理入队和出队操作;4. 循环队列:使用数组实现循环队列,重点解决判空/满条件。每种实现都包含详细的分析过程、代码示例和注意事项,展示了数据结构之间的相互转换技巧和实现思路。

2026-05-10 23:12:42 503 32

原创 数据结构队列详解:从概念到代码实现

本文介绍了队列的基本概念和实现方法。队列是一种遵循先进先出(FIFO)原则的线性数据结构,可以使用数组或链表实现。作者详细分析了链表实现的优势,并提供了完整的代码实现,包括初始化、入队、出队、获取队头/队尾元素、获取元素个数、判空和销毁等功能。测试代码验证了各功能的正确性。文章通过对比数组和链表的实现复杂度,最终选择了链表实现队列,并优化了入队操作的时间复杂度。

2026-04-26 17:24:33 1005 42

原创 数据结构入门:栈实现全解析

本文介绍了栈的基本概念及代码实现。栈是一种遵循后进先出(LIFO)原则的线性数据结构,支持入栈(Push)和出栈(Pop)操作。文章详细比较了数组和链表实现栈的优劣,最终选择数组实现方式。代码部分完整实现了栈的初始化、入栈、出栈、获取栈顶元素、获取栈大小、判断栈空和销毁等核心功能,并通过测试用例验证了各功能的正确性。文中还特别强调了边界条件的处理,如栈空判断和内存管理等问题,为读者提供了完整的栈数据结构实现方案。

2026-04-26 17:24:29 926 24

原创 双向链表及链表篇总结

本文详细介绍了双向循环链表的C语言实现,重点讲解了其核心功能实现逻辑。主要内容包括:1. 双向链表的结构定义和初始化,通过哨兵位简化操作;2. 实现了尾插、头插、尾删、头删等基本操作,时间复杂度均为O(1);3. 完成了查找、指定位置插入删除、销毁等进阶功能;4. 对比分析了单链表与双链表、顺序表与链表的性能差异,特别指出顺序表因内存连续而具有更好的缓存利用率。文章通过代码实现和逻辑分析,展示了双向链表在插入删除操作上的优势,为数据结构学习提供了实用参考。

2026-04-25 15:53:34 735 25

原创 【链表经典OJ-下】

本文是一篇关于链表OJ题解的技术文章,主要讲解了4个经典链表问题的解决方案。首先介绍如何判断两个链表是否相交并找到相交节点,通过统计节点数量和指针同步实现。其次详细解析环形链表的快慢指针解法,证明指针必然相遇的原理。然后提供环形链表入环节点的两种查找方法,包括链表分割法和双指针法。最后深入讲解随机链表的复制技巧,通过节点复制、随机指针修正和新链表串联三步实现。文章包含严谨的数学证明和完整的C语言代码实现,适合有一定数据结构基础的读者学习链表相关算法。

2026-04-25 15:52:18 608 27

原创 【链表经典OJ-中】

本文介绍了几个经典的链表OJ题目解法,主要包括环形链表的约瑟夫问题、链表分割、返回倒数第k个节点和链表回文判断。约瑟夫问题通过创建环形链表并模拟报数过程解决;链表分割采用新建链表或双链表法处理;倒数第k个节点使用快慢指针技巧;回文判断则通过找到中间节点、逆置后半段链表并比较实现。这些题目涵盖了链表操作的核心技巧,包括环形链表构建、双指针应用、链表分割和逆置等常见算法模式。

2026-04-22 16:35:53 646 22

原创 【链表经典OJ-上】

本文分享了4个经典链表OJ题目的解题思路与代码实现:1.移除链表元素(两种解法:双指针遍历和新建链表);2.反转链表(迭代法和头插法);3.合并有序链表(双指针法和虚拟头节点优化);4.寻找中间节点(计数法和快慢指针法)。重点讲解了每种解法的实现细节、易错点和优化思路,展示了链表操作的多种技巧。通过这些问题,可以深入理解链表的操作特性和精妙之处,提升算法思维能力。

2026-04-22 16:35:30 960 20

原创 数据结构-单链表

本文介绍了链表的基本概念与实现方法。主要内容包括:1. 链表分类:单向链表、双向链表和循环链表;2. 单链表的具体实现过程,涵盖节点创建、尾插、头插、尾删、头删等基本操作;3. 查找、任意位置插入/删除等进阶操作;4. 链表销毁的实现。文章通过详细的代码示例和逻辑分析,展示了如何使用C语言实现一个无哨兵位的单向非循环链表,并对每个操作进行了测试验证。最后提供了完整的实现思路,可作为链表学习的实践参考。

2026-04-18 14:00:37 417 12

原创 基于顺序表实现通讯录项目

本文介绍了基于顺序表实现的通讯录系统设计与实现。系统通过结构体存储联系人信息(姓名、性别、年龄、电话、地址),支持添加、删除、查找、修改和显示联系人等功能。文章重点阐述了如何将顺序表的数据类型改为结构体类型,并解决由此引发的类型转换问题。通过前置声明避免头文件循环包含,详细说明了各功能模块的实现方法,包括初始化、增删改查等操作的底层调用逻辑。最后展示了完整的用户交互界面设计,实现了一个功能完善的通讯录系统。

2026-04-13 23:43:54 445 13

原创 数据结构-顺序表

本文详细介绍了顺序表的两种实现方式:静态顺序表和动态顺序表。重点阐述了动态顺序表的实现过程,包括初始化、尾插/头插、尾删/头删、指定位置插入/删除、查找以及销毁等核心功能的代码实现。通过封装自动扩容函数优化了空间管理,并展示了完整的测试过程。最后提出了对顺序表性能的思考,包括循环操作的时间开销、空间利用率以及频繁realloc的影响等问题。文章采用模块化编程思想,将声明、实现和测试分离,为后续基于顺序表的应用开发奠定了基础。

2026-04-12 23:40:19 702 11

空空如也

空空如也

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

TA关注的人

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