RootStack

以 C 作为出发点,覆盖多领域、多计算机语言的百科全书式教程 —— C、C++、Python、Rust、数据结构与算法、Linux 系统、系统内核、汇编、网络安全(红队)

C C++ Rust Linux Assembly 数据结构 算法 网络安全 version

🌐 rootstack.misser.top — 免代理访问的在线教程

Git 指南 · GitHub 设置 · 科学上网 · 国际付费 · 红队知识库 · 参与贡献

我们需要你的帮助

加入我们 ♡



关于本教程

本教程体系是一套以 C 语言为核心、向上延伸至 C++ 和数据结构、向下探及汇编和内核的完整知识库。教程使用 Obsidian 的双向链接 `文件名` 组织内容,形成相互引用的知识网络。

路径说明: 路径 A-D 是通识学习路径,适合所有计算机学习者;路径 E 是职业分化路径——网络安全(红队),基于 ArchStrike 体系,已覆盖 ~125 篇知识库文件。通识路径学完后,按兴趣选择职业方向。

本教程有瑕疵。教程内容包含 AI 辅助生成的部分,可能存在概念偏差、代码错误或总结不到位的情况。请读者始终保持批判性阅读,不要盲目照搬。如果你发现错误或有改进建议,请见 问题讨论区——我们非常欢迎你的议题和 Pull Request,项目组在经过实践检验和综合讨论之后会进行修改。


推荐学习环境:Linux

本教程涉及编译、链接、系统调用、内核模块、汇编等底层内容。在 Windows 下学习 C/系统编程,频繁遇到 PATH 差异、缺少标准工具链、权限模型不一致、ABI 不同步等问题,每个问题都在分散你对核心知识的注意力。推荐使用 Linux 作为学习环境,一次解决所有环境问题,把精力留给真正要学的东西。

为什么推荐 Arch Linux

以下为作者个人观点: Arch Linux 是最好的日用 Linux 发行版。这不代表它在所有场景下都是最佳选择——服务器部署推荐 Debian/RHEL,嵌入式推荐 Yocto/Buildroot,但作为个人日常桌面学习和开发环境*,Arch Linux 的优势明显。

  • 滚动更新 — 安装即是最新内核(6.x)、最新 glibc、最新 gcc、最新 LLVM。不需要重装系统来升级,pacman -Syu 一次全部更新
  • Arch Linux Archive (ALA) — 如果真的需要回滚某个包,ALA 保存了所有历史版本,用 downgrade 工具即可指定版本
  • AUR (Arch User Repository) — 几乎任何软件的安装都是一个命令:yay -S obsidianyay -S github-cliyay -S visual-studio-code-bin,不需要手动编译或找第三方源
  • ArchWiki — 业界公认最详尽的 Linux 文档库。一个问题在 ArchWiki 上通常能找到完整的解决方案,比翻论坛帖子快 10 倍
  • 贴近上游 — Arch 的包几乎不修改上游源码,配置最接近 Linux 内核和 GNU 工具链的原始行为。这对学习 C/系统编程非常有利——你遇到的问题就是上游的问题,不会因为发行版打了奇怪的补丁而困惑
  • 不想折腾? 如果不想手动安装 Arch,推荐 EndeavourOS——基于 Arch 的衍生版,有图形安装器,安装后直接获得完整的 Arch 体验。或者archinstall一键安装
  • 自由灵活 这就是Arch最适合作为日用linux系统的原因。arch具有极高的灵活性,从内核选择到桌面环境(de还是wm)完全自由,可根据喜好灵活搭配,社区活跃。
  • 问题 以上有很多都是问题,aur,滚动更新,会导致一些冲突,滚挂,因此在工作环境和服务器中并不推荐。但是作为日常使用,其体验无与伦比。

快速入门


Obsidian 使用指南

本教程设计为在 Obsidian 中阅读以获得最佳体验(双向链接预览、图谱视图、可折叠答案)。以下是各平台的安装和导入方法:

Linux

# Arch Linux
sudo pacman -S obsidian
 
# Flatpak (通用)
flatpak install flathub md.obsidian.Obsidian

macOS

brew install --cask obsidian

Windows

obsidian.md/download 下载 .exe 安装包,运行安装即可。

导入本教程

  1. 打开 Obsidian,点击 “Open folder as vault”
  2. 选择本教程的根目录(即包含本 README.md 的文件夹)
  3. Obsidian 会自动识别 .obsidian/ 配置并加载所有双链接

导入后,从本文件(README)出发,通过 双链接 跳转到任意章节。阅读模式下按 Ctrl/Cmd + 点击 即可跳转。


教程体系结构

RootStack/                          ├ v0.4.3
├── README.md                    ← 你在这里
│
├── 路径A-C主线.md               C 主线: 从零到内核
├── 路径B-CPP主线.md             C++ 主线: 从零到应用开发
├── 路径C-C向下兼容C++.md        C → C++ 向下兼容
├── 路径D-DSA算法刷题.md         竞赛策略完全路线图 (力扣 + 多OJ)
├── 路径E-红队职业路径.md        网络安全职业路径 (含CTF→SRC/比赛分化)
├── 路径F-Rust学习路径.md        Rust 学习路径 (含力扣练习与竞赛OJ)
├── 算法/                         算法竞赛内容 (仅供 Path D 学习者)
│   ├── 算法技巧/ (28篇)          基础算法技巧 (数组/搜索/DP/图论等)
│   ├── 数学/ (5篇)               数论/组合数学/CRT (Phase 7)
│   ├── 搜索进阶/ (3篇)           双向搜索/A*/IDA* (Phase 8)
│   ├── DP优化/ (3篇)             单调队列/斜率/四边形不等式 (Phase 9)
│   ├── DP进阶/ (9篇)             区间DP/背包DP/树形DP/状压DP等 (Phase 6)
│   ├── 图论/ (15篇)              最短路/MST/拓扑排序/SCC/LCA/网络流等 (Phase 4)
│   ├── 字符串扩展/ (8篇)         Trie/SA/SAM/Z函数/回文自动机等 (Phase 6)
│   ├── 杂项技巧/ (4篇)           莫队/CDQ/整体二分/ODT (Phase 10)
│   ├── 题目/ (8篇)               算法题目存档
│   └── 计算几何/ (3篇)           二维几何/凸包/半平面交 (Phase 11)
│
├── c语言教程/                   C 语言: 入门 → 深化 → 库大全
│   ├── c目录.md
│   ├── 1入门/ (10篇)  2深化/ (9篇)  3数据结构/ (9篇)
│   └── 库大全/ → 容器类库/ 功能类库/ 第三方库/
│
├── cpp教程/                  C++ 教程: 基础 → 深化 → 容器库 → 功能库 → 第三方库
│   ├── cpp目录.md
│   ├── cpp基础教程/ (11篇)        cpp深化教程/ (16篇)
│   ├── 容器库/ (5子目录)       cpp功能库/ (8子目录)  cpp第三方库/ (11子目录)
│
├── rust/                       Rust 教程: 入门 → 深入 → 实践 → 工程 → 重构
│   ├── rust目录.md
│   ├── 1入门/ (14篇)             2深入/ (11篇)           3实践/ (6篇)
│   ├── 4工程/ (12篇)              5重构/ (6篇)
│
├── 数据结构/ (18篇)             语言无关的数据结构教程 + DSA学习路线
│
├── 内核/ (~35篇)               四种内核 + C与Rust新时代 + Rust内核开发
│   ├── 系统内核/ (7篇)         语言运行时内核/ (7篇)
│   ├── 工具内核/ (7篇)         游戏引擎内核/ (7篇)
│   ├── Rust内核/ (6篇)         Rust 在内核中的实践
│   └── 内核索引.md              C与Rust的内核新时代.md
│
├── 汇编基础/ (3篇)              x86/ARM 汇编教程
│
├── red_team/ (~125篇)          网络安全红队职业路径 (ArchStrike体系)
│   ├── 网安基础知识/ (10篇)      渗透测试方法论
│   ├── 前端基础/ (25篇)          实战教程/ (13篇,含14天实训)
│   ├── archstrike-*教学/ (48篇) 10组ArchStrike工具教程
│   ├── 服务器部署与运维/ (4篇)   QQ Bot攻防实战
│   └── ctf_trea/ (7篇)          CTF竞赛知识库
│
├── git.md                       Git 与 GitHub 终端操作指南 (14节)
├── github-settings.md           GitHub 网页端设置指南(新增)
├── VERSION                      项目版本号: 0.3.0
└── ISSUES.md                   问题讨论与贡献指南

写在教程之前

本教程体系的目标是提供一套从 C 出发、延伸至系统底层的完整知识库,涵盖 C、C++、数据结构与算法、Linux 系统、操作系统内核、Rust 语言。我们追求的不是”一本通”的虚假承诺,而是一个结构清晰、双向链接、支持 AI 辅助学习的知识体系。

核心原则:

  1. 精简内容,深入底层 — 不在无关紧要处堆砌文字,关键节点深入讲解,其余留给读者思考。
  2. 底层至上 — C 和 C++ 不同于 Java/Python,它们靠近硬件。本教程体系涉及汇编、内存布局、指针本质等底层话题,从”CPU 看到了什么”的角度剖析。
  3. 辩论式阅读 — 希望读者带着批判态度阅读,将更多时间放在思考上。练习题的目的就是启发思考,不会就回去重想。
  4. 双链接体系 — 使用 Obsidian 双链接连接不同模块,形成计算机知识网络。
  5. 不反对也不鼓吹 AI — 自我思考是第一要务,AI 工具进行辅助。推荐读者旁边开着 AI,遇到不懂的问题先自己对 AI 解释看法让其纠正,来形成自己的理解。
  6. 实践为主,教程为辅 — 真正的工程师经验来自项目堆砌和自我踩坑。本教程体系提供结构和指引,修炼靠个人。

内核 —— 技术栈的底层基石

C 语言之所以诞生,就是为了写操作系统内核。Dennis Ritchie 在 Bell Labs 创造 C 语言时,目标就是用它重写 Unix 内核(之前用汇编)。至今,Linux 内核(3000万行)、Windows NT 内核、FreeBSD 内核、以及几乎所有嵌入式 RTOS 都是用 C 写的。

C 语言写内核的优势

  • 零成本抽象: C 的每个语法结构都直接映射到机器指令,没有隐藏的内存分配或运行时开销
  • 直接硬件访问: 指针可以映射到任意物理地址(MMIO),volatile 保证不会被优化掉
  • 可预测的内存布局: struct 的字段顺序和 padding 都是可控的
  • 无运行时依赖: 内核没有 libc,C 语言本身不需要运行时支持
  • ABI 稳定性: C ABI 是事实上的跨语言标准,Rust/C++/Zig 都通过 C ABI 互操作

新时代: C 与 Rust 的结合

传统上 C 是内核的唯一选择。但约 70% 的 CVE 安全漏洞来自内存 bug。Rust 的所有权系统在编译期消除这些 bug,同时保持零成本抽象的承诺。

Linux 6.1 开始正式支持 Rust 内核模块。未来的趋势不是 C vs Rust,而是 C AND Rust

  • C 负责成熟稳定的核心子系统(调度器、内存管理、VFS)
  • Rust 负责新开发的驱动和子系统(GPU driver、Binder、网络协议)
  • 两者通过 C ABI 的 FFI 无缝交互

详见 C与Rust的内核新时代

四种内核视角

内核类型入口代表
系统内核[[ISSUESC语言与操作系统]]
语言运行时内核[[ISSUES语言运行时内核索引]]
工具内核[[ISSUES工具内核索引]]
游戏引擎内核[[ISSUES游戏引擎内核索引]]

关于刷题

从工程化培训视角来看,算法竞赛并不是本教程体系下刷题的主要目的。刷题的唯一目的是在自认为学会一个语法点或数据结构之后,去检验自己是否真的掌握了。如果你阅读本教程的初衷不是为了竞赛,或者首要目标是步入工程化开发,我们不推荐将大量时间消耗在各大题库中。本教程在各章节末尾附带少量力扣题目,用于自检即可。

关于 AI 使用:题库平台普遍有反作弊机制。用 AI 进行题目理解、思路讨论、代码审查是安全且推荐的;但直接复制 AI 生成的代码提交到平台有封号风险。无论如何,本教程不推荐将刷题数量和排名放在自我思考之上。

推荐算法资源

以下开源项目可配合本教程的 DSA 模块使用:

项目语言Stars说明
OI-wiki中文26.3k编程竞赛百科,完整知识树,做题遇到不会的先查这里
TheAlgorithms/PythonPython223k全部算法 Python 实现,教育级代码质量
TheAlgorithms/CC22.2kC 语言算法实现(本教程 C 主线的直接对照参考)
TheAlgorithms/C-Plus-PlusC++34.5kC++ 算法实现(本教程 C++ 主线的直接对照参考)
TheAlgorithms/JavaJava66kJava 算法实现
TheAlgorithms/RustRust25.9kRust 算法实现
TheAlgorithms/GoGo18.1kGo 算法实现
awesome-algorithms资源列表25.4k算法学习精选书单/课程/竞赛网站/可视化工具
Algo-AtlasC++/Py493LeetCode 2000 题/8 月刷题计划,含完整分类笔记

详细用法见 路径 D 的推荐资源章节


学习路径(通识)

以下五条路径覆盖 C、C++、DSA、Rust 四大方向,适合所有计算机学习者,章节级阅读顺序、推荐阅读物、语言官方文档链接均已标注。

路径文件适合人群
A: C 主线[[ISSUES路径A-C主线]]
B: C++ 主线[[ISSUES路径B-CPP主线]]
C: C→C++[[ISSUES路径C-C→C++]]
D: DSA 刷题[[ISSUES路径D-DSA算法刷题]]
F: Rust 学习[[ISSUES路径F-Rust学习路径]]

职业路径(分支)

以下路径为职业方向分化,前五条是通识基础,不分方向都可学习;从这里开始进入具体职业领域,需要通识基础作为前置。

路径文件适合人群
E: 红队 (ArchStrike)[[ISSUES路径E-红队职业路径]]

本教程体系可当作类百科全书使用,内容完善但体量庞大。若作为教程从头通读,效率不高。建议按照路径文件中的推荐阅读顺序,结合索引文件进行选择性学习。同时推荐与 AI 进行问答互动学习——在自认为掌握语法或数据结构之后,去 力扣 做几道题验证即可。如遇到错误,不建议死磕,可用 AI 辅助纠正思路。


各模块入口速查

模块入口说明
C 语言[[ISSUESC 教程目录]]
C++[[ISSUESC++ 教程目录]]
数据结构[[ISSUESDSA 学习路线]]
算法技巧[[ISSUES动态规划]]
内核[[ISSUES内核总索引]]
汇编[[ISSUES寄存器与指令基础]]
红队[[ISSUES红队知识库总目录]]

力扣即时练习

本教程体系以 力扣 (LeetCode) 为推荐的日常练习平台。各语言基础、数据结构章节末尾附带对应力扣题目类型指引。

学习路线 → 力扣 (适合求职/工程/理解数据结构)
竞赛路线 → 洛谷 + Codeforces + POJ/HDU + AtCoder (适合走算法竞赛的选手)

郑重提醒:刷题的意义在于自检,不在于数量和排名。每学完一个主题做 2-4 道题验证理解即可。关于 AI 与刷题的边界:用 AI 讨论题目思路是好的,但直接复制 AI 生成的代码提交有被检测和封号的风险。


快速参与贡献

RootStack 欢迎任何人贡献内容、修正错误或提出建议。

网页端操作(无需安装 Git)

  1. Fork 本项目 — 打开 GitHub 项目页,点击右上角 Fork 按钮
  2. 提建议 — 点击仓库上方的 Issues 标签 → New Issue,描述你的问题或想法
  3. 在线修改并提交 PR — 在 GitHub 网页上浏览到要修改的文件,点击 编辑按钮 → 修改 → Commit changes → 选择 Create a new branchPropose changes → 点击 Create Pull Request
  4. Fork 后如何同步上游 — 在 GitHub 网页上,你的 fork 仓库页点击 Sync forkUpdate branch

终端操作(专业流程)

详见 Git 与 GitHub 终端操作指南,包含从安装到 PR 合并的完整教程。

# 极简流程:Fork → Clone → 修改 → PR
git clone https://github.com/你的用户名/RootStack.git
cd RootStack
git remote add upstream https://github.com/原项目名/RootStack.git
git checkout -b my-feature
# 修改文件...
git add .
git commit -m "说明你的修改"
git push origin my-feature
# 然后去 GitHub 网页点 "Compare & pull request"

Git 安装(各平台)

平台安装命令备注
Linux (Debian/Ubuntu)sudo apt install git
Linux (Arch)sudo pacman -S git
macOSbrew install git也可从 git-scm.com 下载 .dmg
Windowswinget install Git.Git 或从 git-scm.com 下载 exe

作者观点:推荐使用终端里的原生 Git,而不是 git.exe 或 IDE 内置的 Git GUI。终端 Git 给你完整的能力、一致的跨平台体验,以及对每一步操作的掌控感。图形化的 Git 工具适合查看历史,但日常操作建议回归命令行。


致谢

本教程体系的开发过程中使用了以下 AI 辅助工具:

  • opencode — 项目重构与内容批量处理
  • Claude Code — 方案设计、内容编写与代码审查

感谢所有通过 问题讨论区 和 Pull Request 参与贡献的读者。


近期任务

主要是两大任务,撰写密码学部分,与筛查优化数据结构部分。
本教程虽然是整合了已有的开源知识。但是大部分需要手动筛查和优化,即使有AI辅助也很难做完。另外本教程还有一些是没有被开源的教程,我们需要自己去探索撰写。工作量更添甚多,我们需要帮助!!!
有意向者欢迎加入我们QQ群,即使是进来加油打气,提出意见也行!


近期更新

以下为项目管理员维护的更新日志。新增内容、删除内容、重大修改请在此处简要记录。

日期变更类型说明
7.13首次提交项目将作者以前的cpp_deep,c-learning项目整合起来并删减整理形成的一套教程
7.17新增职业路径red_team/网络安全模块(~125篇, ArchStrike体系), 路径E红队职业路径, 学习/职业路径区分
7.18OI-wiki移植从 OI-wiki 移植 32 篇算法文件: 图论(15篇) + 字符串扩展(8篇) + DP进阶(9篇), 新建 算法/图论/ 算法/字符串扩展/ 算法/DP进阶/
7.18Rust 教程整合新增 Rust 教程体系 (~55篇: 入门14+深入11+实践6+工程12+重构6),路径F-Rust学习路径,rust目录.md 索引,Rust内核融入 内核/Rust内核/,跨模块双链接
7.20新增密码学密码学是计算领域的一门重要学科,所以创建密码学部分。专门列一个类目。

加入交流群

欢迎加入 QQ 群交流学习:

扫码加入 QQ 群

二维码失效或群满请通过 问题讨论区 联系管理员更新。