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
JAVA面试题:你怎么设计一个消息队列?相关推荐
- 高薪程序员面试题精讲系列127之如何设计一个消息队列?如何保证消息的执行顺序?
一. 面试题及剖析 1. 今日面试题 如何保证消息队列中消息的执行顺序? RabbitMQ消息过期了怎么办? 如何设计一个消息队列? 如果让你自己设计一个消息队列,该怎么实现? 2. 题目剖析 壹哥在 ...
- 消息中间件系列(七):如何从0到1设计一个消息队列中间件
消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...
- 阿里Java面试题剖析:为什么使用消息队列?消息队列有什么优点和缺点?
面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...
- 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...
- 面试官竟让我用Redis实现一个消息队列!
来自公众号:Hollis >>>千人线上直播活动报名倒计时(今晚20:00): 从Oracle出发,走进GaussDB的世界 众所周知,redis是一个高性能的分布式key-valu ...
- 考研数据结构之队列(3.3)——练习题之设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空来设计队列的结构和相关基本运算算法(C表示)
题目 设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空,约定当tag为0时队空,当tag为1时队不空,这样就可以用front==rear作为队满 ...
- 面试题:如何设计一个高并发系统?
面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确实有真才实学,在互联网公司里干过高 ...
- 面试题:如何设计一个高并发的系统?
这道面试题涉及的知识点比较多,主要考察的是面试者的综合技术能力.高并发系统的设计手段有很多,主要体现在以下五个方面. 1.前端层优化 ① 静态资源缓存:将活动页面上的所有可以静态的元素全部静态化,尽量 ...
- 面试题:如何设计一个分布式系统?
分布式系统设计 文章目录 分布式系统设计 前言 一.什么是分布式系统 二.CAP理论 三.中间件 四.常见分布式问题解决方案及举例(真正的解决方案改天有空写写吧) 总结 前言 此文章内容仅供参考,起因 ...
最新文章
- CTO 写的代码,真是绝了
- 热键枚举Winform程序全局热键与局部热键(键盘快捷键的捕获)
- runtime无法执行grep_让你的 Shell 命令执行可视化和告警
- openwrt安装oracle,Openwrt安装软件的方法-tomcat 随笔小记-install ubuntu 12.04 in virtualbox_169IT.COM...
- 002_Container布局容器
- 朝花夕拾——finally/final/finalize拨云雾见青天
- RSocket协议初识
- 数据可视化组件Grafana详细解读--RedHat/Fedora/CentOS/Oracle上的安装
- bootstrap table 适应移动端_前端框架bootstrap和layui有什么区别
- 在64位linux上编译曾经在32位linux编译过,含有32位目标文件的错误的解决办法
- 北京互联网人寒冬求职记
- Spring Cloud Sleuth服务链路跟踪之入门篇(学习总结)
- Shell脚本学习指南读书笔记(一)
- 数学分析教程(科大)——1-(1~10)小节
- 如何快速裁剪pdf中的页面
- ASO关键词覆盖怎么做?要做到多少?怎么提升aso关键词覆盖率
- python画父子关系图_python elasticsearch-dsl父子关系
- java-nio网络编程
- Windows下生成dump文件的三种方式
- 3904三极管是什么功能_学三极管能遇到这篇巧文,我太幸福了!
热门文章
- 使用valgrind检查内存问题
- LeetCode 417 太平洋大西洋水流问题
- 173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树
- USACO-Section1.4 Barn Repair (贪心算法)
- Python删除文件、删除文件夹
- Python 16进制与字符串的转换、二进制 to 十进制、十六进制 to 十进制、十进制 to 二进制
- 栈的顺序存储及实现(二)
- Two sum(给定一个无重复数组和目标值,查找数组中和为目标值的两个数,并输出其下标)...
- python第八题 查找敏感单词
- Nhibernate代码自动生成工具[转]