qinghuan

QINGHUAN / 阅读路线

选一个问题,顺着读下去

一次选一条路线就够了。先观察一个现象,再理解原因,最后留下一份自己的判断或实验记录。

阅读时间是各篇文章的估算之和,不含环境准备、实践与自查。可以先读解释和页面里的互动,想运行源码时再看准备说明。

路线 01 · 4 篇 · 阅读约 28 分钟

字符与数字怎么存

同一段文字、同一串字节,为什么程序能给出不同结果?

适合谁
遇到过字数限制、小数尾巴或日期异常,想弄清原因的读者。
读完能做什么
能给文字、整数、小数和时间各写一张保存说明,分清显示方式、计数单位与可表示范围。
想运行源码时,先准备这些
  • 理解整数、小数、分数和简单加法;字节序一篇会用到一个字节有八位这一约定。
  • 动手部分使用 JavaScript;字符计数需要支持 Intl.Segmenter 的运行环境,具体命令按文章说明。
  1. 一个 emoji,为什么会算成好几个字?

    先为昵称里的文字选对计数单位,分清看见几个字符与保存多少字节。

  2. 同样四个字节,为什么读出两个数字?

    再把一个整数拆成字节,观察为什么相同数据按不同顺序读取会得到不同数值。

  3. 0.1 加 0.2,为什么不是刚好 0.3?

    接着区分小数存储、运算和显示,解释为什么屏幕上没有尾巴也未必精确。

  4. 2038 年会让所有电脑的时间倒退吗?

    最后沿时间数据的保存与读回过程,检查字段宽度、单位和越界发生在哪一步。

读完后,用一个小任务检查自己

给一个假想的报名文件设计昵称、费用和预约时间三个字段,并为每个字段提出一个容易误读的测试输入。

留下一份这样的记录

一张说明表:记录每个字段的单位或编码、允许范围、测试输入,以及准备怎样比较写入前和读回后的结果;先保留预测,再记录观察。

路线 02 · 5 篇 · 阅读约 43 分钟

请求为什么慢,页面为什么旧

平均耗时看着正常,用户却一直等;刷新以后,为什么还是旧内容?

适合谁
会浏览网页,想理解等待、排队和缓存之间区别的读者。
读完能做什么
能为一次慢请求或旧页面列出要核对的证据,并用本地实验记录状态码、版本标签和正文的对应关系。
想运行源码时,先准备这些
  • 理解平均数与每秒速率,知道浏览器会发请求、服务器会返回响应。
  • 队列和延迟示例使用 Python 3.10+;最后的缓存项目需要 Node.js 20+ 和基本 PowerShell 操作。
  1. 平均只要三十毫秒,为什么有人等一秒?

    先看同一平均值怎样藏住少数慢请求,再决定还要记录哪些等待和失败。

  2. 队列有两千条,还要等多久?

    接着把进入、等待和完成分开计数,避免仅凭队列长度猜某个请求还要等多久。

  3. 为什么一直刷新,价格还是旧的?

    转向页面内容,沿浏览器响应、应用缓存和数据库寻找旧值实际来自哪一层。

  4. 304 没有正文,网页为什么还能显示?

    弄清 ETag 和 304 核对的是哪份已存内容,以及这次请求有没有重新传正文。

  5. 做一个只在本机运行的 HTTP 缓存实验

    用本地项目只改变正文或标签,亲手对照请求条件、响应状态和返回内容。

读完后,用一个小任务检查自己

为一个“加载偶尔很慢,而且仍显示旧价格”的虚构页面写一份排查记录,再从缓存项目中选一次条件请求作为观察练习。

留下一份这样的记录

一张分成等待与内容两部分的记录表:每部分列出待验证的猜测、需要的证据和仍不知道的事;项目记录保留请求条件、状态、标签与正文。

路线 03 · 4 篇 · 阅读约 39 分钟

订单怎样一步步可靠完成

超时、重启或通知失败时,怎样知道订单做到了哪一步?

适合谁
想理解重复下单、订单状态和消息重投,也愿意读简单数据库例子的读者。
读完能做什么
能画出下单、提交和消息处理的流程,指出失败后应查询的记录,并说明本地去重的范围。
想运行源码时,先准备这些
  • 知道请求与响应、数据库表和记录,能区分提交与回滚;可见性一篇会出现简单 SELECT。
  • 本地代码需要 Python 3.10+;文章中的 SQLite 实验各有版本与模式说明,依照原文运行。
  1. 明明超时了,为什么还会生成两张订单?

    先区分没有收到结果与没有执行,追踪同一次购买重试时该沿用的请求身份。

  2. 事务已经提交,另一个窗口为什么还看不到?

    再观察另一条连接为什么可能仍读到旧版本,核对订单状态时把事务边界一起记下。

  3. 服务要重启,做到一半的请求怎么办?

    把重启放进这条流程,分别考虑新请求、已经接下的请求和到期仍未完成的工作。

  4. 订单写成了,消息却没发:动手做 outbox

    最后在本地 outbox 项目里观察不同提交点的失败、消息重投和效果去重,逐条对照留下的记录。

读完后,用一个小任务检查自己

画出一笔虚构订单从首次请求到消息消费的时间线,自选三个失败位置,预测各自会留下哪些记录,再用 outbox 练习观察其中可模拟的情况。

留下一份这样的记录

一张带请求身份、事件身份和提交点的时间线,另附预测与观察对照;写明哪些判断只适用于本地实验,哪些外部动作还未验证。

路线 04 · 4 篇 · 阅读约 30 分钟

AI 回答为什么会错

回答很稳定、带着引用,还不断搜索,为什么仍不能直接相信?

适合谁
经常让 AI 查资料或总结内容,希望知道怎样核对回答的读者。
读完能做什么
能把回答拆成可核对的陈述,区分生成设置、引用依据和操作授权,并说明何时该停止继续尝试。
想运行源码时,先准备这些
  • 温度一篇会用概率相加为一的简单例子;循环一篇会用集合与循环,可结合逐步记录阅读。
  • 两段代码示例使用 Python 3.10+,只做本地计算与预设观察重放,不需要模型账号。
  1. 温度调低,模型就一定答得对吗?

    先观察温度怎样改变候选概率,分清稳定选中一个结果与这个结果有事实依据。

  2. 答案带着引用,为什么还是错的?

    把带引用的答案拆成短陈述,逐条核对原文是否支持其中的时间、对象和限制条件。

  3. 网页说“改做别的事”,助手该听吗?

    检查网页中的命令式文字来自哪里,分清需要总结的材料与已获授权的动作。

  4. Agent 一直说“再查一次”,该何时停?

    最后给反复查资料的过程写清完成、无进展和预算耗尽的区别,避免把停止当成成功。

读完后,用一个小任务检查自己

自行写两份条件不同的活动通知、一段引用它们的回答和一份三步查询记录,审查这次回答是否已经具备提交条件。

留下一份这样的记录

一张核对卡:逐条标出陈述依据、材料中的动作要求及查询进展,并写出继续或停止的理由;尚未证实的部分保留空缺,不补写事实。

路线 05 · 4 篇 · 阅读约 36 分钟

从原文到可核对的检索证据

怎样从一堆材料找到相关片段,又不把高分误当成正确答案?

适合谁
想整理笔记、了解知识库检索,愿意跟着小例子观察打分过程的读者。
读完能做什么
能解释一个检索分数在比较什么,保留片段到原文的对应关系,并运行只返回证据片段的本地检索器。
想运行源码时,先准备这些
  • 知道向量是一组有顺序的数,能看懂平方与平方根;前两篇解释向量检索的思路。
  • 最后的项目使用 Python 3.10+ 标准库,需要基本终端操作和字符串、列表、字典知识;项目实际采用词项匹配,不实现前两篇的向量模型。
  1. 向量放大两倍,为什么相似度没变?

    先用二维例子区分方向、长度与相似度,明确一个高分究竟保留了什么信息。

  2. 一句话变成向量,事实就存进去了吗?

    再把向量与原文、版本和读取权限分开,检查找回一条候选后还缺哪些判断。

  3. 答案带着引用,为什么还是错的?

    沿入库、检索结果和实际输入片段逐步检查,定位证据在哪里遗漏或失去条件。

  4. 先找证据再回答:做一个本地检索器

    用更小的本地词项检索器逐项解释得分,并观察无匹配、日期冲突和否定句相似时返回了什么。

读完后,用一个小任务检查自己

在本地检索项目中选择两个查询,先预测候选与排序,再核对返回片段;另外列出得出一个事实结论前仍需要补查的条件。

留下一份这样的记录

一份查询记录,包含文档编号、原文片段、命中词项、分数和预测差异;将程序已验证的事与尚需人工核对的事分栏记录。

路线 06 · 4 篇 · 阅读约 29 分钟

电脑日常小常识:做一份好用的资料包

压缩包、照片、二维码和下载摘要,分别能帮你解决什么问题?

适合谁
经常整理文件、导出图片或制作活动资料,希望少凭外观猜测的读者。
读完能做什么
能为一份资料包安排压缩、图片对照、二维码试扫和下载核对,并说明每项检查的适用范围。
想运行源码时,先准备这些
  • 前三篇没有编程先修要求,可以用纸面例子和自己的无隐私小文件阅读。
  • 哈希的可选代码示例使用 Node.js 24;不运行代码也可先梳理下载核对与保密保存的区别。
  1. 把压缩包再压一次,能一直变小吗?

    先比较原文件、压缩文件和还原内容,弄清继续压缩为什么不保证一直缩小。

  2. 截图用 PNG,照片用 JPEG,就一定选对了吗?

    再按资料里的文字、照片和透明背景挑选导出候选,用相同展示条件比较清楚程度与大小。

  3. 二维码能纠错,为什么遮一点也会扫不出?

    把二维码当作需要试读的数据图案,检查尺寸、白边和展示环境,避免把纠错当成任意遮挡额度。

  4. 哈希值像乱码,为什么不能当加密用?

    最后分开考虑下载内容是否匹配、来源是否可信与是否需要保密,明确摘要能做的那部分检查。

读完后,用一个小任务检查自己

为一份包含说明文字、照片和练习二维码的虚构活动资料包设计发布前检查,不使用个人信息或真实登录、支付码。

留下一份这样的记录

一份检查清单:每项写出所用样本、保留的原件、比较条件和准备记录的结果,并单列一次检查仍不能证明的事情。

路线 07 · 3 篇 · 阅读约 18 分钟

从开关到计算与查错

只有 0 和 1,怎样表达条件、完成加法,再发现传输中的差错?

适合谁
想从直观小实验理解计算机底层,不想一开始就背芯片名词的读者。
读完能做什么
能列出逻辑规则的全部输入,按列追踪进位,并举出通过奇偶校验但内容已改变的例子。
想运行源码时,先准备这些
  • 会数 0、1,理解整数加法。先做页面互动即可。
  • 源码采用 JavaScript,需 Node.js 20 或更新版本,无额外依赖。
  1. 只有开和关,怎样算出与、或、非?

    先用四种输入看清与、或、非的区别,把规则写成完整清单。

  2. 1 加 1 写成 10,进位怎样接着走?

    再把规则用到加法,分别保存本位结果和送给下一列的进位。

  3. 多加一位,为什么能发现错却找不到错?

    最后人为翻转传输位,区分发现错误、定位错误与通过检查。

读完后,用一个小任务检查自己

给一段四位消息补偶校验位,比较翻转一个位置与两个不同位置的结果;再画出 10 加 11 时每一列如何处理进位。

留下一份这样的记录

一张输入输出记录,包含你先写下的预测、实际结果,以及两条限制:查错的模型范围、加法结果的保存位数。

路线 08 · 3 篇 · 阅读约 23 分钟

图片如何进入一个分类模型

照片变成哪些数,小窗口怎样算,最后又该怎样判断分类规则好不好?

适合谁
对识图 AI 好奇,能做乘加和数方格,但还不熟悉神经网络的读者。
读完能做什么
能从一个像素找到通道和一维位置,算出一个局部窗口的输出,并分开记录训练样本与留出样本的结果。
想运行源码时,先准备这些
  • 知道列表和下标,能看懂简单坐标;页面互动不需要安装框架。
  • 源码采用 Python 3 标准库。外部图解以英文为主,所需动作已在文章中说明。
  1. 电脑怎样把一张图变成一串数字?

    先把小图片拆成位置与通道,分清准备输入和理解内容。

  2. 卷积的小窗口,为什么到处用同一组数?

    让同一组乘数移动到不同位置,理解一次局部计算与权重共享。

  3. 分界线越会绕弯,分类就越好吗?

    比较两条手写分类规则,观察旧题全对为什么仍要检查新样本。

读完后,用一个小任务检查自己

选一个非灰色像素交换红蓝通道,记录坐标与数值变化;再为一条分类规则准备未参与选规则的新点,并分别报告旧点和新点的结果。

留下一份这样的记录

一份小实验笔记:写清图片排列约定、所用规则、两组样本如何分工,以及哪些观察还不能推广到真实识图模型。

路线 09 · 4 篇 · 阅读约 28 分钟

看起来一样,内容也一样吗?

改文件名、换一种编码、整理字符,究竟改了哪一层?

适合谁
能打开文件和网页,想看懂常见文字与格式问题的读者。
读完能做什么
能分清名称、表示规则与实际内容,给“看起来一样”补上具体的比较方式。
想运行源码时,先准备这些
  • 会读简单的字符串和列表即可。
  • 代码使用 Python 标准库;每篇按自己的运行说明操作。
  1. 把文件名改成 .jpg,为什么还不是一张照片?

    先分清文件名字与文件内容,不把重命名当成格式转换。

  2. 网址里的百分号和 Base64,为什么藏不住文字?

    再亲手还原两种常见编码,观察为什么编码没有保密作用。

  3. 两个名字看起来一样,程序为什么说不相等?

    对比看起来相近的文字,决定哪些差别可以合并,哪些必须保留。

  4. 文件点了删除,原来的字节就立刻被擦掉了吗?

    最后区分名称消失、空间可复用与数据真正覆盖;只运行内存模型。

读完后,用一个小任务检查自己

设计一份虚构文件交换说明,写清命名、格式、编码、文字比较与删除含义。

留下一份这样的记录

一张五行说明表,每行保留一个容易误解的输入与待核对现象;不操作真实文件删除或设备擦除。

路线 10 · 4 篇 · 阅读约 32 分钟

一次请求的时间花在哪儿

多等一会、多试几次和真正停止工作,分别意味着什么?

适合谁
会读请求与响应,想理解服务超时和重试的读者。
读完能做什么
能为一次请求画出尝试、等待、剩余预算和取消检查点,并解释哪些结果仍需查询。
想运行源码时,先准备这些
  • 先认识毫秒、累计时间和请求结果。
  • 页面互动不发网络请求;代码使用 Python 3.10+ 标准库。
  1. 明明超时了,为什么还会生成两张订单?

    先问业务是否允许重复尝试,以及超时后怎样确认原来的结果。

  2. 大家都等一秒再试,为什么服务还是被挤满?

    再观察等待时间怎样累计,多层重试又会怎样增加底层尝试。

  3. 每个接口都等一秒,整次请求为什么等了更久?

    给整次请求一份总预算,每发起下一步都先计算还剩多少。

  4. 页面已经报超时,后台为什么还在干活?

    最后区分停止等待、收到取消和工作真正停止,检查已提交结果。

读完后,用一个小任务检查自己

为一个需要调用两项后端服务的虚构请求设计时间记录表,并提出失败后的查询办法。

留下一份这样的记录

记录开始时刻、各次尝试与等待、剩余预算、取消观察点;另外列出哪些业务结果不能仅凭超时判断。

路线 11 · 4 篇 · 阅读约 29 分钟

怎样看懂 AI 的成绩单

正确率、精确率和八成把握,为什么不能当成同一个数字?

适合谁
知道百分比,希望能读懂 AI 评测而不先背统计术语的读者。
读完能做什么
能同时交代样本来源、数量、误报漏报、阈值和概率含义,指出分数没有证明什么。
想运行源码时,先准备这些
  • 认识分数、百分比和平均数即可。
  • 互动使用虚构工单;本地 Python 示例不训练模型,也不调用收费接口。
  1. 准确率 98%,为什么还可能帮不上忙?

    从少见事件开始,看看一个总体正确率会藏住什么。

  2. 把警报门槛调高,就一定更准吗?

    固定同一批分数移动门槛,把选中多少、误报和漏报放在一起看。

  3. AI说“八成把握”,真的有八成吗?

    把相近概率分组,对照发生比例,并检查分组大小怎样影响直觉。

  4. 都答对九成,十道题和一千道题一样靠谱吗?

    最后给成绩补上分母和抽样条件,理解有限样本留下的不确定性。

读完后,用一个小任务检查自己

为虚构的工单分类助手设计一页评测报告,不以某个单一高分作为上线结论。

留下一份这样的记录

报告包含样本范围与数量、分组结果、阈值选择理由、误报漏报代价和仍需验证的问题。

路线 12 · 3 篇 · 阅读约 21 分钟

从找资料到执行,逐步确认

资料找到了、参数填对了、文字写完了,下一步就一定能做吗?

适合谁
想做知识库助手或工具调用应用,已经认识 JSON 的读者。
读完能做什么
能把材料是否充分、格式是否正确、业务是否允许和操作是否完成分开检查。
想运行源码时,先准备这些
  • 知道助手会检索文档和提交结构化参数。
  • 三个示例都是本地虚构数据,不连接真实账号或业务系统。
  1. 把说明书切成小块,会不会把条件切丢?

    先检查取回的材料有没有保留适用条件,必要时回到同版本原文。

  2. AI把参数填对了,为什么还不能执行?

    再区分格式约束、权限与当前业务状态,不把校验通过当成提交成功。

  3. AI还在一个字一个字地写,能先照做吗?

    最后跟着事件观察未完成、待核对和定稿,分清消息结束与业务结果。

读完后,用一个小任务检查自己

给一个虚构的借阅助手画出从问题到操作结果的检查顺序。

留下一份这样的记录

一张流程记录:每步需要什么证据、失败或材料不足时停在哪里、最终依据什么向用户报告结果。

路线 13 · 3 篇 · 阅读约 23 分钟

改动保存了,什么时候才能用上?

两个人同时修改,或程序仍拿着旧值时,怎样判断新内容到了哪一步?

适合谁
认识简单 SQL 和 JSON,想弄清保存、读取与配置生效区别的读者。
读完能做什么
能给数据修改和配置更新各画一条时间线,写清读到了哪一版、保存是否成功,以及哪一步才采用新值。
想运行源码时,先准备这些
  • 知道数据库表、SELECT、UPDATE,以及提交和回滚;配置一篇需要认识 JSON 的键和值。
  • 代码使用 Python 3.10+ 标准库。两个数据库实验分别使用内存数据库与临时文件,事务设置不同,按各篇说明运行。
  1. 两人都改成功,为什么一人的更新不见了?

    先保留两份旧读值,对照有无版本检查的保存结果;记下影响行数,并提出保存失败后还需要查什么。

  2. 事务已经提交,另一个窗口为什么还看不到?

    再画出两个连接的读取与提交顺序,观察同一读者在结束事务前后看到了哪一版;注明 SQLite WAL 这一实验条件。

  3. 改了配置文件,运行中的程序为什么没有变?

    最后转到应用内存:依次只改文字、重新加载、提交坏配置,分别记录当前配置与旧请求手里的值。

读完后,用一个小任务检查自己

为“两个工作人员修改库存”和“服务修改等待时间”各画一条时间线。分别安排一次保存未被接受、一次新值暂未被采用,列出你会查看的记录。

留下一份这样的记录

两条独立的时间线和一张核对表:每步记谁持有哪份值、尝试了什么、依据什么判断结果;把尚需重读或确认的地方留出来,并注明实验的事务或内存条件。

路线 14 · 4 篇 · 阅读约 26 分钟

先数对,再判断检索好不好

哪些位置该计分、哪些材料该计入分母,相关材料又是否足够回答问题?

适合谁
会算平均数和百分比,想跟着小实验理解 AI 数据统计与检索评估的读者。
读完能做什么
能写清一次统计选了哪些对象、分母从哪里来,再逐条检查检索片段是否保留条件、是否支持回答。
想运行源码时,先准备这些
  • 知道平均数与百分比,能读 Python 列表;理解检索会返回一份排好序的材料列表。
  • 先做页面互动,再选择运行 Python 3.10+ 标准库示例;几个练习使用各自的虚构数据,不需要模型账号,也不是一条完整训练或检索流水线。
  1. 同批输入补了零,为什么计算时还得遮住?

    先逐格标记真实内容与占位,比较三种统计规则;写下每次纳入的位置和分母,再观察全是占位时该怎样报告。

  2. 检索从三条加到十条,为什么还得重新评估?

    把“先圈定对象再计数”用到检索:改变取回条数,分别数命中、取回总数和全库相关数,检查候选之外是否还有遗漏。

  3. 把说明书切成小块,会不会把条件切丢?

    计数之后再读材料:改变切分长度,把命中片段与同版本原段落并排,圈出丢失的条件;无命中也如实记录。

  4. 答案带着引用,为什么还是错的?

    最后把一段带引用的回答拆成短陈述,逐条找到支持它的原文,区分主题相关、确实支持和证据不足。

读完后,用一个小任务检查自己

为一组自拟材料列出一个查询、完整的相关标签和固定候选顺序,选择两个取回数量比较计数;再从取回片段写一段短答复,核对它保留了哪些条件。

留下一份这样的记录

一页记录,包含统计对象与分母、两次取回的计数、片段到原文的对应关系,以及逐句依据。把“没有取回”“取回但缺条件”“回答没有依据”分开记,不用一个比例替代后两项检查。

路线 15 · 3 篇 · 阅读约 22 分钟

分类成绩:总分到底遮住了谁?

准确率、精确率、召回率和三种 F1,各在回答什么?

适合谁
会算比例,想读懂 AI 分类成绩报告的读者。
读完能做什么
能从原始计数解释一个分数,并指出总分可能遮住的少数类别。
想运行源码时,先准备这些
  • 先做页面互动,再选择运行 Python 示例;所有数据都是教学假设。
  1. 准确率 98%,为什么还可能帮不上忙?

    先看少见情况为什么容易被总准确率遮住,写清样本中的实际比例。

  2. 把警报门槛调高,就一定更准吗?

    移动阈值,分别观察误报和漏报;别把两个代价混成一个数字。

  3. 同一批分类结果,为什么能算出三个总分?

    最后换成三个类别,对照逐类成绩与三种平均,并写清分母。

读完后,用一个小任务检查自己

为一个三类工单分拣器设计成绩报告,保留真实数量、各类误报漏报和一种汇总方式。

留下一份这样的记录

一张小账本和一段说明:哪些类别容易被总分遮住,选择的平均方式回答什么问题,零分母怎样处理。

路线 16 · 3 篇 · 阅读约 21 分钟

时间怎样记录,才不容易误会

每天九点、日志先后和 2040 年预约,各自需要记录什么?

适合谁
会读简单日期,想理解提醒时间、日志排序与时间字段的读者。
读完能做什么
能区分日历规则、事件先后与保存范围,为三种场景各列一张检查卡。
想运行源码时,先准备这些
  • 只读正文和图表不需要安装环境。
  • 运行日历与日志小例子需 Python 3;它们使用人工数据,不修改系统时钟。
  • 2038 示例使用 Node.js 与 BigInt;它主动演示 32 位截断,不能代表所有设备的越界行为。
  • 拓展到 ZoneInfo 时,需另行核对系统或 tzdata 的时区数据;Java 21 拓展练习可从新整理资料进入。
  1. “明天同一时间”和“过二十四小时”,为什么可能不同?

    先分清日历约定与固定时长,给“每天九点”和“每隔 24 小时”各写一条需求。

  2. 日志里先收到、后发送,是时间倒流了吗?

    再区分机器写下的时间与消息的先后证据,只给有依据的事件画箭头。

  3. 2038 年会让所有电脑的时间倒退吗?

    最后检查时间字段的单位、起点与范围,列出远期日期写入再读回的检查项。

读完后,用一个小任务检查自己

分别为“每天九点提醒”“合并两台机器日志”“导出 2040 年预约”写一张检查卡。第一张说明日历与地区规则,第二张标明可证明的先后关系,第三张说明字段单位、范围与读写过程。

留下一份这样的记录

三张短卡:每张列出需要保存的信息、一个容易误判的例子,以及一项可以实际检查的结果。别用“都转 UTC”代替三个场景各自的要求。

路线 17 · 4 篇 · 阅读约 49 分钟

Java 调用成功,究竟完成了什么?

代码正常返回,为什么中间动作、遍历顺序或日期仍和预想不同?

适合谁
会读简单 Java 代码,想把 API 文档与实际运行对起来的读者。
读完能做什么
能给一次调用写出输入、规则、观察结果和不能保证的事情。
想运行源码时,先准备这些
  • 认识 Map、Lambda 和日期格式;可先读每篇的先修链接。
  • 下载练习需要完整 JDK 17 或更新版本,编译与运行命令见文章。
  1. 只是想按长度排序,TreeMap 为什么把不同名字合成了一条?

    先区分比较规则与对象相等,检查一个 Map 怎样判断两个键是不是同一个。

  2. 只做了一次 get,为什么 LinkedHashMap 遍历就失败了?

    再观察一次读取怎样改变访问顺序,以及旧迭代器为何失效。

  3. count 是 3,为什么 map 和 peek 一次都没执行?

    接着拆开流水线,检查终结操作是否真的需要执行每个中间动作。

  4. 日期解析成功了,为什么 2 月 29 日却变成了 28 日?

    最后把格式识别与日期解析分开,给边界输入明确选择处理规则。

读完后,用一个小任务检查自己

自己设计三个容易误判的 Java 输入,运行前写预测,再分别查文档和实跑。

留下一份这样的记录

一张对照表:记录使用的 JDK、关键参数、预测、实际输出、规范依据;注明哪些观察不能推广到所有实现。

路线 18 · 4 篇 · 阅读约 63 分钟

从特征信息到参数更新,局部指标够用吗?

方差、单列得分或梯度看起来正常,为什么整体效果仍不能据此判断?

适合谁
理解平均数和简单概率,正在学习机器学习公式的读者。
读完能做什么
能分开检查输入中的信息、特征之间的关系、梯度单位与参数更新。
想运行源码时,先准备这些
  • 先会计算平方、平均数和简单导数;概率概念可从文内词条补齐。
  • 四篇的独立示例使用 Python 标准库;不需要 GPU 或训练数据集。
  1. PCA 保留了 99% 的方差,为什么分类线索还是全丢了?

    先观察保留输入方差为什么不一定保留分类线索。

  2. 每个特征都拿零分,为什么放在一起就能知道答案?

    再看单独没有信息的两列,为什么合起来可能决定标签。

  3. Huber 已经限制了梯度,为什么一个大输入仍能把更新放大?

    转到更新过程,区分对残差的导数与最终参数梯度。

  4. 梯度已经是零,Adam 和 AdamW 为什么还会走出不同一步?

    最后追踪正则项进入哪里,对照两套独立的动量与参数状态。

读完后,用一个小任务检查自己

任选一个页面实验,只改一个输入,先画出你预想的变化,再运行源码核对。

留下一份这样的记录

保留一份输入与输出记录,写清测量的变量、单位、固定条件,以及这份小实验没有验证的真实训练问题。

路线 19 · 4 篇 · 阅读约 72 分钟

算法每一步留下的状态,还能直接拿来用吗?

只是换了遍历方向或解释方式,为什么原本正确的步骤会失去依据?

适合谁
能读 Python 循环和列表,准备学习算法正确性与反例的读者。
读完能做什么
能指出每轮依赖的是哪个旧状态,并用小反例检验过早下结论。
想运行源码时,先准备这些
  • 会读列表下标、循环与简单有向图;先用纸笔跟踪小输入。
  • 下载练习使用 Python 3.10 或更新版本的标准库;实际运行版本见文章。
  1. 先排个位再排十位,为什么同一个桶里的顺序不能打乱?

    先追踪同桶记录的相对顺序,弄清上一轮排好的信息怎样被保留。

  2. 背包表只改了循环方向,为什么一件物品突然能拿两次?

    再比较容量正序与倒序,判断读到的格子属于上一轮还是本轮。

  3. 拓扑排序停住后,剩下的任务为什么不全在环里?

    转向依赖图,把真正成环的节点和被环阻塞的后继分开。

  4. 已经找到便宜路线,为什么遇到负数后还不能提前结束?

    最后检查提前确定答案的前提,观察负边为什么会打破它。

读完后,用一个小任务检查自己

选择一种算法,给出一个满足前提的输入与一个破坏前提的输入,逐步记录状态。

留下一份这样的记录

一份带状态表的说明:每一步读了什么、改了什么、依赖哪个前提;再用独立参考算法核对最终结果。

路线 20 · 3 篇 · 阅读约 31 分钟

Java:值没有变,解释它的规则变了吗?

同样是 null、加号或负数,换一个 API 为什么会得到不同结果?

适合谁
能读 Java Map、字符串与基本算术,准备检查 API 边界的读者。
读完能做什么
能把变量当前的表示、方法的输入约定和结果范围分开记录。
想运行源码时,先准备这些
  • 先熟悉集合、基本类型和字符串;每篇的先修链接可补齐。
  • 运行源码需完整 JDK 17 或更新版本;页面实验回放固定 Java 实测记录。
  1. merge 回调返回 null,为什么整条记录消失了?

    从空值开始,区分缺失、传入参数和回调返回值分别触发的动作。

  2. 文件名里的 + 号,为什么解码后变成了空格?

    再追踪字符表示,确认原始文本、表单值与 URI 路径经过哪一套规则。

  3. 取了绝对值,分桶下标为什么还会是负数?

    最后检查数值范围与映射:下标合法不代表新旧规则指向同一个桶。

读完后,用一个小任务检查自己

从自己的练习中选一个 API,为它准备普通输入、边界输入和容易混淆的另一种表示。

留下一份这样的记录

交一张输入与结果表:写明类型、当前表示、API、JDK 版本、预测和输出;再用一句话说明本次没有验证的系统行为。

路线 21 · 4 篇 · 阅读约 63 分钟

模型评估:比较之前,先统一计算口径

同一份预测和标签,换一个平均位置、分母或同分规则,结果为什么不同?

适合谁
会算平均数和简单概率,正在学习分类损失与检索评估的读者。
读完能做什么
能指出结果差异来自输入变化还是计算规则变化,给指标写出可复核的定义。
想运行源码时,先准备这些
  • 先理解概率、对数与取前 k 条;交叉熵基础可从文内先修入口补齐。
  • Python 示例只用标准库复现文档公式;没有实际训练或调用 PyTorch、scikit-learn。
  1. 三个模型都没换,只把平均放到另一处,为什么答案反了?

    先比较概率平均与 logit 平均,分清非线性变换发生在平均之前还是之后。

  2. 标签还是那两个类别,换成one-hot后平均损失为什么翻倍?

    接着固定逐样本损失,只检查标签表示与加权平均的分母。

  3. AUC 一样,为什么前几条的命中结果不同?

    再用已有排序反例,分清整体成对顺序和前几条命中的不同目标。

  4. 检索给了同分,为什么调换两行就把NDCG从1变成了三分之一?

    最后给带位置折扣的评价补齐 gain、截断位置和同分处理规则。

读完后,用一个小任务检查自己

选一组固定输入,只改一个计算规则;分别写出公式、预测方向与实际数值。

留下一份这样的记录

保存一份评价说明,至少写明候选或样本集合、权重、归一化分母、类别或排序规则,以及数值实验没有证明的准确率结论。

路线 22 · 3 篇 · 阅读约 59 分钟

算法:找到一个答案,究竟保证了什么?

找全匹配、确定最短路、选出第 k 小,各自需要保留哪些信息?

适合谁
能读 Python 列表和循环,想练习算法状态与反例的读者。
读完能做什么
能区分算法保存的状态、最终保证的结果和并未完成的工作。
想运行源码时,先准备这些
  • 会跟踪短字符串、数组下标和小型有向图。
  • 从三到六个元素手算,再运行标准库示例;先写预期,最后看输出。
  1. KMP匹配失败时,为什么不是把已匹配长度直接清零?

    先看字符匹配怎样沿前后缀关系回退,保留重叠匹配所需的信息。

  2. 边的费用只有0和1,为什么第一次到达一个点还不能定案?

    再看权重为 0 或 1 的图,区分首次发现与后续更短路径。

  3. 找到第3小的数,为什么左边两个数仍然没有排好?

    最后检查选择算法只保证第 k 小与分区关系,为什么不能把两侧当成已排序。

读完后,用一个小任务检查自己

挑一个算法,逐步记录它保存的状态,再用独立的朴素方法检查最终答案。

留下一份这样的记录

交一个满足前提的例子和一个错误简化的反例,标出首次失去必要信息的位置,并写清算法没有承诺的额外结果。