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

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

  1. 高薪程序员面试题精讲系列127之如何设计一个消息队列?如何保证消息的执行顺序?

    一. 面试题及剖析 1. 今日面试题 如何保证消息队列中消息的执行顺序? RabbitMQ消息过期了怎么办? 如何设计一个消息队列? 如果让你自己设计一个消息队列,该怎么实现? 2. 题目剖析 壹哥在 ...

  2. 消息中间件系列(七):如何从0到1设计一个消息队列中间件

    消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...

  3. 阿里Java面试题剖析:为什么使用消息队列?消息队列有什么优点和缺点?

    面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...

  4. 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?

    GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...

  5. 面试官竟让我用Redis实现一个消息队列!

    来自公众号:Hollis >>>千人线上直播活动报名倒计时(今晚20:00): 从Oracle出发,走进GaussDB的世界 众所周知,redis是一个高性能的分布式key-valu ...

  6. 考研数据结构之队列(3.3)——练习题之设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空来设计队列的结构和相关基本运算算法(C表示)

    题目 设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空,约定当tag为0时队空,当tag为1时队不空,这样就可以用front==rear作为队满 ...

  7. 面试题:如何设计一个高并发系统?

    面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确实有真才实学,在互联网公司里干过高 ...

  8. 面试题:如何设计一个高并发的系统?

    这道面试题涉及的知识点比较多,主要考察的是面试者的综合技术能力.高并发系统的设计手段有很多,主要体现在以下五个方面. 1.前端层优化 ① 静态资源缓存:将活动页面上的所有可以静态的元素全部静态化,尽量 ...

  9. 面试题:如何设计一个分布式系统?

    分布式系统设计 文章目录 分布式系统设计 前言 一.什么是分布式系统 二.CAP理论 三.中间件 四.常见分布式问题解决方案及举例(真正的解决方案改天有空写写吧) 总结 前言 此文章内容仅供参考,起因 ...

最新文章

  1. CTO 写的代码,真是绝了
  2. 热键枚举Winform程序全局热键与局部热键(键盘快捷键的捕获)
  3. runtime无法执行grep_让你的 Shell 命令执行可视化和告警
  4. openwrt安装oracle,Openwrt安装软件的方法-tomcat 随笔小记-install ubuntu 12.04 in virtualbox_169IT.COM...
  5. 002_Container布局容器
  6. 朝花夕拾——finally/final/finalize拨云雾见青天
  7. RSocket协议初识
  8. 数据可视化组件Grafana详细解读--RedHat/Fedora/CentOS/Oracle上的安装
  9. bootstrap table 适应移动端_前端框架bootstrap和layui有什么区别
  10. 在64位linux上编译曾经在32位linux编译过,含有32位目标文件的错误的解决办法
  11. 北京互联网人寒冬求职记
  12. Spring Cloud Sleuth服务链路跟踪之入门篇(学习总结)
  13. Shell脚本学习指南读书笔记(一)
  14. 数学分析教程(科大)——1-(1~10)小节
  15. 如何快速裁剪pdf中的页面
  16. ASO关键词覆盖怎么做?要做到多少?怎么提升aso关键词覆盖率
  17. python画父子关系图_python elasticsearch-dsl父子关系
  18. java-nio网络编程
  19. Windows下生成dump文件的三种方式
  20. 3904三极管是什么功能_学三极管能遇到这篇巧文,我太幸福了!

热门文章

  1. 使用valgrind检查内存问题
  2. LeetCode 417 太平洋大西洋水流问题
  3. 173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树
  4. USACO-Section1.4 Barn Repair (贪心算法)
  5. Python删除文件、删除文件夹
  6. Python 16进制与字符串的转换、二进制 to 十进制、十六进制 to 十进制、十进制 to 二进制
  7. 栈的顺序存储及实现(二)
  8. Two sum(给定一个无重复数组和目标值,查找数组中和为目标值的两个数,并输出其下标)...
  9. python第八题 查找敏感单词
  10. Nhibernate代码自动生成工具[转]