日期、字符串、I/O 与序列化

共 74 题
#

1. BIO 的 one-connection-per-thread 模型在 C10K 问题下的资源瓶颈与伪异步 I/O 局限

A BIO 每连接一线程适合高并发
B BIO 每连接一线程使 C10K 下线程数爆炸浪费资源,伪异步用线程池复用但仍是阻塞、线程池有限受限 ✓ 正确答案
C 伪异步无局限
D BIO 线程可复用
#

2. BIO、NIO、AIO 三种 I/O 模型的本质差异与适用场景辨析

A NIO 阻塞
B BIO 阻塞、NIO 非阻塞+多路复用、AIO 异步回调,各自适用简单/高并发/异步 I/O 场景 ✓ 正确答案
C AIO 阻塞
D BIO 高并发
#

3. Date/Calendar 的设计缺陷与线程安全问题

A Date 不可变
B SimpleDateFormat 线程安全
C Calendar 月份 1 开始
D Date/Calendar 可变、月份 0 索引、SimpleDateFormat 线程不安全,用 java.time 不可变 API 替代 ✓ 正确答案
#

4. DateTimeFormatter 的线程安全与缓存策略

A DateTimeFormatter 线程不安全
B 需每次创建
C DateTimeFormatter 不可变线程安全,可用 static final 缓存复用避免重复创建 ✓ 正确答案
D 与 SimpleDateFormat 相同
#

5. FileChannel.transferTo 零拷贝的底层 sendfile/splice 实现与适用边界

A transferTo 只适合小文件
B transferTo 需要用户态拷贝
C 零拷贝无限制
D transferTo 用 sendfile/splice 内核态零拷贝,适合文件→socket 大文件传输,但平台相关、只读传 ✓ 正确答案
#

6. Files/Path(NIO.2)相对传统 File 类的改进与工程价值

A Path 与 File 功能相同
B File 功能更全
C Files 不能读文件
D Path/Files 提供简洁静态方法、流式惰性读写、目录遍历、监听,功能全面,替代传统 File 类 ✓ 正确答案
#

7. Instant 在跨时区持久化的最佳实践

A 存储 LocalDateTime 最安全
B Instant 是 UTC 时间戳独立于时区,跨时区用 Instant/UTC 存储、展示转本地时区,避免 LocalDateTime 歧义 ✓ 正确答案
C 存储本地时间
D Instant 依赖时区
#

8. NIO.2 的 Files.walk/Files.list 流式遍历在大目录下的资源泄漏风险与 Spliterator 控制

A Files.walk/list 返回绑定目录的流,需 try-with-resources 关闭避免句柄泄漏,大目录流式处理 ✓ 正确答案
B 句柄不会泄漏
C 流自动关闭
D walk 流无需关闭
#

9. NumberFormat/DateFormat 的本地化与线程安全

A 按 Locale 本地化但非线程安全(可变状态),需 ThreadLocal/每次创建,或用线程安全替代 ✓ 正确答案
B 两者线程安全
C 本地化与 Locale 无关
D 可共享线程安全
#

10. Pattern 的预编译与 flags 优化

A Pattern 每次匹配都编译
B flags 无性能影响
C Pattern 应预编译缓存复用(static final),flags 控制匹配语义,避免重复编译是性能优化 ✓ 正确答案
D 编译无成本
#

11. Pattern/Matcher 的线程安全与回溯陷阱

A Matcher 线程安全
B 回溯无风险
C Pattern 非线程安全
D Pattern 线程安全可共享,Matcher 非线程安全需每次创建;正则回溯(嵌套量词)可能 ReDoS 需避免 ✓ 正确答案
#

12. Pipe(SourceChannel/SinkChannel)的线程间通信语义与典型坑点

A Pipe 双向通信
B Pipe 是单向线程间通道(Sink 写、Source 读),有容量/阻塞/单向坑点,需正确关闭 ✓ 正确答案
C Pipe 可多线程并发写
D Pipe 无容量限制
#

13. String.intern 返回的引用在 JDK 6 与 JDK 7+ 中分别存储在永久代还是堆中,这一变化对内存与回收有何影响

A 两者都在堆
B JDK 7+ intern 在永久代
C JDK 6 intern 在永久代(易 OOM),JDK 7+ 在堆(可回收),intern 仍应谨慎 ✓ 正确答案
D intern 无内存影响
#

14. String、StringBuilder、StringBuffer 的差异与适用场景

A String 可变
B StringBuffer 性能最好
C StringBuilder 线程安全
D String 不可变、StringBuilder 可变高效非线程安全、StringBuffer 可变线程安全(性能差),单线程拼接用 StringBuilder ✓ 正确答案
#

15. serialPersistentFields 如何显式声明参与序列化的字段集合,与 transient 及字段重命名场景的兼容策略如何配合

A 它声明所有字段序列化
B 它忽略 transient
C 无兼容作用
D serialPersistentFields 显式声明序列化字段集合,transient 跳过字段,配合 readObject/writeObject 实现重命名兼容 ✓ 正确答案
#

16. AIO(AsynchronousFileChannel)的 CompletionHandler 回调模型与 Future 模式的取舍

A Future 模式异步回调
B CompletionHandler 适合事件驱动异步(逻辑复杂),Future 模式 get() 阻塞(简单),可包装 CompletableFuture ✓ 正确答案
C Future 无阻塞
D 回调阻塞主线程
#

17. ByteBuffer 字节序(ByteOrder.BIG_ENDIAN/LITTLE_ENDIAN)在网络协议与文件格式解析中的影响

A 字节序只影响读不影响写
B 字节序不影响解析
C 默认小端
D 网络协议用大端(BIG_ENDIAN)、文件格式可能小端,ByteBuffer 需按格式设置 order 否则多字节值解析错误 ✓ 正确答案
#

18. ByteBuffer 的 position/limit/capacity 三指针与 flip/rewind/clear/compact 的状态机语义

A flip 清空重写
B clear 保留未读
C flip 写转读(limit=position, position=0)、rewind 重复读、clear 清空重写、compact 保留未读继续写 ✓ 正确答案
D compact 清空
#

19. Channel 与 Selector 多路复用机制在 Linux epoll 与 macOS kqueue 上的实现差异

A epoll 与 kqueue 都是事件驱动高效复用,Selector 底层 Linux 用 epoll、macOS 用 kqueue,Java 封装统一 ✓ 正确答案
B epoll 有 fd 数限制
C macOS 用 epoll
D Linux 用 select
#

20. DirectByteBuffer 的分配、回收(Cleaner/PhantomReference)与 -XX:MaxDirectMemorySize 约束

A DirectByteBuffer 用堆内存
B 直接内存立即回收
C DirectByteBuffer 直接内存用 Cleaner(PhantomReference)在 GC 时回收,-XX:MaxDirectMemorySize 限制总量 ✓ 正确答案
D 直接内存无限制
#

21. FileChannel.lock 文件锁的进程级语义与 JVM 内多线程共享同一 Channel 的边界

A 锁是 JVM 内锁
B JVM 内多线程互斥
C FileChannel.lock 是进程级锁(跨进程互斥),JVM 内多线程共享同一 Channel 不互斥 ✓ 正确答案
D 锁与 Channel 无关
#

22. MappedByteBuffer 内存映射文件的页缓存机制与大文件随机读写性能

A 映射不需页缓存
B 随机读写慢
C MappedByteBuffer 用 mmap 页缓存映射文件,随机读写像内存(避免系统调用),需 force() 落盘 ✓ 正确答案
D 映射无大小限制
#

23. Selector 空轮询 bug 的成因(epoll bug)与 Netty 的重建 Selector 解决方案

A 空轮询是正常行为
B epoll 空轮询 bug 使 select() 无事件也返回 0 导致 CPU 空转,Netty 检测后重建 Selector(重注册 Channel) ✓ 正确答案
C Netty 无法解决
D 空轮询不耗 CPU
#

24. Charset 与 StandardCharsets 的常用编码

A 应手动写编码名而非用常量
B StandardCharsets 无 UTF_8 常量
C 编码名永不会写错
D StandardCharsets 提供 UTF_8/UTF_16/ISO_8859_1 等常量,UTF-8 是现代标准,用常量避免编码名错误 ✓ 正确答案
#

25. ChronoUnit 与 TemporalAdjusters 在工作日计算与节假日调整中的工具方法

A TemporalAdjusters 算差值
B ChronoUnit 提供时间单位与差值计算,TemporalAdjusters 调整日期(月底/周一/下个工作日),自定义调整器处理节假日 ✓ 正确答案
C ChronoUnit 调整日期
D 两者无关
#

26. Clock 抽象(Clock.fixed/Clock.offset)的测试价值

A Clock 无法注入
B Clock 只能系统时间
C Clock.fixed 固定时间、Clock.offset 偏移时间,测试中注入 Clock 控制时间使测试确定可复现 ✓ 正确答案
D 测试不能用 Clock
#

27. Collator 在区域敏感字符串比较的应用

A Collator 用默认 Unicode 比较
B Collator 按 Locale 区域规则比较字符串(中文拼音/德语变音),用于区域敏感排序,非线程安全 ✓ 正确答案
C 区域无关
D 线程安全
#

28. Duration 与 Period 的差异(时间量 vs 日期量)

A Duration 是日期量
B Period 是时间量
C Duration 是精确时间量(秒纳秒)、Period 是日历日期量(年月日),按需要精确时长还是日历日期选择 ✓ 正确答案
D 两者相同
#

29. ISO 8601 与 RFC 3339 的字符串互换

A 时间字符串需手动拼接
B RFC 3339 是 ISO 8601 的 Internet 子集
C 两者无关
D ISO 8601/RFC 3339 是时间字符串标准(UTC 带 Z 或偏移),java.time 用 Instant/OffsetDateTime 格式与解析 ✓ 正确答案
#

30. JDK 8 DateTimeFormatterBuilder 的复杂模式构造

A 只能 appendPattern
B 与 pattern 相同
C 无法自定义
D DateTimeFormatterBuilder 拼接复杂格式(appendPattern/appendValue/appendOptional),用于简单 pattern 无法表达的复杂格式 ✓ 正确答案
#

31. JDK 9 Locale.IsoCountryCode 与 Locale.forLanguageTag

A forLanguageTag 只能两字母
B new Locale 解析标签
C IsoCountryCode 指定国家代码标准,forLanguageTag 解析 BCP 47 语言标签构建 Locale,比 new Locale 更规范 ✓ 正确答案
D forLanguageTag 不支持扩展
#

32. UTF-8 乱码的常见根因(BOM、多字节截断、双重编码)与沿 HTTP/数据库/文件链路定位的方法

A 乱码只有一种根因
B 乱码无法定位
C 编码总一致
D 乱码根因含 BOM、多字节截断、双重编码、编码不一致,统一各环节 UTF-8 并检查 charset ✓ 正确答案
#

33. Java 25 中字符串相关的优化与变更

A 字符串模板用内嵌表达式简化拼接,但截至 JDK 25 仍未定稿(JEP 459 仅为 JDK 22 预览),拼接与 format 仍是主流 ✓ 正确答案
B Java 25 无字符串变更
C 字符串模板已移除
D 字符串模板只用于数字
#

34. Java 9 Matcher.replaceAll 的流式方法

A replaceAll 只能固定字符串
B 无流式方法
C Java 9 的 replaceAll(Function) 用函数动态替换每个匹配,results() 返回匹配流,支持流式处理 ✓ 正确答案
D results() 返回字符串
#

35. Java 原生序列化的版本兼容规则中,哪些字段变更向后兼容、哪些会直接抛出 InvalidClassException

A serialVersionUID 一致且字段类型不变时增删字段向后兼容(默认值/忽略),serialVersionUID 不匹配或类型不兼容抛 InvalidClassException ✓ 正确答案
B 字段类型变化兼容
C serialVersionUID 不匹配仍兼容
D 任何变更都兼容
#

36. Locale 的层级与默认 locale 获取

A Locale 只有语言维度
B 默认 locale 固定
C getDefault 无类别
D Locale 层级含语言/脚本/国家/变体/扩展,getDefault() 获取 JVM 默认 locale,按 Category 区分格式/显示 ✓ 正确答案
#

37. Locale.forLanguageTag 与 Locale.Builder 在复杂语言标签解析上的差异

A Builder 解析字符串
B 两者都解析字符串
C forLanguageTag 解析 BCP 47 标签字符串(宽松),Locale.Builder 组件式构建(严格校验),按输入形态选择 ✓ 正确答案
D forLanguageTag 严格校验
#

38. MonthDay/Year/YearMonth 的工程场景

A MonthDay 表示月日(生日/节日)、Year 表示年份、YearMonth 表示年月(月度统计),用于部分日期建模 ✓ 正确答案
B MonthDay 含年
C YearMonth 无年
D 三者相同
#

39. ObjectInputFilter 的 maxdepth/maxrefs/maxbytes 限制与黑白名单模式如何在 JEP 290/415 框架下构成纵深防御

A maxdepth/maxrefs/maxbytes 限制资源、黑白名单限制类,JEP 290/415 框架下构成反序列化纵深防御 ✓ 正确答案
B 无类限制
C 只限制字节数
D 过滤器可选
#

40. Pattern.UNICODE_CHARACTER_CLASS 与 Unicode 属性

A \d 默认匹配 Unicode 数字
B Unicode 属性仅 ASCII
C UNICODE_CHARACTER_CLASS 使预定义类按 Unicode 语义匹配,\p{...} 匹配 Unicode 属性,用于多语言文本 ✓ 正确答案
D 无 Unicode 支持
#

41. Pattern.asPredicate 与流式协作

A asPredicate 返回 Matcher
B asPredicate 是全匹配
C asPredicate 不能用于流
D Pattern.asPredicate() 把正则转 Predicate(test 用 find()),用于 Stream.filter 流式过滤 ✓ 正确答案
#

42. Scanner 的局限与生产禁用

A Scanner 性能好
B Scanner 捕获异常
C Scanner 适合大数据
D Scanner 用正则解析慢、性能差、吞异常,生产应避免,用 BufferedReader/Stream 或专用解析器 ✓ 正确答案
#

43. String.format 与 MessageFormat 的本地化取舍

A String.format 用 %s 格式(本地化差),MessageFormat 用 {0} 占位支持 Locale/复数/顺序调整,适合国际化 ✓ 正确答案
B String.format 支持本地化
C MessageFormat 本地化差
D MessageFormat 无占位符
#

44. String.isBlank 与 String.strip 的 Unicode 空白处理

A trim 处理 Unicode 空白
B strip 只处理 ASCII
C isBlank 只 ASCII
D isBlank/strip 基于 Character.isWhitespace(Unicode 空白),trim 只处理 ASCII 空白,Unicode 场景用 isBlank/strip ✓ 正确答案
#

45. String.join 与 Collectors.joining 的取舍

A String.join 直接拼接集合(简单),Collectors.joining 用于 Stream 管道(支持 prefix/suffix),按上下文选择 ✓ 正确答案
B joining 无 prefix/suffix
C String.join 支持 prefix
D 两者都只能 Stream
#

46. String.lines 与 Files.readAllLines 的取舍

A readAllLines 惰性
B String.lines 惰性拆分字符串行,Files.readAllLines 一次性读文件行(小文件),大文件用 Files.lines() 流式 ✓ 正确答案
C 两者都流式
D lines() 一次性
#

47. String.repeat(int) 的实现复杂度

A String.repeat 用倍增复制(总复制 O(n)),避免逐次拼接的 O(n²),高效 ✓ 正确答案
B repeat 复杂度 O(n²)
C repeat 逐次拼接 O(n²)
D repeat 无优化
#

48. String.split 的限制(尾部空字符串)与 Splitter(Guava)

A String.split 默认丢弃尾部空、参数是正则(需转义),Splitter 保留尾部空、可配置(trim/omitEmpty/limit)更健壮 ✓ 正确答案
B split 无需转义
C Splitter 丢弃尾部空
D split 保留尾部空
#

49. StringJoiner 与 String.join 的底层实现差异是什么,Stream 的 Collectors.joining 又复用了哪个组件

A String.join 内部用 StringJoiner,Collectors.joining 复用 StringJoiner 作累加容器,都基于可变拼接 ✓ 正确答案
B String.join 用 StringBuilder
C joining 用 StringBuilder
D StringJoiner 独立实现
#

50. StringTokenizer 的遗留问题

A 支持正则
B 是新标准
C StringTokenizer 是遗留分割类,API 不友好、无正则、行为不一致,新代码用 String.split 或 Splitter 替代 ✓ 正确答案
D 与 split 一致
#

51. TemporalAdjusters 的常见用法(月初、月底、周一)

A 只有月初方法
B TemporalAdjusters 提供 firstDayOfMonth/lastDayOfMonth/next(MONDAY) 等,date.with(...) 调整到月初/月底/周一 ✓ 正确答案
C 无法调整到周一
D 需手动计算
#

52. TimeUnit 与 Duration 的转换

A TimeUnit 是时间量
B Duration 是枚举
C 两者相同
D TimeUnit 是时间单位枚举(单位换算),Duration 是时间量对象(时长/时间差),用 toXxx/ofXxx 转换 ✓ 正确答案
#

53. Unicode 规范化(NFC/NFD)对字符串比较的影响

A NFC/NFD 使等价字符串字节不同,Normalizer 规范化后比较避免误判不等 ✓ 正确答案
B NFC 与 NFD 无差异
C 规范化后仍不等
D 无需规范化
#

54. java.time 与数据库时间类型的映射(JDBC 4.2)

A JDBC 4.2 映射 LocalDate-DATE、LocalDateTime-TIMESTAMP、OffsetDateTime-TIMESTAMP WITH TIME ZONE,setObject/getObject 使用 ✓ 正确答案
B JDBC 只支持 java.util.Date
C 无映射
D 需手动转换
#

55. java.time(JSR-310)的核心类(LocalDateTime/ZonedDateTime/Instant)

A LocalDateTime 带时区
B Instant 带时区
C LocalDateTime 无时区本地时间、ZonedDateTime 带时区时间、Instant UTC 时间点,按语义选择 ✓ 正确答案
D ZonedDateTime 无时区
#

56. record 的序列化为何按组件名直接赋值而不走规范构造器,紧凑构造器里的参数校验在反序列化时是否仍会执行

A 反序列化走构造器
B 构造器校验每次执行
C 反序列化与构造器相同
D record 反序列化按组件名直接赋值、不走构造器,紧凑构造器校验不执行,校验需另行处理 ✓ 正确答案
#

57. 为何 RPC 与缓存场景普遍弃用 Java 原生序列化而选 Protobuf/Kryo,从体积、速度、跨语言、安全四个维度如何比较

A Java 原生序列化体积大、慢、仅 Java、不安全,Protobuf/Kryo 体积小、快、跨语言/安全,故 RPC/缓存弃用原生 ✓ 正确答案
B Java 序列化体积小
C Java 序列化跨语言
D Protobuf 不安全
#

58. 反序列化 gadget 链由哪些环节构成(可序列化入口类、回调方法、危险 sink),如何从依赖裁剪角度削减可利用类

A gadget 链由入口类→回调→危险 sink 构成,依赖裁剪移除危险类、白名单过滤削减可利用类降低攻击面 ✓ 正确答案
B gadget 链只有入口类
C 无法削减
D 依赖无关
#

59. 同步/异步、阻塞/非阻塞四象限的语义区分与常见误解

A 异步一定非阻塞
B 同步与阻塞相同
C 只有两种组合
D 同步/异步是结果获取方式,阻塞/非阻塞是线程是否等待,四象限组合(BIO 同步阻塞、NIO 同步非阻塞、AIO 异步) ✓ 正确答案
#

60. 夏令时跳变对时间计算的影响(LocalDateTime 加 24 小时?)

A LocalDateTime 加 24 小时感知夏令时
B 夏令时无影响
C ZonedDateTime 不感知 DST
D LocalDateTime 加 24 小时不感知夏令时,跨时区/夏令时用 ZonedDateTime.plusDays 正确处理 DST 跳变 ✓ 正确答案
#

61. 大量调用 String.intern 为何可能拖慢查找甚至引发 OOM,StringTable 大小(-XX:StringTableSize)如何调优

A StringTable 无限
B intern 永久不占内存
C 大量 intern 使 StringTable 桶冲突、查找变慢、字符串常驻内存可能 OOM,用 -XX:StringTableSize 增大桶数 ✓ 正确答案
D intern 无影响
#

62. serialVersionUID 的作用、默认生成算法与显式声明的工程规范

A 默认按类结构自动计算(易变),工程规范是显式声明固定值避免类结构变化破坏反序列化 ✓ 正确答案
B 默认固定不变,类结构变化不影响反序列化
C 运行序列化无需声明 serialVersionUID
D serialVersionUID 与反序列化兼容性无关
#

63. SimpleDateFormat 线程不安全的原因与替代方案(ThreadLocal 缓存/DateTimeFormatter)

A SimpleDateFormat 内部可变状态致线程不安全,用 ThreadLocal 隔离或 DateTimeFormatter(不可变线程安全)替代 ✓ 正确答案
B 可共享
C SimpleDateFormat 线程安全
D 无替代
#

64. 序列化代理模式(Serialization Proxy)如何借助 writeReplace/readResolve 规避默认序列化在对象不变量与安全性上的风险

A 代理无用
B 序列化代理用 writeReplace 序列化代理、readResolve 恢复,通过代理重建对象可校验不变量、不暴露内部、更安全 ✓ 正确答案
C 代理只序列化内部
D 代理绕过不变量
#

65. String.formatted(JDK 15+)与文本块组合在模板渲染中的应用

A formatted 是拼接
B formatted 无占位
C 文本块不能 format
D String.formatted 用 %s 占位格式化字符串,配合文本块做多行模板渲染(SQL/HTML/邮件模板) ✓ 正确答案
#

66. 字符串常量池(String Constant Pool)的运行机制与 intern

A 每个字面量独立对象
B new String 也入池
C 编译期字面量入常量池(StringTable 在堆),相同字面量复用引用,intern 显式入池返回池中引用 ✓ 正确答案
D 常量池无复用
#

67. 时区(Zone)与 UTC 偏移(Offset)的概念差异

A Offset 含夏令时
B Offset 是固定 UTC 偏移(无 DST),Zone 是时区(含 DST 规则,偏移随季节变化) ✓ 正确答案
C Zone 固定
D 两者相同
#

68. 枚举的序列化为何只写出常量名字而不写字段,反序列化如何保证单例语义且不触发私有构造器

A 枚举序列化时会完整写出所有字段值
B 反序列化枚举会调用其私有构造器创建新实例
C 枚举序列化只写常量名,反序列化用 Enum.valueOf 返回已有单例,不触发构造器、不写字段、保持单例 ✓ 正确答案
D 枚举反序列化后可能得到与原常量不同的实例
#

69. 正则回溯导致的 ReDoS 攻击与防御

A 正则回溯(嵌套量词)可能指数级匹配致 ReDoS,避免嵌套量词、用原子组、限制输入长度、超时防御 ✓ 正确答案
B 回溯无风险
C 嵌套量词安全
D 无法防御
#

70. 正则表达式元字符、贪婪与非贪婪匹配

A 元字符构成正则语法,贪婪量词尽量多匹配、非贪婪(*?)尽量少匹配,按需选择避免匹配范围错误 ✓ 正确答案
B 贪婪量词尽量少
C 非贪婪尽量多
D 贪婪/非贪婪无差异
#

71. JDK 25 中 DateTimeFormatter 对 Unicode 区域数据(CLDR)的最新版本支持

A DateTimeFormatter 不依赖区域数据
B DateTimeFormatter 依赖 CLDR 区域数据,JDK 25 更新 CLDR 版本,改善本地化日期格式与区域数据 ✓ 正确答案
C CLDR 无关
D 格式固定
#

72. String 的紧凑字符串(Compact Strings)压缩率

A Compact Strings 用 byte[]+coder,LATIN-1 字符 1 字节/字符,ASCII 字符串内存节省约 50%,非 LATIN-1 仍 2 字节 ✓ 正确答案
B 中文也压缩 50%
C 无压缩
D 所有字符串压缩 50%
#

73. 序列化流的魔数与类描述符结构如何组织,重复写出同一对象引用时句柄(handle)机制怎样避免对象图被复制多份

A 重复对象重复序列化
B 序列化流无魔数
C 序列化流以魔数+版本开头,含类描述符;handle 机制让同一对象引用只写一次句柄,避免对象图复制多份、支持循环引用 ✓ 正确答案
D 循环引用无法序列化
#

74. Matcher.matches/find/lookingAt 的语义差异与使用场景

A find 全匹配
B lookingAt 全匹配
C matches 部分匹配
D matches 全匹配(验证)、find 查找子串(搜索/提取)、lookingAt 开头前缀,按匹配需求选择 ✓ 正确答案