标签题目
消息队列相关面试题
RocketMQ 和 Kafka 有什么区别?
这题考察消息队列选型,要从模型、存储复制、顺序语义、事务/延迟能力、消费重试和生态取舍比较,而不是简单说一个快一个稳。
消费者端幂等性如何实现?
这题考察至少一次投递下的消费安全,核心是用业务唯一键、可靠去重记录和状态机把重复消息变成无副作用。
最终一致性如何保障?
考察分布式系统在不能同步强一致时,如何用可靠事件、幂等消费、重试补偿和对账把状态收敛到正确结果。
RabbitMQ 如何实现消费者负载均衡?
RabbitMQ 的消费者负载均衡主要依赖同一队列上的多个竞争消费者。队列把每条消息投递给其中一个消费者,再通过 manual ack 和 prefetch 控制未确认消息数量,让处理更快的消费者获得更多后续消息。
RabbitMQ 仲裁队列的消费组如何工作?
RabbitMQ 仲裁队列是基于 Raft 的复制队列,解决的是队列高可用和数据一致性问题;它本身不是 Kafka 式消费组。消费者仍然通过订阅同一个队列竞争消费,消息由当前 leader 负责投递和确认推进。
RabbitMQ 延时队列通常如何实现?
RabbitMQ 延时队列常见实现有两类:使用 TTL 加死信交换机间接延迟,或使用 delayed message exchange 插件直接按延迟投递。前者通用但有顺序阻塞等细节,后者语义更直观但依赖插件。
Kafka 如何保证消息顺序性?
Kafka 的顺序性建立在分区日志之上:单个分区内消息按追加顺序存储和消费;跨分区不保证全局顺序。要保证同一业务维度有序,关键是把相同业务键路由到同一分区,并控制生产、消费和重试策略。
java中有哪些以队列、链表为底层实现的数据结构?
Java 里要区分“队列接口”和“链表底层”。Queue、Deque 是行为抽象,表示先进先出、双端队列或优先级访问;LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue 这类才是链式节点结构。ArrayDeque、ArrayBlockingQueue、PriorityQueue 虽然暴露队列接口,但底层分别是循环数组、有界数组和二叉堆数组,不是链表。LinkedHashMap 则是哈希表加双向链表,用链表维护插入顺序或访问顺序,但它本身不实现 Queue。
消息队列如何保证消息不丢失?
消息队列不丢失不能只回答“开持久化、开确认、消费后再 ack”。更好的回答是把消息链路拆成 producer、broker、consumer 三段,逐段说明消息丢失产生的位置、对应可靠性机制、机制代价,以及至少一次、至多一次、恰好一次之间的取舍。
Mq-Bus 数据量太大延迟怎么办?
消息总线数据量过大导致延迟时,不能只回答加消费者,而要按生产端、broker、消费者三段定位瓶颈,再做止血和长期治理。核心思路是看 TPS、lag、分区倾斜、消费耗时、失败重试、资源水位;再用扩分区、提升消费并行度、批量处理、限流削峰、幂等、死信和容量规划形成闭环。
Kafka 为什么吞吐量高?
Kafka 的高吞吐不是单点优化,而是围绕日志追加模型构建的一整套链路设计:生产端批量发送和压缩降低请求次数与网络字节数,Broker 端用顺序写和 Page Cache 减少随机磁盘 IO,发送文件时利用零拷贝降低用户态与内核态拷贝成本,Topic 分区让读写并行扩展,消费者拉取模型让消费端按自身能力批量读取。同时,ISR、acks、副本数、刷盘策略等可靠性配置会影响吞吐,面试中要讲清这些设计如何共同减少 IO、网络、CPU 和锁竞争开销。
为什么会使用 Redis 实现消息队列?它适合哪些场景?
为什么会使用 Redis 实现消息队列?它适合哪些场景?这道腾讯牛客题的关键是围绕“Redis 实现消息队列场景”讲清概念、机制、取舍和边界。Redis 可以做轻量消息队列,适合延迟敏感、吞吐中等、业务可接受 at-least-once 和重复消费的场景。常见实现包括 List、Pub/Sub 和 Streams,其中 Streams 更适合可靠消费。
Redis 如何保证消息可靠性?
Redis 如何保证消息可靠性?这道腾讯牛客题的关键是围绕“Redis 消息队列可靠性边界”讲清概念、机制、取舍和边界。Redis 可以做轻量消息队列,但可靠性取决于使用 Pub/Sub、List 还是 Streams。Pub/Sub 基本不保存离线消息,List 需要自己设计确认和重试,Streams 支持 consumer group、pending list 和 ACK,更适合需要可靠消费的场景。
RAG 处理大表格时,如何切块、限流和错峰,避免索引写入与消息队列被压垮?
这题考的是候选人能否把大表格 RAG 从“把每一行都扔进 embedding 和向量库”升级为可控的数据管道:先减少无效 chunk,再用限流、批量、队列削峰、错峰调度和可观测性保护索引系统与消息队列。
Agent 异步任务通过消息队列处理时,如何将处理结果与原请求关联,为什么不直接用数据库通信?
这题考 Agent 异步任务的工程链路。回答要讲 correlation id、状态表、幂等、回调、超时和消息队列与数据库的职责边界。