-
Java HttpClient 通过 HttpClient.Builder.followRedirects 设置重定向策略。本文比较 NEVER、NORMAL 和 ALWAYS 的行为,说明默认值、HTTPS 到 HTTP 的边界、POST 方法变化,以及如何查看 previousResponse。
-
Java HttpClient 的响应头从 HttpResponse.headers() 取得,再按需求使用 firstValue、allValues 或 map。本文用一段最小示例说明单值、多值、大小写和缺失响应头的处理边界。
-
用 DateTimeFormatterBuilder 分别构造多种日期格式,按具体格式优先严格解析,并处理 LocalDate、LocalDateTime 与非法输入边界。
-
用 StringJoiner.setEmptyValue 设置未添加元素时的默认输出,并区分真正空状态、空字符串元素和 null 元素的结果。
-
DecimalFormat 默认解析结果不一定是 BigDecimal。本文给出 setParseBigDecimal(true) 的完整写法,并说明它与 ParsePosition、格式化小数位、Locale 和线程安全的边界。
-
Java Collectors.filtering 适合放在 groupingBy 的下游,按条件过滤每个分组的元素,同时保留没有匹配值的分组键。本文用原创示例说明它与先调用 Stream.filter 的差异,以及如何选择下游 Collector。
-
通过共享计数器示例说明 ReentrantLock 公平锁的创建、成功获取后的释放,以及无参和限时 tryLock 的差别,并解释线程调度与吞吐取舍。
-
Java AtomicStampedReference 把对象引用和 int stamp 原子地绑定在一起。本文用 A→B→A 的场景说明只比较引用为什么会漏掉 ABA,再用 get 与 compareAndSet 同时校验引用身份和 stamp,给出更新版本号及使用边界。
-
Java Arrays.mismatch 会返回两个数组的首个差异位置;完全相同返回 -1,一个数组只是另一个数组的前缀时返回较短数组长度。本文用整数组、范围重载和对象数组示例说明如何读取这个结果。
-
用 Java HttpRequest.BodyPublishers.ofInputStream 延迟打开请求体,处理重复发送时重新提供 InputStream,以及文件流和 HttpClient 生命周期边界。
-
Java 控制台字符集不能只看 Charset.defaultCharset()。本文区分 Console.charset、stdin.encoding、stdout.encoding 和 System.console() 为空的边界,给出终端、IDE 与重定向环境的处理方案。
-
Java WeekFields 用每周起始日和首周最少天数定义周口径。本文从固定参数、Locale、ISO 常量和跨年字段四个角度说明配置方法,并用年初样例区分 weekOfYear 与 weekBasedYear。
-
Java URI 保留原始查询时应读取 getRawQuery,而不是 getQuery。本文用最小示例说明百分号编码、加号、重复参数、null 与空查询的区别,并给出转发、签名和缓存键场景的选择边界。
-
Properties.load(Reader) 使用调用方已经解码好的字符,load(InputStream) 则按 ISO-8859-1 解释每个字节。读取 UTF-8 中文配置时,应使用 InputStreamReader 显式指定 UTF-8,并注意 Unicode 转义、store 配对和流关闭责任。
-
Java HttpResponse.BodyHandlers.ofInputStream() 会在响应头到达后提供 InputStream,适合逐块处理大响应。本文说明固定缓冲区读取、状态码判断、EOF 与 close 的边界,并对比常用 BodyHandler 的选择方式。