阅读约 10 分钟 · 另留动手时间
可以先在页面里动手
merge 回调返回 null,为什么整条记录消失了?
HashMap 允许保存 null,但 merge 给 null 安排了不同角色。用六组真实输出分清“没有旧值”“传入空值”和“返回删除信号”。
适合排查:merge 回调返回 null,为什么整条记录消失了?
开始前:知道 Map 的 put、get、containsKey 分别做什么。
- Java 17
- HashMap
- Map.merge
- null
- 回调
- 实际运行
最近新增 / 2026.10.26 / 9 篇
这是 10 月 26 日第二轮新增。相同的值、预测或输入,换一套处理规则就可能得到不同答案。九篇文章分别从 Java API、模型评估与基础算法出发,先写预测,再改动一个条件,最后下载源码核对;上一轮文章和总包保留在往期专题中。
先看本文的问题是否与你有关,再读正文、运行示例、记录自己的结果。阅读分钟数不包含环境准备和实验时间;示例验证范围在运行说明及下载包内标明。
认识 Java Map、整数与字符串;运行示例需要完整 JDK 17 或更新版本。
这一组留下什么:把 null、加号与最小整数放进实际 API,逐项核对调用条件、结果和例外。
HashMap 允许保存 null,但 merge 给 null 安排了不同角色。用六组真实输出分清“没有旧值”“传入空值”和“返回删除信号”。
URLDecoder 的名字容易让人误以为它能通吃 URL。把表单值和 URI 路径放进同一个实验,观察同一串字符怎样产生不同含义。
Math.abs 不是“所有 int 都变成非负”的保证。用最小整数、负哈希和三种桶数量,找出偶发下标错误背后的边界。
这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。
阅读约 10 分钟 · 另留动手时间
可以先在页面里动手
HashMap 允许保存 null,但 merge 给 null 安排了不同角色。用六组真实输出分清“没有旧值”“传入空值”和“返回删除信号”。
适合排查:merge 回调返回 null,为什么整条记录消失了?
开始前:知道 Map 的 put、get、containsKey 分别做什么。
阅读约 11 分钟 · 另留动手时间
可以先在页面里动手
URLDecoder 的名字容易让人误以为它能通吃 URL。把表单值和 URI 路径放进同一个实验,观察同一串字符怎样产生不同含义。
适合排查:文件名里的 + 号,为什么解码后变成了空格?
开始前:能区分 URL 中的路径与问号后的查询部分。
阅读约 10 分钟 · 另留动手时间
可以先在页面里动手
Math.abs 不是“所有 int 都变成非负”的保证。用最小整数、负哈希和三种桶数量,找出偶发下标错误背后的边界。
适合排查:取了绝对值,分桶下标为什么还会是负数?
开始前:知道 int 有固定的可表示范围。
理解概率、平均数与对数;文内先修链接可补齐交叉熵和排序指标。
这一组留下什么:明确融合空间、损失分母和并列排序规则,再比较同一组数据的结果。
同一组0.8、0.8、0.01,平均概率选类别1,平均logit却选类别0;算清两种融合规则在做什么。
带权交叉熵的逐样本项可以完全一致,mean的分母却不同:类别索引除以命中权重和,概率目标除以样本数。
A与B分数一样,相关度却是3和1。只看第一条时,任意破同分会改变评价;均匀平均并列排列可得到稳定口径。
这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。
阅读约 12 分钟 · 另留动手时间
可以先在页面里动手
同一组0.8、0.8、0.01,平均概率选类别1,平均logit却选类别0;算清两种融合规则在做什么。
适合排查:三个模型都没换,只把平均放到另一处,为什么答案反了?
开始前:能算三个数的平均值
阅读约 13 分钟 · 另留动手时间
可以先在页面里动手
带权交叉熵的逐样本项可以完全一致,mean的分母却不同:类别索引除以命中权重和,概率目标除以样本数。
适合排查:标签还是那两个类别,换成one-hot后平均损失为什么翻倍?
开始前:知道正确类别的概率越低,负对数损失越大
阅读约 13 分钟 · 另留动手时间
可以先在页面里动手
A与B分数一样,相关度却是3和1。只看第一条时,任意破同分会改变评价;均匀平均并列排列可得到稳定口径。
适合排查:检索给了同分,为什么调换两行就把NDCG从1变成了三分之一?
开始前:知道模型排序分数不等于人工相关度
会读 Python 列表与循环;用纸笔先跟踪短字符串、小图和短数组。
这一组留下什么:找到匹配、最短路与选择算法各自需要保留的状态,并用独立方法核对结果。
从同一个文本字符继续比较,再用重叠匹配看清:前缀表保存的是还能沿用的后缀,不是一张跳过字符的许可表。
走两条免费边可以胜过一条收费边:用双端队列观察距离怎样被改小,并识别队列里已经过期的旧记录。
Quickselect只缩小目标名次所在的一侧;用一次分区看清选出某个名次与完成整个排序的区别。
这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。
阅读约 20 分钟 · 另留动手时间
可以先在页面里动手
从同一个文本字符继续比较,再用重叠匹配看清:前缀表保存的是还能沿用的后缀,不是一张跳过字符的许可表。
适合排查:KMP匹配失败时,为什么不是把已匹配长度直接清零?
开始前:能按从0开始的下标读取字符串
阅读约 20 分钟 · 另留动手时间
可以先在页面里动手
走两条免费边可以胜过一条收费边:用双端队列观察距离怎样被改小,并识别队列里已经过期的旧记录。
适合排查:边的费用只有0和1,为什么第一次到达一个点还不能定案?
开始前:知道有向边的起点、终点和费用
阅读约 19 分钟 · 另留动手时间
可以先在页面里动手
Quickselect只缩小目标名次所在的一侧;用一次分区看清选出某个名次与完成整个排序的区别。
适合排查:找到第3小的数,为什么左边两个数仍然没有排好?
开始前:能区分第3小与从0开始的下标2