- 博客(51)
- 收藏
- 关注
原创 Linux进程控制(下)进程程序替换与手写一个shell
fork 与 exec 协同实现进程替换:fork 创建子进程,exec 将磁盘上的新程序加载至当前进程地址空间,覆盖原有代码与数据,但保留原进程的 PID、文件描述符等属性。exec 不创建新进程,成功时不返回,失败才返回 -1。通过 fork + exec,shell 能执行外部命令;内建命令(如 cd、exit)则需在 shell 进程中直接执行。这一机制使进程调用如同函数调用——参数传入,结果返回,形成“调用-返回”模型。
2026-11-02 23:08:37
193
1
原创 Linux 进程控制(上):进程创建、终止与等待
本文系统介绍进程创建、终止与等待机制。fork函数实现进程复制,子进程返回0,父进程返回子进程ID,通过写时拷贝技术实现内存高效共享。进程可通过exit、_exit或return退出,exit会清理缓冲区并执行注册的清理函数。父进程需通过wait或waitpid回收子进程资源,避免僵尸进程,并获取其退出状态。waitpid支持非阻塞等待,结合WIFEXITED和WEXITSTATUS可判断子进程是否正常退出及退出码,确保进程管理的可靠性与安全性。
2026-11-02 12:19:59
73
2
原创 Linux 进程概念(下):程序地址空间与虚拟内存
程序地址空间是进程独立的虚拟地址空间,由代码、数据、堆、栈及环境变量等组成,堆向高地址增长,栈向低地址增长。通过实验验证,C语言中所有地址均为虚拟地址,物理内存由页表映射。fork后父子进程共享相同虚拟地址,但指向不同物理页,体现虚拟内存机制。页表按需创建,非全程存在,确保内存隔离与高效管理。
2026-10-29 15:14:38
372
6
原创 Linux 进程概念(上):从冯诺依曼到进程调度
本文梳理《Linux 系统编程》第三章核心内容:冯诺依曼体系下,内存是唯一枢纽,硬件通过内存解耦速度差异;操作系统作为管理者,通过数据结构抽象资源,实现对软硬件的统一控制;进程本质是 task_struct 与程序代码的结合体,是资源分配的基本单位。系统调用是用户程序访问内核的唯一通道,库函数则封装其上以提升易用性与可移植性。理解这些概念是掌握系统编程的基础。
2026-10-28 20:52:56
413
17
原创 MySQL 索引原理与实战:从磁盘 IO 到 B+ 树,一次讲透
没有索引时,查询800万条数据耗时达4.93秒,而添加主键索引后查询瞬间降至毫秒级。索引通过减少磁盘随机IO、提升连续访问效率,显著优化查询性能。其底层依赖于InnoDB的16KB Page机制与Buffer Pool内存缓存,核心在于降低IO次数而非单次数据量。合理使用索引,是数据库性能优化最“物美价廉”的手段。
2026-10-23 09:04:24
316
1
原创 MySQL 复合查询实战:从多表联查到子查询的完整指南
本文以公司管理系统(EMP、DEPT、SALGRADE表)为例,系统讲解MySQL复合查询核心技巧:多表连接通过关联字段消除笛卡尔积;自连接用于处理层级关系(如员工与上级);子查询按返回结果分为单行、多行,配合in、all、any实现复杂条件筛选。结合实战案例,阐明各方法的适用场景与性能差异,助力开发者从单表查询进阶至高效复合查询。
2026-10-13 10:20:05
322
3
原创 MySQL 增删改查(CRUD)完全指南:从入门到面试
本文系统讲解MySQL增删改查(CRUD)操作,从创建学生表入手,详解insert、select、update、delete语句的语法与实战。重点对比replace与on duplicate key update的差异:前者删除后插入,重置非指定列;后者仅更新指定字段,保留原值。结合成绩表演示查询、条件筛选、表达式、别名及去重等核心功能,涵盖where、排序、分页等实用技巧,助力初学者掌握数据库操作核心技能,应对面试与开发需求。
2026-10-10 17:46:15
722
10
原创 MySQL 表的约束详解:从空属性到外键
本文系统介绍了MySQL中常用的数据表约束机制,包括null/not null(空属性)、default(默认值)、comment(列描述)、zerofill(零填充)、primary key(主键)、auto_increment(自增长)、unique key(唯一键)和foreign key(外键)。通过实例说明了各约束的实际应用,强调合理使用约束可保障数据完整性与业务逻辑正确性。其中,zerofill仅影响显示格式,不改变存储值;主键确保记录唯一性,是数据操作的核心基础。
2026-10-08 14:49:26
320
17
原创 MySQL 数据类型详解:从数值到字符串,一篇讲透
本文系统梳理MySQL常用数据类型,涵盖数值(tinyint、bit、float、decimal)、字符串(char、varchar)等核心类型。通过实操示例揭示常见陷阱:如tinyint越界报错、bit显示异常、float精度损失,强调decimal在金额场景的精准优势;对比char固定长度与varchar动态存储特性,指导合理选型,避免建表踩坑。
2026-10-05 10:15:00
269
4
原创 MySQL 表的操作:从建表到删表,一篇讲清楚
本文详解MySQL表的增删改查操作,结合实际案例演示建表语法、字符集与存储引擎选择、DESC查看结构、ALTER TABLE修改字段、表名及字段名等常用操作,并强调删除字段需谨慎,建议动手实践以深入理解不同存储引擎的文件差异。
2026-10-03 10:30:00
278
3
原创 MySQL 数据库操作入门:从建库到备份,一篇讲清楚
本文系统梳理了MySQL数据库操作的核心内容,涵盖创建、字符集与校验规则设置、修改、删除及备份恢复。重点解析了utf8_general_ci(不区分大小写)与utf8_bin(区分大小写)对查询和排序的影响,并通过实际命令演示了CREATE DATABASE、ALTER DATABASE、DROP DATABASE及mysqldump备份还原流程,强调数据安全与操作规范,适合初学者快速掌握库管理要点。
2026-10-02 20:13:42
221
原创 Linux(六) GDB / CGDB 调试入门:从原理到常用指令实战
本文介绍了GDB与CGDB在C/C++程序调试中的重要性与使用方法。相较于传统的printf调试,GDB/CGDB可实现断点设置、单步执行、变量查看、调用栈分析等功能,显著提升调试效率。尤其在定位内存错误、多线程问题等疑难故障时优势明显。CGDB通过可视化源码界面,使调试更直观,降低学习门槛。文章详细讲解了常用指令如b(断点)、r(运行)、n/s(逐行/进入函数)、p(打印变量)等,并结合实例演示调试流程,强调掌握GDB/CGDB对深入理解程序运行机制和提升开发能力的重要意义。
2026-09-22 22:51:50
385
10
原创 Git 从入门到实战:Linux 开发者的版本控制完全指南
本文系统介绍Git在Linux开发中的核心应用,涵盖版本控制原理、Git诞生背景、安装配置及“三板斧”操作(add、commit、push)。通过实例演示本地代码上传至Gitee/ GitHub 的完整流程,并补充常用命令如git status、git log等,帮助开发者高效管理代码版本,实现协同开发与云端同步。
2026-09-22 11:00:22
570
23
原创 Make 与 Makefile 从入门到进阶:自动化构建完全指南
本文系统介绍了make与Makefile的基本概念及其在项目自动化构建中的核心作用。Makefile通过目标、依赖和命令的规则,实现编译流程的自动化;make命令则解析并执行这些规则,提升开发效率。文章详细阐述了依赖关系的逻辑、编译原理(基于修改时间对比)、伪目标.PHONY的使用场景及其对“按需编译”的影响,并引入变量与特殊符号实现大型工程的可维护性。重点强调:合理使用make能显著减少重复编译,而误用伪目标将导致性能下降。
2026-09-17 16:15:10
288
24
原创 Linux (五) gcc/g++ 编译原理与动静态库详解
本文详细解析了Linux下gcc编译C程序的四个阶段:预处理(-E,生成.i文件)、编译(-S,生成.s文件)、汇编(-c,生成.o文件)和链接(生成可执行文件)。通过分步编译与链接,可深入理解程序生成过程。文中还介绍了多文件编译、条件编译(如-D定义宏)及动静态库的区别,强调了编译优化与工程化开发的重要性,为掌握编译原理与实际应用奠定基础。
2026-09-10 08:00:00
145
8
原创 Linux(四) Vim 高手速成:复制、粘贴、剪切、撤销,这些命令让你效率翻倍!
<think>我们根据内容生成摘要,不超过150字。内容讲Vim正常模式命令(yy复制、p粘贴、dd剪切、u撤销、ctrl+r重做、x删除、r替换等)和底行模式命令(set nu、查找、注释)。摘要要简洁。</think>本文介绍了Vim正常模式下的复制(yy)、粘贴(p)、剪切(dd)、撤销(u)、重做(Ctrl+r)、删除(x)、替换(r)等核心命令,以及底行模式中的设置行号(set nu)、查找字符和批量注释技巧,帮助用户快速提升文本编辑效率。
2026-09-06 18:27:45
302
18
原创 Linux(三)apt/yum 软件安装与 vim 编辑器入门指南
<think>我们只需要根据用户提供的文本生成一篇≤150字的摘要。内容是围绕Linux安装软件的方式、包管理器优势、软件来源和镜像、vim简介等。需要精炼总结核心要点。注意摘要要求≤150字,包括标点。需要涵盖主要主题。尝试压缩。 撰写摘要:本文介绍Linux下软件安装的演进:从源码安装和软件包手动解决依赖,到包管理器(yum/apt)自动处理依赖、网络化获取与生命周期管理;软件由开发者开源、社区打包分类并提供源,国内通过镜像加速;最后提及vim编辑器作为文本编辑工具。</think>本文介绍Linux软
2026-09-03 23:12:10
386
9
原创 Linux(二)权限问题
<think>我们只需要根据内容生成≤150字的摘要。需要简洁概括Linux权限概念、用户分类、权限管理要点。注意字数限制。</think>Linux权限控制“谁能做什么”,由角色(拥有者u、所属组g、其他用户o)、文件类型与读写执行权限(r/w/x)组成。用户分root和普通用户,可用su切换、sudo临时提权。权限通过chmod修改,chown/chgrp调整归属。目录需rwx权限方可访问和操作,umask影响默认权限。
2026-09-01 21:29:38
348
22
原创 C++哈希表实现:开放定址法和链地址法 (哈希桶)
本文介绍了哈希表的实现原理,重点讨论了哈希函数设计、冲突解决方案及C++实现方法。主要内容包括: 哈希表基础 通过哈希函数实现O(1)时间复杂度的查找/插入/删除 核心问题:哈希函数设计和冲突解决 关键实现技术 除法散列法:推荐使用质数作为表大小 冲突解决:开放定址法(线性探测和二次探测) 负载因子控制在0.7以下 C++实现要点 使用状态枚举管理位置状态(存在/空/删除) 为不同数据类型特化哈希函数 动态扩容机制 性能优化 二次探测解决聚集问题 字符串使用BKDR哈希算法 模板化设计支持多种键类型 该实现
2026-08-17 11:30:00
467
14
原创 深入理解红黑树:从原理到C++实现与可视化
红黑树是一种自平衡二叉搜索树,通过颜色约束保持近似平衡,确保最长路径不超过最短路径的两倍。它具有五大特性:节点颜色、根节点为黑、红节点子节点为黑、路径黑节点数相同、叶子节点为黑。相比AVL树,红黑树的平衡要求更宽松,插入删除效率更高。插入操作分为二叉搜索树插入和颜色调整两步,根据父节点和叔叔节点颜色分情况处理,可能涉及变色和旋转。红黑树广泛应用于C++ STL的map、set等容器,适合频繁插入删除的场景。
2026-08-15 17:30:00
419
13
原创 C++ 数据结构 AVL树(附动图超详细)
AVL树是一种严格平衡的二叉搜索树,通过平衡因子和四种旋转操作(右单旋、左单旋、左右双旋、右左双旋)保持树的平衡。其特点包括:任何节点的左右子树高度差不超过1;插入、删除、查找的时间复杂度均为O(logN)。插入节点后需更新平衡因子,若失衡则通过旋转调整。测试验证了其平衡性和性能,AVL树适合查找频繁的场景,但实现复杂度较高。相比红黑树,AVL树更严格平衡但旋转操作更多。理解AVL树有助于学习更复杂的数据结构。
2026-08-14 10:34:48
247
5
原创 C++ STL 中 map 与 set 的深度解析:从基础使用到自定义比较
本文深入解析C++ STL中的map与set容器,主要涵盖以下内容:1)介绍关联式容器的特点,对比序列式容器;2)详细讲解set容器的特性、构造方法、迭代器使用及常用操作,包括插入、查找和删除;3)分析multiset允许重复元素的特性;4)探讨map容器的键值对存储机制及其pair类型;5)通过实际案例展示set和map的应用场景。两种容器均基于红黑树实现,具有O(logN)的查找效率,支持元素自动排序和快速检索,是处理关联数据的强大工具。
2026-08-12 12:33:10
319
31
原创 深入理解二叉搜索树:从概念到C++实现与应用
本文系统介绍了二叉搜索树(BST)的核心概念与C++实现。BST是一种关键的非线性数据结构,具有左子树值≤根≤右子树值的特性,支持高效的动态数据操作。文章详细解析了BST的插入、查找和删除算法,重点阐述了删除操作的四种情况处理。通过完整代码展示了BST类模板的实现,包括结点结构、基本操作和中序遍历。特别探讨了BST在实际场景中的两类应用:纯key搜索(如车牌识别)和key-value映射(如字典翻译)。虽然BST在最坏情况下可能退化为O(N)复杂度,但它为理解更高级的平衡树结构奠定了基础,并展现了有序数据动
2026-08-10 11:59:43
409
8
原创 【万字详解】C++多态:从入门到精通,彻底搞懂虚函数、虚表与动态绑定
本文摘要: C++多态是面向对象编程的核心概念,允许同一操作在不同对象上产生不同行为。文章通过动物叫声的生动例子,对比有无虚函数时的不同表现,深入讲解多态的实现机制。关键点包括: 多态分为编译时(静态)和运行时(动态)两种,后者通过虚函数实现。 实现多态的三个必要条件:继承关系、基类指针/引用调用、虚函数重写。 虚函数原理:通过虚表指针vptr和虚表实现动态绑定。 虚函数重写的严格规则和协变特性。 C++11的override和final关键字,增强代码安全性和可读性。 文章通过代码示例详细演示了多态的正确
2026-08-07 17:52:53
371
8
原创 深入理解C++继承:从概念到实践
摘要: 继承是面向对象编程(OOP)实现代码复用的核心机制,允许派生类扩展基类特性,减少冗余(如学生和教师类共享的公共成员)。继承方式(public/protected/private)控制基类成员的访问权限,public继承最常用。派生类与基类可单向转换(派生类对象可赋值给基类指针/引用,反之需强制转换)。作用域中,派生类同名成员会隐藏基类成员,需通过基类::成员显式访问。派生类默认成员函数(构造、拷贝、赋值、析构)需正确处理基类部分,遵循先基类后派生类的构造/析构顺序。友元关系不继承,静态成员在继承体系
2026-08-06 16:10:38
363
5
原创 C++ 模板深度解析:类型模板、非类型模板、特化与分离编译
模板是 C++ 强大抽象能力的基石。通过类型模板和非类型模板,我们可以编写高度通用的代码。模板特化机制允许我们为特定场景提供最优实现,平衡通用性与效率。而理解模板分离编译的模型,则是避免链接错误、构建大型模板化项目的关键。掌握这些概念,你将能更加自信地设计可复用、高性能的 C++ 组件。
2026-08-05 18:00:00
425
6
原创 搞懂STL容器适配器:栈&队列&优先队列模拟实现
本文详细介绍了C++中四种重要数据结构的实现:栈(后进先出)、队列(先进先出)、双端队列(deque)和优先队列(priority_queue)。重点分析了它们的核心接口、底层实现原理及性能特点,包括基于数组/链表的实现方式,以及利用deque容器适配器的高效实现方案。特别深入讲解了优先队列的堆实现机制(向上/向下调整算法)和仿函数在STL中的应用,通过对比vector、list和deque的特性差异,为不同场景下的数据结构选择提供了指导建议。文中包含完整的C++模板实现代码和使用示例。
2026-08-03 17:18:48
1496
16
原创 手写STL list全套代码:节点结构、迭代器封装、增删查改+迭代器失效
本文摘要: 本文详细讲解了双向循环带头链表的实现原理及关键操作。主要内容包括:1. 链表节点结构设计,必须使用list_node<T>指针而非T,以维护链表完整性;2. 迭代器封装技术,通过重载运算符模拟指针行为,区分普通和const迭代器;3. 链表核心操作实现,如push_back/pop_back尾插尾删、insert/erase插入删除,特别强调迭代器失效问题——删除操作会使被删节点迭代器失效;4. 其他基础操作如begin/end定位、size计数和clear清理等。文章通过代码示例和
2026-08-02 11:53:55
1553
32
原创 C++ vector底层模拟实现与迭代器失效深度剖析
本文详细探讨了C++ STL中vector的模拟实现,主要包括以下核心内容:1. 生命周期管理:分析构造函数(默认构造、带参构造、拷贝构造)、析构函数、赋值运算符等特殊成员函数的实现,重点讲解深拷贝与资源管理机制。2. 迭代器失效问题:系统阐述插入/删除/扩容操作导致的迭代器失效场景,提供解决方案(更新迭代器、使用索引、erase-remove惯用法等)。3. 空间增长机制:解析reserve/resize的实现原理及扩容策略,强调提前预留空间的重要性。4. 完整接口实现:包括push_back/pop_b
2026-07-24 16:42:47
1526
26
原创 从零学STL:string类常用接口一篇吃透
本文介绍了C++标准模板库(STL)的基本概念和string类的使用方法。STL包含容器(如vector、string)、迭代器和算法三部分,极大简化了C++开发。重点讲解了string类的常见操作:构造、容量管理(size/resize/reserve)、访问遍历(operator[]/迭代器/范围for)、修改(append/+=)和查找(find/rfind)等功能。同时对比了C风格字符串与string类的区别,并详细说明了auto关键字和范围for循环在STL遍历中的应用。文章还提供了string类
2026-07-19 18:22:23
342
30
原创 《C++面向对象进阶:static成员、友元、匿名对象与拷贝优化详解》
本文围绕C++面向对象进阶的核心内容展开,从构造函数的底层原理讲起,逐步解析了类类型转换、static成员的特性与用途、友元的设计与应用、内部类的使用场景、匿名对象的生命周期管理,并结合实例深入拆解了拷贝构造的编译器优化规则(RVO)。旨在帮助开发者理清C++对象模型的关键细节,规避隐式转换、临时对象等常见问题,写出更高效、规范的C++代码。
2026-06-11 22:35:23
335
18
原创 C++类和对象(中)| 深挖四大默认成员函数:构造/析构/拷贝/赋值重载原理全解
本文为C++类与对象系列中篇,围绕编译器自动生成的四大默认成员函数展开系统讲解,依次剖析析构函数语法规则、拷贝构造函数在「无堆资源、带堆资源、自定义类型成员」三种场景下深浅拷贝差异,区分全局与成员函数两种运算符重载实现形式,重点详解赋值运算符重载实现逻辑与自赋值、深拷贝工程避坑方案;拓展const修饰成员函数特性与取地址运算符重载用法,搭配大量实战代码剖析底层运行逻辑,破解浅拷贝崩溃、析构重复释放等高频疑难,帮助学习者吃透类对象内存初始化与资源管理核心原理。
2026-06-04 23:17:52
549
30
原创 C++类和对象(上):一文搞懂基础定义与核心规则
本文是C++类和对象系列的上篇,聚焦面向对象编程的核心基础。从类与对象的基本定义、格式和核心组成元素讲起,对比了 class 与 struct 的区别与适用场景,详解访问限定符、类域作用域与成员访问规则、实例化、内存对齐原则,并对 this 指针进行了初步讲解,帮助读者建立面向对象编程的底层认知,为后续进阶内容打下基础。
2026-06-01 21:36:05
660
23
原创 《C++基础进阶:函数重载、引用、inline与nullptr全解析》
还在为C++的重载、引用和空指针问题头疼?这篇文章一次性讲透!从函数重载的“坑”、引用和指针的爱恨情仇,到 inline 函数到底什么时候用、 nullptr 为什么比 NULL 更安全,全都用大白话+实例讲清楚,帮你彻底搞懂这些看似简单却极易踩雷的C++基础知识点,告别语法困惑!
2026-05-27 20:49:57
1474
18
原创 从0吃透C++入门|第一个程序、命名空间与缺省函数基础
刚接触C++一头雾水?看不懂std、::、auto?本文从第一个程序入手,手把手拆解头文件、命名空间、输入输出,带你入门缺省函数的基础语法。
2026-05-24 22:30:34
713
20
原创 一文吃透二叉树:前中后序遍历+节点数+树高+叶子节点(含完整源码)
本文详细介绍了二叉树的实现与操作。首先定义了二叉树节点结构,通过连接节点构建完整二叉树。重点讲解了三种递归遍历方式:前序(根左右)、中序(左根右)和后序(左右根),并给出具体示例和代码实现。此外还阐述了统计节点总数、计算树高度以及统计叶子节点数量的递归算法,包括终止条件和递归逻辑。所有操作均采用递归方法实现,体现了二叉树操作的典型递归特性,为后续二叉树OJ题目解析奠定了基础。
2026-05-18 23:06:04
688
25
原创 堆排序建堆策略对比:向上调整与向下调整的时间复杂度分析
本文分析了堆排序的实现过程,重点比较了向上调整和向下调整两种建堆方法。向上调整建堆时间复杂度为O(NlogN),而向下调整建堆通过自底向上方式优化至O(N)。堆排序包含建堆和交换调整两个步骤,总时间复杂度为O(NlogN)。文章详细推导了两种建堆方法的时间复杂度,指出向下调整建堆更高效,并强调必须确保左右子树为堆的前提条件。最后给出了堆排序的具体实现代码,说明仅需在建堆部分修改即可优化性能。
2026-05-12 19:25:00
787
19
原创 归并排序:从原理到非递归实现,一文搞定
而非递归是自底向上的:先将数组看成一个个长度为1的有序子数组两两合并为长度为2的有序子数组再两两合并为长度为4的有序子数组直到整个数组有序.............
2026-05-07 13:38:58
617
23
原创 快速排序凭什么封神?拆开底层才懂它有多强!
摘要:本文详细讲解了快速排序算法的原理和实现。核心思想是通过"选基准-分区-递归"三步将数组排序,平均时间复杂度O(NlogN)。文章以动图演示分区过程,分析单趟排序代码实现及边界条件处理,并给出递归处理左右区间的完整代码。针对优化点提出"三数取中"选基准避免有序数组性能退化,以及小区间改用插入排序的优化方案。最后预告将介绍非递归实现方法。全文图文并茂,循序渐进地拆解快速排序的各个关键环节,帮助读者深入理解这一经典算法。
2026-04-29 23:37:08
697
20
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅