面向计算机专业新生的中文知识库:从 CS 基础课程,到大语言模型(LLM)的训练与推理系统。每篇笔记都配有可作答的选择题。算法刷题见 NudgeCode。
从哪里开始:先看 学习路线,它把每门课对应到下面的笔记。每个概念只在一篇里讲透,其他地方用链接指过去。收藏的小节和高亮见 我的收藏。
学习路线
- 学习路线 — 从零到 AI Infra 按什么顺序学、每门课对应本库哪几篇
编程与工具
- 函数与环境模型 — 程序运行时,一个名字是怎么找到它的值的?
- 高阶函数与递归 — 怎么把”做法”本身当数据传来传去,又怎么让函数调用自己?
- 数据抽象与对象 — 怎么用函数和类把数据的表示藏起来?
- 迭代器生成器与解释器 — for 循环背后发生了什么?一门语言是怎么跑起来的?
- Python 对象模型 — 为什么改了 b 之后 a 也变了?名字、对象与引用
- Python 并发与性能 — 为什么多线程没变快?程序到底慢在哪?
- C++ 内存与所有权 — Python 背后的内存到底长什么样,谁负责释放它?
- 编译链接与 Python 扩展 — 一个 .cpp 怎么一步步变成 Python 能 import 的模块
- Shell 与命令行环境 — 怎么让终端为你干活:管道、重定向、脚本、信号与远程
- Git 的数据模型 — Git 到底存了什么,分支、合并、rebase 在模型上是什么操作
- 调试测试与工程实践 — 代码坏了怎么找到原因,又怎么防止它再坏
数学
算法
计算机系统
- 信息的表示 — 0 和 1 怎么表示整数、小数和文字?
- 机器级程序 — 一行 C 代码在 CPU 上变成了什么?
- 内存层次与缓存 — 为什么同样的计算,换个循环顺序就快好几倍?
- 进程异常与信号 — 一颗 CPU 怎么让很多程序”同时”跑,又怎么把控制权要回来?
- 虚拟内存 — 每个进程怎么以为自己独占内存,代价又是什么?
- 并发与同步 — 多个线程同时改一个变量会怎样,怎么让它们安全地协作?
- 文件系统与 IO — 写进磁盘的字节怎么组织,断电时怎么不丢?
- 网络:从链路到 IP — 一个包怎么从你的电脑跨过半个地球到达服务器?
- 网络:TCP 与应用层 — 在会丢包、会乱序的网络上,怎么可靠又不拥堵地传数据?
- 数据库系统 — 数据库怎么在磁盘上既查得快、又在崩溃和并发下不丢不乱?
- 分布式系统 — 很多台会出故障的机器,怎么对外表现得像一台可靠的机器?
机器学习
- 从线性回归到神经网络 — 机器怎么从数据里”学”:损失、梯度下降、反向传播
- 训练深度网络与 CNN — 网络变深为什么难训,初始化、归一化、残差、优化器和卷积怎么解决
- 序列模型与注意力的起源 — 怎么处理一段话:从计数语言模型、词向量、RNN 到注意力
大语言模型
- 分词 — 文本怎么变成模型能吃的整数序列,BPE 怎么训练、怎么编码
- Transformer 架构 — 一个 GPT 由哪些零件组成,每个零件解决什么问题
- 注意力变体与 MoE — 怎么让注意力更省内存、上下文更长,让模型更大却不更贵
- 资源核算与 Scaling Laws — 训练一个模型要多少算力和显存,给定算力该训多大的模型
- GPU 与 Kernel — GPU 为什么快、为什么经常跑不满,怎样写出快的 kernel
- FlashAttention — 注意力为什么被显存带宽卡住,分块 + online softmax 怎么解
- 并行训练 — 一张卡放不下、算不完时,怎样把训练拆到成百上千张卡上
- 预训练数据 — 训练数据从哪来,怎么从脏网页里洗出几个 T 的好文本
- 后训练 — 怎么把只会续写的 base model 变成听话、会推理的助手
- 评估 — 怎么知道一个语言模型好不好,以及这个”知道”有多可信
- 推理系统 — 为什么生成慢,推理引擎怎么让它变快
- 多模态 — 只会读 token 的语言模型,怎么看懂一张图、甚至画出一张图
- RAG 与 Agent — 怎么让模型用上外部知识和工具,并且在线上可靠地运行
- GPT-2 124M 复现 — 31 章详解模型、训练、GPU 优化、DDP 与评测机制