序列化与反序列化

共 23 题
#

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 对象图规模无关紧要