-
Java Virtual Threads 适合承载大量阻塞 I/O 任务,但不应把连接、客户端和可变缓存都塞进 ThreadLocal。本文按请求元数据、只读上下文、任务资源和外部并发四条边界,说明显式参数、ScopedValue、连接池与 Semaphore 的选择方法。
-
Java Pattern.asMatchPredicate 可以把完整字符串匹配封装成 Predicate,再交给 Stream.anyMatch 短路查找。本文用订单号校验场景对比 asMatchPredicate 与 asPredicate,说明 null、空流和正则边界。
-
分代 ZGC 是否适合,不能只看堆大小。本文从暂停目标、存活集、分配速率、并发回收余量和机器内存出发,给出 Xmx、SoftMaxHeapSize 与收集器选择的判断方法。
-
Java 25 的 StructuredTaskScope 可以在 open 时通过 withTimeout 配置整个作用域的统一超时。本文用一个双子任务示例说明超时起点、TimeoutException、取消中断和 close 等待边界,并补充旧版 joinUntil 的差异。
-
用一个 Java 多语言小项目说明 ResourceBundle.Control 如何控制候选 Locale、默认 Locale 回退和 root 资源包,避免缺少翻译时落到不期望的语言。
-
围绕 JDK 25/26 预览 API,讲清 Java StructuredTaskScope 如何组织子任务、在失败时取消未完成任务,并通过 join 与 Subtask.get 汇总结果,同时比较它与 CompletableFuture、ExecutorService 的适用边界。
-
Java Map.computeIfAbsent 的映射函数返回 null 时不会记录键值映射。本文按触发条件、返回结果、异常边界和缓存策略拆开说明,帮助你区分未命中、空值与计算失败。
-
使用 Java Time Chronology 处理非 ISO 日历时,把 ISO 日期留在存储和计算层,在界面层通过 DateTimeFormatter.withChronology 格式化,并正确区分 Locale、Era、y 与 u 的边界。
-
Java try-with-resources 中,主体代码和 close() 同时抛异常时,主体异常继续向外传播,关闭异常会被保存到 suppressed 列表。本文用一个可复用的排查场景说明关闭顺序、异常主次与 getSuppressed() 的读取方式。
-
Java 用 LinkedHashMap 实现轻量 LRU 缓存时,应把 accessOrder 设为 true,并在 removeEldestEntry 中用 size 大于容量上限触发淘汰。本文说明访问顺序、容量边界、常见操作和线程安全注意事项。
-
JDK 26 的预览 API PEMEncoder 可以通过 withEncryption 加密并输出私钥类对象。本文说明不可变实例、支持类型、密码数组和预览编译参数的实际边界。
-
List 调用 remove(1) 时,Java 会优先匹配 remove(int),删除下标为 1 的元素;如果要按值删除整数,应显式使用 Integer.valueOf(1)。本文再补充 removeIf、不可修改列表和 subList 的边界。
-
JDK 26 为 java.net.http.HttpClient 提供 HTTP/3 能力,但迁移重点不是改一行协议常量,而是核对 HTTPS、代理、TLS、服务端能力与降级策略。本文给出可执行的评估矩阵和灰度清单。
-
Spring 默认 proxy 模式只拦截从代理进入的外部调用,同一个 Bean 内部的 this 自调用会绕过 @Transactional。本文用调用关系图和代码说明如何拆分服务、显式走代理、使用 TransactionTemplate,以及何时考虑 AspectJ。
-
Java PrintService 可以列出打印服务支持的 DocFlavor,也可以判断单个文档格式是否可用。本文进一步说明如何检查文档格式与纸张等打印属性的组合约束。