阅读约 18 分钟 · 另留动手时间
可以先在页面里动手
一个分支早就失败,allOf 为什么还没有结束?
手动推进三个真实 CompletableFuture,区分等待全部、任意完成、取消聚合,以及保留每项失败。
适合排查:一个分支早就失败,allOf 为什么还没有结束?
开始前:能阅读 Java 方法调用与 try/catch
- Java 17
- CompletableFuture
- allOf
- 异常传播
- 可运行实验
往期新增 / 2026.10.23 / 24 篇
先猜一次结果,再操作页面实验,最后下载同一份源码复验。这一轮把后端行为、AI 目标、工具输入和基础算法放进小而完整的例子,附阅读准备、原始资料、实测环境与独立练习。
先看本文的问题是否与你有关,再读正文、运行示例、记录自己的结果。阅读分钟数不包含环境准备和实验时间;示例验证范围在运行说明及下载包内标明。
先从字节与输入读取开始;并发两篇另需基本线程概念。运行 Java 示例需要完整 JDK 17 或更新版本。
这一组留下什么:把每次调用影响的内容、位置和状态分别记录,用实际 Java 输出核对。
先分清内容与视图:只读限制谁来写,复制又保留了什么。
再看相同字节的不同解释:符号、宽度与数值需要分别约定。
把这两个区别带到输入流:记录原始位置、待重读内容与结束状态。
最后检查一次匹配到底覆盖哪里,以及重置后哪些设置还保留。
这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。
阅读约 18 分钟 · 另留动手时间
可以先在页面里动手
手动推进三个真实 CompletableFuture,区分等待全部、任意完成、取消聚合,以及保留每项失败。
适合排查:一个分支早就失败,allOf 为什么还没有结束?
开始前:能阅读 Java 方法调用与 try/catch
阅读约 18 分钟 · 另留动手时间
可以先在页面里动手
对照共享视图、独立游标、slice 范围与真正复制出来的快照,查清“只读”限制的是哪条写入路径。
适合排查:ByteBuffer 已经设为只读,里面的字节为什么还会变?
开始前:认识 byte 数组和下标
阅读约 21 分钟 · 另留动手时间
可以先在页面里动手
让真实写线程在两次读取之间经过,观察 StampedLock 的验证位置、局部值与读锁回退。
适合排查:乐观读已经验证成功,为什么接着读还是会拼出错配数据?
开始前:能阅读 Java 线程、try/finally 与基础锁调用
阅读约 22 分钟 · 另留动手时间
可以先在页面里动手
亲手触发 CyclicBarrier 的整轮失败,再区分正常复用、reset 后的新一轮,以及汇总动作失败。
适合排查:只有一个线程等超时,为什么其他线程也一起失败?
开始前:认识线程和带超时的等待
阅读约 20 分钟 · 另留动手时间
可以先在页面里动手
对照 127、128、255 与负数,分清 BigInteger 的有符号表示、无符号解释和协议要求的固定字节宽度。
适合排查:同样一个正整数,转成字节为什么会多出开头的 00?
开始前:认识十六进制和 byte 数组
阅读约 22 分钟 · 另留动手时间
可以先在页面里动手
在自建目录与 JAR 中分别放入根目录、包内的同名资源,核对 Class 与 ClassLoader 从哪里开始查找。
适合排查:资源路径前多一个斜杠,为什么换个 API 就读不到配置?
开始前:认识 Java 包名与完整类名
阅读约 23 分钟 · 另留动手时间
可以先在页面里动手
固定 XabcY 中的 abc,用四种边界组合核对锚点、前后视与匹配范围,再检查 reset 和 find(start) 会重置什么。
适合排查:正则只检查中间一段,为什么锚点和前后文仍会改变结果?
开始前:知道字符串下标从零开始,区间可包含起点而不包含终点
阅读约 23 分钟 · 另留动手时间
可以先在页面里动手
用内存字节流观察回推缓冲,分清单字节与数组的顺序、容量上限,以及把 -1 当字节塞回去的后果。
适合排查:把字节放回去以后,为什么原始流的位置没有倒退?
开始前:知道 InputStream.read 返回 int,普通字节与结束标记需要区分
训练实验用到概率、平均值、对数和导数;工具输入实验只需会读 Python 和 JSON。各篇附对应基础入口。
这一组留下什么:用有限模型核对估计与梯度,再用实际校验库检查工具参数;分别说明数学、软件验证与真实运行的边界。
做工具接口可以从这里开始:结构、格式与业务范围,逐层核对。
再设计互斥输入方式:先数成功分支,再决定是否满足契约。
最后复用已有契约:弄清额外字段限制在哪一层生效。训练方向可直接从下方标签平滑与概率分歧开始。
这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。
阅读约 12 分钟 · 另留动手时间
可以先在页面里动手
用两个类别算清目标概率、最优分数差与梯度方向,分清两种同名的平滑约定。
适合排查:已经猜对了,标签平滑为什么还会把正确类分数往下拉?
开始前:知道概率总和为 1
阅读约 13 分钟 · 另留动手时间
可以先在页面里动手
枚举四张估值表和十六组交叉评价,亲手看到最大值偏差、Double Q 的作用与低估边界。
适合排查:每个动作都估得不偏,挑最高分后为什么反而高估了?
开始前:知道平均值和最大值的区别
阅读约 14 分钟 · 另留动手时间
可以先在页面里动手
从两次抛硬币的完整枚举,分清常数基线、同批均值和留一法;停止梯度也不能代替统计独立。
适合排查:奖励减去同批平均值,为什么学习信号会少一截?
开始前:知道概率期望是按概率加权的平均
阅读约 14 分钟 · 另留动手时间
可以先在页面里动手
相同候选、相同正例标签,先求和还是先取对数,会改变多正例训练的目标和梯度。
适合排查:两条都是正确资料,为什么一种损失还会压低其中一条?
开始前:知道 softmax 将候选分数归一化
阅读约 19 分钟 · 另留动手时间
可以先在页面里动手
用真实 jsonschema 校验器比较默认配置与格式检查,再把格式名拼错、字段类型和业务日期范围分别验清楚。
适合排查:写了日期格式,为什么 2 月 31 日仍通过工具校验?
开始前:知道 JSON 对象由字段和值组成
阅读约 20 分钟 · 另留动手时间
可以先在页面里动手
数清每个分支是否成立,再区分“恰好一个分支”与“恰好填一栏”,用明确模式修正输入合同。
适合排查:两种工具参数都填对了,为什么 oneOf 反而拒绝?
开始前:知道 properties 与 required 的作用
阅读约 23 分钟 · 另留动手时间
可以先在页面里动手
比较先平均概率再算熵,与先算成员熵再平均;用加权 KL 和高精度联合概率表核对差值。
适合排查:平均概率都一样,为什么一组模型比另一组更有分歧?
开始前:知道概率之和为 1,能读加权平均
阅读约 22 分钟 · 另留动手时间
可以先在页面里动手
用真实 jsonschema 比较六份组合合同,找出关闭额外字段的位置,以及 allOf 为什么不会替你合并声明。
适合排查:工具参数复用了基础规则,新增字段为什么总被拒绝?
开始前:知道 properties、required 与 additionalProperties 的作用
能读 Python 列表、循环与函数;先手算小例子,再执行独立验证。
这一组留下什么:分清数组值、对象身份、可行边界和舍入误差,用另一种算法核对结果。
先画七个格子,亲手还原两端标记如何影响中间各项。
把手算换成真假判断:每一步都解释为什么答案还在边界之间。
再走一遍链表:相同数值、相同对象、首次相遇与入口分别记录。
最后保留一次独立核验:选出了候选,并不代表答案条件已经满足。
这是一条建议顺序;遇到当前项目的问题,也可以直接选择下面对应的文章。每篇的前置阅读另有说明。
阅读约 28 分钟 · 另留动手时间
可以先在页面里动手
用会过期的下标保存候选,观察相等值如何替换,以及双重循环为何仍可只做线性总工作。
适合排查:窗口里的最小值走了,为什么不能只记住一个最小数?
开始前:会按下标读取列表,并能读懂 while 循环。
阅读约 32 分钟 · 另留动手时间
可以先在页面里动手
用五个槽位观察碰撞、绕回和删除标记,特别检查更新旧键时为什么不能见到空位就写。
适合排查:哈希表删掉一个键,为什么后面的键也会突然查不到?
开始前:会使用字典保存键值对,理解同一个键再次赋值是更新。
阅读约 26 分钟 · 另留动手时间
可以先在页面里动手
把候选、抵消余额和真实出现次数分开:一遍挑出候选,再用第二遍判断它有没有严格超过半数。
适合排查:投票算法最后留下一个名字,就代表它超过半数了吗?
开始前:会遍历列表、比较两个值是否相等,并统计出现次数。
阅读约 30 分钟 · 另留动手时间
可以先在页面里动手
预先记录向上 1、2、4、8 层的位置,把查询拆成几次跳跃,同时守住根节点和缺失下标的边界。
适合排查:往上找第五级上级,为什么可以只跳两次?
开始前:理解一棵有根树中,每个非根节点只有一个父节点。
阅读约 25 分钟 · 另留动手时间
可以先在页面里动手
把每天的数改写成相邻变化:在开始处加上增量,在结束处撤销,再从左到右还原。用空区间、末端和重叠更新检查下标。
适合排查:给第3到第7天都加5,为什么只改两个格子就够了?
开始前:会用列表下标、循环和整数加减;知道第1天对应下标0。
阅读约 30 分钟 · 另留动手时间
可以先在页面里动手
用一份补偿记录找回部分丢失的小量,再故意让补偿记录也舍入。比较朴素累加、Kahan、Neumaier 与精确输入参考。
适合排查:先加一个大数,再加1:那个1为什么消失了,又怎样把它找回来?
开始前:会读循环、加减和列表;知道 float 只能保存有限精度。
阅读约 29 分钟 · 另留动手时间
可以先在页面里动手
沿 next 一直走,有时会到头,有时会绕圈。用快慢指针检查节点身份,再把首次相遇、环入口和环长分开找清楚。
适合排查:链表两个节点都写着7,能说明它们在同一位置吗?
开始前:认识对象、变量和 while 循环;能顺着 next 找到下一个节点。
阅读约 27 分钟 · 另留动手时间
可以先在页面里动手
机器耗时没有排成一张答案表,也能二分:先判断某一时刻够不够,再始终夹住最后一个不够与第一个够用的边界。
适合排查:三台机器同时生产,最早第几秒够七件?
开始前:会写循环与整数除法;知道“至少7件”包括7件、8件和更多。