-
解释 Java Map.computeIfAbsent 递归更新同一个键为何失败,区分 HashMap 与 ConcurrentHashMap 的异常边界,并用递归返回值和外部缓存改写回调内更新。
-
ServiceLoader找不到provider时,先核对META-INF/services文件或module-info.java声明,再检查类加载器、可见性和无参构造器。本文给出一套可复用的配置与排查方法。
-
MethodHandle 没有独立的类型配置项,类型由 MethodType 和查找方式决定。本文从句柄创建、接收者位置、invokeExact 严格匹配与 asType 适配四层排查常见 WrongMethodTypeException。
-
Java NIO 中 ByteBuffer.flip() 会把当前 position 变成 limit,再把 position 归零,适合把写入态切换为读取态。本文用状态表、代码和边界示意说明 flip 怎么配置,以及如何排查读不到数据、下溢和多轮读写问题。
-
Files.walk 返回的 Stream
会持有遍历目录的资源,正确做法是用 try-with-resources 包住完整操作,并区分创建、懒遍历和关闭阶段的异常。
-
Java Optional 的 orElse 会先求值备用参数,orElseGet 只在空值时调用 Supplier。本文用调用计数、代码对照和回归检查说明如何定位并修复不必要的备用计算。
-
Stream.toList() 从 Java 16 起返回不可修改的 List。本文说明它与 Collectors.toList()、toUnmodifiableList() 和 toCollection(ArrayList::new) 的差异,并给出 UnsupportedOperationException、Java 版本和 null 边界的排查方法。
-
CompletableFuture 异常处理要先定位阶段,再按目标选择 exceptionally、handle、whenComplete 或 exceptionallyCompose,并检查异常包装与线程池。
-
用 Java ScopedValue 传递请求上下文时,绑定位置、线程边界和版本 API 是最容易出错的地方。本文给出配置示例与排查清单。
-
Java 21 虚拟线程出现 pinning 时,先用 JFR 或 jdk.tracePinnedThreads 定位持锁阻塞,再把频繁且可能长时间等待的 I/O 移出 synchronized;短时内存临界区不必盲目改写。
-
Java 21 模式 switch 遇到 null 时,按 JDK 编译版本、case null 规则、模式支配和输入矩阵逐层排查,避免把 Object 模式或 default 误当成空值兜底。
-
Java sealed class 或 sealed interface 的分支覆盖率异常,先区分 permits 类型边界与 if/switch 真实分支,再检查 JaCoCo prepare-agent、Surefire argLine、编译版本和测试路径。
-
Java Record 的 final 组件不等于集合不可变。本文用 ArrayList、unmodifiableList 和 List.copyOf 对比可变、只读视图与防御性拷贝,帮助排查 Record 中集合被外部修改的问题。
-
Java 模块系统中,exports 解决模块间公开类型的普通访问,opens 解决运行时深反射。本文用 module-info.java 和命令行参数对比两者边界,并说明如何用 to 限定目标模块。
-
讲清 Java HttpClient WebSocket 的 Listener 回调、request(1) 背压、文本分片与 sendClose、abort 关闭顺序,并给出可落地的异步监听器写法。