更新日志

每一节新课、功能与改进——最新在上。

  1. 2026年11月1日

    • 新课矩阵乘法 — 用一行与一列的点积填入每个结果格,再交换两个矩阵,观察顺序可能带来的乘积形状变化。
  2. 2026年10月31日

    • 新课前缀和 — 读取两个前缀值、相减就得到区间和,再修改一个元素,看后续哪些累计值需要修复。
  3. 2026年10月30日

    • 改进9 月开始的动画复审已经完成:175 节课全部核对了计算结果、讲解文字、画布状态、代码高亮和 Quiz 答案,发现的错误均已修正。
    • 改进又有 20 节带输入面板的课程支持“保存”和“已保存的输入”;过期或被手动改过的分享链接会回退到默认输入,不再载入无效的值。
    • 改进整数输入会直接拒绝 1.5、1e2 这类值,不再悄悄当作 1 运行;输入错误提示跟随界面语言,屏幕阅读器也能读出。
    • 改进调整窗口大小不再重置播放位置和速度,也不会退出 Quiz;揭晓答案后仍可点“回看”,把卡片从画布上移开。
  4. 2026年10月8日

    • 功能控件和卡片默认采用手绘风格,新增设置页,可调整界面样式、语言、画布背景和日志面板显示。
    • 改进课程、学习路线和个人库统一使用导航栏,桌面课程将画布、播放控制和代码、输入、日志卡片排在同一张纸上。
    • 改进分享链接、嵌入、PNG 导出和视频导出集中到同一个分享菜单。
    • 改进课程侧边栏记住展开状态和分类折叠状态,目录、侧边栏和学习路线只显示已完成的课程。
  5. 2026年10月7日

    • 改进TCP 握手和 Big-O 的状态、颜色变化随步骤平滑过渡,先前状态逐渐退后,让当前状态更清楚。
    • 改进修复网格与点阵纸边缘被截断、生产环境中手绘卡片边框消失,以及播放滑块缺少无障碍名称的问题。
    • 改进修复中文、日文 Markdown 排版,并校正课程讲解、分类介绍和卡片描述。
  6. 2026年10月5日

    • 改进Quiz 现在会等当前步骤的动画完成后再暂停,抽题不再受输入随机化影响,步骤日志保留描述相同的连续步骤,切换课程时侧边栏自动显示当前课程。
  7. 2026年10月4日

    • 改进反馈入口迁移到 GitHub Issues,可以提交问题、提出建议并跟进处理进展。
  8. 2026年9月24日

    • 改进启动课程动画的持续复审与优化,分批改进排序、字符串、回溯和搜索课程,并逐步推进其他课程。
  9. 2026年9月22日

    • 新课单调栈 — 用值递减的索引栈解「下一个更大元素」;每个索引只入栈一次、最多出栈一次,所以嵌套的 `while` 仍是 O(n),相等值则继续等待严格更大的值。
  10. 2026年9月21日

    • 新课从消息到分布式共识 — 跟着一条命令走过客户端投递、Raft 复制、提交和应用,再丢掉响应,看清一次成功写入为什么仍会以客户端超时收场。
    • 新课从 SQL 查询到存储读取 — 把查询展开成执行计划、页请求、缓冲池检查和结果行;同一次查找首次需要 3 次冷读,页面进入缓存后再查不增加读取。
  11. 2026年9月20日

    • 新课自编码器 — 分别用 2 维和 8 维潜在编码重建留出的手写数字,再把棋盘格交给只见过数字的解码器,证明编码更宽也无法保证恢复陌生模式。
  12. 2026年9月19日

    • 新课策略梯度 — 用 REINFORCE 根据一条采样轨迹的回报调整动作概率,包括一次公式正确、却把立即到达目标的概率从 25% 降到 24.6% 的更新。
    • 新课扩散模型 — 对比单次去噪估计如何把多个可能起点平均到空白中心,以及反复去噪如何在 8 个数据簇附近恢复样本。
    • 新课生成对抗网络 — 让生成器与判别器对抗训练,再分开检查单个样本是否逼真、整个分布是否覆盖充分:丢失模式时,骗过判别器也不算生成完整。
  13. 2026年9月18日

    • 新课MCP 插件 — 把内置工具路由到本地实现,把外部工具交给 MCP 客户端,而插件服务器在声明的工具契约后保留真正的执行实现。
    • 新课Q 学习 — 用已观察的奖励和下一状态的最优估值更新 Q 表中的一格,再通过重复访问让延迟奖励逐步传回更早的状态。
  14. 2026年9月17日

    • 改进视频导出调整为终身版权益;分享链接、嵌入和带水印 PNG 导出仍然免费。
    • 改进开始录制前显示操作说明,录制时提供可取消的提示,移除播放器左下角的录制文案。
  15. 2026年9月16日

    • 新课后台任务 — 在脱离的 shell 中启动命令,立即返回句柄,再等到下一个轮次边界才把完成通知送入智能体上下文,不会中途打断正在生成的回复。
    • 新课智能体团队 — 用共享任务板和邮箱协调彼此隔离的智能体上下文,证明依赖任务已完成不等于接口契约已传给需要它的队友。
  16. 2026年9月15日

    • 新课先计划,再行动 — 把预期工作的清单和证明完成的工具结果放在一起,让失败的检查一直保持可见,直到计划记下修复与新证据。
    • 新课系统提示词组装 — 把身份、工具指南、运行时信息和技能目录组成系统指令,同时保持工具定义与会话上下文分离;磁盘上的文件只有被 harness 加载才会进入请求。
    • 新课错误恢复 — 重试前先对模型调用的失败分类,再按原因选择等待、压缩上下文、提高输出预算、切换模型或停止,而不是重发同一个已损坏的请求。
  17. 2026年9月13日

    • 新课池化与特征图 — 用局部窗口的最大值或平均值降低空间分辨率,同时保持通道分离;再把响应移过窗口边界,看清池化丢掉的位置细节。
    • 新课目标检测 — 预测带类别的边界框,按得分删除弱候选,再按重叠度抑制重复框,两个阈值分别控制漏检和重复检测。
  18. 2026年9月12日

    • 新课权限 — 在工具执行前处理 allow、ask 和 deny,deny 的优先级最高,ask 路径只有收到人的肯定答复才能到达执行。
  19. 2026年9月11日

    • 新课Hooks — 生命周期事件和工具名必须同时匹配才调用 hook;工具前的回调能阻止写入,同一项检查放到成功后就只能报告已发生的事。
    • 新课解码策略 — 在同一组模型得分上对比 greedy、Top-k 和 Top-p,再调节 temperature,看概率集中程度如何在不重新训练模型的情况下改变。
    • 新课位置编码 — 把正弦与余弦位置向量加到 token embedding 上,让同一 token 出现在不同位置时以不同输入进入 Transformer。
  20. 2026年9月10日

    • 新课图像分类 — 把同一张萨摩耶照片的 3 种裁剪送进模型,看榜首标签与置信度从萨摩耶 61.6%、萨摩耶 33.4% 移到 `chow` 19.3%。
    • 新课边缘检测 — 比较小邻域两侧的亮度来计算 Sobel 响应,再调节阈值,分开强变化、平坦的亮区和噪声制造的边缘。
  21. 2026年9月9日

    • 新课词嵌入 — 在固定向量空间里移动单词,看相似语境如何形成相近方向、重复关系如何显为偏移,同时不把几何当成没有语料偏差的中立结果。
  22. 2026年9月8日

    • 新课批归一化 — 用训练批次统计量标准化每个隐藏特征通道,再应用学到的 `γ` 和 `β`;固定的 6 层实验把第 50 轮激活峰值从 `64.35` 压到 `9.15`。
    • 新课从手写数字到预测 — 把 28×28 图像变成 10 个得分、概率、一个预测数字和置信度门控的决策,而正确与否只能由之后的留出真值判定。
    • 新课N-gram 语言模型 — 按固定长度的历史统计语料计数来预测下一 token,计数归零时用平滑得到合法的概率分布,但不把它当成新增的语境证据。
  23. 2026年9月6日

    • 新课优化器:SGD、Momentum、Adam — 让 3 种更新规则在同样 20 步预算下竞赛:固定参考设置中,SGD 赢圆形盆地,Momentum 赢狭长山谷,Adam 赢高噪声场景。
  24. 2026年9月5日

    • 新课LSM 树 — 把最新版本缓存起来,延后合并排序好的不可变文件,让前台写入又快又持久,同时把成本转移给读取和后台压缩。
    • 新课Dropout — 训练时随机遮掉一部分隐藏激活,让网络无法依赖某个脆弱组合;推理时移除遮罩并使用匹配的缩放。
  25. 2026年9月4日

    • 新课B+ 树 — 点查时借内部页的引导键走到有序叶子页,范围查询则沿相链的叶子向前扫描,无需返回根。
    • 新课窗口函数 — 在相关行上计算累计值和排名,同时保留每一条源行;这与把每组折叠成一行结果的 `GROUP BY` 不同。
    • 新课多版本并发控制(MVCC) — 保留行的多个版本,让读者与写者重叠工作;读取时从新到旧扫描,返回第一个对当前快照可见的版本。
  26. 2026年9月3日

    • 新课数据库索引 — 数一遍全表扫描、哈希索引、B+ 树和覆盖 B+ 树各自的冷逻辑页读取:同一次点查分别是 8、2、3、2 次,而选择率一低,非覆盖的树就以 12 输给扫描的 8。
    • 新课梯度消失 — 在 sigmoid 和激活态 ReLU 两条路径上逐层相乘局部增益:深度 10、`w = 1` 时,输出端的单位梯度传到输入端只剩 `2.785e-7`,另一条仍是 `1`;换成 `w = 0.5`,连 ReLU 也跌到 `9.766e-4`。
    • 新课GROUP BY 与聚合 — 每一行按它完整的分组键归入对应的组,再把每组压成一行聚合结果;同样 7 行随分组键变长形成 `1 → 3 → 6` 个组,而金额为 `NULL` 的行只让 `COUNT(*)` 加一,不进 `COUNT(amount)`。
  27. 2026年9月2日

    • 新课SQL 连接 — 每一对匹配的行变成结果里的一行,同一批源数据在 INNER 下是 3 行、LEFT 是 5 行、FULL 是 6 行;3×3 预设把那种成倍放大的九行摊开给你看。
  28. 2026年9月1日

    • 新课一致性哈希 — 键的位置不动,新节点 N4@220 只接手 `(140, 220]` 这一段,12 个键里迁 3 个;同样的哈希换成 `%3 → %4`,12 个里要迁 10 个。
    • 新课两阶段提交 — 所有参与者都投 YES 才允许 COMMIT;协调者在下发决定前失联,那些已经 prepared 的锁就一直挂在那里。
    • 新课Raft 共识 — 选出领导者,在五个副本中的三个上提交一条当前任期的日志;两台机器的少数派可以存下冲突的条目,但永远越不过多数派那条线。
  29. 2026年8月30日

    • 新课变基(Rebase) — 把只属于特性分支的提交按从旧到新重放到较新的 `main` 上,每个提交都拿到新 ID,而分支引用要等所有补丁都打成功才移动。
    • 新课撤销修改 — 按每条命令究竟写了哪一层文件、哪个引用或哪个提交对象,来对比 `restore`、soft/mixed/hard `reset` 和 `revert`;hard reset 那个场景说明了 `ORIG_HEAD` 为什么救不回只存在于工作区的内容。
    • 新课词法与语法分析 — 把 `12 + 3 * 4` 扫描成一条扁平的 token 带,再看递归下降的规则边界如何让 `*` 先在右侧的 term 里结算完,`+` 才能成为根。
    • 改进Git 与版本控制整条学习路线现已全部免费,含 Tag 与版本发布、变基和撤销修改。
  30. 2026年8月29日

    • 新课Tag 与版本发布 — 把一个发布名钉在某个提交上,`main` 继续往前走;再强行移动这个 tag,线上的名字就和它记录的源码对不上了。
    • 新课合并冲突 — 把冲突标记全删干净,Git 照样不让你继续——非得 `git add` 把索引的 1/2/3 阶段压成阶段 0;反过来原样把标记加进暂存区,Git 当普通字节照收。
    • 新课远程协作 — 分清本地 `main`、缓存的 `origin/main` 和服务器上的 `main`:fetch 只动跟踪引用,pull 只在祖先关系成立时才动本地分支,push 则由服务器拍板。
  31. 2026年8月27日

    • 新课分支与 HEAD — 把 Git 的两跳引用 `HEAD → branch → commit` 显式画出来;再让 HEAD 进入分离状态,下一次提交一个分支都不会动。
    • 新课快进合并 — 顺着源分支尖端的父链走一遍来确认祖先关系,然后只把当前分支引用挪到一个已存在的提交上——源引用和对象数一个没变。
    • 新课三方合并 — 找到最近公共祖先,把互不冲突的改动合成一个双亲提交;再让两个分支改到同一行,Git 就只能丢下冲突标记停住。
  32. 2026年8月26日

    • 新课Git 的四个区域 — 跟着同一个文件穿过工作区、索引、本地仓库和远程;一处没暂存的改动就足以证明 commit 读的是暂存快照,不是编辑器里的内容。
    • 新课提交即快照 — 按 Git 真实格式算出 blob、tree 和 commit 的 ID,没改过的 README 直接复用原 blob;只换父提交,同一棵 tree 也会拿到新的 commit ID。
  33. 2026年8月25日

    • 新课虚拟机 — 栈式虚拟机一次取一条字节码指令,所以 1 + 2 \* 3 是三次 push 再 MUL 再 ADD;把 ADD 提前发出去就会栈下溢。
    • 新课AST → 代码生成 — 代码生成按后序遍历这棵树,先子节点后运算符,所以 1 + 2 _ 3 会先写 MUL 再写 ADD——因为 _ 在树里更深,而不是谁把文本重排了。
  34. 2026年8月20日

    • 新课下一个 token 预测 — 问 GPT-2 "The capital of France is" 后面接什么," Paris" 只排第五,还在 " the" 后面,67.98% 的概率散在小到画不出来的 token 上;把笔交给它,连取十二次 argmax 就绕回了一个不折不扣的死循环。
    • 新课RNN / LSTM — 同一个句子逐词喂给两种单元:RNN 答对了,可回传的学习信号只剩 8.9 × 10⁻⁶,而 LSTM 带门的记忆线还保有 0.427——直到你把每个遗忘门都按在 0.5,它一样消失。
    • 新课Softmax 与交叉熵 — 一个真实手写的 3 被判成类别 2,置信度 99.86%;融合后的梯度化简成 `p − y`,穿过同一个饱和的 softmax,对真实 logit 的推力是 MSE 的 361 倍。
    • 新课损失函数 — 均方误差和交叉熵从同一个"自信地答错"的 sigmoid 输出出发,但 MSE 多出来的 `p(1 − p)` 把梯度压小 25 倍,让那一轮在平台上爬。
  35. 2026年8月18日

    • 新课TLS 握手 — 双方谁都没发过密钥,却导出了同一把;服务器再对本次连接的握手记录签名,证明自己确实持有证书上那把钥匙——中间人转发一张货真价实的证书,链、域名、有效期全过,栽在这一个签名上。
  36. 2026年8月17日

    • 新课DNS 解析 — 根和顶级域服务器只会告诉你下一步该问谁,所以一次冷查询要八条消息,命中缓存只要两条;NXDOMAIN 预设照样把整条层级走完——只有该区自己的服务器才有资格说这个名字不存在。
  37. 2026年8月16日

    • 新课线性回归 — 平方误差直接画成面积,于是那个一趟算完的闭式解看起来就是一条绕 (x̄, ȳ) 旋转的直线,正方形缩小 25 倍;接着把一个点拉到 y = −6,同一个公式就丢下另外八个点,只顾缩它那一个正方形。
  38. 2026年8月15日

    • 新课线性分类器 — 每个类别一行权重,对结果取 argmax,于是每块区域都是若干半平面的交集,必然是凸的;双岛预设里,W 怎么转、b 怎么挪都错。
    • 新课向量与点积 — w·x 是 x 投在 w 上的影子:x 翻倍分数就翻倍,角度不变则分数不变,垂直的 x 再长也是 0——这正是 w·x = 0 成为无偏置分类器决策边界的原因。
  39. 2026年8月14日

    • 新课补码 — 最高位是 −128 这个位权,不是符号标志,所以一个无分支的加法器就能做有符号运算:5 + (−5) 丢掉一个进位,结果照样对;而 127 + 1 一个进位都没丢,却无声无息地读成 −128。
    • 新课二进制数 — 固定位宽里第 k 位的权重恰好是 2^k,所以 `n % 2` 读的是最低位,`n // 2` 是把它丢掉;数过 255,进位从八位字的尽头溢出去,只剩 0。
  40. 2026年8月13日

    • 新课跳跃游戏 (LeetCode #55) — "最多跳这么远"让可达集始终是一整块,于是一个数就扛起了整个搜索:默认输入跨得过那个 0,而漏斗预设把每段弧都堆到同一格上,卡死。
    • 新课三数之和 (LeetCode #15) — 排一次序,定一个锚点,剩下两个数交给对撞的双指针:O(n³) 降到 O(n²),去重只需和邻居比一次,不用哈希集合。
  41. 2026年8月12日

    • 新课分数背包 — 物品是固定宽度货架上按密度定高的矩形,一次薄片交换把交换论证演给你看;而一旦禁止那一刀,同一条贪心规则就从 240 掉到 205——比最优整件装法的 220 还低。
    • 新课哈夫曼编码 — 每轮合并两棵最稀有的子树,深度即码长:ABRACADABRA 压到 23 位,定长要 33 位;平局预设说明哈夫曼可以追平这个基线,但永远不会输给它。
  42. 2026年8月11日

    • 新课Bellman-Ford — 每轮松弛全部边、共 V−1 轮,期间不锁定任何节点,所以第 2 轮会修掉第 1 轮留下的过期估计;最后再扫一遍,"还在变小"就坐实为一个红色的负环。
  43. 2026年8月10日

    • 新课区间调度 — 按结束时间排序,逐个收下不冲突的区间;一条交换轨道把另一个最优方案改写成贪心解,一个名额都没少。
    • 新课接雨水 (LeetCode #42) — 前缀最大值把两侧边界都摆出来,双指针则先结算较小的那一侧;专门有一拍来证明:还没扫到的柱子推翻不了这一列的结论。
  44. 2026年8月9日

    • 新课LRU 缓存 (LeetCode #146) — 哈希表以期望 O(1) 找到节点,双向链表让每次命中都变成最近使用;把淘汰拆成两步,就能看出只摘链表节点、不删哈希表项会留下什么脏数据。
  45. 2026年8月8日

    • 新课全排列 — 每次交换都要换回来,把调用者的数组原样还原;少了这一行,搜索照样走到六个叶子,却只产出四个不同的排列。
    • 新课数独求解 — 同一道题,MRV 把 99 次落子、56 次回溯降到 46 和 3;再补一个已知数,那条分支干脆不存在了。
  46. 2026年8月7日

    • 新课位运算技巧 — 独热掩码只改一位,`x & (x - 1)` 清掉最低的那个 1 用来数 1 的个数,而零值陷阱说明了二的幂判断为什么还得带上 `x > 0`。
  47. 2026年8月6日

    • 新课N 皇后 — 三个约束键挡掉列冲突和对角线冲突,回溯时三个一起归还;一份搜索审计把 26 次候选检查和 4⁴ 种朴素行分配摆在一起。
  48. 2026年8月5日

    • 新课交叉验证 — 同样 20 张照片,两次单独留出分别给出 1.00 和 0.25;五折让每一行都被测到一次,落在 0.800——报出来的成绩不再取决于你抽得好不好。
    • 新课混淆矩阵 — 40 个样本里,"谁都不报警"拿下 85% 准确率,"全都报警"拿下召回率,"只报一个"拿下精确率;四格表才是这些比值藏不住的东西。
  49. 2026年8月3日

    • 新课拓扑排序 — Kahn 不断摘掉入度为零的源点,DFS 则在返回时倒着写出顺序;两组带环的对照说明了为什么"存在拓扑序"恰好等价于"图无环"。
  50. 2026年8月1日

    • 新课位运算基础 — 布尔运算逐位就地决定输出的每一位,移位则让比特在固定的 8 位字里搬家;移满整个字宽,源比特一个不剩,只留 0。
  51. 2026年7月31日

    • 新课主成分分析 — 一个特征向量就吃下 95.26% 的方差,重构误差降到原来的 1/2.8;接着把厘米换成毫米,这个分数涨到 99.67%,主成分本身却更差了。
    • 新课过拟合与验证 — 九次多项式穿过全部十个训练点,在留出数据上却比三次差 899 倍;训练误差没法用来选模型容量——模型一变大,它只会下降。
  52. 2026年7月29日

    • 新课最小生成树 — Prim 让一棵树长大,Kruskal 把若干连通块并起来;同一张带桥的图上,两种不同的选边顺序走到同一棵五条边、权重 19 的最小生成树。
  53. 2026年7月28日

    • 新课AVL 树 — 在不改变键序的前提下,把最近一个失衡的祖先转回来;同样六次插入,和不旋转的 BST 一比:高度 2、查三次,对面是高度 4、查五次。
  54. 2026年7月27日

    • 新课朴素贝叶斯 — 每个词独立投一张似然票,于是把相关的词重复一遍,等于同一份证据乘了两次——置信度涨了,信息一点没多。
    • 新课K-Means 聚类 — 每个点归到最近的质心,每个质心挪到均值,重复到惯性不再下降;收敛是有保证的,但起始位置不同,落到的局部极小也不同。
  55. 2026年7月26日

    • 新课红黑树 — 新节点插成红色,由叔节点的颜色决定是变色还是最多两次旋转;三角形那种情况少做第一次旋转,就会留下一条红红相连的边。
  56. 2026年7月24日

    • 新课支持向量机 — 零错误的直线有无穷多条,支持向量机挑的是最宽的那条空走廊;把所有非支持向量删掉,边界一动不动。
    • 新课决策树 — 信息增益贪心地把一刀刀轴对齐的切分堆成矩形;多加一层,一个孤立的噪声点就能独享一个"完美"叶子,而斜着的边界始终是阶梯状的错。
  57. 2026年7月23日

    • 新课编辑距离 — 对每一对前缀选出代价最小的最后一步编辑,数出还原的 +1 操作序列,再回放一遍;位移陷阱把六处逐位不匹配还原成一次删除加一次插入。
  58. 2026年7月21日

    • 新课最长公共子序列 — 填一张前缀表,再回溯出一段最优的有序公共部分;贪心开场把 a[0] 的 A 配给 b[3],烧掉 BDC,停在 ABA(3),而 DP 找回 BCBA(4)。
  59. 2026年7月20日

    • 新课路由协议 — 距离向量轻信邻居给的过期数字,在环里能一路数到无穷;链路状态则泛洪更新后的拓扑,Dijkstra 算不出路径就直接撤掉这条路由。
    • 新课k 近邻 — 没有训练这一步:每次查询都要和全部存下的点量一遍距离;同一组距离下,k = 1 会围着一个标错的样本造出一座孤岛,k = 9 又抹掉一个真实的边缘聚落。
  60. 2026年7月17日

    • 新课图的表示 — 邻接表只存真实存在的邻居,邻接矩阵则用 V² 个格子换一次下标即可完成的连边判断;Dense K5 标出了邻接表省空间的优势消失在哪里。
    • 新课后缀数组 — 只存后缀的起始下标,每轮把参与排名的前缀长度翻倍,然后在固定文本上二分;全等场景让并列一路持续到最后,而 `-1` 哨兵依然把更短的后缀排在前面。
  61. 2026年7月16日

    • 新课字典树 — 公共前缀共用一条路径,查询时每个字符走一条边;`startsWith("ca")` 和 `search("ca")` 的对照说明:没有结束标记,走得到的路径不等于存过的词。
  62. 2026年7月15日

    • 新课KMP 字符串匹配 — 失配后复用已知最长的前后缀边界,对同一个文本字符再试一次;`advance i (bug)` 这个变体演示了一次过早的自增如何跳过真正的匹配。
    • 新课Rabin-Karp — 指纹在每个定宽窗口上滚动,只有哈希相等时才去逐字符核对;碰撞场景证明哈希相等只是候选,不是匹配。
  63. 2026年7月14日

    • 新课HTTP / HTTP/2 / HTTP/3 — HTTP/1.1 把四个文件排队发,HTTP/2 把它们叠在同一条 TCP 字节流上——一个丢包就把四个一起冻住,而 HTTP/3 把这次丢失关在它自己的 QUIC 流里。
    • 新课逻辑回归 — sigmoid 把 `w·x + b` 变成概率,但同时放大 `w` 和 `b` 只会让置信度更陡;零分处的那条边界钉在原地不动。
  64. 2026年7月13日

    • 新课循环与不变量 — 在循环头立下一个承诺,循环体里保持它,到 `i = n` 处把证明收尾;全负数的反例说明了初始值选错为什么会让结论失效。
    • 新课数组与下标 — 下标是从 0 起算的槽位坐标,O(1) 解析;默认那一轮安全地停在长度之前,再证明 `values[len(values)]` 会在 `print` 执行前就抛出 `IndexError`。
    • 改进当列出的课程全部已上线时,主题目录不再显示"已上线 / 全部"切换。
  65. 2026年7月12日

    • 新课变量与赋值 — 就地修改动的是共享对象,赋值动的只是某个名字的绑定;不可变整数上的 `+=` 证明:光看语法分不出发生了哪一种。
  66. 2026年7月11日

    • 新课状态机 — 同一个 `push`,锁住时被拒、解锁时通过——因为行为属于 `(state, event)` 这一对,而不是事件本身。
  67. 2026年7月8日

    • 新课OSI / TCP-IP 模型 — OSI 给七件事各起了名字,TCP/IP 把它们归成四层;一个 Ethernet + IP + TCP 的请求实际套三层壳,不是七层。路由器换掉链路层那层壳,从不打开里面的 HTTP 报文。
    • 新课线程与同步 — `counter += 1` 拆成读、加、写三步,于是默认交错下六次自增只落到 4;加互斥锁能到 6,而两边反着加锁就死锁。
  68. 2026年7月4日

    • 新课文件系统 — 名字归目录管,元数据和块地址归 inode 管,所以 `rm` 删掉的是一条目录项;已打开的文件能活过它最后一个可见路径。
    • 新课页面置换 — FIFO 记的是到达时间,LRU 每次访问都要改写近期性,Clock 则只用一个引用位凑合;同一条访问序列既暴露了 Bélády 异常,也暴露了"猜得更准"要付的元数据代价。
  69. 2026年7月3日

    • 新课子智能体 — `Task` 在一份全新的 `messages[]` 上跑同一个智能体循环,于是四次嘈杂的检索只在主上下文里留下一张结果卡;也正是这堵墙,让子智能体错过了提示词没带上的那句澄清。
  70. 2026年7月2日

    • 新课线性查找 — 从头到尾逐个比较,撞上第一个匹配就停,所以代价等于目标所在的位置,找不到则扫完全部 n 个;这是唯一不要求输入有序的查找。
  71. 2026年7月1日

    • 新课树的遍历 — 前序、中序、后序是同一趟深度优先遍历,只有 `visit(node)` 放在哪里改变了输出顺序;退化成链的树让调用栈深度顶到 n。
  72. 2026年6月30日

    • 新课滑动窗口 — 一个窗口右边界扩、左边界收,用 O(n) 走遍子数组;直到出现负数,贪心收缩就不成立了。
  73. 2026年6月29日

    • 新课双指针 — 在有序数组两端各放一个下标往中间走,淘汰放不下的那一端;输入没排序时,它会悄悄跳过一对真实的答案。
    • 功能排序、查找和数据结构课新增"场景"一栏——一键跳到值得一看的边界情况(一次真实的哈希碰撞、一棵退化成链的树、一次栈溢出)。
  74. 2026年6月28日

    • 新课虚拟内存 — 一次地址转换,TLB 命中约一个周期,走页表约 100 个,触发主缺页则大约一百万个;TLB 未命中和缺页不是同一件事。
    • 新课指令执行 — TinyCPU 取一个 16 位字,在译码前就把 PC 加一,然后让 `JNZ` 覆盖它;所谓循环不过是同一个地址被再取一次,CPU 并不认识"循环"这个结构。
  75. 2026年6月27日

    • 新课基数排序 — 一位一位把整数放进稳定的桶里,全程不比较任何两个值;宽键场景让 O(d·n) 这个代价不至于被说得太漂亮。
  76. 2026年6月25日

    • 新课动态数组 — 连续存储换来 O(1) 下标访问,代价是插入和删除时的整体搬移。
    • 改进"预测下一步"测验上线 两数之和 (LeetCode #1),覆盖暴力解和哈希表两种解法。
  77. 2026年6月24日

    • 新课树的基础 — 根、叶、深度和高度,用同一组节点摆出三种不同的高度。
    • 新课并查集 — 用 `parent[]` 上的一片森林表示不相交集合,配按秩合并与路径压缩。
  78. 2026年6月23日

    • 新课零钱兑换 — 贪心与 DP 画在同一条数轴上,看贪心那一抓把自己卡在哪里。
  79. 2026年6月22日

    • 新课缓存层次 — 行优先和列优先对同一个二维数组做同样多次加法,但一个把取回的缓存行用满,另一个每次都为一个字买下整行。
    • 新课分支预测 — 两位计数器要连错两次才改预测,所以一次循环退出不会像一位预测器那样,再罚你一次重新进入时的失误。
  80. 2026年6月20日

    • 新课0/1 背包 — 一行行填出 DP 表,再回溯出到底装了哪些物品。
  81. 2026年6月19日

    • 新课CPU 流水线 — 五条指令在 IF、ID、EX、MEM、WB 上重叠推进;不做前递时,两次写后读冲突把理想的 9 个周期拖到 13 个,每个丢掉的周期都以气泡的形式看得见。
    • 新课浮点数 (IEEE 754) — binary16 把 0.1 存成最近的那一档,因为它的二进制小数无限循环;指数每进一档,相邻可表示值之间的间隔就翻一倍。
  82. 2026年6月18日

    • 新课双向链表 — 每个节点多一个 `prev` 指针:已持有的节点 O(1) 删除,外加反向遍历。
    • 新课循环链表 — 尾节点绕回头节点,所以一次找不到的查找刚好走满一圈。
  83. 2026年6月17日

    • 新课Agent 循环 — 模型与工具的往复循环,外加 `max_turns` 这道兜底。
    • 新课A* 寻路 — 网格搜索,配一组与 Dijkstra 的对照,和一个坏启发函数的失败案例。
  84. 2026年6月16日

    • 新课URL → 渲染页面 — 一门综合课,跟着一次页面加载穿过 DNS、TCP、TLS、HTTP、缓存直到渲染。
  85. 2026年6月15日

  86. 2026年6月14日

    • 新课Transformer 块 — 残差流一路穿过注意力和 MLP 向上传递,被不断修正,但从不被替换。
    • 功能分享与嵌入——复制一个链接,按你当时的输入重新打开这节课;或者把可交互的播放器嵌进自己的页面。
    • 功能导出——从 ⋯ 菜单把当前帧存成 PNG,或者把整段讲解录成视频。
    • 功能新增联系页——怎么嵌入课程、导出片段,或者把 VizLearn 用在课堂上。
    • 改进冒泡排序 新增边界预设——最好、最坏、近乎有序、全相同,一键切换。
  87. 2026年6月13日

    • 功能"预测下一步"测验——先在 冒泡排序 上免费试用;每次作答都重新摇一个数组,逼你在脑子里跑一遍算法,而不是回忆答案。
    • 功能功能页重做——每项能力都配一幅手绘小图。
    • 改进ReAct 循环和工具调用改用真实录制的模型 trace,不再是脚本。
    • 改进冒泡排序的讲解重新剪过,镜头运动更连贯。
  88. 2026年6月12日

  89. 2026年6月11日

    • 新课训练循环
    • 新课堆排序
    • 功能会动的白板首屏——输入四个数字,看它们在页头冒泡排序。
  90. 2026年6月10日

  91. 2026年6月9日

    • 功能提示浮层、键盘快捷键、分享链接,以及课程之间平滑的视图过渡。
  92. 2026年6月8日

  93. 2026年6月7日

    • 新课布尔逻辑与门电路 — XOR 和 AND 共用同样两个输入位,产出半加器的和与进位;把 XOR 换成 OR,真值表里仍有三行是对的,只有 `1 + 1` 出错。
    • 新课任务系统 — 依赖边决定下一个能跑什么,`tasks.json` 记下每次完成;崩溃之后,基于磁盘的恢复不必重付 t1 和 t2 的代价,而只存在内存里的计划会把这两步再跑一遍。
  94. 2026年6月5日

    • 新课广度优先搜索
    • 功能新增 Radix luma 界面主题,以及画布背景切换。
  95. 2026年6月4日

    • 新课进程调度 — FCFS、SJF 和时间片轮转画在同一张甘特图上,你能亲眼看到短作业排在长作业后面干等。
    • 新课多级反馈队列
    • 功能代码面板支持多语言——排序、查找、DP 和数据结构课都补上了 JavaScript。
    • 改进冒泡排序和两数之和新增变体切换(经典 / 优化,暴力 / 哈希表)。
  96. 2026年6月2日

  97. 2026年6月1日

    • 功能免费即用的进度延续——书签、保存的输入和学习进度,登录后跨设备同步。
    • 功能/library 提供分页式资料库,存放你保存的输入和进度。
    • 改进移动端布局——播放器、面板和画布在手机上能干净地堆叠和缩放。
    • 改进服务条款与隐私政策重新设计,加了章节导航。
  98. 2026年5月31日

  99. 2026年5月29日

  100. 2026年5月27日

    • 新课连通分量 — 一次 DFS 给一座岛上色,外层扫描跳过所有已归属的顶点,对第一次搜索够不到的每座岛恰好启动一次。
    • 新课计数排序 — 计数经前缀和变成最终地址,倒着放置能让相等的键保持输入顺序;改成正着放,数字照样排好,稳定性却悄悄反了。
  101. 2026年5月26日

  102. 2026年5月23日

    • 新课归并排序 — 默认输入带重复键,好让你看见稳定性确实成立。
    • 新课斐波那契与记忆化 — 同一个输入,三种模式:递归树、记忆化和递推表。
  103. 2026年5月20日

    • 新课前向传播 — 一个真实训练过的 MLP,逐层推进:加权求和 → ReLU。
    • 新课MNIST 数字分类器 — 在浏览器里手写一个数字,看网络怎么判。
  104. 2026年5月18日

    • 新课递归与调用栈 — 每次调用都留下一个栈帧,装着它的局部变量和还没算完的那个乘法;`fact(4)` 贴上四张便签,回退时依次交出 1、2、6 和 24。
    • 新课拥塞控制 — Reno 先把窗口翻倍到 `ssthresh`,之后每个 RTT 只加一个包;三次重复 ACK 让窗口减半,超时则直接打回 1——发送方只能靠把这条路撑到溢出,才知道它有多宽。
  105. 2026年5月17日

    • 新课堆
    • 功能"讲解"标签页——每节课在动画旁配一份文字讲解。
    • 功能反馈——在任意课程里直接发送文字或截图。
  106. 2026年5月14日

  107. 2026年5月11日

  108. 2026年5月4日

    • 新课链表
    • 改进数据结构课里的箭头和指针移动更顺滑。
  109. 2026年5月1日

    • 功能第一版公开首页——主题展示、功能巡览和路线图预告。
  110. 2026年4月25日

    • 新课栈
    • 新课队列
    • 功能首页主题浏览——每节课一张手绘卡片。
    • 改进统一的手绘配色(vizPalette)在所有课程间共用,同一种颜色在哪儿都是同一个意思。
  111. 2026年4月8日

    • 功能代码 / 可视化 / 日志面板可调整大小。
  112. 2026年3月29日

    • 功能代码面板同步——动画播放时当前行高亮,步骤日志同步填入。
  113. 2026年3月17日

    • 新课选择排序
    • 功能整个界面支持 English、中文和日本語。
    • 功能Google 登录。
  114. 2026年3月14日

  115. 2026年2月

    • 功能VizLearn 开工——第一个提交。