全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

底层原理与架构专题

专题说明

本专题深入剖析 RabbitMQ 的底层架构设计,包括 Erlang 运行时模型、消息存储机制、网络通信模型、AMQP 协议实现以及核心组件的工作原理。通过本专题的学习,读者将从源码级别理解 RabbitMQ 的运行本质,为性能调优和故障排查打下坚实基础。

学习目标

  1. 理解 RabbitMQ 基于 Erlang/OTP 的并发模型和进程树架构
  2. 掌握消息存储机制(Mnesia 数据库、消息持久化、索引结构)
  3. 深入理解 AMQP 协议模型和网络通信实现

学习建议

专家级内容需要深入理解底层原理,建议结合源码学习。

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

📝 配套习题(20 题)

1
判断题

AMQP 0-9-1 协议中,Connection 层级之下直接是 Exchange 层级,消息通过 Exchange 路由到 Queue,因此 AMQP 协议模型是 Connection → Exchange → Queue → Consumer 四层结构。

A

B

2
单选题

在 AMQP 0-9-1 协议中,以下哪种帧类型用于在 Connection 级别传输协议协商和控制信息?

A

Header Frame

B

Body Frame

C

Method Frame

D

Heartbeat Frame

3
多选题

RabbitMQ 原生支持 AMQP 0-9-1,并通过插件支持 AMQP 1.0。以下关于两个版本区别的描述正确的有?

A

AMQP 1.0 引入了 Container 概念替代 0-9-1 的 Connection

B

AMQP 1.0 支持更灵活的消息路由和拓扑结构

C

AMQP 0-9-1 使用 Exchange/Queue 模型,AMQP 1.0 使用 Source/Target 模型

D

AMQP 1.0 不再支持消息确认机制

E

两个版本的帧格式和编解码方式完全不同

4
填空题

AMQP 0-9-1 连接建立时,客户端首先发送 _______________ 帧(包含协议版本信息),随后服务端返回 ________________ 方法进行能力协商。

5
单选题

在 RabbitMQ 服务端解析 AMQP 协议时,以下关于帧解码过程的描述正确的是?

A

RabbitMQ 使用 JSON 格式反序列化 AMQP 帧内容

B

AMQP 帧使用固定的二进制格式,RabbitMQ 通过模式匹配解码

C

RabbitMQ 依赖 Erlang 的 term_to_binary 进行反序列化

D

AMQP 帧需要先转换为 XML 再解析

6
判断题

BEAM 虚拟机采用抢占式调度(Preemptive Scheduling),每个 Erlang 进程的执行时间片(reduction count)耗尽时会被强制让出 CPU,因此 Erlang 进程的阻塞操作不会影响其他进程的调度。

A

B

7
单选题

RabbitMQ 配置中,erl +S 参数用于设置 BEAM 的调度器数量(Schedulers)。以下关于调度器的描述正确的是?

A

调度器数量应始终设置为 CPU 核心数的 2 倍以获得最佳性能

B

每个调度器绑定到一个操作系统线程,并独立调度 Erlang 进程

C

调度器数量越多越好,不受 CPU 核心数限制

D

调度器仅负责 I/O 密集型进程的调度,CPU 密集型进程由 OS 调度

8
多选题

关于 BEAM 虚拟机的垃圾回收(GC)机制,以下描述正确的有?

A

BEAM 采用分代垃圾回收(Generational GC)策略

B

每个 Erlang 进程拥有独立的堆空间,GC 以进程为单位执行

C

BEAM 的 GC 是全局暂停的(Stop-the-World),会影响所有进程

D

进程堆空间满时触发该进程的独立 GC

E

老对象(存活时间长的数据)会被提升到老年代减少扫描频率

9
填空题

BEAM 虚拟机默认支持的最大 Erlang 进程数量由 _____________ 参数控制,默认值为 _______(约 100 万)。RabbitMQ 的每个连接和队列都对应一个或多个 Erlang 进程。

10
单选题

RabbitMQ 内部各组件(如连接进程、队列进程、路由进程)之间进行数据传递时,使用的是以下哪种 Erlang 机制?

A

共享内存(Shared Memory)

B

进程间消息传递(Message Passing),使用 ! 操作符发送消息

C

全局变量(Global Variables)

D

文件系统临时文件中转

11
判断题

Mnesia 是 RabbitMQ 用于存储集群元数据的分布式数据库,它支持 ACID 事务并在所有节点间同步数据,因此当某个节点宕机后,该节点上的数据会自动从其他节点恢复,无需人工干预。

A

B

12
单选题

在 RabbitMQ 的 Mnesia 数据库中,用于存储队列和交换机定义的元数据表主要使用以下哪种存储类型?

A

ram_copies(仅内存存储)

B

disc_copies(磁盘存储,所有操作同时写入磁盘)

C

disc_only_copies(仅磁盘存储,读取时需要从磁盘加载)

D

上述三种类型的混合使用

13
多选题

关于 Mnesia 数据库的读写操作,以下描述正确的有?

A

Mnesia 支持事务性读写,通过 mnesia:transaction 保证原子性

B

Mnesia 的 dirty_read/dirty_write 操作速度快但不保证事务隔离

C

Mnesia 的写操作在 disc_copies 表上会阻塞等待磁盘确认

D

Mnesia 使用 Erlang Term 作为数据的内部存储格式

E

Mnesia 不支持跨节点的数据复制

14
填空题

在 RabbitMQ 集群中,存储元数据的 Mnesia 节点分为两种角色:______ 节点将数据持久化到磁盘,______ 节点仅在内存中存储数据,启动时从 disc 节点同步数据。

15
单选题

以下关于 Mnesia 在 RabbitMQ 中存储职责的描述,正确的是?

A

Mnesia 存储所有消息内容,包括消息体和消息头

B

Mnesia 仅存储元数据(队列、交换机、绑定、用户权限等),消息内容由独立的持久化模块存储

C

Mnesia 存储消费者确认状态,消息内容存储在其他数据库

D

Mnesia 存储消息路由键,消息体存储在文件系统中

16
判断题

RabbitMQ 中,持久化消息(Delivery Mode = 2)在 Broker 接收后会立即同步写入磁盘,只有写入成功后才会向生产者返回 Publisher Confirm,因此持久化消息的发布延迟一定高于非持久化消息。

A

B

17
单选题

RabbitMQ 中每条持久化消息在队列中都有一个对应的索引记录,该索引主要存储以下哪些信息?

A

消息内容全文和消息大小

B

消息在日志文件中的偏移量和消息 ID

C

消费者的 ACK 状态和消息过期时间

D

交换机的名称和路由键

18
多选题

一条持久化消息从生产者发布到最终被消费者确认,在 RabbitMQ 存储系统中经历以下哪些阶段?

A

消息写入预写日志(WAL)

B

消息写入队列索引文件

C

消息投递到消费者后,从 WAL 中标记为可删除

D

消费者 ACK 后,消息立即从磁盘物理删除

E

消息在内存中保留一份副本用于快速投递

19
填空题

RabbitMQ 的预写日志(WAL)文件默认存储在 ______ 目录下的 __________ 子目录中,每个队列的消息按写入顺序追加到日志文件。

20
单选题

当 RabbitMQ 队列中的消息量超过内存容量时,以下关于消息驱逐(Message Paging)机制的描述正确的是?

A

最新的消息被驱逐到磁盘,旧消息保留在内存

B

旧消息被驱逐到磁盘,最新消息保留在内存以支持快速投递

C

所有消息平均分布在内存和磁盘中

D

消息全部保留在内存,仅索引写入磁盘

← 上一个专题 工作队列模式专题
下一个专题 → 性能调优与优化专题

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

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

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

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