#探寻人工智能,人与AI全新序章#
很多Java程序员都有这样的经历:面试官看着简历,随口一句:“你们公司生产环境用的是什么消息中间件?”不少人立刻回答:“RabbitMQ。”结果面试官点点头,又接着问:“为什么不用Kafka?RocketMQ不好吗?ActiveMQ呢?”瞬间大脑一片空白。
其实,这道题真正考察的并不是你会不会MQ,而是你是否具备技术选型思维,今天,小米就给大家讲一个故事。
Java社招面试题:你们公司生产环境用的是什么消息中间件?
前几天,一位准备跳槽的朋友阿杰找到了我,他说:"小米,我最近准备面试一家互联网公司,结果第一轮技术面就被问懵了。"
我笑着问:"问啥了?"
他说:"面试官问:你们公司生产环境使用什么消息中间件?为什么选择它?为什么不用Kafka?"
他说自己当时回答:"我们公司用RabbitMQ……然后就没有然后了……"
面试官继续问:"为什么?"
空气突然安静。
其实,这个问题,就像老板问:你为什么买SUV,而不是跑车?真正想知道的不是车名,而是为什么你的公司适合这辆车,而MQ,也是一样。
MQ,就像一家物流公司
我们把整个系统想象成一个大型物流园,一家电商公司每天都会发生很多事情,例如:
- 用户下单
- 扣减库存
- 发优惠券
- 发短信
- 发物流通知
- 积分增加
- 数据统计
如果全部同步完成,就像老板要求快递员一个人送全国所有快递,结果自然就是累死。
于是,公司决定成立一家物流中转站,所有业务都先把"包裹"送到物流中心,物流中心再慢慢派送,这个物流中心,就是MQ(Message Queue,消息队列),它负责:
- 解耦
- 削峰
- 异步
- 流量缓冲
所以几乎所有互联网公司都会使用MQ,真正不同的是到底选择哪一家物流公司。
我们公司生产环境为什么选择 RabbitMQ?
如果我是候选人,我通常会这样回答:
我们公司目前生产环境主要使用 RabbitMQ,主要用于订单、短信通知、库存同步、日志异步处理等业务。 之所以选择 RabbitMQ,主要是因为我们属于典型的业务系统,对消息可靠性要求较高,而消息吞吐量并没有达到互联网超大规模场景,因此 RabbitMQ 比较适合我们的业务。
这一段回答其实已经包含了三个关键信息:
- 使用什么MQ
- 用在哪里
- 为什么选择它
面试官一般都会继续往下问。
RabbitMQ 为什么这么受欢迎?
RabbitMQ可以理解成一家非常正规的快递公司,它最大的特点就是稳,它基于AMQP协议,拥有非常丰富的消息模型,例如:
- Direct
- Topic
- Fanout
- Headers
各种交换机几乎可以满足所有业务,例如订单创建:
![]()
一个订单,可以同时通知多个系统,这就是RabbitMQ最擅长的事情,除此之外,它还有:
- 消息确认ACK
- 持久化
- 死信队列
- 延迟队列(插件)
- 优先级队列
- 重试机制
- Publisher Confirm
所以很多传统互联网企业、金融企业、企业管理系统都会优先选择RabbitMQ。
那为什么还有那么多人选择 Kafka?
这时候,我又给阿杰举了个例子。
- RabbitMQ像什么?像顺丰,服务非常好,每个快递都会认真处理,但是速度不是最快。
- Kafka像什么?像铁路货运,一次可以拉几百万吨货,速度极快,但是它不是为了每一件包裹都做到极致服务。
Kafka最大的特点就是吞吐量极高,很多公司每天都会产生:
- 日志
- 埋点
- 用户行为
- Click流
- 大数据采集
一天几十亿条消息,RabbitMQ根本扛不住,Kafka却非常适合,所以像:
- 日志平台
- ELK
- 大数据
- 实时计算
- Flink
- Spark Streaming
几乎都会优先Kafka。
RocketMQ 又是什么定位?
如果RabbitMQ是顺丰,Kafka是铁路,那么RocketMQ更像京东物流,为什么?
它最初就是阿里巴巴为了双十一开发出来的,特点就是既要快,也要可靠,尤其在:
- 订单
- 交易
- 支付
- 库存
- 延迟消息
- 事务消息
方面,非常成熟,它支持:
- 顺序消息
- 延迟消息
- 定时消息
- 事务消息
- 消息回查
所以国内很多互联网公司都会使用RocketMQ,尤其电商行业。
ActiveMQ 为什么越来越少见?
很多老Java程序员第一次接触MQ,基本都是 ActiveMQ,因为Spring整合简单,学习成本低,但是后来发现:
- 高并发能力一般。
- 集群能力一般。
- 维护成本越来越高。
慢慢就被RabbitMQ和RocketMQ替代了,现在很多公司已经很少作为新项目首选。
不同消息中间件技术选型分析
![]()
面试中应该怎么回答才更专业?
如果面试官问:你们公司为什么选择RabbitMQ?建议不要只回答:因为大家都用。
而应该从技术选型角度分析,例如:
我们公司的业务属于典型的互联网业务系统,消息量每天大约几百万到几千万级,没有达到日志平台那种几十亿条消息的规模,因此并不需要Kafka那种超高吞吐能力。相比之下,我们更关注消息可靠性、灵活的路由能力以及完善的重试、死信和确认机制。RabbitMQ 在这些方面比较成熟,Spring Boot 集成也非常方便,因此最终选择了 RabbitMQ。
如果公司使用RocketMQ,也可以回答:
我们业务涉及订单、支付、库存等核心交易流程,需要保证消息的一致性,同时需要事务消息、顺序消息、延迟消息等能力,因此 RocketMQ 更符合我们的业务特点。
如果公司使用Kafka,则可以回答:
我们主要用于日志采集、用户行为分析和实时数据处理,系统每天会产生海量消息,对吞吐量和横向扩展能力要求非常高,因此采用 Kafka 作为消息平台。
这样的回答,能够体现你理解的是业务驱动技术选型,而不是简单记住了一个产品名称。
面试官真正想听到什么?
很多人认为这道题是在考MQ,其实不是,它真正考察的是:你是否理解不同技术的定位,以及是否能够根据业务场景做出合理的技术选型。
没有哪一种消息中间件能够适用于所有场景:
- RabbitMQ 擅长可靠消息和灵活路由;
- Kafka 擅长海量数据流和高吞吐;
- RocketMQ 在交易型互联网业务中表现突出;
- ActiveMQ 更常见于历史项目维护。
真正优秀的工程师,不会说"这个技术最好",而会说:我们的业务特点是什么,我们需要解决什么问题,因此选择了最合适的消息中间件。
这,才是这道社招面试题背后的核心考点。
如果面试中被问到"你们公司生产环境用的是什么消息中间件?",不要急着只报出一个名字,而是按照"使用什么 → 用在哪里 → 为什么选择 → 为什么不用其他MQ"的逻辑进行回答。
这样的回答不仅能够展示你对 RabbitMQ、Kafka、RocketMQ 等主流消息中间件的理解,更能体现你的系统设计能力和技术选型思维。在社招面试中,这类答案往往比单纯背诵概念更容易获得面试官认可。真正的技术人,不只是会用工具,更重要的是知道什么时候用、为什么用。
好朋友们,我们下篇见~
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.