阅读时间是各篇文章的估算之和,不含环境准备、实践与自查。可以先读解释和页面里的互动,想运行源码时再看准备说明。
路线 01 · 4 篇 · 阅读约 28 分钟
字符与数字怎么存
同一段文字、同一串字节,为什么程序能给出不同结果?
- 适合谁
- 遇到过字数限制、小数尾巴或日期异常,想弄清原因的读者。
- 读完能做什么
- 能给文字、整数、小数和时间各写一张保存说明,分清显示方式、计数单位与可表示范围。
想运行源码时,先准备这些
- 理解整数、小数、分数和简单加法;字节序一篇会用到一个字节有八位这一约定。
- 动手部分使用 JavaScript;字符计数需要支持 Intl.Segmenter 的运行环境,具体命令按文章说明。
- 一个 emoji,为什么会算成好几个字?
先为昵称里的文字选对计数单位,分清看见几个字符与保存多少字节。
- 同样四个字节,为什么读出两个数字?
再把一个整数拆成字节,观察为什么相同数据按不同顺序读取会得到不同数值。
- 0.1 加 0.2,为什么不是刚好 0.3?
接着区分小数存储、运算和显示,解释为什么屏幕上没有尾巴也未必精确。
- 2038 年会让所有电脑的时间倒退吗?
最后沿时间数据的保存与读回过程,检查字段宽度、单位和越界发生在哪一步。
读完后,用一个小任务检查自己
给一个假想的报名文件设计昵称、费用和预约时间三个字段,并为每个字段提出一个容易误读的测试输入。
留下一份这样的记录
一张说明表:记录每个字段的单位或编码、允许范围、测试输入,以及准备怎样比较写入前和读回后的结果;先保留预测,再记录观察。
路线 02 · 5 篇 · 阅读约 43 分钟
请求为什么慢,页面为什么旧
平均耗时看着正常,用户却一直等;刷新以后,为什么还是旧内容?
- 适合谁
- 会浏览网页,想理解等待、排队和缓存之间区别的读者。
- 读完能做什么
- 能为一次慢请求或旧页面列出要核对的证据,并用本地实验记录状态码、版本标签和正文的对应关系。
想运行源码时,先准备这些
- 理解平均数与每秒速率,知道浏览器会发请求、服务器会返回响应。
- 队列和延迟示例使用 Python 3.10+;最后的缓存项目需要 Node.js 20+ 和基本 PowerShell 操作。
- 平均只要三十毫秒,为什么有人等一秒?
先看同一平均值怎样藏住少数慢请求,再决定还要记录哪些等待和失败。
- 队列有两千条,还要等多久?
接着把进入、等待和完成分开计数,避免仅凭队列长度猜某个请求还要等多久。
- 为什么一直刷新,价格还是旧的?
转向页面内容,沿浏览器响应、应用缓存和数据库寻找旧值实际来自哪一层。
- 304 没有正文,网页为什么还能显示?
弄清 ETag 和 304 核对的是哪份已存内容,以及这次请求有没有重新传正文。
- 做一个只在本机运行的 HTTP 缓存实验
用本地项目只改变正文或标签,亲手对照请求条件、响应状态和返回内容。
读完后,用一个小任务检查自己
为一个“加载偶尔很慢,而且仍显示旧价格”的虚构页面写一份排查记录,再从缓存项目中选一次条件请求作为观察练习。
留下一份这样的记录
一张分成等待与内容两部分的记录表:每部分列出待验证的猜测、需要的证据和仍不知道的事;项目记录保留请求条件、状态、标签与正文。
路线 03 · 4 篇 · 阅读约 39 分钟
订单怎样一步步可靠完成
超时、重启或通知失败时,怎样知道订单做到了哪一步?
- 适合谁
- 想理解重复下单、订单状态和消息重投,也愿意读简单数据库例子的读者。
- 读完能做什么
- 能画出下单、提交和消息处理的流程,指出失败后应查询的记录,并说明本地去重的范围。
想运行源码时,先准备这些
- 知道请求与响应、数据库表和记录,能区分提交与回滚;可见性一篇会出现简单 SELECT。
- 本地代码需要 Python 3.10+;文章中的 SQLite 实验各有版本与模式说明,依照原文运行。
- 明明超时了,为什么还会生成两张订单?
先区分没有收到结果与没有执行,追踪同一次购买重试时该沿用的请求身份。
- 事务已经提交,另一个窗口为什么还看不到?
再观察另一条连接为什么可能仍读到旧版本,核对订单状态时把事务边界一起记下。
- 服务要重启,做到一半的请求怎么办?
把重启放进这条流程,分别考虑新请求、已经接下的请求和到期仍未完成的工作。
- 订单写成了,消息却没发:动手做 outbox
最后在本地 outbox 项目里观察不同提交点的失败、消息重投和效果去重,逐条对照留下的记录。
读完后,用一个小任务检查自己
画出一笔虚构订单从首次请求到消息消费的时间线,自选三个失败位置,预测各自会留下哪些记录,再用 outbox 练习观察其中可模拟的情况。
留下一份这样的记录
一张带请求身份、事件身份和提交点的时间线,另附预测与观察对照;写明哪些判断只适用于本地实验,哪些外部动作还未验证。
路线 04 · 4 篇 · 阅读约 30 分钟
AI 回答为什么会错
回答很稳定、带着引用,还不断搜索,为什么仍不能直接相信?
- 适合谁
- 经常让 AI 查资料或总结内容,希望知道怎样核对回答的读者。
- 读完能做什么
- 能把回答拆成可核对的陈述,区分生成设置、引用依据和操作授权,并说明何时该停止继续尝试。
想运行源码时,先准备这些
- 温度一篇会用概率相加为一的简单例子;循环一篇会用集合与循环,可结合逐步记录阅读。
- 两段代码示例使用 Python 3.10+,只做本地计算与预设观察重放,不需要模型账号。
- 温度调低,模型就一定答得对吗?
先观察温度怎样改变候选概率,分清稳定选中一个结果与这个结果有事实依据。
- 答案带着引用,为什么还是错的?
把带引用的答案拆成短陈述,逐条核对原文是否支持其中的时间、对象和限制条件。
- 网页说“改做别的事”,助手该听吗?
检查网页中的命令式文字来自哪里,分清需要总结的材料与已获授权的动作。
- Agent 一直说“再查一次”,该何时停?
最后给反复查资料的过程写清完成、无进展和预算耗尽的区别,避免把停止当成成功。
读完后,用一个小任务检查自己
自行写两份条件不同的活动通知、一段引用它们的回答和一份三步查询记录,审查这次回答是否已经具备提交条件。
留下一份这样的记录
一张核对卡:逐条标出陈述依据、材料中的动作要求及查询进展,并写出继续或停止的理由;尚未证实的部分保留空缺,不补写事实。
路线 05 · 4 篇 · 阅读约 36 分钟
从原文到可核对的检索证据
怎样从一堆材料找到相关片段,又不把高分误当成正确答案?
- 适合谁
- 想整理笔记、了解知识库检索,愿意跟着小例子观察打分过程的读者。
- 读完能做什么
- 能解释一个检索分数在比较什么,保留片段到原文的对应关系,并运行只返回证据片段的本地检索器。
想运行源码时,先准备这些
- 知道向量是一组有顺序的数,能看懂平方与平方根;前两篇解释向量检索的思路。
- 最后的项目使用 Python 3.10+ 标准库,需要基本终端操作和字符串、列表、字典知识;项目实际采用词项匹配,不实现前两篇的向量模型。
- 向量放大两倍,为什么相似度没变?
先用二维例子区分方向、长度与相似度,明确一个高分究竟保留了什么信息。
- 一句话变成向量,事实就存进去了吗?
再把向量与原文、版本和读取权限分开,检查找回一条候选后还缺哪些判断。
- 答案带着引用,为什么还是错的?
沿入库、检索结果和实际输入片段逐步检查,定位证据在哪里遗漏或失去条件。
- 先找证据再回答:做一个本地检索器
用更小的本地词项检索器逐项解释得分,并观察无匹配、日期冲突和否定句相似时返回了什么。
读完后,用一个小任务检查自己
在本地检索项目中选择两个查询,先预测候选与排序,再核对返回片段;另外列出得出一个事实结论前仍需要补查的条件。
留下一份这样的记录
一份查询记录,包含文档编号、原文片段、命中词项、分数和预测差异;将程序已验证的事与尚需人工核对的事分栏记录。
路线 06 · 4 篇 · 阅读约 29 分钟
电脑日常小常识:做一份好用的资料包
压缩包、照片、二维码和下载摘要,分别能帮你解决什么问题?
- 适合谁
- 经常整理文件、导出图片或制作活动资料,希望少凭外观猜测的读者。
- 读完能做什么
- 能为一份资料包安排压缩、图片对照、二维码试扫和下载核对,并说明每项检查的适用范围。
想运行源码时,先准备这些
- 前三篇没有编程先修要求,可以用纸面例子和自己的无隐私小文件阅读。
- 哈希的可选代码示例使用 Node.js 24;不运行代码也可先梳理下载核对与保密保存的区别。
- 把压缩包再压一次,能一直变小吗?
先比较原文件、压缩文件和还原内容,弄清继续压缩为什么不保证一直缩小。
- 截图用 PNG,照片用 JPEG,就一定选对了吗?
再按资料里的文字、照片和透明背景挑选导出候选,用相同展示条件比较清楚程度与大小。
- 二维码能纠错,为什么遮一点也会扫不出?
把二维码当作需要试读的数据图案,检查尺寸、白边和展示环境,避免把纠错当成任意遮挡额度。
- 哈希值像乱码,为什么不能当加密用?
最后分开考虑下载内容是否匹配、来源是否可信与是否需要保密,明确摘要能做的那部分检查。
读完后,用一个小任务检查自己
为一份包含说明文字、照片和练习二维码的虚构活动资料包设计发布前检查,不使用个人信息或真实登录、支付码。
留下一份这样的记录
一份检查清单:每项写出所用样本、保留的原件、比较条件和准备记录的结果,并单列一次检查仍不能证明的事情。
路线 07 · 3 篇 · 阅读约 18 分钟
从开关到计算与查错
只有 0 和 1,怎样表达条件、完成加法,再发现传输中的差错?
- 适合谁
- 想从直观小实验理解计算机底层,不想一开始就背芯片名词的读者。
- 读完能做什么
- 能列出逻辑规则的全部输入,按列追踪进位,并举出通过奇偶校验但内容已改变的例子。
想运行源码时,先准备这些
- 会数 0、1,理解整数加法。先做页面互动即可。
- 源码采用 JavaScript,需 Node.js 20 或更新版本,无额外依赖。
- 只有开和关,怎样算出与、或、非?
先用四种输入看清与、或、非的区别,把规则写成完整清单。
- 1 加 1 写成 10,进位怎样接着走?
再把规则用到加法,分别保存本位结果和送给下一列的进位。
- 多加一位,为什么能发现错却找不到错?
最后人为翻转传输位,区分发现错误、定位错误与通过检查。
读完后,用一个小任务检查自己
给一段四位消息补偶校验位,比较翻转一个位置与两个不同位置的结果;再画出 10 加 11 时每一列如何处理进位。
留下一份这样的记录
一张输入输出记录,包含你先写下的预测、实际结果,以及两条限制:查错的模型范围、加法结果的保存位数。
路线 08 · 3 篇 · 阅读约 23 分钟
图片如何进入一个分类模型
照片变成哪些数,小窗口怎样算,最后又该怎样判断分类规则好不好?
- 适合谁
- 对识图 AI 好奇,能做乘加和数方格,但还不熟悉神经网络的读者。
- 读完能做什么
- 能从一个像素找到通道和一维位置,算出一个局部窗口的输出,并分开记录训练样本与留出样本的结果。
想运行源码时,先准备这些
- 知道列表和下标,能看懂简单坐标;页面互动不需要安装框架。
- 源码采用 Python 3 标准库。外部图解以英文为主,所需动作已在文章中说明。
- 电脑怎样把一张图变成一串数字?
先把小图片拆成位置与通道,分清准备输入和理解内容。
- 卷积的小窗口,为什么到处用同一组数?
让同一组乘数移动到不同位置,理解一次局部计算与权重共享。
- 分界线越会绕弯,分类就越好吗?
比较两条手写分类规则,观察旧题全对为什么仍要检查新样本。
读完后,用一个小任务检查自己
选一个非灰色像素交换红蓝通道,记录坐标与数值变化;再为一条分类规则准备未参与选规则的新点,并分别报告旧点和新点的结果。
留下一份这样的记录
一份小实验笔记:写清图片排列约定、所用规则、两组样本如何分工,以及哪些观察还不能推广到真实识图模型。
路线 09 · 4 篇 · 阅读约 28 分钟
看起来一样,内容也一样吗?
改文件名、换一种编码、整理字符,究竟改了哪一层?
- 适合谁
- 能打开文件和网页,想看懂常见文字与格式问题的读者。
- 读完能做什么
- 能分清名称、表示规则与实际内容,给“看起来一样”补上具体的比较方式。
想运行源码时,先准备这些
- 会读简单的字符串和列表即可。
- 代码使用 Python 标准库;每篇按自己的运行说明操作。
- 把文件名改成 .jpg,为什么还不是一张照片?
先分清文件名字与文件内容,不把重命名当成格式转换。
- 网址里的百分号和 Base64,为什么藏不住文字?
再亲手还原两种常见编码,观察为什么编码没有保密作用。
- 两个名字看起来一样,程序为什么说不相等?
对比看起来相近的文字,决定哪些差别可以合并,哪些必须保留。
- 文件点了删除,原来的字节就立刻被擦掉了吗?
最后区分名称消失、空间可复用与数据真正覆盖;只运行内存模型。
读完后,用一个小任务检查自己
设计一份虚构文件交换说明,写清命名、格式、编码、文字比较与删除含义。
留下一份这样的记录
一张五行说明表,每行保留一个容易误解的输入与待核对现象;不操作真实文件删除或设备擦除。
路线 10 · 4 篇 · 阅读约 32 分钟
一次请求的时间花在哪儿
多等一会、多试几次和真正停止工作,分别意味着什么?
- 适合谁
- 会读请求与响应,想理解服务超时和重试的读者。
- 读完能做什么
- 能为一次请求画出尝试、等待、剩余预算和取消检查点,并解释哪些结果仍需查询。
想运行源码时,先准备这些
- 先认识毫秒、累计时间和请求结果。
- 页面互动不发网络请求;代码使用 Python 3.10+ 标准库。
- 明明超时了,为什么还会生成两张订单?
先问业务是否允许重复尝试,以及超时后怎样确认原来的结果。
- 大家都等一秒再试,为什么服务还是被挤满?
再观察等待时间怎样累计,多层重试又会怎样增加底层尝试。
- 每个接口都等一秒,整次请求为什么等了更久?
给整次请求一份总预算,每发起下一步都先计算还剩多少。
- 页面已经报超时,后台为什么还在干活?
最后区分停止等待、收到取消和工作真正停止,检查已提交结果。
读完后,用一个小任务检查自己
为一个需要调用两项后端服务的虚构请求设计时间记录表,并提出失败后的查询办法。
留下一份这样的记录
记录开始时刻、各次尝试与等待、剩余预算、取消观察点;另外列出哪些业务结果不能仅凭超时判断。
路线 11 · 4 篇 · 阅读约 29 分钟
怎样看懂 AI 的成绩单
正确率、精确率和八成把握,为什么不能当成同一个数字?
- 适合谁
- 知道百分比,希望能读懂 AI 评测而不先背统计术语的读者。
- 读完能做什么
- 能同时交代样本来源、数量、误报漏报、阈值和概率含义,指出分数没有证明什么。
想运行源码时,先准备这些
- 认识分数、百分比和平均数即可。
- 互动使用虚构工单;本地 Python 示例不训练模型,也不调用收费接口。
- 准确率 98%,为什么还可能帮不上忙?
从少见事件开始,看看一个总体正确率会藏住什么。
- 把警报门槛调高,就一定更准吗?
固定同一批分数移动门槛,把选中多少、误报和漏报放在一起看。
- AI说“八成把握”,真的有八成吗?
把相近概率分组,对照发生比例,并检查分组大小怎样影响直觉。
- 都答对九成,十道题和一千道题一样靠谱吗?
最后给成绩补上分母和抽样条件,理解有限样本留下的不确定性。
读完后,用一个小任务检查自己
为虚构的工单分类助手设计一页评测报告,不以某个单一高分作为上线结论。
留下一份这样的记录
报告包含样本范围与数量、分组结果、阈值选择理由、误报漏报代价和仍需验证的问题。
路线 12 · 3 篇 · 阅读约 21 分钟
从找资料到执行,逐步确认
资料找到了、参数填对了、文字写完了,下一步就一定能做吗?
- 适合谁
- 想做知识库助手或工具调用应用,已经认识 JSON 的读者。
- 读完能做什么
- 能把材料是否充分、格式是否正确、业务是否允许和操作是否完成分开检查。
想运行源码时,先准备这些
- 知道助手会检索文档和提交结构化参数。
- 三个示例都是本地虚构数据,不连接真实账号或业务系统。
- 把说明书切成小块,会不会把条件切丢?
先检查取回的材料有没有保留适用条件,必要时回到同版本原文。
- AI把参数填对了,为什么还不能执行?
再区分格式约束、权限与当前业务状态,不把校验通过当成提交成功。
- AI还在一个字一个字地写,能先照做吗?
最后跟着事件观察未完成、待核对和定稿,分清消息结束与业务结果。
读完后,用一个小任务检查自己
给一个虚构的借阅助手画出从问题到操作结果的检查顺序。
留下一份这样的记录
一张流程记录:每步需要什么证据、失败或材料不足时停在哪里、最终依据什么向用户报告结果。
路线 13 · 3 篇 · 阅读约 23 分钟
改动保存了,什么时候才能用上?
两个人同时修改,或程序仍拿着旧值时,怎样判断新内容到了哪一步?
- 适合谁
- 认识简单 SQL 和 JSON,想弄清保存、读取与配置生效区别的读者。
- 读完能做什么
- 能给数据修改和配置更新各画一条时间线,写清读到了哪一版、保存是否成功,以及哪一步才采用新值。
想运行源码时,先准备这些
- 知道数据库表、SELECT、UPDATE,以及提交和回滚;配置一篇需要认识 JSON 的键和值。
- 代码使用 Python 3.10+ 标准库。两个数据库实验分别使用内存数据库与临时文件,事务设置不同,按各篇说明运行。
- 两人都改成功,为什么一人的更新不见了?
先保留两份旧读值,对照有无版本检查的保存结果;记下影响行数,并提出保存失败后还需要查什么。
- 事务已经提交,另一个窗口为什么还看不到?
再画出两个连接的读取与提交顺序,观察同一读者在结束事务前后看到了哪一版;注明 SQLite WAL 这一实验条件。
- 改了配置文件,运行中的程序为什么没有变?
最后转到应用内存:依次只改文字、重新加载、提交坏配置,分别记录当前配置与旧请求手里的值。
读完后,用一个小任务检查自己
为“两个工作人员修改库存”和“服务修改等待时间”各画一条时间线。分别安排一次保存未被接受、一次新值暂未被采用,列出你会查看的记录。
留下一份这样的记录
两条独立的时间线和一张核对表:每步记谁持有哪份值、尝试了什么、依据什么判断结果;把尚需重读或确认的地方留出来,并注明实验的事务或内存条件。
路线 14 · 4 篇 · 阅读约 26 分钟
先数对,再判断检索好不好
哪些位置该计分、哪些材料该计入分母,相关材料又是否足够回答问题?
- 适合谁
- 会算平均数和百分比,想跟着小实验理解 AI 数据统计与检索评估的读者。
- 读完能做什么
- 能写清一次统计选了哪些对象、分母从哪里来,再逐条检查检索片段是否保留条件、是否支持回答。
想运行源码时,先准备这些
- 知道平均数与百分比,能读 Python 列表;理解检索会返回一份排好序的材料列表。
- 先做页面互动,再选择运行 Python 3.10+ 标准库示例;几个练习使用各自的虚构数据,不需要模型账号,也不是一条完整训练或检索流水线。
- 同批输入补了零,为什么计算时还得遮住?
先逐格标记真实内容与占位,比较三种统计规则;写下每次纳入的位置和分母,再观察全是占位时该怎样报告。
- 检索从三条加到十条,为什么还得重新评估?
把“先圈定对象再计数”用到检索:改变取回条数,分别数命中、取回总数和全库相关数,检查候选之外是否还有遗漏。
- 把说明书切成小块,会不会把条件切丢?
计数之后再读材料:改变切分长度,把命中片段与同版本原段落并排,圈出丢失的条件;无命中也如实记录。
- 答案带着引用,为什么还是错的?
最后把一段带引用的回答拆成短陈述,逐条找到支持它的原文,区分主题相关、确实支持和证据不足。
读完后,用一个小任务检查自己
为一组自拟材料列出一个查询、完整的相关标签和固定候选顺序,选择两个取回数量比较计数;再从取回片段写一段短答复,核对它保留了哪些条件。
留下一份这样的记录
一页记录,包含统计对象与分母、两次取回的计数、片段到原文的对应关系,以及逐句依据。把“没有取回”“取回但缺条件”“回答没有依据”分开记,不用一个比例替代后两项检查。
路线 15 · 3 篇 · 阅读约 22 分钟
分类成绩:总分到底遮住了谁?
准确率、精确率、召回率和三种 F1,各在回答什么?
- 适合谁
- 会算比例,想读懂 AI 分类成绩报告的读者。
- 读完能做什么
- 能从原始计数解释一个分数,并指出总分可能遮住的少数类别。
想运行源码时,先准备这些
- 先做页面互动,再选择运行 Python 示例;所有数据都是教学假设。
- 准确率 98%,为什么还可能帮不上忙?
先看少见情况为什么容易被总准确率遮住,写清样本中的实际比例。
- 把警报门槛调高,就一定更准吗?
移动阈值,分别观察误报和漏报;别把两个代价混成一个数字。
- 同一批分类结果,为什么能算出三个总分?
最后换成三个类别,对照逐类成绩与三种平均,并写清分母。
读完后,用一个小任务检查自己
为一个三类工单分拣器设计成绩报告,保留真实数量、各类误报漏报和一种汇总方式。
留下一份这样的记录
一张小账本和一段说明:哪些类别容易被总分遮住,选择的平均方式回答什么问题,零分母怎样处理。
路线 16 · 3 篇 · 阅读约 21 分钟
时间怎样记录,才不容易误会
每天九点、日志先后和 2040 年预约,各自需要记录什么?
- 适合谁
- 会读简单日期,想理解提醒时间、日志排序与时间字段的读者。
- 读完能做什么
- 能区分日历规则、事件先后与保存范围,为三种场景各列一张检查卡。
想运行源码时,先准备这些
- 只读正文和图表不需要安装环境。
- 运行日历与日志小例子需 Python 3;它们使用人工数据,不修改系统时钟。
- 2038 示例使用 Node.js 与 BigInt;它主动演示 32 位截断,不能代表所有设备的越界行为。
- 拓展到 ZoneInfo 时,需另行核对系统或 tzdata 的时区数据;Java 21 拓展练习可从新整理资料进入。
- “明天同一时间”和“过二十四小时”,为什么可能不同?
先分清日历约定与固定时长,给“每天九点”和“每隔 24 小时”各写一条需求。
- 日志里先收到、后发送,是时间倒流了吗?
再区分机器写下的时间与消息的先后证据,只给有依据的事件画箭头。
- 2038 年会让所有电脑的时间倒退吗?
最后检查时间字段的单位、起点与范围,列出远期日期写入再读回的检查项。
读完后,用一个小任务检查自己
分别为“每天九点提醒”“合并两台机器日志”“导出 2040 年预约”写一张检查卡。第一张说明日历与地区规则,第二张标明可证明的先后关系,第三张说明字段单位、范围与读写过程。
留下一份这样的记录
三张短卡:每张列出需要保存的信息、一个容易误判的例子,以及一项可以实际检查的结果。别用“都转 UTC”代替三个场景各自的要求。
路线 17 · 4 篇 · 阅读约 49 分钟
Java 调用成功,究竟完成了什么?
代码正常返回,为什么中间动作、遍历顺序或日期仍和预想不同?
- 适合谁
- 会读简单 Java 代码,想把 API 文档与实际运行对起来的读者。
- 读完能做什么
- 能给一次调用写出输入、规则、观察结果和不能保证的事情。
想运行源码时,先准备这些
- 认识 Map、Lambda 和日期格式;可先读每篇的先修链接。
- 下载练习需要完整 JDK 17 或更新版本,编译与运行命令见文章。
- 只是想按长度排序,TreeMap 为什么把不同名字合成了一条?
先区分比较规则与对象相等,检查一个 Map 怎样判断两个键是不是同一个。
- 只做了一次 get,为什么 LinkedHashMap 遍历就失败了?
再观察一次读取怎样改变访问顺序,以及旧迭代器为何失效。
- count 是 3,为什么 map 和 peek 一次都没执行?
接着拆开流水线,检查终结操作是否真的需要执行每个中间动作。
- 日期解析成功了,为什么 2 月 29 日却变成了 28 日?
最后把格式识别与日期解析分开,给边界输入明确选择处理规则。
读完后,用一个小任务检查自己
自己设计三个容易误判的 Java 输入,运行前写预测,再分别查文档和实跑。
留下一份这样的记录
一张对照表:记录使用的 JDK、关键参数、预测、实际输出、规范依据;注明哪些观察不能推广到所有实现。
路线 18 · 4 篇 · 阅读约 63 分钟
从特征信息到参数更新,局部指标够用吗?
方差、单列得分或梯度看起来正常,为什么整体效果仍不能据此判断?
- 适合谁
- 理解平均数和简单概率,正在学习机器学习公式的读者。
- 读完能做什么
- 能分开检查输入中的信息、特征之间的关系、梯度单位与参数更新。
想运行源码时,先准备这些
- 先会计算平方、平均数和简单导数;概率概念可从文内词条补齐。
- 四篇的独立示例使用 Python 标准库;不需要 GPU 或训练数据集。
- PCA 保留了 99% 的方差,为什么分类线索还是全丢了?
先观察保留输入方差为什么不一定保留分类线索。
- 每个特征都拿零分,为什么放在一起就能知道答案?
再看单独没有信息的两列,为什么合起来可能决定标签。
- Huber 已经限制了梯度,为什么一个大输入仍能把更新放大?
转到更新过程,区分对残差的导数与最终参数梯度。
- 梯度已经是零,Adam 和 AdamW 为什么还会走出不同一步?
最后追踪正则项进入哪里,对照两套独立的动量与参数状态。
读完后,用一个小任务检查自己
任选一个页面实验,只改一个输入,先画出你预想的变化,再运行源码核对。
留下一份这样的记录
保留一份输入与输出记录,写清测量的变量、单位、固定条件,以及这份小实验没有验证的真实训练问题。
路线 19 · 4 篇 · 阅读约 72 分钟
算法每一步留下的状态,还能直接拿来用吗?
只是换了遍历方向或解释方式,为什么原本正确的步骤会失去依据?
- 适合谁
- 能读 Python 循环和列表,准备学习算法正确性与反例的读者。
- 读完能做什么
- 能指出每轮依赖的是哪个旧状态,并用小反例检验过早下结论。
想运行源码时,先准备这些
- 会读列表下标、循环与简单有向图;先用纸笔跟踪小输入。
- 下载练习使用 Python 3.10 或更新版本的标准库;实际运行版本见文章。
- 先排个位再排十位,为什么同一个桶里的顺序不能打乱?
先追踪同桶记录的相对顺序,弄清上一轮排好的信息怎样被保留。
- 背包表只改了循环方向,为什么一件物品突然能拿两次?
再比较容量正序与倒序,判断读到的格子属于上一轮还是本轮。
- 拓扑排序停住后,剩下的任务为什么不全在环里?
转向依赖图,把真正成环的节点和被环阻塞的后继分开。
- 已经找到便宜路线,为什么遇到负数后还不能提前结束?
最后检查提前确定答案的前提,观察负边为什么会打破它。
读完后,用一个小任务检查自己
选择一种算法,给出一个满足前提的输入与一个破坏前提的输入,逐步记录状态。
留下一份这样的记录
一份带状态表的说明:每一步读了什么、改了什么、依赖哪个前提;再用独立参考算法核对最终结果。
路线 20 · 3 篇 · 阅读约 31 分钟
Java:值没有变,解释它的规则变了吗?
同样是 null、加号或负数,换一个 API 为什么会得到不同结果?
- 适合谁
- 能读 Java Map、字符串与基本算术,准备检查 API 边界的读者。
- 读完能做什么
- 能把变量当前的表示、方法的输入约定和结果范围分开记录。
想运行源码时,先准备这些
- 先熟悉集合、基本类型和字符串;每篇的先修链接可补齐。
- 运行源码需完整 JDK 17 或更新版本;页面实验回放固定 Java 实测记录。
- merge 回调返回 null,为什么整条记录消失了?
从空值开始,区分缺失、传入参数和回调返回值分别触发的动作。
- 文件名里的 + 号,为什么解码后变成了空格?
再追踪字符表示,确认原始文本、表单值与 URI 路径经过哪一套规则。
- 取了绝对值,分桶下标为什么还会是负数?
最后检查数值范围与映射:下标合法不代表新旧规则指向同一个桶。
读完后,用一个小任务检查自己
从自己的练习中选一个 API,为它准备普通输入、边界输入和容易混淆的另一种表示。
留下一份这样的记录
交一张输入与结果表:写明类型、当前表示、API、JDK 版本、预测和输出;再用一句话说明本次没有验证的系统行为。
路线 21 · 4 篇 · 阅读约 63 分钟
模型评估:比较之前,先统一计算口径
同一份预测和标签,换一个平均位置、分母或同分规则,结果为什么不同?
- 适合谁
- 会算平均数和简单概率,正在学习分类损失与检索评估的读者。
- 读完能做什么
- 能指出结果差异来自输入变化还是计算规则变化,给指标写出可复核的定义。
想运行源码时,先准备这些
- 先理解概率、对数与取前 k 条;交叉熵基础可从文内先修入口补齐。
- Python 示例只用标准库复现文档公式;没有实际训练或调用 PyTorch、scikit-learn。
- 三个模型都没换,只把平均放到另一处,为什么答案反了?
先比较概率平均与 logit 平均,分清非线性变换发生在平均之前还是之后。
- 标签还是那两个类别,换成one-hot后平均损失为什么翻倍?
接着固定逐样本损失,只检查标签表示与加权平均的分母。
- AUC 一样,为什么前几条的命中结果不同?
再用已有排序反例,分清整体成对顺序和前几条命中的不同目标。
- 检索给了同分,为什么调换两行就把NDCG从1变成了三分之一?
最后给带位置折扣的评价补齐 gain、截断位置和同分处理规则。
读完后,用一个小任务检查自己
选一组固定输入,只改一个计算规则;分别写出公式、预测方向与实际数值。
留下一份这样的记录
保存一份评价说明,至少写明候选或样本集合、权重、归一化分母、类别或排序规则,以及数值实验没有证明的准确率结论。
路线 22 · 3 篇 · 阅读约 59 分钟
算法:找到一个答案,究竟保证了什么?
找全匹配、确定最短路、选出第 k 小,各自需要保留哪些信息?
- 适合谁
- 能读 Python 列表和循环,想练习算法状态与反例的读者。
- 读完能做什么
- 能区分算法保存的状态、最终保证的结果和并未完成的工作。
想运行源码时,先准备这些
- 会跟踪短字符串、数组下标和小型有向图。
- 从三到六个元素手算,再运行标准库示例;先写预期,最后看输出。
- KMP匹配失败时,为什么不是把已匹配长度直接清零?
先看字符匹配怎样沿前后缀关系回退,保留重叠匹配所需的信息。
- 边的费用只有0和1,为什么第一次到达一个点还不能定案?
再看权重为 0 或 1 的图,区分首次发现与后续更短路径。
- 找到第3小的数,为什么左边两个数仍然没有排好?
最后检查选择算法只保证第 k 小与分区关系,为什么不能把两侧当成已排序。
读完后,用一个小任务检查自己
挑一个算法,逐步记录它保存的状态,再用独立的朴素方法检查最终答案。
留下一份这样的记录
交一个满足前提的例子和一个错误简化的反例,标出首次失去必要信息的位置,并写清算法没有承诺的额外结果。