# 1. Externalizable 与 Serializable 的差异 A 两者完全相同 B Serializable 自动反射序列化全部字段,Externalizable 手动精确控制,后者性能更好更灵活 ✓ 正确答案 C Externalizable 自动序列化 D Serializable 需要手动实现
# 2. Hessian/Protobuf/Avro 等跨语言序列化框架在微服务中的工程取舍 A Protobuf 不适合跨语言 B 所有框架都适合所有场景 C Hessian 跨语言支持最强 D Protobuf 强类型高性能适合 RPC,Avro schema 随数据适合大数据,Hessian 轻量 Java 生态,按场景取舍 ✓ 正确答案
# 3. JDK 内置序列化(Serializable)的安全风险与 Jackson/Kryo 等替代方案的取舍 A 内置序列化有反序列化攻击风险,应改用 JSON/Protobuf/Kryo 并配合过滤 ✓ 正确答案 B 内置序列化完全安全 C 无替代方案 D 反序列化攻击与序列化无关
# 4. Java 原生序列化(Serializable)的机制与 serialVersionUID A 序列化按类描述写出字段,serialVersionUID 验证版本兼容,应显式声明避免自动生成变化 ✓ 正确答案 B 无需声明 serialVersionUID C serialVersionUID 只影响性能 D 序列化不包括类描述
# 5. Serializable 的安全性与反序列化攻击 A 反序列化攻击不存在 B 反序列化总是安全 C 反序列化攻击通过 gadget chain 在反序列化时触发 RCE,防护靠过滤与避免不可信数据 ✓ 正确答案 D 只需升级 JDK 即可完全防护
# 6. JDK 17 序列化过滤器(ObjectInputFilter)的工程应用 A 白名单会放大攻击 B ObjectInputFilter 只影响性能 C 过滤器无法限制类 D ObjectInputFilter 按类名/深度/数量过滤反序列化,白名单机制防攻击,应用在反序列化入口 ✓ 正确答案
# 7. JDK 内部对象(BigInteger 等)的序列化兼容性 A JDK 内部对象不可序列化 B 序列化格式跨版本总变 C BigInteger 无法序列化 D JDK 内部对象(BigInteger 等)实现 Serializable 且兼容性由 JDK 保证,但内部格式不宜作为长期协议 ✓ 正确答案
# 8. JDK 序列化与 JMS Message 序列化 A ObjectMessage 用 JSON 序列化 B 所有 JMS 消息都用 JDK 序列化 C ObjectMessage 用 JDK 序列化有反序列化风险,实践优先 Text/Bytes 消息 ✓ 正确答案 D ObjectMessage 无安全风险
# 9. JDK 序列化与 RMI 协议 A RMI 用 JSON 传输 B RMI 参数无需序列化 C RMI 无安全风险 D RMI 用 JDK 序列化传输参数/返回值,存在反序列化风险,应限制暴露并配置过滤 ✓ 正确答案
# 10. Jackson 多态反序列化(@JsonTypeInfo/defaultTyping)的安全边界与已知漏洞(CVE) A defaultTyping 默认启用且安全 B Jackson 多态反序列化安全 C 多态反序列化可通过类型字段注入 gadget 导致 RCE,防护靠禁用 defaultTyping、白名单与升级 ✓ 正确答案 D 多态反序列化无 CVE
# 11. Kryo 的 FieldSerializer 在对象图循环引用检测与性能特征 A Kryo 无法处理循环引用 B 引用检测无开销 C FieldSerializer 直接访问字段,循环引用用引用表处理,无循环时可关闭引用提升性能 ✓ 正确答案 D FieldSerializer 性能低于 JDK 序列化
# 12. Kryo 相比 JDK 序列化的性能优势与限制(类注册/版本兼容/安全),适用场景如何界定? A Kryo 紧凑快速,但需类注册、版本敏感、有安全风险,适合 Java 内部高性能场景 ✓ 正确答案 B Kryo 版本兼容自动处理 C Kryo 无需类注册 D Kryo 适合跨语言
# 13. ObjectInputStream/ObjectOutputStream 的 writeObject/readObject 自定义序列化与 readResolve 单例保护 A writeObject/readObject 定制序列化,readResolve 返回替换对象保护单例,writeReplace 序列化前替换 ✓ 正确答案 B writeObject 与 readObject 无用 C readResolve 在序列化前调用 D readResolve 无法保护单例
# 14. Protobuf(com.google.protobuf)的工程实践 A Protobuf 无需 schema B Protobuf 用 .proto 编译生成代码、Builder 构建、序列化配合 gRPC,版本兼容靠字段编号稳定 ✓ 正确答案 C 生成代码可变 D 字段编号可随意删除
# 15. Unshared 序列化与对象共享 A 默认序列化共享对象保留引用,writeUnshared/readUnshared 非共享每次独立创建 ✓ 正确答案 B 序列化永远不共享对象 C readUnshared 会解析已有引用 D writeUnshared 会记录引用
# 16. serialVersionUID 在版本兼容性中的作用与显式声明的最佳实践 A 无需声明 serialVersionUID B 自动生成 UID 稳定不变 C serialVersionUID 与兼容无关 D serialVersionUID 验证版本兼容,显式声明避免自动生成变化,从而控制兼容性 ✓ 正确答案
# 17. 记录类(record)的 JDK 14+ 自动序列化支持与传统类的差异 A record 只序列化组件,经 canonical constructor 重建保持不可变,与传统类(默认构造函数)不同 ✓ 正确答案 B record 无法序列化 C record 用默认构造函数重建 D record 与传统类序列化完全相同
# 18. 跨语言的序列化(JSON/Protobuf/Avro)选型 A 所有格式都适合所有场景 B JSON 可读动态、Protobuf 强类型高性能、Avro schema 随数据适合大数据,按场景权衡 ✓ 正确答案 C JSON 性能最高 D Protobuf 可读性最好
# 19. Fastjson autoType 反序列化漏洞历史与 safeMode 防护(关闭 autoType 的白名单机制) A autoType 通过 @type 注入 gadget 导致 RCE,safeMode 关闭 autoType 用白名单防护 ✓ 正确答案 B autoType 总是安全 C safeMode 会放大漏洞 D Fastjson 无漏洞
# 20. JDK 24+ 序列化移除 SecurityManager 相关路径(JEP 486 永久禁用) A SecurityManager 仍被序列化使用 B JEP 486 永久禁用 SecurityManager,序列化安全改用 ObjectInputFilter 与模块机制 ✓ 正确答案 C 序列化不受影响 D JEP 486 移除 ObjectInputFilter
# 21. JDK 25 中 ObjectInputFilter 在反序列化黑白名单与 JEP 290 的工程价值 A 过滤器只能限制性能 B 黑白名单无法配置 C JEP 290 与反序列化无关 D ObjectInputFilter 用黑白名单与规模限制防反序列化攻击,是反序列化安全的核心防线 ✓ 正确答案
# 22. JDK 25 中 readObject/writeObject 在反序列化攻击(Deserialization Attack)下的防护 A readObject 需严格校验数据、避免危险操作,配合 ObjectInputFilter 过滤,防护反序列化攻击 ✓ 正确答案 B readObject 无需防护 C 反序列化总是安全 D writeObject 无作用
# 23. 序列化框架性能基准方法(JMH)与对象图规模、循环引用对结果的影响 A JMH 提供准确基准,对象图规模与循环引用影响序列化开销与框架差异,基准需覆盖场景 ✓ 正确答案 B JMH 只测吞吐 C 循环引用不影响结果 D 对象图规模无关紧要