全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页

源码分析与扩展专题测试

20 题 60 分钟 难度:

考察知识点

  • 源码分析与扩展相关概念与原理
  • RabbitMQ 专家级实践
1
判断题

RabbitMQ Server 的核心进程模型中,每个虚拟主机(vhost)都运行在独立的 BEAM 虚拟机实例中,彼此之间完全隔离。

A

B

2
单选题

在 RabbitMQ 源码中,负责消息持久化到磁盘的核心模块是以下哪一个?

A

rabbit_channel

B

rabbit_msg_store

C

rabbit_queue

D

mnesia

3
多选题

以下关于 RabbitMQ 核心模块依赖关系的描述,哪些是正确的?

A

rabbit_exchange 模块依赖 rabbit_binding 模块来管理交换机与队列的绑定关系

B

rabbit_queue 模块在初始化时会向 mnesia 注册队列元数据

C

rabbit_channel 模块是消息处理的上层入口,依赖 rabbit_command_assembler 解析 AMQP 帧

D

rabbit_msg_store 模块直接依赖 rabbit_queue 模块来获取消息的队列归属信息

4
填空题

RabbitMQ Server 在启动时,会按照 OTP 规范构建 supervision tree。其中,顶层的 application 名称为 ______,其核心 supervision tree 由 __________ 模块管理;负责监听 TCP 连接并接受客户端请求的模块是 ___________________

5
多选题

在 RabbitMQ 源码中,关于交换机(Exchange)的实现机制,以下哪些描述是正确的?

A

所有内置交换机类型(direct、fanout、topic、headers)都通过同一个 rabbit_exchange_type 接口注册

B

自定义交换机类型必须实现 rabbit_exchange_type 接口并注册到系统中

C

Exchange 的路由逻辑在 rabbit_exchange:route 函数中统一处理,不同类型的路由算法由各自模块实现

D

交换机绑定的持久化信息存储在 rabbit_msg_store 中

6
判断题

在 RabbitMQ 源码实现中,每个队列(Queue)在运行时都对应一个独立的 Erlang 轻量级进程(Process),该进程负责管理队列的所有操作。

A

B

7
单选题

在 RabbitMQ 中,一条消息从发布者(Publisher)发送到消费者(Consumer)接收,以下哪一个是正确的消息处理链路顺序?

A

TCP Connection → Channel → Exchange → Binding → Queue → Consumer

B

Channel → TCP Connection → Exchange → Queue → Binding → Consumer

C

TCP Connection → Exchange → Channel → Binding → Queue → Consumer

D

TCP Connection → Channel → Queue → Exchange → Binding → Consumer

8
多选题

关于 RabbitMQ 消息在 Exchange 路由阶段的源码执行逻辑,以下哪些描述是正确的?

A

消息到达 Exchange 后,会调用 match_routing_key 函数来判断是否与绑定键匹配

B

对于 fanout 类型的交换机,消息会被复制并投递到所有绑定的队列中

C

Exchange 路由过程中,如果消息没有匹配的绑定队列,则消息会被直接丢弃(除非配置了 alternate-exchange)

D

rabbit_exchange:route 函数是同步阻塞调用,必须等待所有目标队列确认接收后才返回

9
填空题

在 RabbitMQ 的源码中,消息通过 Channel 发送时,客户端发送的 AMQP 协议帧首先被 ____________ 模块解析,然后通过 ________________________ 组装成完整的 AMQP 命令,最终由 Channel 进程调用 _____________ 方法将消息投递到 Exchange。

10
多选题

关于 RabbitMQ 消息进入 Queue 后的存储与分发源码逻辑,以下哪些描述是正确的?

A

消息进入队列后,如果是持久化消息,会先写入 rabbit_msg_store 再进入内存队列

B

队列进程会根据消费者的 prefetch_count 来决定是否推送消息

C

消息在队列中的排序遵循 FIFO 原则,但优先级队列会通过红黑树重新排序

D

消费者 ack 消息后,队列进程会立即从内存中删除消息,无论是否持久化

11
判断题

在 RabbitMQ 源码中,当消费者对消息发送 ack 确认后,队列进程会立即将消息从内存和磁盘中删除,并释放相关的消息索引引用。

A

B

12
单选题

开发 RabbitMQ 插件时,以下哪种方式是标准的插件扩展方法?

A

修改 RabbitMQ 核心源码并重新编译

B

编写符合 OTP 规范的 Erlang 应用(.app 文件),通过 rabbitmq-plugins 命令启用

C

通过 HTTP API 动态加载外部脚本

D

在 rabbitmq.conf 中直接编写 Erlang 代码

13
多选题

RabbitMQ 插件开发中,以下哪些是官方支持的扩展点(Extension Points)?

A

rabbit_auth_backend — 自定义身份认证后端

B

rabbit_exchange_type — 自定义交换机类型

C

rabbit_message_transformer — 自定义消息内容转换逻辑

D

rabbit_policy_validator — 自定义策略(Policy)验证规则

14
填空题

开发 RabbitMQ 插件时,标准的项目结构中包含一个 ________ 文件用于定义插件的元数据和依赖;插件的主模块通常实现 _______________ 注册接口,并通过 ______ 机制在 RabbitMQ 生命周期的特定阶段注入自定义逻辑。

15
判断题

RabbitMQ 插件开发可以使用 Java 语言编写,通过 JVM 运行时动态加载到 RabbitMQ Server 中运行。

A

B

16
多选题

在 RabbitMQ 插件开发中,关于钩子(Hook)机制的描述,以下哪些是正确的?

A

可以通过 rabbit_hook 注册 channel.close 钩子来监听通道关闭事件

B

钩子回调函数是同步执行的,会阻塞原始的 AMQP 命令处理流程

C

插件可以同时注册多个钩子到不同的事件点,实现多维度的扩展

D

钩子回调函数内部如果抛出异常,会导致整个 RabbitMQ 节点崩溃

17
单选题

在排查 RabbitMQ 节点内存异常增长时,以下哪个工具或方法最适合用于分析 Erlang 进程的内存分布?

A

rabbitmq-diagnostics check_port_connectivity

B

recon_alloc:memory(allocated_types) 结合 erlang:process_info 分析

C

netstat -anp | grep 5672

D

rabbitmqctl list_queues name messages consumers

18
多选题

以下哪些 RabbitMQ 诊断命令或指标可以用于分析集群的性能瓶颈?

A

rabbitmq-diagnostics observer_status — 查看节点运行状态和资源使用

B

rabbitmqctl status — 查看节点配置、内存、磁盘等详细状态信息

C

/api/overview HTTP API — 获取集群级别的统计概览(连接数、队列数、消息速率等)

D

erlang:system_info(process_count) — 查看当前 Erlang 进程总数

19
填空题

在 RabbitMQ 中排查消息处理延迟问题时,可以启用 ________________ 插件进行消息级别的跟踪;如果需要分析 Erlang 进程调度延迟,可以使用 ______ 库中的 scheduler_usage 函数;对于磁盘 IO 瓶颈,应检查 _________ 目录的读写性能。

20
判断题

RabbitMQ 运行在 Erlang VM 上,Erlang 的垃圾回收(GC)是按进程进行的,因此某个队列进程的消息积压不会导致整个节点的 GC 停顿。

A

B

← 上一个试卷 消费者模式与并发专题测试
下一个试卷 → 生产实践与最佳实践专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库