# 1. Charset 在文件读写(Files.newBufferedReader)中显式指定与默认编码的工程价值 A 默认编码永远一致,无需指定 B 显式指定 Charset 会降低性能 C 显式指定编码与乱码无关 D 显式指定 Charset 保证编码一致与可移植,避免默认编码变化导致乱码 ✓ 正确答案
# 2. GB18030 字符集与 UTF-8 在 Spring Boot 4.0 国际化场景下混用时编码探测的精度如何保障 A GB18030 与 UTF-8 总能可靠区分 B 探测精度无条件保证 C 混用不影响编码 D 混用时字节探测有歧义,需通过统一编码、BOM、Content-Type 标记保障精度 ✓ 正确答案
# 3. NIO Charset 在 Linux LANG=C 环境下与 JVM file.encoding 的协商顺序是什么 A JDK 18+ 默认编码仍依赖 LANG B LANG=C 会强制 file.encoding 为其他编码 C 显式 -Dfile.encoding 最优,JDK 18+ 默认 UTF-8 不受 LANG=C 影响,LANG 只是旧版推断来源 ✓ 正确答案 D 协商顺序不可控
# 4. sun.nio.cs 包的扩展字符集实现 A sun.nio.cs 是公开 API B sun.nio.cs 是 JDK 内部字符集实现包,提供 GBK/UTF-8 等主流编码,应通过 Charset.forName 使用 ✓ 正确答案 C sun.nio.cs 只提供 UTF-8 D 不应通过 Charset.forName 使用其字符集
# 5. 文件读写编码一致性(Files.newBufferedReader(path, charset)) A 读写需用同一编码,显式指定 charset 保证一致性,避免乱码 ✓ 正确答案 B 无需指定编码 C 读写编码不一致也不会乱码 D 编码一致性只影响性能
# 6. CSV 文件的分隔符、引号、换行与字符集是独立维度,导入前应怎样检测而不误判内容 A CSV 只需按逗号切分即可 B 字符集不影响 CSV 解析 C 引号内的逗号可直接切分 D 分隔符/引号/换行/字符集独立,需先确认字符集再按引号转义规则解析,避免误判内容 ✓ 正确答案
# 7. Charset 与 CharsetProvider 的 SPI 扩展 A CharsetProvider 不是 SPI B 自定义字符集只能修改 JDK 源码 C CharsetProvider 是 SPI 接口,通过 ServiceLoader 注册自定义字符集,需实现 Charset 与编码/解码器 ✓ 正确答案 D 自定义字符集无需提供编码器
# 8. CharsetDecoder 的 decode、flush 与 reset 调用顺序是什么,输入结束标记错误会丢失哪些字符 A 只需调用一次 decode 即可 B 未标记结束不会丢失字符 C flush 应在 decode 之前 D decode 循环后再 flush 处理尾随字节,未标记 endOfInput 或未 flush 会丢失多字节序列的字符 ✓ 正确答案
# 9. CharsetEncoder 的 malformedInput 与 unmappableCharacter 处理 A 编码错误无法处理 B 默认策略是 IGNORE C malformedInput 与 unmappableCharacter 两类错误可通过 REPORT/REPLACE/IGNORE 策略处理,默认 REPORT ✓ 正确答案 D unmappableCharacter 与 malformedInput 相同
# 10. CharsetEncoder/CharsetDecoder 在编码异常下的处理 A 异常会被静默忽略 B 异常默认抛异常(REPORT)保证数据安全,可调整策略,关键数据避免 IGNORE 静默丢数据 ✓ 正确答案 C IGNORE 最安全 D 编码异常无策略可选
# 11. DataInputStream 的 readUTF 变长编码与网络协议中长度前缀协议的配合 A readUTF 读取 2 字节长度前缀 + 变长 UTF-8 数据,与网络长度前缀分帧思想一致 ✓ 正确答案 B readUTF 无长度前缀 C readUTF 使用固定长度编码 D 长度前缀协议无法解决粘包
# 12. Emoji 表情字符(4 字节 UTF-8)在 String.length() 与 codePointCount 上的偏差如何影响业务截取 A length() 与 codePointCount 对 Emoji 相同 B 按 length() 截取不会切断 Emoji C Emoji 用代理对/多码点,length() 与 codePointCount 偏差,截取需按码点或字素簇避免切断 ✓ 正确答案 D Emoji 只占一个 char
# 13. GBK/GB2312/GB18030 的中文编码边界 A GB2312 覆盖常用汉字、GBK 扩展、GB18030 变长覆盖全部 Unicode,三者向后兼容 ✓ 正确答案 B 三者互不兼容 C GB18030 覆盖范围最小 D GB2312 覆盖全部 Unicode
# 14. GBK/UTF-8/ISO-8859-1 在中文文本处理中的乱码根因与 Charset.forName 解析 A 乱码根因是读写编码不一致,ISO-8859-1 单字节不含中文,Charset.forName 按名称/别名解析 ✓ 正确答案 B ISO-8859-1 支持中文 C Charset.forName 找不到字符集不抛异常 D 乱码与编码无关
# 15. InputStream/OutputStream 与 Reader/Writer 的分工与 InputStreamReader 桥接的字符集转换 A Reader 处理二进制 B InputStreamReader 不涉及字符集 C 字节流处理二进制、字符流处理文本,InputStreamReader 按指定字符集将字节解码为字符 ✓ 正确答案 D 字节流与字符流无区别
# 16. JDK 25 中 Charset.forName 与 StandardCharsets 的查找性能差异主要来自哪段缓存逻辑 A forName 比 StandardCharsets 更快 B StandardCharsets 是直接引用无查找,forName 需按名称缓存查找,前者性能更高 ✓ 正确答案 C 两者性能完全相同 D forName 无缓存
# 17. JSON 传输通常采用 UTF-8,但响应头与实际字节不一致时,客户端应信任哪一层并如何告警 A 永远信任实际字节 B 优先信任响应头 charset,解码失败时回退字节检测并告警,服务端应保证一致性 ✓ 正确答案 C 响应头 charset 无意义 D 不一致时无需处理
# 18. 如何复用 CharsetEncoder/CharsetDecoder 避免每次 getBytes/new String 的分配开销,线程安全如何保证 A Encoder/Decoder 是线程安全的,可全局共享 B 复用无收益 C Encoder/Decoder 有状态非线程安全,复用需 ThreadLocal 或池化隔离,并 reset 复位 ✓ 正确答案 D ThreadLocal 会导致线程安全问题
# 19. Java 字符串(UTF-16)与字节流的相互转换 A String 内部是字节数组 B 转换无需指定编码 C 编码与解码用不同字符集也正确 D getBytes 编码、new String 解码,需指定同一 Charset 才能正确还原 ✓ 正确答案
# 20. Java 的 UTF-16 内部字符存储与 Unicode 17(最新标准) A Java 只能表示 BMP 字符 B 补充平面字符占一个 char C Java 用 UTF-16 存储,BMP 单 char、补充平面用代理对,可表示 Unicode 17 全部码点 ✓ 正确答案 D Unicode 17 与 Java 存储无关
# 21. Java 默认字符集自 JDK 18 统一为 UTF-8 后,旧系统迁移仍需检查哪些文件和启动参数 A 迁移后无需任何检查 B 默认编码重启后自动兼容旧数据 C 需检查隐式依赖默认编码的代码(getBytes 无参等)、启动参数与旧文件编码,显式指定 Charset ✓ 正确答案 D 只检查启动参数即可
# 22. MIME charset 头与 Content-Type 在 HTTP/2 场景下的字符集协商机制差异是什么 A HTTP/2 有独立的字符集协商机制 B HTTP/2 不关心 charset C Content-Type 与字符集无关 D 字符集协商靠 Content-Type 的 charset 参数,HTTP/2 的差异主要在传输层而非字符集语义 ✓ 正确答案
# 23. PrintStream(System.out)的自动刷新与字符集编码在重定向日志时的陷阱 A 重定向日志无编码问题 B PrintStream 总是自动刷新 C 陷阱包括缓冲不自动刷新、默认编码乱码、吞异常,重定向时需显式编码与及时 flush ✓ 正确答案 D PrintStream 会抛出编码异常
# 24. Properties.load(InputStream) 与 load(Reader) 的编码语义有何差异,现代配置应如何避免转义依赖 A load(InputStream) 默认 ISO-8859-1 需转义,load(Reader) 可指定编码,现代配置用 UTF-8/XML/YAML 避免转义 ✓ 正确答案 B 两种 load 编码完全相同 C load(InputStream) 默认 UTF-8 D Properties 无需考虑编码
# 25. REPORT、REPLACE 与 IGNORE 三种编码错误策略各有什么数据风险,服务端默认应如何选择 A IGNORE 最安全 B REPLACE 不会篡改数据 C 服务端默认应选 IGNORE D REPORT 最安全、REPLACE 篡改数据、IGNORE 静默丢数据,服务端默认应选 REPORT ✓ 正确答案
# 26. StandardCharsets 在 JDK 17 的新增 A StandardCharsets 只提供 UTF_8 B StandardCharsets 提供 UTF_8/UTF_16/ISO_8859_1 等常用字符集常量(自 JDK 7 起即包含 UTF_16 系列,JDK 17 未新增) ✓ 正确答案 C StandardCharsets 是运行时枚举 D StandardCharsets 不提供 ISO_8859_1
# 27. StandardCharsets.UTF_8 与 Charset.forName 的差异 A 两者性能完全相同 B StandardCharsets.UTF_8 是直接引用快且无异常,forName 运行时查找可能抛异常,推荐前者 ✓ 正确答案 C forName 不会抛异常 D StandardCharsets 返回不同实例
# 28. String.length、codePointCount 与 UTF-8 字节数为何不同,数据库字段限长应按哪种单位校验 A length 是 UTF-16 char 数、codePointCount 是码点数、字节数是 UTF-8 长度,字段限长应按数据库实际存储单位校验 ✓ 正确答案 B 三者恒等 C 直接按 length 校验即可 D 字节数与字符数无关
# 29. URL 编码(URLEncoder/URLDecoder) A URLEncoder 空格编为 %20 B URLEncoder 是表单编码(空格为 +),与 URL 路径编码(%20)不同,需指定字符集 ✓ 正确答案 C URLEncoder 与路径编码相同 D URLEncoder 无需指定字符集
# 30. UTF-8 BOM 在文本文件中可选但在协议字段中可能成为内容,读取时应如何明确处理 A BOM 在所有场景都被忽略 B 协议字段中的 BOM 无影响 C BOM 在文件可选、在协议字段成为内容,读取时检测并跳过以保正确 ✓ 正确答案 D 文件读取总自动跳过 BOM
# 31. UTF-8 的过长编码、孤立续字节和代理码点为什么属于非法输入,安全校验应在哪层完成 A 代理码点可合法编码为 UTF-8 B 这些序列都是合法的 C 过长编码/孤立续字节/代理码点属非法 UTF-8,安全校验应在输入边界用严格解码器完成 ✓ 正确答案 D 校验应在业务逻辑内部完成
# 32. UTF-8/UTF-16/UTF-32 的差异与 BOM A 三者都是定长编码 B UTF-8 变长兼容 ASCII 无字节序,UTF-16/32 有字节序问题需 BOM 标识 ✓ 正确答案 C UTF-8 有字节序问题 D BOM 只用于 UTF-32
# 33. Unicode NFC 与 NFKC 的规范化目标有何差异,用户名或签名输入为何不能随意选择兼容分解 A NFC 做规范分解组合保留语义,NFKC 做兼容分解可能改变语义,用户名应优先 NFC 避免破坏特殊字符 ✓ 正确答案 B NFKC 保留所有字符语义 C NFC 与 NFKC 完全相同 D 用户名应使用 NFKD
# 34. Unicode Normalization(Normalizer.normalize)在跨语言文本比较与排序中的工程价值 A 规范化与比较无关 B 排序只需看码点 C 规范化会破坏比较 D 规范化统一等价文本(如 é 的多种表示),保证跨语言比较与排序一致 ✓ 正确答案
# 35. Unicode 码点、UTF-16 code unit 与用户感知字素簇有何区别,字符串截断应以哪一层为准 A 字素簇是最小用户感知单元,截断应以字素簇为准,避免切断代理对或组合字符 ✓ 正确答案 B 截断按 code unit 即可 C 码点与字素簇相同 D 截断只看码点即可
# 36. charset 读取失败应回退到 UTF-8 还是 ISO-8859-1 A 应总是回退 ISO-8859-1 B 无需回退 C 回退 UTF-8 会掩盖问题 D 回退 UTF-8 严格可校验优先,ISO-8859-1 永不失败但掩盖问题,应避免盲目回退并告警 ✓ 正确答案
# 37. 字符串字面量在 class 文件常量池中 UTF-8 编码后被 javac 改写为 Latin-1 紧凑存储的判定边界 A 判定边界是字符数是否超过 255 B 常量池统一用 Modified UTF-8 存储;运行时紧凑字符串按字符码点 ≤ 0xFF 判定,用 Latin-1 紧凑布局,否则用 UTF-16 布局 ✓ 正确答案 C 所有字符串都用 UTF-16 存储 D 判定边界与码点无关
# 38. 字符集(Charset)与编码器(CharsetEncoder) A Charset 是字符集规则,提供 newEncoder/newDecoder 获取有状态的编码/解码执行器 ✓ 正确答案 B CharsetEncoder 是字符集规则 C 两者无关联 D Charset 就是编码器
# 39. 按字节截断 UTF-8 日志或消息可能切断多字节序列,如何在容量限制下保持文本有效 A 字节截断总是安全的 B 字节截断可能切断多字节序列,需回退到完整字符边界或按字符截断 ✓ 正确答案 C UTF-8 是单字节编码 D 截断无需考虑字符完整性
# 40. 数据库连接、表、列和会话字符集不一致时,乱码与不可映射错误应如何沿链路定位 A 只需检查数据库实例 B 不一致不影响数据 C 字符集在数据库层自动统一 D 需沿应用编码、连接参数、表/列字符集、数据库实例逐层检查,统一为 UTF-8/utf8mb4 ✓ 正确答案
# 41. 紧凑字符串在内部选择 LATIN1 或 UTF16 对外部编码有何影响,业务代码为何不应依赖其布局 A 外部编码由内部布局决定 B 业务应依赖内部布局优化 C 内部 LATIN1/UTF16 布局是 JVM 优化,影响内存与 intrinsic,外部编码由其决定,业务不应依赖内部布局 ✓ 正确答案 D 紧凑字符串没有内部布局
# 42. 网络 I/O 的字符集约定 A 网络 I/O 通过协议层声明字符集(如 Content-Type charset),收发一致并统一 UTF-8 ✓ 正确答案 B 默认编码即可,无需声明 C 乱码与字符集约定无关 D 网络 I/O 无需约定字符集
# 43. 跨语言排序与比较为何不能只看 Unicode 码点,Collator 的强度和规范化应怎样配置 A 码点排序不具语言感知,应用 Collator 并按需求配置强度(PRIMARY/SECONDARY 等)与规范化 ✓ 正确答案 B String.compareTo 的码点排序适合所有语言 C Collator 与 Locale 无关 D 排序无需规范化
# 44. CharsetEncoder 的 replacement 与 unmappableCharacterAction 在 JDK 25 虚拟线程下的内存序如何保证 A 虚拟线程自动保证编码器线程安全 B 编码器可无同步共享 C CharsetEncoder 非线程安全,虚拟线程下共享需同步或 ThreadLocal 隔离,内存序由锁/volatile 保证 ✓ 正确答案 D 内存序与编码器无关
# 45. 无 BOM 文本的编码自动检测方法(启发式统计/ICU CharsetDetector)及其误判风险 A 无 BOM 检测总是准确 B ICU 检测无误判 C 只需按 ASCII 检测 D 检测用启发式统计/ICU CharsetDetector,非确定有误判风险,需结合业务约定与校验 ✓ 正确答案
# 46. JDK 25 中 Properties 配置文件默认 ISO-8859-1 与 loadFromXML 的 UTF-8 编码边界 A .properties 默认 ISO-8859-1 需转义,loadFromXML 用 UTF-8 可直接写中文 ✓ 正确答案 B loadFromXML 用 ISO-8859-1 C 两者编码相同 D .properties 默认 UTF-8
# 47. 紧凑字符串(JEP 254)与 JDK 25 对 String.getBytes(UTF_8) 的 intrinsic 优化 A 紧凑字符串只影响内存不影响编码 B intrinsic 优化与存储布局无关 C getBytes 无 intrinsic 优化 D 紧凑字符串简化 Latin-1 编码,getBytes(UTF_8) intrinsic 用 SIMD 加速,共同提升吞吐 ✓ 正确答案
# 48. java.util.Base64 的模块归属与 Native Image 体积优化边界 A Base64 在第三方模块 B Native Image 不含 Base64 C Base64 位于 java.base,Native Image 默认纳入标准库实现,体积优化受限于标准库包含 ✓ 正确答案 D Base64 无法在 Native Image 使用
# 49. JDK 25 引入的 JEP 484 Class-File API 在解析 class 文件常量池字符串时是否仍使用 Modified UTF-8 A JEP 484 改用标准 UTF-8 B 常量池不用 Modified UTF-8 C class 常量池字符串用 Modified UTF-8,JEP 484 API 读取时仍按此编码但对外暴露 String ✓ 正确答案 D JEP 484 不解析常量池
# 50. JEP 400 与 UTF-8 默认文件编码的关系在 JDK 25 中是否已正式落地 A JEP 400 尚未落地 B 默认编码仍依赖 LANG C JDK 25 默认编码非 UTF-8 D JEP 400 在 JDK 18 落地,JDK 25 默认 file.encoding 为 UTF-8,除非显式覆盖 ✓ 正确答案
# 51. JFR 中与字符集相关的事件(如 jdk.Charset 事件) A JFR 无字符集事件 B jdk.Charset 事件记录字符集转换信息,可用于分析编码/解码性能瓶颈 ✓ 正确答案 C jdk.Charset 事件与编码无关 D JFR 只能分析内存
# 52. UTF-8 编码 intrinsic 优化(JDK 25)对大字符串编码吞吐的影响 A intrinsic 只影响小字符串 B SIMD 降低编码吞吐 C 无 intrinsic 优化 D intrinsic 用 SIMD 向量化批量编码,显著提升大字符串吞吐,小字符串收益有限 ✓ 正确答案
# 53. Base64 的 URL-safe 与 MIME 变体在 JWT 与邮件场景的差异 A 三种变体完全相同 B JWT 用 basic 变体 C MIME 变体不加换行 D JWT 用 URL-safe(- _ 无 padding),邮件用 MIME(76 字符换行),字符/填充/换行有差异 ✓ 正确答案