-
Java 接口同时收到日期、带 T 的时间和带空格的时间时,可以用 DateTimeFormatterBuilder 组织可选秒数,再用多个候选格式器处理真正不同的分隔符。本文给出严格解析、parseBest 和落地边界。
-
Java Matcher 切换 Pattern 后不会自动回到输入开头。本文用紧凑示例说明 usePattern 如何保留当前位置、为什么旧分组失效,以及它与 reset、region、find(int) 的区别。
-
BigDecimal 的 equals 同时比较数值和 scale,所以 1.0 与 1.00 可能被判定为不同对象;compareTo 只比较数值。本文用金额判断、集合键和输入构造说明两者的边界。
-
Apache Commons Collections 的 MultiValuedMap 用一个键关联一个 Collection,可按需求选择列表型或集合型实现。本文说明 put、putAll、get、asMap 的用法,以及从旧 MultiValueMap 迁移时的注意点。
-
Path.normalize 只按路径名称规则消除 . 和 ..,不会访问文件系统,也就不会检查符号链接。本文用 Java NIO 的 API 对比说明语义差异,并给出需要真实目标时的处理方式。
-
MethodHandle 的 invokeExact 失败,通常不是目标方法找错,而是调用点签名没有与句柄的 MethodType 完全一致。本文用 Java 代码说明如何定位类型差异,并选择 invoke 或 asType 完成适配。
-
Java record 的字段是 final,但可变 List 仍可能通过共享引用被外部修改。本文用 compact constructor 和 List.copyOf 处理集合防御性复制,并说明它不等于深拷贝。
-
用订单标签小项目演示 Stream mapMulti 如何发出零到少量结果,提供完整 Java 示例和预期输出,并比较 flatMap 的子流接口、Consumer 作用域与性能结论边界。
-
Java 虚拟线程出现 BLOCKED 或吞吐下降时,先区分普通等待、载体线程固定和下游资源耗尽,再按 JDK 21–23 与 JDK 24+ 的差异使用线程转储、JFR、Semaphore 和资源边界控制。
-
JDK 26 的 JEP 530 第四次预览把基本类型带入更多模式匹配场景。本文从旧写法的分支基线出发,解释 primitive pattern、instanceof 安全转换、switch 的 case 与 when,以及 Object、包装类型和 null 的装箱边界。
-
ForkJoinPool 中混入队列、锁或外部 I/O 等阻塞操作时,直接等待可能拖住其他任务。本文用 ManagedBlocker 封装阻塞点,说明 managedBlock 的正确调用、中断处理、池参数边界,以及何时应换用独立 I/O 线程池。
-
从大文件上传场景出发,讲清 Java HttpRequest BodyPublisher 的 ofFile、ofInputStream、fromPublisher 与 concat 用法,以及长度、重试、背压和异步边界。
-
Java Files.find 通过 maxDepth 限制目录层级,并把 BasicFileAttributes 交给匹配器筛选普通文件、大小和后缀。本文还说明惰性 Stream 的关闭方式,以及 IOException 与 UncheckedIOException 的处理边界。
-
用 JDK 22 Linker API 调用 C 标准库 strlen,讲清符号查找、函数签名映射、Arena 生命周期、本地访问授权与生产边界。
-
JDK 26 迁移时要区分 x86_32 与 x86_64。本文从 JEP 503 的版本边界出发,检查构建矩阵、native 依赖和运行探针,给出升级、保留旧运行时或迁移 64 位的判断方法。