补什么:从“会写代码”到“懂机器在想什么”
很多同学学编程时,代码能跑但心里没底:为什么数组要连续内存?递归爆栈是因为什么?CPU 真的在“逐条执行”吗?计算机组成原理正是为了解决这种“知其然不知其所以然”的断层。它不讲复杂的电路设计,而是用极简的视角拆解冯·诺依曼体系——告诉你计算机是如何把“纸带编程”演变成今天的多核并行,以及“性能”到底是被主频定义的,还是被指令流水线偷偷决定的。
这门课适合有基础编程经验、但想打通底层任督二脉的学习者。如果你正在备考研究生,或准备转岗后端/系统开发,这里是性价比最高的补漏入口。别假装什么都懂,承认这块是盲区,才是进阶的第一步。
怎么看:先抓骨架,再啃血肉
建议按“入门篇”到“原理篇”的顺序切入。开篇先听《为什么你需要学习计算机组成原理?》和《给你一张知识地图》,建立全局观,避免一上来就陷入指令细节。接着精读《冯·诺依曼体系结构》和《指令跳转》两讲,这是理解所有现代程序运行的基石——你会惊讶地发现,if...else 本质上就是 goto,函数调用就是栈的操作。对于纠结性能优化的同学,《通过 CPU 主频谈性能》和《穿越功耗墙》是必读章节,它们能帮你跳出“频率越高越快”的误区,理解并行与功耗的 trade-off。
课程配套资料包含答疑加餐与用户故事,如“赵文海:怕什么真理无穷”,这些内容虽非核心考点,但能提供真实的学习心路,缓解焦虑。建议先看目录中的前 5 讲入门内容,确保建立正确的认知框架,再进入指令与运算的硬核推导。
能做什么:独立解释一段代码的“出生过程”
学完本模块,你应能独立回答:一个 C 语言函数调用在内存中是如何压栈出栈的?编译器如何将高级语言翻译成机器指令?为什么递归过深会导致栈溢出?以及,在功耗受限的情况下,如何通过指令级并行提升性能?
资料包中的 FAQ 系列(如“世界上第一个编程语言怎么来的”)可作为课外拓展,帮助你建立技术史观,避免死记硬背。练习时,不要只看不写,试着在脑中模拟指令执行流程,或画出简单的数据通路图。只有当你能向别人解释清楚“堆栈溢出”的物理含义时,这门课才算真正闭环。知识就在那里,进一寸有一寸的欢喜,别等到面试被问住才后悔没早补这块短板。
课程目录
答疑与加餐 (5讲)
- FAQ第一期 _ 学与不学,知识就在那里,不如就先学好了
- FAQ第二期 _ 世界上第一个编程语言是怎么来的?
- 特别加餐 _ 我在2019年F8大会的两日见闻录
- 特别加餐 _ 我的一天怎么过?
- 用户故事 _ 赵文海:怕什么真理无穷,进一寸有一寸的欢喜
入门篇 (5讲)
- 01 _ 冯·诺依曼体系结构:计算机组成的金字塔
- 02 _ 给你一张知识地图,计算机组成原理应该这么学
- 03 _ 通过你的CPU主频,我们来谈谈“性能”究竟是什么?
- 04 _ 穿越功耗墙,我们该从哪些方面提升“性能”?
- 开篇词 _ 为什么你需要学习计算机组成原理?
原理篇:指令和运算 (12讲)
- 05 _ 计算机指令:让我们试试用纸带编程
- 06 _ 指令跳转:原来if...else就是goto
- 07 _ 函数调用:为什么会发生stack overflow?
- 08 _ ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
- 09 _ 程序装载:“640K内存”真的不够用么?
- 10 _ 动态链接:程序内部的“共享单车”
- 11 _ 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
- 12 _ 理解电路:从电报机到门电路,我们如何做到“千里传信”?
- 13 _ 加法器:如何像搭乐高一样搭电路(上)?
- 14 _ 乘法器:如何像搭乐高一样搭电路(下)?
- 15 _ 浮点数和定点数(上):怎么用有限的Bit表示尽可能多的信息?
- 16 _ 浮点数和定点数(下):深入理解浮点数到底有什么用?
原理篇:处理器 (18讲)
- 17 _ 建立数据通路(上):指令+运算=CPU
- 18 _ 建立数据通路(中):指令+运算=CPU
- 19 _ 建立数据通路(下):指令+运算=CPU
- 20 _ 面向流水线的指令设计(上):一心多用的现代CPU
- 21 _ 面向流水线的指令设计(下):奔腾4是怎么失败的?
- 22 _ 冒险和预测(一):hazard是“危”也是“机”
- 23 _ 冒险和预测(二):流水线里的接力赛
- 24 _ 冒险和预测(三):CPU里的“线程池”
- 25 _ 冒险和预测(四):今天下雨了,明天还会下雨么?
- 26 _ Superscalar和VLIW:如何让CPU的吞吐率超过1?
- 27 _ SIMD:如何加速矩阵乘法?
- 28 _ 异常和中断:程序出错了怎么办?
- 29 _ CISC和RISC:为什么手机芯片都是ARM?
- 30 _ GPU(上):为什么玩游戏需要使用GPU?
- 31 _ GPU(下):为什么深度学习需要使用GPU?
- 32 _ FPGA和ASIC:计算机体系结构的黄金时代
- 33 _ 解读TPU:设计和拆解一块ASIC芯片
- 34 _ 理解虚拟机:你在云上拿到的计算机是什么样的?
原理篇:存储与I_O系统 (17讲)
- 35 _ 存储器层次结构全景:数据存储的大金字塔长什么样?
- 36 _ 局部性原理:数据库性能跟不上,加个缓存就好了?
- 37 _ 高速缓存(上):“4毫秒”究竟值多少钱?
- 38 _ 高速缓存(下):你确定你的数据更新了么?
- 39 _ MESI协议:如何让多核CPU的高速缓存保持一致?
- 40 _ 理解内存(上):虚拟内存和内存保护是什么?
- 41 _ 理解内存(下):解析TLB和内存保护
- 42 _ 总线:计算机内部的高速公路
- 43 _ 输入输出设备:我们并不是只能用灯泡显示“0”和“1”
- 44 _ 理解IO_WAIT:I_O性能到底是怎么回事儿?
- 45 _ 机械硬盘:Google早期用过的“黑科技”
- 46 _ SSD硬盘(上):如何完成性能优化的KPI?
- 47 _ SSD硬盘(下):如何完成性能优化的KPI?
- 48 _ DMA:为什么Kafka这么快?
- 49 _ 数据完整性(上):硬件坏了怎么办?
- 50 _ 数据完整性(下):如何还原犯罪现场?
- 51 _ 分布式计算:如果所有人的大脑都联网会怎样?
应用篇 (5讲)
- 52 _ 设计大型DMP系统(上):MongoDB并不是什么灵丹妙药
- 53 _ 设计大型DMP系统(下):SSD拯救了所有的DBA
- 54 _ 理解Disruptor(上):带你体会CPU高速缓存的风驰电掣
- 55 _ 理解Disruptor(下):不需要换挡和踩刹车的CPU,有多快?
- 结束语 _ 知也无涯,愿你也享受发现的乐趣





