自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深度拆解 Linux 程序编译与链接:从静态库到 ELF 运行时全流程

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是⼀种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库 .a[Linux]、.lib[windows]动态库 .so[Linux]、.dll[windows]我们来看一下,ubuntu动静态库和Centos动静态库// ubuntu 动静态库// C//C++/ Centos 动静态库// C// C++

2026-04-05 13:19:51 383

原创 深度拆解 Linux Ext 系列文件系统:从硬件底层到软硬链接全流程

我们看到,真正找到磁盘上文件的并不是文件名,而是inode。其实在linux中可以让多个文件名对应于同⼀个inode。硬链接只能给普通文件建立,Linux系统不支持给目录建立硬链接,但.和..本质就是对目录的硬链接,因为如果允许用户自己给目录建立硬链接就容易造成下图这种路径环的问题,.和..名字特殊,做特殊处理即可。

2026-04-03 16:28:04 372

原创 深入理解 Linux 基础 IO —— 从文件抽象到系统调用实战

本文系统介绍了文件操作的相关概念与技术。首先从狭义和广义两个角度定义文件概念,指出Linux"一切皆文件"的设计理念。然后回顾了C语言文件接口的基本操作(打开、读写、关闭),并详细解析了系统级文件I/O接口(open、read、write等)。重点阐述了文件描述符的分配规则、重定向原理及其实现方法,包括dup2系统调用的使用。文章还深入探讨了Linux"一切皆文件"的实现机制,分析了file和file_operations结构体的关键作用。最后详细介绍了缓冲区的概念、

2026-04-02 09:54:56 366

原创 吃透 Linux 进程:从基础概念到实战,一篇打通完整脉络

本文系统介绍了Linux进程管理的核心概念和关键技术,包括:1. 冯诺依曼体系结构:计算机组成原理,CPU只与内存交互,外设通过内存与CPU通信;2. 操作系统核心功能:进程管理、内存管理、文件管理等,通过"描述+组织"方式管理资源;3. 进程生命周期:创建(fork)、状态转换(R/S/D/Z等)、优先级调整、终止(exit)及回收(wait);4. 虚拟地址空间:通过页表映射实现内存保护和管理,支持写时复制等优化;5. 进程程序替换:exec系列函数实现程序加载运行;6. Shell

2026-03-29 15:39:06 368

原创 Linux 基础开发工具全指南:从代码编写到版本管理的实战手册

如果你刚接触 Linux 开发,是不是会困惑:“怎么装软件?”“用什么写代码?”“代码怎么变成可执行程序?”“程序出错了怎么调?其实,Linux 下的基础开发工具就是解决这些问题的 “基建”:从 “装工具”(yum)到 “写代码”(Vim),再到 “编译”(gcc)、“批量构建”(make)、“调试”(gdb)、“代码管理”(Git)—— 这些工具串联起了从 “写代码” 到 “交付” 的全流程。这篇博客会沿着 “开发流程” 拆解每个工具的核心用法,搭配 “命令示例 + 实战场景”,新手也能跟着一步步上手。

2026-03-22 16:04:32 425

原创 C++进阶9:异常和智能指针

本文摘要主要分为异常处理和智能指针两部分内容。异常处理部分详细介绍了异常的概念、捕获与抛出机制、栈展开过程、匹配处理代码查找、异常重新抛出、异常安全问题及异常规范等内容,通过代码示例展示了异常处理的实际应用。智能指针部分系统阐述了智能指针的使用场景、RAII设计思想、C++标准库中的auto_ptr/unique_ptr/shared_ptr/weak_ptr等智能指针的使用方法及其原理,重点分析了shared_ptr的引用计数机制和循环引用问题,并介绍了内存泄漏的概念、危害及防范措施。文章通过大量代码示例

2026-03-18 19:36:20 363

原创 C++进阶8:深入理解C++11

C++11 是 C++ 语言发展史上的里程碑版本,自 1998 年 C++98 标准发布后,时隔 13 年迎来的重大更新,彻底重塑了 C++ 的编程范式、语法风格与性能表现。它引入了大量现代化特性,解决了传统 C++ 的诸多痛点,让代码更简洁、安全、高效,也为后续 C++14/17/20 等标准奠定了基础。本文将结合 C++ 代码示例,系统梳理 C++11 的核心新特性,带你全面掌握现代 C++ 编程的核心能力。

2026-03-15 20:36:09 398

原创 C++进阶7:深入理解哈希表,从原理到 C++ 实践

哈希表(Hash Table)是一种高效的数据结构,它通过哈希函数将键(Key)映射到数组中的一个位置,从而实现近乎 O (1) 的平均时间复杂度的插入、删除和查找操作。在 C++ 标准库中,和就是哈希表思想的典型实现。

2026-03-11 10:10:52 386

原创 C++进阶6:红黑树原理

这里获取最长路径和最短路径,检查最长路径不超过最短路径的2倍是不可行的,因为就算满足这个条件,红黑树也可能颜色不满足规则,当前暂时没出问题,后续继续插入还是会出问题的。cur作为新插入的节点这里只是一种概述情况,但这种逻辑是只要节点出现这种情况就如此处理,但我们需要注意如果我们变化的祖父节点是根节点,就违反了红黑树的逻辑,所以无论如何变化我们都要加上一句让根节点始终保持黑色。3. 规则3前序遍历检查,遇到红色结点查孩子不太方便,因为孩子有两个,且不一定存在,反过来检查父亲的颜色就方便多了。

2026-03-07 10:46:33 376

原创 C++进阶5:AVL 树的原理与 C++ 完整实现

AVL 树作为最早的自平衡二叉搜索树(Self-Balancing Binary Search Tree),解决了普通二叉搜索树在极端情况下退化为链表、导致增删查效率暴跌的问题。本文将从概念入手,逐步拆解 AVL 树的结构设计、插入逻辑、旋转机制,最终实现完整的增删查与平衡检测功能,全程基于 C++ 落地代码。AVL 树中每个节点的左右子树的高度差(平衡因子)的绝对值不超过 1。平衡因子(Balance Factor, BF):节点的左子树高度 - 右子树高度。-101。

2026-03-05 18:17:27 372

原创 C++进阶4:map 与 set 全攻略

T就是set底层关键字的类型set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第⼆个模 版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参 数。⼀般情况下,我们都不需要传后两个模版参数。set底层是用红黑树实现,增删查效率是logN ,迭代器遍历是走的搜索树的中序,所以是有序的。Key就是map底层关键字的类型,T是map底层value的类型。

2026-03-02 14:59:12 571

原创 C++进阶3:二叉搜索树从原理到 C++ 实现

二叉搜索树(Binary Search Tree,简称 BST)是数据结构领域的 “基石”,它不仅是面试高频考点,更是很多工业级组件(如 C++ std::map/std::set、数据库索引)的底层基础。本文将严格遵循你的大纲,从概念、性能、核心操作、完整实现到key/value 场景实战,用 C++ 代码带你彻底掌握 BST 的原理与工程应用。任意节点的左子树所有节点值 < 当前节点值;任意节点的右子树所有节点值 > 当前节点值;左、右子树本身也必须是二叉搜索树。

2026-03-01 16:20:01 728

原创 Python基础语法详解5:字典与文件操作超详细指南(附实操代码)

在Python编程中,字典(Dictionary)和文件操作是两个高频且核心的知识点——字典用于高效存储和管理键值对数据,文件操作则实现程序与外部文件的交互(读/写数据、保存结果等)。无论是日常脚本开发、数据处理,还是后续的爬虫、数据分析学习,这两个知识点都是必备基础。本文将从「基础用法→高级技巧→常见坑点→实操案例」,全方位拆解字典和文件操作,新手也能轻松吃透,看完直接上手运用。

2026-02-15 07:00:00 1512

原创 Python基础语法详解4:函数、列表与元组全解析

Python 用def# 计算两数之和print(add(3, 5)) # 输出:8print(add(2.5, 4.5)) # 输出:7.0(动态类型支持不同类型参数)print(add(10)) # 输出:10(使用默认参数b=0)print(add(10, 20)) # 输出:30(覆盖默认参数)// C++:带默认参数的函数int main()// 输出:10// 输出:30// 编译报错:默认参数必须从右到左定义return 0;

2026-02-13 23:14:07 856

原创 Python基础语法详解3:语句与循环(附与C++对比)

作为两大主流编程语言,Python以简洁易读、语法灵活著称,而C++则以高效、底层控制能力强立足。对于刚从C++转向Python,或同时学习两门语言的开发者来说,很容易混淆两者的语句语法和执行逻辑——尤其是核心的条件语句、循环语句。本文将详细拆解Python的各类基础语句、循环语句,每一个核心知识点都搭配与C++的对比,帮你清晰区分差异、夯实基础,同时掌握两门语言的运用技巧。

2026-02-13 01:17:52 780

原创 Python基础语法详解2:输入输出与运算符全解析

作为编程入门的核心知识点,输入输出(I/O)和运算符是搭建程序逻辑的基础。Python 以简洁易用著称,而 C++ 则偏向底层和严谨,两者在这两部分的设计思路差异显著。本文将详细讲解 Python 的输入输出和运算符,并在关键节点与 C++ 对比,帮助你更深刻地理解 Python 的特性,同时巩固多语言思维。输入输出:Python 的input()print()无需关注类型和格式,简洁易用;C++ 的cincoutscanf需强类型匹配,更严谨但代码量更大。运算符Python 新增//(整除)、**

2026-02-11 22:23:02 932

原创 Python基础语法详解1(附C++对比,新手必看)

对比维度PythonC++类型特性动态类型,运行时确定类型静态类型,编译时确定类型变量声明无需声明,直接赋值必须声明类型,才能使用类型修改变量可动态切换类型(重新赋值即可)变量类型一旦声明,无法修改内存管理自动垃圾回收(解绑的数据自动回收)手动管理(new/delete)或智能指针类型错误运行时报错(类型不匹配)编译时报错(提前规避类型错误)核心优势简洁、灵活、开发效率高严谨、高效、类型安全。

2026-02-11 15:32:29 928

原创 C++进阶2:多态从概念到原理

你有没有写过这样的代码:定义了一个Animal类,里面有个bark()函数;又写了Cat和Dog类继承自Animal,各自实现bark()—— 但调用的时候,用Animal类型的指针指向Cat对象,调用的却是Cat的bark()(输出 “喵喵”);指向Dog对象,调用的是Dog的bark()(输出 “汪汪”)。这种 “同一个函数调用,不同对象表现出不同行为” 的特性,就是 C++ 面向对象的核心 ——多态。它让代码更灵活、更易扩展,是 “代码复用 + 功能定制” 的关键武器。

2026-01-16 16:31:29 673 2

原创 C++进阶1:继承深度解析

如果你写过重复的类代码(比如 “学生” 和 “教师” 都需要 “姓名、年龄” 属性),一定懂这种 “复制粘贴” 的痛苦。而 C++ 的继承正是解决这个问题的核心:它让子类(派生类)能 “继承” 父类(基类)的属性和方法,同时扩展自己的功能,是面向对象三大特性(封装、继承、多态)的核心之一。这篇博客会沿着 “基础概念→语法细节→进阶问题” 的脉络,把继承的核心知识点拆成 “概念 + 代码示例 + 实战场景”,从 “单继承” 到 “菱形继承的坑”,帮你彻底搞懂 C++ 继承的逻辑。

2026-01-15 14:52:01 584

原创 C++初阶12:模板进阶指南

如果你用过 C++ 的std::vector或std::sort,一定体会过 “一份代码适配多种类型” 的便捷 —— 这就是模板的功劳。但模板的能力远不止 “通用容器 / 算法”:当通用模板不满足特定类型的需求时,模板特化能帮你定制逻辑;当遇到 “undefined reference” 的链接错误时,模板分离编译的知识能帮你填坑。本文会沿着 “非类型模板参数→模板特化→分离编译” 的脉络,把 C++ 模板的进阶知识点拆成 “概念 + 代码示例”,看完就能解决模板开发中的常见问题。

2026-01-14 18:06:52 688

原创 Linux权限从入门到精通:搞懂其中的逻辑

你是不是也遇到过:想修改一个文件,终端弹出“Permission denied”;想执行自己写的脚本,结果提示 “无法执行”;甚至连查看某个目录都被拒绝?这一切的根源,都是 Linux 的权限机制—— 它是 Linux 系统安全的核心,通过 “限制不同用户对文件 / 目录的操作范围”,保证系统资源不被随意篡改。

2026-01-14 15:15:11 610

原创 Linux高频基础实用指南:从文件操作到日志

本文介绍了Linux系统常用指令及其应用场景。主要内容包括:1. Linux"一切皆文件"的概念解析;2. 文件类型识别方法;3. 文件操作指令如echo、mv、cat等;4. 时间日历指令date和cal;5. 查找工具which、whereis和find;6. 文本搜索工具grep;7. 打包压缩工具zip/unzip和tar;8. 其他实用指令如bc和uname。文章通过具体示例演示了各指令的用法,特别强调了日志查看、文件操作等高频场景下的指令组合技巧,帮助用户提升终端操作效率。

2026-01-13 19:05:57 993

原创 C++初阶11:stack/queue全解析

你是否在写代码时遇到过这些场景:想实现括号匹配却不知如何高效管理字符顺序?做BFS遍历二叉树时,纠结用什么数据结构存储待访问节点?设计任务调度系统时,需要让高优先级任务优先执行却毫无头绪?其实答案早已藏在C++标准库中——stack、queue和priority_queue这三个“容器适配器”,正是解决这类“有序管理数据”问题的利器。它们不像vector、list那样提供灵活的访问方式,却凭借各自固定的规则(后进先出、先进先出、优先级排序),在特定场景下展现出极高的效率和简洁性。

2025-12-21 10:27:48 997 1

原创 C++初阶10:list底层原理大揭秘

本文详细介绍了C++ STL中list容器的模拟实现过程。首先剖析了list的底层结构,采用双向循环链表设计,重点讲解了节点结构封装和空链表实现。其次深入探讨了迭代器的核心特性,通过运算符重载模拟指针行为,并实现了普通迭代器和const迭代器的封装。最后详细阐述了list的核心功能实现,包括构造析构、深拷贝、增删改查等操作,特别强调了insert和erase作为核心接口的重要性。整个过程遵循"底层原理拆解→核心组件实现→功能完善→测试验证"的开发逻辑,为理解STL容器实现提供了清晰的技术

2025-12-18 16:36:07 294

原创 Linux基本指令入门:从看不懂到熟练使用

本文介绍了Linux系统中最常用的8个基础指令,帮助初学者快速掌握Linux操作。内容包括:终端基本概念、命令格式说明,以及pwd(显示当前路径)、ls(查看目录内容)、cd(切换目录)、touch(创建文件)、mkdir(创建目录)、rm/rmdir(删除文件/目录)等核心指令的详细用法和实操示例。特别强调了Linux文件系统的树状结构、绝对/相对路径概念,以及文件时间属性(访问、修改、改变时间)的区别。文中还提醒删除操作需谨慎,并提供了递归操作、强制删除等实用参数的使用方法。

2025-12-16 18:29:13 999

原创 C++初阶9:list使用攻略

本文介绍了C++ STL中的list容器及其应用。list基于双向循环链表实现,适合频繁插入删除操作,时间复杂度为O(1)。文章详细讲解了list的初始化、迭代器使用误区、核心增删查改操作(push_back/pop_back/insert/erase等),以及常用函数如remove、size等。特别强调了list特有的成员函数sort、unique、merge和reverse的优化使用,这些函数针对链表结构进行了性能优化。通过代码示例展示了list与vector的区别及适用场景,帮助开发者根据需求选择合适

2025-12-14 20:17:12 905 1

原创 C++初阶8:vector底层原理大揭秘

在 C++ 开发中,我们每天都在使用 STL 的vector,但多数人只停留在 “会用” 层面。想要真正理解vector的动态扩容、内存管理、迭代器等核心机制,模拟实现一个极简版的 vector是最好的方式。本文将从底层结构出发,一步步拆解vector的核心功能,最终实现一个支持基本操作、深浅拷贝,所有代码均附,可直接编译运行。

2025-12-12 13:27:24 770 1

原创 C++初阶7:vector的使用攻略

vector的本质是一个动态数组,它会自动管理内存,无需手动分配 / 释放内存。与普通数组比较优势大小可动态调整,无需提前确定长度提供丰富的成员函数(增删改查、容量管理)兼容 STL 算法库,可快速实现排序、查找等操作。

2025-12-10 22:35:13 692

原创 C++初阶6:string类底层原理大揭秘

目的是。

2025-12-07 13:07:49 1069 2

原创 C++初阶5:string类使用攻略

本文介绍了C++中std::string类的核心功能和使用方法。作为标准库提供的字符串类,string相比C风格字符串更安全易用,支持自动内存管理、丰富成员函数和运算符重载。主要内容包括:构造函数、析构函数和赋值运算符;多种遍历方法([]运算符、迭代器、auto和范围for);容量管理函数(size/length、resize/reserve等);元素访问和修改操作(insert/erase/replace等);以及实用功能如substr、查找和getline。文章强调通过查阅官方文档掌握string类的完

2025-12-05 11:09:17 699 5

原创 C++初阶4:STL简介

STL(standard template libaray-标准模板库):是,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。核心价值是“代码复用+性能优化”,让开发者无需重复实现基础数据结构和算法。

2025-12-01 16:33:47 747 7

原创 C++初阶3:内存管理和模板

我们来解释一下上面那个奇怪的报错,实际上就是因为A类有显示定义的析构函数,但是B的析构函数是默认生成的空析构(我们这两个类在构造时都没有申请空间,所以析构只是走个形式的空析构)当我们释放时虽然使用的new,delete匹配不当,但是B会释放首元素的内存,因为析构函数是空的,其余对象的构函数未被调用,不会造成实际可见的错误,只是内存泄露,不会让系统崩溃而类仅调用了第一个对象的析构函数,其余九个A对象的结构函数就没有被调用,同时内存释放不完整,所以会造成程序崩溃。:让编译器根据实参推演模板参数的实际类型。

2025-11-26 15:35:50 1200 8

原创 C++初阶2:类和对象

本文系统介绍了C++类与对象的核心概念,主要包括:1. 类定义与访问限定符(public/private/protected);2. 类的实例化与内存对齐规则;3. this指针的工作原理;4. 六大默认成员函数(构造/析构/拷贝构造/赋值重载/取地址重载);5. 初始化列表与类型转换;6. static成员、友元、内部类等特性;7. 编译器优化机制。重点阐述了构造函数与析构函数的调用时机、拷贝构造与赋值重载的区别、this指针的隐式传递等关键知识点,并通过Stack/Date等示例说明深浅拷贝的应用场景。

2025-11-24 11:51:37 989 7

原创 C++初阶1:入门

本文介绍了C++编程语言的基础知识,包括第一个程序、命名空间、输入输出、缺省参数、函数重载、引用、内联函数和nullptr等核心概念。C++在保留C语言高效性的基础上增加了面向对象特性,通过命名空间解决命名冲突问题,使用更灵活的输入输出方式,支持函数缺省参数和重载。引用作为变量的别名可以简化指针操作,内联函数能提高执行效率,nullptr则解决了NULL在指针类型转换中的问题。这些特性使C++比C语言更加强大和易用。

2025-11-17 00:18:39 1050

原创 数据结构6:排序

本文系统介绍了常见排序算法及其实现原理。主要内容包括:排序概念与分类(插入、选择、交换等类型);具体算法实现(直接插入、希尔、选择、堆、冒泡、快速、归并、计数排序);优化策略(快速排序的三数取中和小区间优化);非递归实现方法(快速排序和归并排序);最后总结了各算法的时间/空间复杂度及稳定性。文中通过代码示例和图示详细说明了每种排序的核心思想,特别对快速排序的多种实现方式进行了重点分析,并提供了完整的复杂度对比表格。

2025-11-14 21:42:09 1243 1

原创 数据结构5:二叉树

本文系统介绍了二叉树的基本概念、存储结构和实现方法。主要内容包括:1.树的基本概念和表示方法;2.二叉树的定义、性质和存储方式(顺序存储和链式存储);3.二叉树的顺序结构实现,包括堆的创建、初始化、添加/删除数据、堆排序等操作;4.二叉树的链式结构实现,包括前中后序遍历、计算节点数/叶子数/层数、查找节点、销毁树等功能;5.通过遍历数组构建二叉树的方法。文章强调在学习过程中要区分物理存储结构和逻辑结构,建议通过画图辅助理解递归过程。二叉树作为重要的非线性数据结构,在算法和程序设计中具有广泛应用。

2025-11-07 14:52:59 963

原创 数据结构4:栈与队列

文章摘要: 本文详细介绍了栈和队列两种线性数据结构的概念与C语言实现。栈遵循LIFO原则,通过数组实现,核心操作包括入栈、出栈、获取栈顶元素等。队列遵循FIFO原则,采用链表实现,提供入队、出队、获取队首队尾元素等功能。文章包含完整C代码实现(头文件和源文件),并附有LeetCode练习题(有效括号、栈队列互转)以加深理解。两种数据结构都基于顺序表/链表基础,通过封装特定接口实现其特性。

2025-11-01 20:13:02 531

原创 链表算法题

本文总结了15道数据结构与算法练习题,重点针对顺序表和链表操作进行巩固。题目涵盖常见算法思想如双指针、反转链表、环形链表等。每道题目都配有解题思路和注意事项,强调画图辅助分析的重要性。练习内容包括合并有序数组、移除元素、反转链表、环形链表判断、快慢指针应用等经典题型。文章建议读者结合图示理解算法逻辑,并推荐在力扣或牛客网平台实际练习这些题目。

2025-10-28 23:22:29 927

原创 数据结构3:复杂度

本文系统讲解了算法复杂度分析的核心概念。时间复杂度用大O表示法衡量算法执行时间随输入规模的增长趋势,推导原则为保留最高阶项并去除系数,常见效率排序为O(1)>O(logn)>O(n)>O(n²)>O(2ⁿ)。空间复杂度分析算法额外内存占用,重点关注动态分配和递归栈空间。文章通过8个时间复杂度和3个空间复杂度的典型例题(如冒泡排序O(n²)、斐波那契递归O(2ⁿ)等),演示了不同场景下的分析方法,强调实际应用中通常优先优化时间复杂度,采用"空间换时间"策略。最后总结

2025-10-23 20:59:56 947

原创 数据结构2:单链表

本文系统介绍了链表数据结构及其实现方法。主要内容包括:单链表的分类、初始化及功能实现(插入、删除、查找等操作);双向链表的定义与实现,重点讲解了带头节点的双向循环链表;通过通讯录案例展示了单链表的实际应用。文章详细对比了单链表和双向链表的操作差异,强调接口一致性的重要性,并解释了指针传递的原理。全文通过形象的"火车车厢"比喻帮助理解链表结构,提供了完整的代码实现代码,适合作为数据结构中链表学习的参考资料。

2025-10-19 10:17:44 1275 2

空空如也

空空如也

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

TA关注的人

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