专业阶段 — Unit 3: C Classicals(计算机科学经典问题全景)
"Computer science is no more about computers than astronomy is about telescopes." — Edsger Dijkstra(结构化编程先驱,图灵奖得主)
覆盖计算机科学 17 个子领域的经典问题——从操作系统死锁到量子计算,从密码学到计算机视觉,每道题都是该领域的"第一性原理"经典问题。
课程总览
| 课号 | 领域 | 题目 | 难度 | 核心知识点 |
|---|---|---|---|---|
| 49 | 并发 | 哲学家就餐问题 | 中 | pthread 互斥锁、Coffman 死锁四条件、非对称资源分配、状态机模拟 |
| 50 | 网络 | 可靠数据传输 Stop-and-Wait | 中 | 停等协议、FSM 状态机、1-bit 序号空间、ACK/超时重传、不可靠信道模拟 |
| 51 | 编译 | LL(1) 预测分析表 | 中 | FIRST/FOLLOW 集迭代、RHS 编码、表驱动栈式解析、不动点收敛 |
| 52 | 数据库 | B+ 树索引 | 中 | B+ 树结构、分裂规则、叶子链表、范围查询、磁盘 I/O 友好性 |
| 53 | 图形学 | 基础光线追踪 | 中 | 射线-球求交(判别式法)、Phong 三分量光照、PPM P3 格式、向量运算库 |
| 54 | AI | A* 寻路算法 | 中 | f=g+h 启发式、Manhattan 距离可接受性、6×5 网格 10 步追踪、路径回溯 |
| 55 | 密码学 | RSA 公钥加密 | 中 | 模幂运算、Miller-Rabin 素性检测、欧拉定理、扩展欧几里得求逆元 |
| 56 | 分布式 | 向量时钟 Happens-Before | 中 | 偏序关系、Lamport 局限、Happens-Before 判定、3 节点 6 事件追踪 |
| 57 | 体系结构 | 缓存模拟器 LRU | 中 | 2 路组相联、地址分解 (tag/set/offset)、LRU 替换、12 次访问全追踪 |
| 58 | 算法 | Aho-Corasick 多模式匹配 | 中 | Trie 树、失败链接 (failure link)、BFS 逐层构建、O(n) 一次扫描 |
| 59 | 自动机 | NFA→DFA 子集构造 | 中 | ε-闭包不动点迭代、NFA 模拟状态集演算、4 状态 DFA 推导、位掩码编码 |
| 60 | 软件工程 | 微型单元测试框架 | 中 | C 预处理器宏 (#/##)、TEST 注册表、ASSERT 四要素、do-while(0) 惯用法 |
| 61 | 安全 | 缓冲区溢出分析 | 中 | x86-64 栈帧布局、gets/strcpy 溢出、Stack Canary 金丝雀、纵深防御体系 |
| 62 | 机器学习 | 感知机二分类器 | 中 | 线性分类器 y=sign(w·x+b)、权重更新规则、AND 训练 4 轮追踪、Novikoff 收敛 |
| 63 | 数值计算 | 矩阵 LU 分解求解器 | 难 | A=LU 分解、部分主元 pivoting、前代/回代、浮点误差传播、P 向量隐式表示 |
| 64 | 系统编程 | 无锁环形缓冲区 | 难 | C11 _Atomic SPSC、memory_order 分级、伪共享、忙等待 vs CAS、2× vs 1.5× 增长 |
| 65 | 运行时 | 标记-清除 GC | 中 | DFS 标记可达对象、三色标记抽象、线性 sweep 回收、碎片问题与 stop-the-world |
| 66 | 可计算性 | 图灵机 aⁿbⁿ 模拟器 | 中 | 七元组定义、δ 转移表、配对消去法、Church-Turing 论题、对角线停机证明 |
| 67 | 信号处理 | 快速傅里叶变换 FFT | 中 | N=8 Cooley-Tukey DIT、蝶形运算、位反转置换、旋转因子 W₈、复乘 |
| 68 | 计算机视觉 | Sobel 边缘检测 | 中 | Gx/Gy 卷积核、梯度幅值 √(Gx²+Gy²)、128 阈值分割值边界处理 |
| 69 | 信息检索 | TF-IDF 文档相似度 | 中 | 词频 TF × 逆文档频 IDF、余弦相似度、3 文档向量化、strtok 预处理 |
| 70 | 量子计算 | 量子比特与门电路 | 中 | 态矢量 |
| 71 | 区块链 | 工作量证明 PoW | 中 | SHA-256 Merkle-Damgård、消息填充、3 区块挖矿、nonce 暴力搜索、链验证三角 |
| 72 | HCI | ANSI 终端计算器 | 中 | 双栈表达式求值、运算符优先级编码、ANSI 转义序列、parse_number 多位数累积 |
24 道题 × 17 个 CS 子领域,点击课号跳转至详细讲义。每道题采用
make+stdout评测模式,平均编写约 96 行 C 代码。
一、阶段定位与目标
本阶段是 C 语言训练营的第四站,承接 Unit 2(C Essentials)建立的数据结构与算法基础,正式进入计算机科学经典问题的全景式训练。如果说 Unit 2 是"学会造数据结构",那么 Unit 3 就是"用数据结构解决真实世界的经典问题"——从操作系统死锁到网络可靠传输,从编译器语法分析到数据库索引,从光线追踪到量子计算,每道题都是该领域的"第一性原理"经典问题。
根据训练营总体规划,本阶段旨在解决"学员懂数据结构但缺乏 CS 全局视野"这一核心问题。设计思路为:一题一领域,一领域一经典——24 道题覆盖计算机科学 17 个子领域,每题选取该领域最核心的经典问题,用纯 C 语言从第一性原理实现。
主要目标
- 建立 CS 全局视野:覆盖操作系统(哲学家就餐)、网络(停等协议)、编译原理(LL(1) 解析器)、数据库(B+ 树)、图形学(光线追踪)、人工智能(A* 寻路、感知机)、密码学(RSA)、分布式系统(向量时钟)、体系结构(缓存模拟器)、信息安全(缓冲区溢出)、数值计算(LU 分解)、信号处理(FFT)、计算机视觉(Sobel 边缘检测)、信息检索(TF-IDF)、量子计算(量子比特模拟)、区块链(PoW)、人机交互(终端计算器)以及算法(Aho-Corasick、NFA→DFA、图灵机)、软件工程(测试框架)、编程语言理论(标记 - 清除 GC)和嵌入式系统(无锁环形缓冲)。
- 深化系统编程能力:从无锁并发的原子操作,到标记 - 清除垃圾回收器的对象图遍历,再到 SHA-256 工作量证明——每道题都是工业级系统软件的微缩模型。
- 训练工程化开发习惯:本阶段全部采用
mode = "make+stdout"评测模式——学员需编写Makefile管理编译流程,程序通过标准输出与预期结果逐字符比对。这是从"练习题"到"工程项目"的关键跨越。 - 为编译器项目铺路:本阶段的 LL(1) 解析器(Lesson 51)、NFA→DFA(Lesson 59)、标记 - 清除 GC(Lesson 65)、图灵机(Lesson 66)四道题直接对应 Unit 4 编译器项目中的语法分析、正则引擎、运行时内存管理、可计算性理论基础。Aho-Corasick(Lesson 58)则是编译器词法分析的多模式匹配基础。
授课形式
与 Unit 2(C Essentials,四节直播)类似,本阶段采用腾讯会议直播授课,共三节:
| 节次 | 时间 | 内容 |
|---|---|---|
| 第一节 | 2026 年 07 月 13 日 20:00 | Lesson 49-56:操作系统与并发、网络协议、编译原理、数据库索引、图形学、AI 寻路、密码学、分布式系统 |
| 第二节 | 2026 年 07 月 15 日 20:00 | Lesson 57-64:体系结构、多模式匹配、自动机理论、测试框架、安全分析、机器学习、数值计算、无锁编程 |
| 第三节 | 2026 年 07 月 17 日 20:00 | Lesson 65-72:垃圾回收、可计算性、信号处理、计算机视觉、信息检索、量子计算、区块链、人机交互 |
每节直播约 2 小时,包含领域背景讲解、算法推导、代码实战、现场答疑。直播录像会回传至训练营知识库供回看。
学习依托
- 训练营维护的 clings 练习仓库(24 个 Lesson,共 24 道题)
- 每个 Lesson 配套的 README 讲义(含领域背景、算法图解、数学推导、课堂讨论与课后练习,单篇最长 775 行)
- CNB 云原生开发环境(一键开箱)或本地 GCC 环境
二、主要内容与学习路径
本阶段通过 24 道题覆盖计算机科学 17 个子领域,按主题模块组织如下:
模块一:操作系统与并发
Lesson 49 — 哲学家就餐问题(1 道题)
- 经典死锁问题:5 个哲学家共享 5 把叉子,用状态机模拟(免 pthread 依赖)。
- 非对称资源分配策略打破循环等待:奇数号先取左、偶数号先取右。
- 理解死锁四条件(互斥、占有等待、不剥夺、循环等待)与预防方法。
Lesson 56 — 向量时钟(1 道题)
- 分布式系统的因果序追踪:3 节点 6 事件,构建向量时钟并判定 happens-before 关系。
- 理解 Lamport 标量时钟与向量时钟的区别,并发事件的判定规则。
Lesson 64 — 无锁环形缓冲区(1 道题)
- SPSC(单生产者单消费者)无锁队列:用原子操作 + 内存屏障实现。
- 理解 CAS(Compare-And-Swap)原理、
__atomic_load/__atomic_store的使用。 - 这是 Linux 内核、DPDK 等高性能系统的基础组件。
模块二:网络与可计算性
Lesson 50 — 可靠数据传输 Stop-and-Wait(1 道题)
- 停等协议:序号 0/1 交替 + 超时重传 + ACK 确认。
- 不可靠信道模拟:丢包 25% + 损坏 10% + ACK 丢失 10%(
srand(42)固定随机种子)。 - 理解可靠传输三要素(序号、ACK、重传)与滑动窗口的简化版。
Lesson 66 — 图灵机模拟器(1 道题)
- 通用图灵机模拟:状态转移表 + 读写头 + 无限纸带。
- 理解可计算性理论:图灵机是"可计算"的数学定义,丘奇 - 图灵论题。
- 这是计算机科学的 theoretical foundation——所有编程语言的计算能力上限。
模块三:编译与语言理论
Lesson 51 — 表驱动 LL(1) 解析器(1 道题)
- 预测分析表驱动的 LL(1) 语法分析:文法 (E \to TE'),FIRST/FOLLOW 集预计算。
- 栈式解析:RHS 编码(终结符 0-5,非终结符 id+100 区分),18 步推导输出。
- 这是编译器前端的核心技术——Unit 4 编译器项目的直接预热。
Lesson 59 — NFA 模拟与子集构造(1 道题)
- NFA 模拟 + 子集构造法转 DFA:语言 (a^b | ab^),ε-闭包计算。
- 理解正则表达式的底层引擎:正则 → NFA → DFA 的完整转换链路。
- 这是 grep、sed、lex 等工具的核心算法。
Lesson 65 — 标记 - 清除垃圾回收(1 道题)
- 在固定对象图上实现 mark-sweep GC:DFS 标记可达对象 + 清扫回收不可达对象。
- 理解 GC 的两大流派(tracing vs reference counting)及 mark-sweep 的优缺点。
- 这是 Java/Go/Python 等托管语言运行时的核心机制。
模块四:数据结构与索引
Lesson 52 — B+ 树索引(1 道题)
- 数据库索引核心结构:B+ 树的插入、分裂、范围查询。
- 所有数据存叶节点,叶节点用链表连接——支持高效范围扫描。
- 理解为什么 MySQL/PostgreSQL 都选择 B+ 树而非 B 树作为索引结构。
Lesson 58 — Aho-Corasick 多模式匹配(1 道题)
- AC 自动机:模式集
{"he","she","his","hers"}匹配文本"ushers"。 - Trie 树 + 失败函数(failure link)+ 状态转移——一次扫描匹配所有模式。
- 这是入侵检测、敏感词过滤、grep -F 的核心算法。
模块五:人工智能
Lesson 54 — A* 寻路算法(1 道题)
- 启发式搜索:(f(n) = g(n) + h(n)),Manhattan 距离作为启发函数。
- Open 表选 f 最小节点 + Closed 表去重 + 路径重建(从目标回溯到起点)。
- 理解 A* 与 Dijkstra 的关系((h=0) 时 A* 退化为 Dijkstra)。
Lesson 62 — 感知机二分类器(1 道题)
- 机器学习的起点:线性分类器 (y = \text{sign}(\mathbf{w} \cdot \mathbf{x} + b))。
- 权重更新规则:误分类时 (\mathbf{w} \leftarrow \mathbf{w} + \eta y_i \mathbf{x}_i)。
- 理解感知机收敛定理与线性可分的几何意义——这是神经网络的基础。
模块六:数值计算与信号处理
Lesson 63 — 矩阵 LU 分解求解器(1 道题)
- (A = LU) 分解 + 前代/回代求解线性方程组 (A\mathbf{x} = \mathbf{b})。
- 部分主元(partial pivoting)避免数值不稳定。
- 理解为什么科学计算库(LAPACK)的基础是 LU 分解。
Lesson 67 — 快速傅里叶变换 FFT(1 道题)
- Cooley-Tukey 蝶形算法:(N=8) 点 FFT,3 级蝶形运算。
- 时域抽取(DIT):偶数序列与奇数序列递归 + 蝶形组合。
- 理解 (O(N \log N)) vs 直接 DFT 的 (O(N^2))——这是信号处理最重要的算法。
模块七:图形与视觉
Lesson 53 — 基础光线追踪(1 道题)
- 从相机发射光线,与球体求交,计算法线与简单着色。
- 向量运算:点积、叉积、归一化、射线 - 球求交方程。
- 理解渲染方程的简化版——这是 Pixar 等电影工业的基础技术。
Lesson 68 — Sobel 边缘检测(1 道题)
- 图像卷积:(G_x) 和 (G_y) 两个 3×3 Sobel 算子,梯度幅值 (\sqrt{G_x^2 + G_y^2})。
- 阈值化输出二值边缘图(8×8 灰度图)。
- 理解卷积神经网络(CNN)的第一层本质上就是边缘检测。
模块八:体系结构与安全
Lesson 57 — 缓存模拟器 LRU(1 道题)
- 2 路组相联、4 组缓存:12 次访问,LRU 替换策略。
- 地址分解:tag + set index + block offset,命中/缺失判定。
- 理解为什么缓存命中率决定程序性能——这是性能优化的理论基础。
Lesson 55 — RSA 公钥加密(1 道题)
- 玩具版 RSA:(p=61, q=53),
uint64_t模幂运算,Miller-Rabin 素性检测。 - 密钥生成、加密、解密三步流程,理解公钥/私钥的数学关系。
- 理解为什么大数分解是 RSA 安全性的基础——这是 HTTPS/TLS 的核心。
Lesson 61 — 缓冲区溢出分析(1 道题)
- 栈帧布局分析:局部变量、保存的帧指针、返回地址的内存排列。
- 安全分析而非攻击实验:理解溢出原理与防护手段(栈保护、ASLR、NX)。
- 理解为什么 C 语言程序的安全审计如此重要——这是 Morris 蠕虫、Heartbleed 的根源。
Lesson 71 — 简化工作量证明 PoW(1 道题)
- 区块链共识基础:3 个区块的挖矿,纯 C 实现 SHA-256(64 轮 + IV + K 表)。
- 工作量证明:寻找 nonce 使
SHA256(prev || data || nonce)前 N 位为 0。 - 理解比特币/以太坊的共识机制本质——这是区块链安全性的基石。
模块九:软件工程与前沿
Lesson 60 — 微型单元测试框架(1 道题)
- 用宏实现
TEST/ASSERT_EQ/ASSERT_STREQ/RUN_TESTS,自测 3 个用例。 - 理解 Google Test、Check、Unity 等测试框架的底层原理。
- 这是软件工程 SDF(Software Development Fundamentals)的核心实践。
Lesson 69 — TF-IDF 文档相似度(1 道题)
- 3 篇文档的 TF-IDF 向量化 + 余弦相似度计算。
- TF(词频)× IDF(逆文档频率),衡量词对文档的区分度。
- 理解搜索引擎的文档相关性排序基础——这是 Elasticsearch、Lucene 的核心。
Lesson 70 — 量子比特与门电路(1 道题)
- 量子比特状态演化:(H \to X \to Z \to H) 门电路序列 + 测量。
- 态矢量表示、矩阵乘法模拟量子门、概率坍缩。
- 理解量子计算与经典计算的本质区别——叠加态与测量坍缩。
Lesson 72 — ANSI 终端计算器(1 道题)
- 双栈表达式求值(Dijkstra Shunting-yard 算法)+ ANSI 转义序列彩色输出。
- 运算符栈与操作数栈的配合,优先级处理与括号匹配。
- 理解人机交互(HCI)中的终端 UI 编程——这是
bc、python -i的基础。
练习工具 — clings
- 使用训练营基于 CNB 云原生开发环境的 clings 练习仓库进行交互式练习。
- 本阶段全部采用
mode = "make+stdout":学员编写Makefile管理编译,程序通过标准输出与预期逐字符比对。 - 测试用例打包在 clings 包内(site-packages),学员无法修改,确保评测公正。
- 通过
clings tests <题目名>查看公开测试用例,采用 TDD 开发模式。 - 训练营会自动统计您的完成情况并记入阶段成绩。
三、推荐学习资料
以下资料可作为本阶段的主要参考:
核心教材
- 《计算机程序的构造和解释》(SICP, Abelson & Sussman):MIT 经典教材,从第一性原理理解计算的本质。第 3 章的并发与第 5 章的寄存器机器与本阶段多题相关。
- 《编译原理》(龙书,Aho & Lam & Sethi & Ullman):第 4 章 LL(1) 解析、第 3 章正则与 NFA/DFA——Lesson 51、58、59 的权威参考。
- 《算法导论》(CLRS):第 23 章 A* 与图算法、第 34 章 NP 完全性、第 28 章 LU 分解——多道题的理论基础。
在线教程
- 操作系统导论 (OSTEP):哲学家就餐、无锁队列的免费在线教材。
- Computer Networks: A Systems Approach:停等协议与可靠传输的经典教材。
- Ray Tracing in One Weekend:Lesson 53 光线追踪的实战教程。
- Crafting Interpreters:Lesson 51、65 的编译器与运行时参考。
参考资料(进阶)
- Dining Philosophers Problem — Wikipedia:Lesson 49 死锁经典问题。
- Aho-Corasick Algorithm — cp-algorithms:Lesson 58 多模式匹配详解。
- Cooley-Tukey FFT — Wikipedia:Lesson 67 蝶形算法。
- RSA Cryptosystem — Wikipedia:Lesson 55 公钥加密数学原理。
- Lock-Free Programming — Herb Sutter:Lesson 64 无锁编程进阶。
- Mark-Sweep GC — GC Handbook:Lesson 65 垃圾回收算法全集。
开发环境搭建
- 推荐使用 CNB 云原生开发环境(Fork 仓库后一键启动,无需本地配置)。
- 本地开发推荐 Linux 环境(WSL2 + Ubuntu 或虚拟机),安装 GCC 14+ 和 Python 3.11+。
- 安装 clings 练习工具:推荐使用
uvx clings@latest命令(无需全局安装,隔离运行)。
四、学习方式与建议
先读讲义,再做练习:每个 Lesson 目录下的 README.md 包含领域背景、数学推导、算法图解和课堂讨论题(单篇最长 775 行)。建议先通读讲义,理解领域背景和算法原理后再动手修改 .c 文件。本阶段题目概念密度高,跳过讲义直接编码容易卡壳。
善用 clings 工具:进入 clings 的 watch 模式后,每次保存文件会自动编译和验证。遇到卡壳时按
h查看提示,按l浏览题目列表,按t查看测试用例(TDD 开发)。本阶段采用make+stdout模式,Makefile也是练习的一部分——学会编写规范的 Makefile 是系统编程的基本功。理解领域背景,而非死记算法:本阶段每道题都来自一个真实 CS 子领域。学哲学家就餐时理解死锁四条件,学 RSA 时理解大数分解难题,学 FFT 时理解时频域转换——理解"为什么这个算法存在"比"怎么写这个算法"更重要。这正是 Dijkstra 所说"计算机科学不全是关于计算机的"。
重视数学推导:本阶段多道题涉及数学——RSA 的模算术、LU 分解的线性代数、FFT 的复数蝶形、感知机的几何意义、量子比特的态矢量。建议准备纸笔,跟着 README 里的推导一步步演算。不理解数学,代码就是无意义的符号堆砌。
建立跨领域连接:LL(1) 解析器(Lesson 51)与 NFA→DFA(Lesson 59)共享自动机理论;A* 寻路(Lesson 54)与向量时钟(Lesson 56)共享图论;标记 - 清除 GC(Lesson 65)与图灵机(Lesson 66)共享可达性分析。学会发现跨领域的共同抽象,是成长为系统架构师的关键。
按时参加直播:本阶段有三节腾讯会议直播课(07/13、07/15、07/17),建议按时参加以获得最佳学习效果。直播中会讲解每个 CS 子领域的背景脉络、经典论文脉络和工业应用场景,并现场推导算法和编写代码。如无法参加,请务必在课后观看回放。
五、关于晋级与要求
晋级方式
- Fork 训练营的 Unit-3-C-Classicals 仓库,在云原生开发环境或本地环境中完成 24 道练习题。
- 提交代码到 main 分支并创建合并请求(PR),CI 系统会自动评分。
- 可多次提交,以最高分为准。通过后即可在 OpenCamp 晋级榜单上查看成绩。
评分标准
- 共 24 个 Lesson、24 道题,每题通过 clings 自动评测。
- 评测模式统一为
make+stdout:学员编写Makefile编译程序,程序运行后标准输出与预期逐字符比对。
重要提示
本阶段是 C 语言训练营的专业关,题目覆盖计算机科学 17 个子领域的经典问题,每题平均编写约 96 行 C 代码(含 Makefile),概念密度为全训练营最高。24 道题看似量大,但每题都是独立的 CS 经典——从操作系统死锁到量子计算,从密码学到计算机视觉,每完成一道题就点亮一块 CS 版图。认真完成本阶段后,您将具备广阔的计算机科学视野和扎实的系统编程能力,为 Unit 4(从零实现 C 编译器)和 Unit 5(从零实现操作系统内核)两大项目阶段打下坚实的理论与实践基础。
六、训练营完整学习路线
本 C 语言训练营采用 "四阶段 + 双项目" 的成长路径,从零基础入门到亲手实现编译器与操作系统内核,共 6 个 Unit,共计 120 课。最终目标:学员同时具备用 C 语言实现编译器和从裸机搭建操作系统内核的系统级编程能力,形成"语言 → 算法 → 系统 → 编译器 → 内核"的完整知识闭环。
导学阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 0 | C Primer | 5 课 / 9 题 | 最简程序、printf、循环、条件分支、累加求和 |
从"编辑 — 编译 — 运行"的全流程入手,通过 5 个最小可运行程序建立 C 语言的基本心智模型。使用 clings 工具交互式练习。
基础阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 1 | C Fundamentals | 19 课 / 40 题 | 嵌套循环、函数、数组、指针、结构体、联合体、位运算、可变参数、预处理器、状态机 |
从九九乘法表到词法分析器,涵盖 C 语言核心语法特性。通过实现 printf、命令解释器、预处理器、词法分析器等项目,将语法知识转化为工程能力。两节腾讯会议直播授课(2026/06/29 和 2026/07/01)。
进阶阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 2 | C Essentials | 24 课 / 24 题 | 链表、栈、队列、树、堆、排序、查找、回溯、C 标准库深入实现 |
系统学习经典数据结构与算法,从字符串内存操作(strstr/memcpy/memmove)到链表/栈/队列/树/堆的从零实现,再到快速排序、二分查找、Top-K 堆筛选,最终深入 snprintf/strtok_r/qsort/realloc/sscanf/setjmp/I/O 缓冲七个标准库函数的底层机制。四节腾讯会议直播授课(2026/07/03、07/06、07/08、07/10)。
专业阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 3 | C Classicals | 24 课 / 24 题 | 17 个 CS 子领域经典问题:操作系统、网络、编译、数据库、图形学、AI、密码学、分布式、体系结构、安全、数值计算、信号处理、计算机视觉、信息检索、量子计算、区块链、人机交互 |
覆盖计算机科学 17 个子领域的经典问题,每题平均编写约 96 行 C 代码,从第一性原理实现哲学家就餐、停等协议、LL(1) 解析器、B+ 树、光线追踪、A* 寻路、RSA、向量时钟、缓存模拟、FFT、Sobel 边缘检测、TF-IDF、量子比特、PoW 区块链等 24 道经典题,为编译器项目建立广阔的 CS 视野。三节腾讯会议直播授课(2026/07/13、07/15、07/17)。
项目阶段
完成前三个阶段后,进入双线并行的项目实践:
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 4 | C Compiler | 24 课 | 从零实现 C 编译器 nccl-cc:一棵 AST,四个后端,五个运行环境 |
| Unit 5 | C Kernel | 24 课 | 从零实现操作系统内核 Avatar OS:裸机引导到多核调度 |
Unit 4 — C Compiler 用约 4000 行 C 代码完整走通"预处理 → 词法 → 语法 → 类型标注 → 代码生成"全流程,支持 RISC-V / ARM / AArch64 / x86-64 四个后端和 Linux 用户态 + 裸机共五种运行环境。最终验证:用自己写的编译器编译约瑟夫环程序,在四个架构上得到相同结果。
Unit 5 — C Kernel 基于 Avatar OS 真实内核代码,分五个子阶段递进:裸机基础 → 内存与同步 → 中断与定时器 → 多任务 → 用户态与多核。代码取自 Avatar OS 仓库,支持 AArch64 / RISC-V 64 / x86_64 三架构在 QEMU 上验证。最终目标:一个能运行 busybox shell、在多核处理器上并行调度的完整操作系统。