阶段三 · 课程学习指南
本阶段按「算法 → 操作系统 → 网络 → 编译原理 → 数学」五大模块组织。★ 为必学主干。
一、数据结构与算法
1. 数据结构与算法之美 ★(本阶段第一门,必学)
为什么学:这是整个极客时间体系中口碑最好、最值得学的算法课之一。它不讲「背题」,讲「每个数据结构解决什么问题、为什么这么设计」。学完它,你看任何系统,都像看 X 光片。
知识地图:
- 复杂度分析(大 O 表示法,算法分析的基石)
- 线性表:数组、链表、栈、队列
- 跳表、散列表(哈希表)
- 树:二叉树、二叉搜索树、红黑树、堆、Trie
- 图:存储、遍历、最短路径
- 排序:冒泡/插入/选择/归并/快排/堆排序/桶排序等
- 查找:二分、散列
- 贪心、分治、回溯、动态规划
- 字符串匹配(KMP、BM、Trie)
经典案例:老师问小白:「Word 的拼写检查,怎么做到秒级提示错别字?」 小白猜「可能是扫描字典」。老师说:「3 万个单词,线性查找每次 3 万次比较,打字时卡成幻灯片。Word 用的是『Trie 树』——单词按前缀组织,查一个单词只要走几个节点,快 1000 倍。」 小白惊呼:「原来我每天都在用数据结构,只是不知道它叫 Trie。」
引发思考:
- 为什么说「数据结构是程序的骨架,算法是程序的灵魂」?
- 数组支持随机访问、链表支持高效插入——为什么不能两者兼得?什么场景各取所需?
- 快排最坏是 O(n²),为什么工业界还是用它而不是归并?(提示:平均性能 + 常数小)
- 哈希冲突的两种解决方式(链地址/开放寻址)各适合什么场景?Redis 和 Java 分别怎么选?
2. 算法面试通关 40 讲(必学,应试强化)
为什么学:大厂笔试面试的高频题型、解题套路、代码模板,全部浓缩在这 40 讲里。学完「数据结构与算法之美」建立体系后,用它来「刷题 + 套路化」。
知识地图:
- 面试算法全景:字符串、数组、链表、树、图、DP
- 双指针、滑动窗口、回溯、BFS/DFS 模板
- 二分法变种、位运算技巧
- TopK、LRU、堆的应用
- 高频题精讲(两数之和、反转链表、二叉树遍历……)
经典案例:小白被「反转链表」卡了两天,老师点破:「这类题不用背,画图。三个指针 prev/cur/next 依次后移,箭头一个个掉头,图画出来代码就出来了。链表题的核心就四个字——『画图 + 三指针』。」 小白照做,从此链表题 10 分钟内必出。
引发思考:
- 「两数之和」为什么可以用哈希表做到 O(n)?空间换时间的本质是什么?
- 滑动窗口适合解决什么特征的问题?怎么判断窗口什么时候收缩?
- BFS 和 DFS 分别适合什么场景?最短路径为什么用 BFS?
3. 动态规划面试宝典 / 业务开发算法 50 讲(选学,进阶)
为什么学:动态规划是算法面试的分水岭,也是「贪心 → 穷举 → 记忆化 → DP」这一套思维升级的关键。业务算法课则告诉你:算法不是面试专用,它在真实业务里天天用。
知识地图(动态规划):
- 从递归到记忆化搜索到 DP
- 状态定义与状态转移方程
- 背包问题、最长公共子序列、编辑距离
- 区间 DP、树形 DP
- 面试高频 DP 题精讲
知识地图(业务算法):
- 排序/查找在业务中的应用
- 字符串处理、正则、敏感词过滤(AC 自动机)
- 搜索与推荐里的排名算法
- 限流算法(令牌桶/漏桶)、风控规则
经典案例:小白觉得「动态规划离我太远」。老师指着电商下单页说:「优惠券叠加满减怎么算最省钱?这是背包问题的变种。滴滴派单怎么匹配司机和乘客?这是二分图匹配。搜索引擎的『你可能想搜』?这是字符串模糊匹配。算法不在题里,就在你每天用的产品里。」
引发思考:
- 为什么说「动态规划就是聪明的穷举」?记忆化解决了什么?
- 限流用令牌桶还是漏桶?它们各自的适用场景(秒杀 vs 平滑流量)?
- 一个字符串敏感词过滤,1 万词库,你会怎么设计?复杂度多少?
4. 快速上手 C++ 数据结构与算法(选学,C++ 方向的算法实现)
为什么学:如果你主攻 C++,用 C++ 实现数据结构和算法能同时练「语言」和「算法」,STL 容器(vector/map/unordered_map)本身就是数据结构教科书。
知识地图:
- STL 容器剖析:vector、list、deque、map、set、unordered_map
- 迭代器与算法库(
) - 手写数据结构:链表、栈、队列、二叉树
- 常见算法的 C++ 实现
经典案例:小白问「map 和 unordered_map 选哪个?」老师答:「map 是红黑树,O(log n),有序;unordered_map 是哈希表,平均 O(1),无序。需要排序遍历用 map,追求速度用 unordered_map。你连容器的底层都不知道,怎么选得对?」
引发思考:
- vector 为什么「自动扩容」?扩容的复杂度陷阱是什么?
- 为什么 STL 的排序比你自己写的快排快?(内省排序 + 优化)
- 你会怎么衡量「该用哪种容器」?决策依据是什么?
二、操作系统
5. 趣谈 Linux 操作系统 ★(必学,深入浅出 OS)
为什么学:操作系统是「程序运行的世界规则」。进程、线程、内存、文件、IO——你写的每一行代码,最后都是操作系统在指挥硬件干活。这门课用大白话 + 类比讲透 OS 核心,是极客时间最受欢迎的课之一。
知识地图:
- 程序是如何运行的:CPU、内存、IO 全景
- 进程与线程:调度、上下文切换、进程间通信
- 内存管理:虚拟内存、分页、malloc 的秘密
- 文件系统:ext4、inode、硬链接软链接
- IO 模型:阻塞/非阻塞/多路复用/异步
- Linux 命令背后的原理(ps、top、netstat……)
经典案例:小白问「为什么我的程序启动要 5 秒,别人的只要 0.1 秒?」老师带他 strace 一看:程序启动时反复读取配置文件、加载 200 个动态库、执行 1 万次系统调用。老师指出:启动慢,本质是「IO 慢 + 系统调用多」。 小白第一次理解:「程序不是自己跑的,是操作系统一遍遍『伺候』它跑的。」
引发思考:
- 进程和线程到底差在哪?「切换成本」贵在哪?
- 虚拟内存是不是「骗人」的?它怎么做到每个程序都以为独占 4G 内存?
- 多路复用(epoll)为什么比「一个连接一个线程」强那么多?
- 为什么删除一个文件可能很快,但删除一个大目录却慢?(inode 与目录项)
6. 操作系统实战 45 讲(选学,硬核动手)
为什么学:这门课不止讲,还带你从零写一个迷你操作系统——boot、内核、内存管理、中断、文件系统。写过 OS 的人,看任何系统都是「降维打击」。
知识地图:
- 从 BIOS 到 bootloader
- 内核初始化、段页式内存管理
- 进程调度与中断处理
- 系统调用实现
- 简易文件系统
- 图形界面与 shell
经典案例:小白问「为什么学了 OS 还要写 OS?」老师:「就像学游泳,看 100 遍视频不如下水呛一次。你亲手把中断向量表写好、把内存分页配好、把进程切来切去之后,再看 Linux 内核源码,每一行都亲切。『操作系统』从黑盒变成透明的。」
引发思考:
- 写 OS 最难的一步是什么?为什么?
- 中断和系统调用的关系是什么?它们是怎么「串」起整个内核的?
- 学完这门课,你对「程序员要不要懂底层」有什么新认识?
三、计算机网络
7. 趣谈网络协议 ★(必学,网络世界观)
为什么学:网络是「程序与程序之间的高速公路」,也是排查线上问题(超时、慢、连不上)的第一现场。这门课用生活化的类比讲透 TCP/IP 协议栈,是极客时间经典入门课。
知识地图:
- 网络分层:应用/传输/网络/链路层,每层干什么
- IP 与寻址、子网掩码、NAT
- TCP:三次握手、四次挥手、可靠传输、拥塞控制
- UDP 与 TCP 的取舍
- DNS 解析、HTTP、HTTPS
- 抓包工具入门(Wireshark/tcpdump)
经典案例:小白问「为什么下载大文件用 TCP,而视频直播用 UDP?」老师类比:「TCP 像快递,每一件都要签收,丢一件就重发,绝对可靠但慢;UDP 像扔飞盘,扔出去就不管了,丢了就丢了,但快。视频直播卡一帧无所谓,但要是像 TCP 一样等重发,画面直接卡死。『可靠』和『快』,业务自己选。」
引发思考:
- 三次握手为什么是三次?两次行不行?四次呢?
- 为什么挥手要四次而握手只要三次?(半关闭)
- 你在浏览器输入一个网址回车,到页面出来,中间到底发生了什么?(把 DNS、TCP、HTTP、渲染串起来讲一遍——这是面试必考题)
- HTTPS 的加密过程是什么?为什么能防中间人攻击?
8. Web 协议详解与抓包实战 / 透视 HTTP 协议(选学,HTTP 深度)
为什么学:程序员 80% 的日常在跟 HTTP 打交道。这两门课把 HTTP 从报文格式到状态码、从缓存到 Cookie、从 HTTP/2 到 HTTPS,讲得明明白白。配合抓包,眼见为实。
知识地图:
- HTTP 报文结构(请求行/头部/体)
- 状态码语义(200/301/302/304/400/401/403/404/500……)
- 缓存机制(Cache-Control、ETag、304)
- Cookie 与 Session、Token
- HTTPS 与证书链
- HTTP/1.1 与 HTTP/2(多路复用、头部压缩)
- 用 Wireshark/Chrome DevTools 抓包实战
经典案例:小白遇到「改了代码,刷新页面还是旧的」,怀疑缓存玄学。老师带他抓包看响应头:Cache-Control: max-age=3600,浏览器直接把页面从本地缓存拿出来了,根本没发请求。 老师:「不是玄学,是协议。你看懂头部,就看得懂一切缓存问题。」
引发思考:
- 301 和 302 有什么区别?SEO 场景该用哪个?
- 为什么说 Cookie 不安全?XSS 窃取 Cookie 的原理是什么?
- HTTP/2 的多路复用解决了 HTTP/1.1 的什么问题?(队头阻塞)
- 你如何从「看得到页面」变成「看得懂页面」(每个头、每个状态码都懂)?
9. 网络编程实战 / 网络排查案例课(选学,动手与排查)
为什么学:懂协议还不够,得会「写网络程序」和「排查网络故障」。这两门课一个教你写(socket、epoll、客户端服务端),一个教你查(真实故障案例复盘)。
知识地图(网络编程实战):
- Socket 编程:TCP/UDP 客户端与服务端
- 非阻塞 IO、多路复用(select/poll/epoll)
- 网络框架设计、超时与重试
- 高性能网络编程要点
知识地图(网络排查案例课):
- 常见网络故障:连接超时、丢包、DNS 异常、SSL 失败
- 排查工具链:ping、traceroute、netstat、ss、tcpdump、Wireshark
- 真实案例:一次线上「间歇性超时」的完整排查
经典案例:线上服务「偶发超时」,运维重启就好,第二天又犯。老师用 tcpdump 抓包 5 分钟定位:TCP 大量重传——网卡 MTU 问题导致大包被丢弃。 老师总结排查心法:「网络问题,永远先抓包,别靠猜。抓包是最诚实的事实。」
引发思考:
ping 不通和端口连不上分别说明网络到哪一层出了问题?- 一次「连接超时」,可能的原因清单你列得出几条?按什么顺序排查?
- 为什么说「抓包是网络问题最后的裁判」?
四、编译原理
10. 编译原理之美 ★(选学但强烈推荐,理解程序本质)
为什么学:编译原理是「程序员的毕业课」。懂编译器,你就懂:程序是怎么被翻译的、语法糖是怎么展开的、为什么有些代码慢、DSL 怎么设计、SQL/正则/模板引擎背后是什么。
知识地图:
- 词法分析:把代码切成单词
- 语法分析:构建语法树
- 语义分析:类型检查
- 中间代码生成与优化
- 目标代码生成
- 解释器 vs 编译器
经典案例:小白问「正则表达式为什么能匹配字符串?」老师揭秘:「正则背后是『自动机』——把匹配规则画成状态图,从左到右走一遍,走通就匹配成功。你每天用的 grep、IDE 高亮、表单校验,都是编译原理在背后。」 小白感叹:「原来『高大上』的编译原理,是我每天在用的东西。」
引发思考:
- 「语法糖」到底是怎么被处理的?比如 Python 的 with、Java 的 lambda。
- 为什么说「不会编译原理的程序员,写不出好的 DSL 和框架」?
- 解释执行和编译执行,各自的启动速度、运行速度、可移植性如何取舍?
11. 编译原理实战课(选学,硬核动手)
为什么学:从零实现一个编译器/解释器——词法、语法、语义、生成。写完你会发现:任何「语言类工具」(SQL 解析器、模板引擎、配置解析器)你都能自己造。
知识地图:
- 手工编写词法分析器
- 递归下降语法分析
- 表达式求值、类型系统
- 中间表示(IR)与优化
- 字节码 / 虚拟机 / 解释器实现
经典案例:老师让小白实现一个「简易四则运算解释器」。小白一开始觉得「这有啥难的」,动手才发现:「光是把 1+2*3 算对(注意优先级!)就要处理运算符优先级和结合性,递归下降法的精髓全在这。写完这个,再看任何语言规范文档,都不再恐惧。」
引发思考:
- 为什么
1 + 2 * 3不能从左到右直接算?优先级是怎么在语法树里体现的? - 正则匹配和上下文无关语法(CFG)的边界在哪?为什么 HTML 不能用正则解析?
- 学完编译原理,再看「JSON.parse」和「eval」,你的理解有什么不同?
五、数学
12. 程序员的数学基础课(必学,算法背后的底气)
为什么学:算法、AI、数据分析背后全是数学。逻辑、排列组合、概率、图论——这门课把「程序员用得上的数学」挑出来,用程序员的语言讲,不吓人。
知识地图:
- 逻辑与集合:布尔代数、条件判断
- 排列组合:计数、二项式
- 概率论:贝叶斯、期望、随机
- 线性代数直觉:向量、矩阵在程序里是什么
- 图论基础
- 数学归纳法与递归的对应
经典案例:小白问「学算法为什么要概率?」老师:「哈希表平均 O(1) 是『平均』——这个平均是怎么算出来的?期望。布隆过滤器说『可能有误判』——误判率怎么算?概率。不懂数学,你只能记住结论,懂数学,你能推出结论、评估风险。这就是『背答案』和『会解题』的区别。」
引发思考:
- 排列组合里,为什么「先选再排」和「直接排列」差了一个阶乘?和去重有什么关系?
- 贝叶斯公式在垃圾邮件过滤里怎么用?为什么「经验概率」会失效?
- 数学和编程的关系:你觉得数学是「门槛」还是「捷径」?为什么?
本阶段小结
学完阶段三,你拥有了「内功三件套」:
- 算法视角:看系统能看出它用了什么数据结构;
- OS 视角:知道程序背后操作系统在干什么;
- 网络视角:能画出请求的完整旅程,能抓包排查。
这三样,是大厂面试的硬通货,也是后续学数据库、架构、性能时反复调用的底层模型。
下一站:
04_阶段四_数据库与中间件/,给数据找个家。