- 博客(31)
- 收藏
- 关注
原创 Linux 深入理解文件(Ext2文件系统:下)
本文介绍了Linux中ext2文件系统的基本结构。文件系统通过分区、块组等层级结构管理硬盘空间,核心组件包括:超级块(SuperBlock)存储全局文件系统信息,块组描述符表(GDT)管理单个块组属性,块位图和inode位图记录空间使用情况,inode节点表存储文件属性,数据区(DataBlocks)存放文件内容。ext2通过这种分层设计实现高效的文件管理,其中inode和块编号在分区内具有唯一性。理解ext2的基本架构有助于掌握后续ext3/ext4等更高级文件系统的工作原理。
2026-05-14 22:12:58
293
原创 Linux 深入理解文件(Ext2文件系统:上)
本文介绍了磁盘的基本结构和工作原理,包括盘面、磁头、磁道、扇区等概念,并解释了磁盘容量的计算方法。文章指出现代存储设备(如SSD)仍沿用磁盘逻辑以兼容操作系统。同时阐述了"块"作为文件存取最小单位的概念,以及分区在Windows和Linux系统中的不同实现方式。最后介绍了Linux系统中存储文件属性的"inode"概念及其唯一标识符inode号,指出文件名未被包含在inode内部。这些基础知识有助于理解文件系统的底层原理。
2026-05-14 17:54:07
152
原创 Linux 深入理解文件(IO)
本文探讨了文件操作从C语言层面向操作系统底层的深入理解。通过分析Linux系统调用open与C库函数fopen的关系,揭示了文件描述符的本质是进程PCB中文件指针数组的下标。文章指出标准输入/输出/错误流占用文件描述符0-2的位置,并解释了重定向的实现原理——通过修改文件指针指向而非数组下标。最后介绍了系统调用dup2函数,说明其在代码层面实现重定向的机制,即通过复制文件描述符来改变I/O流向。这些内容将语言层面的文件操作与操作系统底层机制联系起来,深化了对文件系统的理解。
2026-05-13 19:08:50
341
原创 Linux 进程知识扩展(下)
本文主要讲解了进程阻塞和进程程序替换两个概念。进程阻塞是指进程主动停止运行等待某个事件(如scanf等待输入),与就绪、运行状态形成对比。在父进程等待子进程时,使用waitpid的非阻塞模式(WNOHANG)配合轮询可提高效率。进程程序替换则是通过exec系列函数替换当前进程的代码和数据(不改变PID),其中exec函数后缀(l/v/p/e)代表不同参数传递方式。文章特别指出:替换成功后原进程后续代码将不再执行。
2026-05-08 19:55:00
221
原创 Linux 进程知识扩展(上)
本文介绍了进程退出的相关知识,包括三种退出场景(正常结束结果正确/错误、异常终止)、进程退出码的作用(0表示正确,非0表示错误)及其设置方式(return、exit、_exit)。重点讲解了父进程通过wait/waitpid回收子进程资源的必要性,对比了exit和_exit的区别(是否刷新缓冲区),并详细说明了waitpid的参数用法(阻塞/非阻塞模式)和状态判断宏(WIFEXITED、WEXITSTATUS)。文章强调父进程必须及时处理子进程退出信息,避免产生僵尸进程导致内存泄漏。
2026-05-06 12:45:48
375
原创 C++ 哈希
本文介绍了哈希表的基本概念和实现方法。哈希表是通过哈希函数将键映射为数组下标,以O(1)平均时间复杂度实现快速查找的数据结构。文章重点讨论了三种哈希冲突处理方法:直接定址法(简单但浪费空间)、开放定址法(包括线性探测、二次探测和双重散列)以及链定址法(使用链表解决冲突)。其中,双重散列分布最均匀,而链定址法虽然解决了堆积问题,但可能导致查找效率退化。此外还涉及扩容策略和特殊key处理等问题,强调哈希表设计需要权衡空间效率与时间效率。
2026-04-27 23:45:34
351
原创 Linux 进程地址空间
本文简要介绍了虚拟内存空间的概念及其作用。虚拟地址空间是操作系统为每个进程模拟的一块与物理内存等大的空间,通过task_struct进行管理。系统通过页表实现虚拟地址到物理地址的映射,采用"缺页中断"机制实现按需分配物理内存。文章还解释了写时拷贝机制,说明子进程如何继承父进程的页表,并仅在需要修改时才分配独立内存空间。这些机制都体现了懒加载的设计思想,有效提高了系统资源利用率。
2026-04-23 23:12:55
340
原创 C++ 智能指针
智能指针是C++中用于自动管理内存的RAII工具,解决了裸指针的内存泄漏和悬空指针问题。C++11提供了三种智能指针:unique_ptr(独占所有权,不可拷贝)、shared_ptr(共享所有权,引用计数)和weak_ptr(解决shared_ptr循环引用问题)。其中weak_ptr不增加引用计数,通过lock()获取临时shared_ptr来安全访问资源。智能指针通过将资源生命周期与对象绑定,确保资源在析构时自动释放,是现代C++内存管理的核心机制。
2026-04-22 11:40:33
347
原创 C++11 (一些新特性)
本文介绍了C++11引入的几项重要特性:1)列表初始化,使用{}统一初始化方式;2)可变参数模板,支持参数包处理;3)emplace系列容器接口,优化对象构造过程;4)Lambda表达式语法及其捕获机制;5)新增的默认移动构造和移动赋值函数。这些特性增强了C++的表达能力,优化了性能,提供了更灵活的编程方式。其中重点讲解了Lambda表达式的完整语法结构、多种捕获方式,以及移动构造函数的自动生成规则。
2026-04-20 12:54:30
312
原创 C++11 右值引用
本文介绍了C++11引入的右值引用特性。首先区分了左值(有名字、可寻址)和右值(临时、不可寻址),指出传统左值引用在函数返回局部对象时存在局限性。右值引用通过移动构造实现资源转移,解决了局部对象返回时的拷贝效率问题。文章详细解释了值类型分类(左值、纯右值、亡值),并探讨了引用折叠规则(右值引用的右值引用折叠成右值引用)。最后介绍了完美转发技术,通过forward保持参数原始值类别,解决了右值引用变量表达式变为左值的问题。这些特性共同提升了C++在资源管理和性能优化方面的能力。
2026-04-18 22:49:37
330
原创 红黑树 (C++)
红黑树是一种平衡二叉搜索树,通过旋转和变色保持平衡。相比AVL树,红黑树的平衡要求更宽松,插入效率更高,但查找稍慢。红黑树遵循四条规则:节点非红即黑、根节点为黑、红色节点不能连续、所有路径黑色节点数相同。插入新节点时,若父节点为红则需要调整,通过变色和旋转(考虑叔叔节点状态)来恢复平衡。调整策略包括:叔叔节点为红时变色处理,为黑或不存在时结合旋转。红黑树在多数场景下比AVL树更实用。
2026-04-11 22:11:34
369
原创 AVL 树
什么是AVL 树AVL树 是一种,它的名字来源于两位发明者G.M. Adelson-Velsky和E.M. Landis的名字首字母。AVL树 解决了二叉搜索树可能存在的左右子树高度差距大,导致搜索效率低下的问题。它通过旋转,保证左右子树的高度差不超过 1 ,避免某棵子树过高,递归层次增多,搜索的时间复杂度退化为 O(n) 的情况。AVL树 中引入了(Balance Factor,简称bf)来辅助管理。平衡因子作为每个节点的成员变量,记录该节点的。
2026-04-10 10:58:59
337
原创 Linux进程(下)
上一篇文章介绍了进程的概念和进程的状态,但进程的知识还有很多,本文继续进行讲解。进程的管理指令之前提到过许多对进程进行管理的指令,但没有进行讲解,在这里统一聊聊。核心指令有四个 ps,top,kill,前后台运行(&,jobs,fg)。
2026-04-06 23:32:31
373
原创 Linux进程(上)
进程是程序的运行实体,由PCB(进程控制块)和数据构成,具有动态性。Linux系统中,每个进程有唯一PID(进程号),通过fork创建子进程时,父子进程独立运行,fork返回不同值(父进程返回子进程PID,子进程返回0)。采用写时拷贝技术优化内存使用,仅在写入时才复制数据。进程状态包括就绪(R)、阻塞(S/D)、挂起(T)等,其中僵尸进程(Z)是子进程退出后未被父进程回收的状态,会导致内存泄漏。可通过ps aux命令查看进程状态及修饰符。
2026-04-06 11:02:49
562
原创 C++ 多态
本文介绍了C++中的多态概念,重点讲解了动态多态的实现机制。多态分为编译时多态(函数重载和模板)和运行时多态(虚函数机制)。实现动态多态需要满足两个条件:被调用的函数必须是虚函数,且必须通过父类指针或引用调用。文章详细阐述了虚函数表的工作原理、重写规则,特别说明了析构函数的特殊重写情况。此外,还区分了重载、重写和隐藏的概念,介绍了C++11引入的override和final关键字。最后讲解了抽象类和纯虚函数的概念,指出抽象类不能被实例化,子类通常需要重写纯虚函数。这些内容构成了C++多态编程的核心知识体系。
2026-03-26 23:01:19
414
原创 C++ 继承
本文介绍了C++继承的概念与应用。继承通过子类继承父类特性实现代码复用,包含public、protected、private三种继承方式。文章分析了继承中的构造/析构顺序、内存布局和切片现象,指出子类对象包含父类部分且构造时先父后子。针对多继承导致的菱形继承问题,提出虚继承解决方案,通过虚基类指针间接访问父类成员。最后介绍了两种防止类被继承的方法:私有构造函数和使用final修饰符。全文系统阐述了继承机制及其相关特性。
2026-03-25 14:10:14
599
原创 Linux 权限
摘要 Linux系统中,一切皆文件。文件属性包含拥有者、所属组及其他用户(other)的权限信息。权限分为读(r)、写(w)、执行(x)三种,对文件和目录作用不同。
2026-03-21 20:40:02
528
原创 堆(一种特殊的完全二叉树)
堆是一种可用于堆排序和 TopK 问题的完全二叉树,通过向上 / 向下调整实现插入、删除与建堆,是处理优先级和海量数据筛选的重要工具。
2026-02-11 22:41:39
592
原创 使用双指针解决链表题(好好好)
本文介绍了双指针在解决链表问题中的优势和应用。重点讲解了快慢指针技术,包括判断链表是否有环、寻找环入口节点等经典问题,并给出数学证明。文章还提到静态双指针的简单应用,最后总结双指针技巧在链表问题中的重要性。
2026-01-17 21:03:44
929
原创 顺序表和链表 (C语言)
本文对比了顺序表和链表两种线性表结构。顺序表物理存储连续,包括静态(如数组)和动态(通过内存管理函数实现)两种形式;链表通过结构体和指针实现非连续存储。重点分析了二者的缓存利用率差异:顺序表因数据连续存储,CPU访问时缓存命中率高;而链表数据分散,预加载效果差且易引发缓存污染,导致缓存利用率低下。这一特性使顺序表在访问效率上具有明显优势。
2026-01-09 16:11:37
832
原创 “这么简单写不出来?” 从失败中获得的感悟——不要无效抄代码
我开始回想上课时的细节,结果我发现,实际上我根本没有跟着老师的思路一步步地完成项目,我完全就是仅仅抄了一遍代码。虽然是抄,但是看着屏幕上不断增加的代码,我感觉自己也是在学了呀,很努力了呀,但其实脑子已经停止运转,只顾着抄了,啥也没学到。好像也不是,我觉得我花两个小时写的博客还是蛮清晰的,能讲得清晰,那我的理解肯定是没有问题的了。不写不知道,我还没走出两步,就摔倒了。大概等老师写完一个小功能之后,再根据自己的理解自己写(这时候也不能抄),遇到不知道怎么写的地方,再看看老师是怎么写的,为什么这么写。
2025-12-29 19:42:40
497
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅