全部学科
Python全栈
python
NodeJS全栈
nodejs

消息序列化与格式专题测试

18 题 45 分钟 难度:★★

考察知识点

  • 消息序列化与格式相关概念
  • RabbitMQ 进阶实践
💡 参考答案在文末
判断题
1

Protobuf消息在RabbitMQ中传输时,由于采用二进制编码格式,消费者无需知道.proto文件定义即可正确反序列化消息。

A

B

2

在RabbitMQ中使用JSON作为消息体格式时,如果生产者和消费者使用不同的编程语言,只要都遵循相同的JSON Schema结构,就可以实现正确的序列化和反序列化。

A

B

3

RabbitMQ单条消息的大小没有硬性上限,可以无限制地发送超大消息,只要生产者和消费者内存足够即可。

A

B

4

在RabbitMQ中,消息的content_type属性是一个可选的元数据字段,不设置该属性不会影响消息的正常投递和消费。

A

B

单选题
5

在Spring AMQP中使用Jackson2JsonMessageConverter作为消息转换器,当消费者接收到一条content_typetext/plain的消息时,会发生什么情况?

A

正常将消息反序列化为Java对象

B

抛出异常,因为content_type不匹配

C

自动将消息按JSON格式解析,忽略content_type

D

消息被丢弃,不投递给消费者

6

在RabbitMQ中处理超大消息时,以下哪种策略是最推荐的?

A

调大frame_max参数,允许直接传输超大消息

B

将消息体存储到对象存储中,仅在RabbitMQ中传递引用URL

C

将大消息拆分为多条独立消息,消费者端不做任何关联

D

关闭Broker的内存限制,让消息无限制堆积

7

消息分片方案中,如果消费者端在重组大消息时发现某个分片丢失,以下最合理的处理方式是?

A

使用默认值填充缺失分片,继续处理消息

B

丢弃已收到的所有分片,等待生产者重发完整消息

C

将该消息标记为处理失败,移入死信队列等待人工介入

D

主动阻塞消费者线程,直到缺失分片到达

8

当RabbitMQ消息的Protobuf结构发生变更(新增字段)时,以下哪种消费者行为是正确的?

A

老版本消费者抛出UnknownFieldException异常

B

老版本消费者忽略新字段,正常解析已知字段

C

新版本消费者无法解析老生产者发送的消息

D

Broker会拒绝序列化格式不匹配的消息投递

9

在RabbitMQ Java客户端中发送JSON格式消息时,以下设置content_type的方式正确的是?

A

properties.setContentType("json")

B

properties.setContentType("application/json")

C

properties.setContentType("JSON")

D

properties.setContentType("text/json")

10

在RabbitMQ中使用Protobuf作为消息序列化格式时,以下哪项不是Protobuf相比JSON的优势?

A

消息体积更小,减少网络传输开销

B

序列化和反序列化速度更快,CPU开销更低

C

可读性更好,便于日志排查和问题调试

D

支持向后兼容,新增字段不会破坏老版本消费者

多选题
11

在RabbitMQ中使用Protobuf序列化消息时,以下哪些做法是正确的?

A

在消息的BasicProperties中设置content_type为application/x-protobuf

B

频繁修改.proto文件中的字段编号以优化结构

C

对已废弃的字段编号使用reserved关键字防止复用

D

将repeated字段用于列表类型数据,其编码效率优于JSON数组

12

以下关于RabbitMQ消息JSON序列化的描述,哪些是正确的?

A

JSON格式的消息体积通常比Protobuf大

B

JSON序列化后的消息体是UTF-8编码的文本

C

在JSON消息中可以安全地传输Java的Date对象

D

消费者端反序列化JSON时,字段顺序必须与生产者端完全一致

13

以下关于RabbitMQ消息content_type属性的描述,哪些是正确的?

A

content_type会影响Broker对消息的路由决策

B

消费者可以通过content_type自动选择合适的反序列化器

C

content_type的值必须是合法的MIME类型字符串

D

Spring AMQP中可以根据消息转换器自动设置content_type

14

在RabbitMQ中处理大消息时,以下哪些方案可以有效降低传输风险?

A

使用GZIP或Snappy对消息体进行压缩后再发送

B

将消息分片并通过独立的队列发送,消费者端分别消费

C

直接以byte[]形式发送,依赖RabbitMQ自动处理大消息

D

在消息头中设置x-max-in-memory-size控制Broker内存使用

填空题
15

Protobuf中字段的数据类型____________使用可变长度编码,数值越小占用字节越少。而Protobuf通过____________而非字段名来标识每个字段,这使得在消息结构演进时具有天然的兼容性。

16

在RabbitMQ中,content_type用于标识消息体的MIME类型,而content_encoding用于标识消息体的____________。当消息体使用GZIP压缩后以Base64编码传输时,content_encoding应设置为____________

17

消息分片传输方案中,生产者需要将大消息拆分为多个片段,每个片段携带________________________两个关键元数据,消费者端通过聚合器按序号重组完整消息。

18

在Java中使用JSON序列化RabbitMQ消息时,如果对象中存在____________会导致StackOverflowError,此时可通过添加____________来忽略该字段或使用@JsonIgnore排除。

参考答案
1.错误 2.正确 3.错误 4.正确 5.B 6.B 7.C 8.B 9.B 10.C 11.A;C;D 12.A;B 13.B;C;D 14.A;B 15.varint;字段编号 16.编码格式;GZIP 17.分片序号;总分片数 18.循环引用;@JsonManagedReference / @JsonBackReference
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 消息可靠性保障专题测试
下一套试卷 → 消息确认机制基础专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码