-
Java URI 保留原始查询时应读取 getRawQuery,而不是 getQuery。本文用最小示例说明百分号编码、加号、重复参数、null 与空查询的区别,并给出转发、签名和缓存键场景的选择边界。
-
Java HttpClient 通过 HttpClient.Builder.followRedirects 设置重定向策略。本文比较 NEVER、NORMAL 和 ALWAYS 的行为,说明默认值、HTTPS 到 HTTP 的边界、POST 方法变化,以及如何查看 previousResponse。
-
Java HttpClient 的响应头从 HttpResponse.headers() 取得,再按需求使用 firstValue、allValues 或 map。本文用一段最小示例说明单值、多值、大小写和缺失响应头的处理边界。
-
解释 Java URI.resolve 对普通相对路径、根相对路径和网络路径引用的处理差异,并给出解析后检查 scheme、host 与 path 的安全封装。
-
Java 控制台字符集不能只看 Charset.defaultCharset()。本文区分 Console.charset、stdin.encoding、stdout.encoding 和 System.console() 为空的边界,给出终端、IDE 与重定向环境的处理方案。
-
Java ZonedDateTime 遇到夏令时回拨时,同一个本地时间可能对应两个有效偏移。本文用 ZoneRules.getValidOffsets() 先判断重复,再用 withEarlierOffsetAtOverlap() 或 withLaterOffsetAtOverlap() 明确选择,最后将结果转换为 Instant 保存,避免账单、预约和审计记录出现歧义。
-
Java Optional 链式调用里,map 适合把当前值转换成普通值,flatMap 适合连接本身就返回 Optional 的查询。本文从返回类型入手,说明怎样避免 Optional>、怎样让空值传播保持清晰,以及在哪个边界收敛成默认值或异常。
-
Java Class-File API 可以直接读取 .class 文件模型,不必通过 Class.forName 加载目标类。本文从 ClassModel、MethodModel 到 CodeModel,演示如何按方法名枚举方法指令,并说明无方法体、惰性解析、版本兼容和 CodeElement 类型筛选边界。
-
用 Java HttpRequest.BodyPublishers.ofInputStream 延迟打开请求体,处理重复发送时重新提供 InputStream,以及文件流和 HttpClient 生命周期边界。
-
介绍 Java 21 及以上如何在 switch 中使用 record pattern 直接绑定 record 分量,并处理嵌套结构、when 守卫、null 与穷尽性。
-
Java ZoneOffsetTransition 用来描述时区偏移发生不连续变化的瞬间。本文从 ZoneRules.getTransition 出发,说明怎样区分夏令时前进造成的不存在时间与回拨造成的重复时间,并给出业务解析时的判断边界。
-
Java 24 及更高版本可以用 Stream.gather 和 Gatherers.windowFixed 把连续元素聚成窗口,再映射成业务摘要。本文说明固定窗口、滑动窗口、尾窗口、不可修改结果和大窗口内存边界。
-
Java Pattern.asMatchPredicate 可以把已编译正则转换为 Predicate,直接交给 Stream.filter 做整条字符串筛选。本文对比 asPredicate 的子串查找语义,给出复用 Pattern、处理空输入和选择并行边界的紧凑写法。
-
Java ResourceBundle 按 Locale 查找资源时,应显式传入目标 Locale,区分请求候选链、JVM 默认 Locale 和基础资源,并用 getLocale 判断实际命中的 bundle。文章还说明如何在需要时禁止默认 Locale 参与回退。
-
Java virtual threads 可以让每个请求保持简单的阻塞式写法,但 newVirtualThreadPerTaskExecutor 不会自动限制外部服务的并发量。本文用 Semaphore 包住真正的外部调用,说明许可归还、中断处理、超时和连接池边界。