qinghuan

最近新增 / 2026.10.26 / 9 篇

先说清规则,再比较答案

这是 10 月 26 日第二轮新增。相同的值、预测或输入,换一套处理规则就可能得到不同答案。九篇文章分别从 Java API、模型评估与基础算法出发,先写预测,再改动一个条件,最后下载源码核对;上一轮文章和总包保留在往期专题中。

10 月 30 日资料补充:缓存、Java 执行、JDBC 与训练验收的 23 篇讲义。按问题选读,附官方来源、示例与待完成的验收练习。

先看本文的问题是否与你有关,再读正文、运行示例、记录自己的结果。阅读分钟数不包含环境准备和实验时间;示例验证范围在运行说明及下载包内标明。

后端:同一个值,交给了哪一套规则?

认识 Java Map、整数与字符串;运行示例需要完整 JDK 17 或更新版本。

这一组留下什么:把 null、加号与最小整数放进实际 API,逐项核对调用条件、结果和例外。

先连着练这 3 篇
  1. merge 回调返回 null,为什么整条记录消失了?

    HashMap 允许保存 null,但 merge 给 null 安排了不同角色。用六组真实输出分清“没有旧值”“传入空值”和“返回删除信号”。

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

    URLDecoder 的名字容易让人误以为它能通吃 URL。把表单值和 URI 路径放进同一个实验,观察同一串字符怎样产生不同含义。

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

    Math.abs 不是“所有 int 都变成非负”的保证。用最小整数、负哈希和三种桶数量,找出偶发下标错误背后的边界。

这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。

阅读约 10 分钟 · 另留动手时间

可以先在页面里动手

merge 回调返回 null,为什么整条记录消失了?

HashMap 允许保存 null,但 merge 给 null 安排了不同角色。用六组真实输出分清“没有旧值”“传入空值”和“返回删除信号”。

适合排查:merge 回调返回 null,为什么整条记录消失了?

开始前:知道 Map 的 put、get、containsKey 分别做什么。

  • Java 17
  • HashMap
  • Map.merge
  • null
  • 回调
  • 实际运行
开始阅读与练习 ↗

阅读约 11 分钟 · 另留动手时间

可以先在页面里动手

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

URLDecoder 的名字容易让人误以为它能通吃 URL。把表单值和 URI 路径放进同一个实验,观察同一串字符怎样产生不同含义。

适合排查:文件名里的 + 号,为什么解码后变成了空格?

开始前:能区分 URL 中的路径与问号后的查询部分。

  • Java 17
  • URI
  • URLEncoder
  • URLDecoder
  • 百分号编码
  • 实际运行
开始阅读与练习 ↗

阅读约 10 分钟 · 另留动手时间

可以先在页面里动手

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

Math.abs 不是“所有 int 都变成非负”的保证。用最小整数、负哈希和三种桶数量,找出偶发下标错误背后的边界。

适合排查:取了绝对值,分桶下标为什么还会是负数?

开始前:知道 int 有固定的可表示范围。

  • Java 17
  • Math.abs
  • Integer.MIN_VALUE
  • floorMod
  • 分桶
  • 实际运行
开始阅读与练习 ↗

AI:换了计算口径,结论还一样吗?

理解概率、平均数与对数;文内先修链接可补齐交叉熵和排序指标。

这一组留下什么:明确融合空间、损失分母和并列排序规则,再比较同一组数据的结果。

先连着练这 3 篇
  1. 三个模型都没换,只把平均放到另一处,为什么答案反了?

    同一组0.8、0.8、0.01,平均概率选类别1,平均logit却选类别0;算清两种融合规则在做什么。

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

    带权交叉熵的逐样本项可以完全一致,mean的分母却不同:类别索引除以命中权重和,概率目标除以样本数。

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

    A与B分数一样,相关度却是3和1。只看第一条时,任意破同分会改变评价;均匀平均并列排列可得到稳定口径。

这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。

阅读约 13 分钟 · 另留动手时间

可以先在页面里动手

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

带权交叉熵的逐样本项可以完全一致,mean的分母却不同:类别索引除以命中权重和,概率目标除以样本数。

适合排查:标签还是那两个类别,换成one-hot后平均损失为什么翻倍?

开始前:知道正确类别的概率越低,负对数损失越大

  • 交叉熵
  • 类别权重
  • one-hot
  • 损失归约
开始阅读与练习 ↗

阅读约 13 分钟 · 另留动手时间

可以先在页面里动手

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

A与B分数一样,相关度却是3和1。只看第一条时,任意破同分会改变评价;均匀平均并列排列可得到稳定口径。

适合排查:检索给了同分,为什么调换两行就把NDCG从1变成了三分之一?

开始前:知道模型排序分数不等于人工相关度

  • 检索评估
  • NDCG
  • 并列分数
  • 排序指标
开始阅读与练习 ↗

计算机:保留了哪些信息,才能继续下一步?

会读 Python 列表与循环;用纸笔先跟踪短字符串、小图和短数组。

这一组留下什么:找到匹配、最短路与选择算法各自需要保留的状态,并用独立方法核对结果。

先连着练这 3 篇
  1. KMP匹配失败时,为什么不是把已匹配长度直接清零?

    从同一个文本字符继续比较,再用重叠匹配看清:前缀表保存的是还能沿用的后缀,不是一张跳过字符的许可表。

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

    走两条免费边可以胜过一条收费边:用双端队列观察距离怎样被改小,并识别队列里已经过期的旧记录。

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

    Quickselect只缩小目标名次所在的一侧;用一次分区看清选出某个名次与完成整个排序的区别。

这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。

阅读约 20 分钟 · 另留动手时间

可以先在页面里动手

KMP匹配失败时,为什么不是把已匹配长度直接清零?

从同一个文本字符继续比较,再用重叠匹配看清:前缀表保存的是还能沿用的后缀,不是一张跳过字符的许可表。

适合排查:KMP匹配失败时,为什么不是把已匹配长度直接清零?

开始前:能按从0开始的下标读取字符串

  • 字符串
  • KMP
  • 前缀表
  • 重叠匹配
  • 可运行实验
开始阅读与练习 ↗

阅读约 20 分钟 · 另留动手时间

可以先在页面里动手

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

走两条免费边可以胜过一条收费边:用双端队列观察距离怎样被改小,并识别队列里已经过期的旧记录。

适合排查:边的费用只有0和1,为什么第一次到达一个点还不能定案?

开始前:知道有向边的起点、终点和费用

  • 图
  • 0-1 BFS
  • 最短路
  • 双端队列
  • 松弛
  • 可运行实验
开始阅读与练习 ↗

阅读约 19 分钟 · 另留动手时间

可以先在页面里动手

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

Quickselect只缩小目标名次所在的一侧;用一次分区看清选出某个名次与完成整个排序的区别。

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

开始前:能区分第3小与从0开始的下标2

  • Quickselect
  • 分区
  • 顺序统计量
  • 算法复杂度
  • 可运行实验
开始阅读与练习 ↗