JAVA面试题:你怎么设计一个消息队列?

  1 面试题

  写一个消息队列,你如何进行架构设计,说一下你的思路!

  2 考点分析

  一般面试官要考察两块:

  (1)你有没有对某一个消息队列做过较为深入的原理的了解,或者从整体了解把握住一个mq的架构原理

  (2)看看你的设计能力,给你一个常见的系统,就是消息队列系统,看看你能不能从全局把握一下整体架构设计,给出一些关键点出来

  说实话,一般面类似问题的时候,大部分人基本都会蒙,因为平时从来没有思考过类似的问题,大多数人就是平时埋头用,从来不去思考背后的一些东西。

  类似的问题,经常问的还有,如果让你来设计一个spring框架你会怎么做?如果让你来设计一个dubbo框架你会怎么做?如果让你来设计一个mybatis框架你会怎么做?

  3 详解

  其实回答这类问题,说白了,不求你看过那技术的源码,起码你大概知道那个技术的基本原理,核心组成部分,基本架构构成,然后参照一些开源的技术把一个系统设计出来的思路说一下就好

  比如说这个消息队列,我们来从以下几个角度来考虑一下

  3.1 支持可伸缩性

  需要的时候快速扩容,就可增加吞吐量和容量,那怎么搞?

  设计个分布式的系统呗,参照一下kafka的设计理念,broker - topic - partition,每个partition放一个机器,就存一部分数据。如果现在资源不够了,简单啊,给topic增加partition,然后做数据迁移,增加机器,不就可以存放更多数据,提供更高的吞吐量了?

  3.2 数据落地

  那肯定要了,落磁盘,才能保证别进程挂了数据就丢了。那落磁盘的时候怎么落啊?顺序写,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能是很高的,这就是kafka的思路。

  3.3 其次你考虑一下你的mq的可用性啊

  这个事儿,具体参考我们之前可用性那个环节讲解的kafka的高可用保障机制。多副本 - leader follower - broker挂了重新选举leader即可对外服务。

  3.4 支持数据0丢失

  可以的,参考我们之前说的那个kafka数据零丢失方案

  其实一个mq肯定是很复杂的,面试官问你这个问题,其实是个开放题,他就是看看你有没有从架构角度整体构思和设计的思维以及能力。确实这个问题可以刷掉一大批人,因为大部分人平时不思考这些东西。

  


转载于:https://juejin.im/post/5cce8e986fb9a0323d6e1788

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值