消息队列的面试题7

news/2024/7/5 1:51:29

 

1、面试题

 

如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路

 

2、面试官心里分析

 

其实聊到这个问题,一般面试官要考察两块:

 

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

 

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

 

说实话,我一般面类似问题的时候,大部分人基本都会蒙,因为平时从来没有思考过类似的问题,大多数人就是平时埋头用,从来不去思考背后的一些东西。类似的问题,我经常问的还有,如果让你来设计一个spring框架你会怎么做?如果让你来设计一个dubbo框架你会怎么做?如果让你来设计一个mybatis框架你会怎么做?

 

3、面试题剖析

 

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

 

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

 

1)首先这个mq得支持可伸缩性吧,就是需要的时候快速扩容,就可以增加吞吐量和容量,那怎么搞?设计个分布式的系统呗,参照一下kafka的设计理念,broker -> topic -> partition,每个partition放一个机器,就存一部分数据。如果现在资源不够了,简单啊,给topic增加partition,然后做数据迁移,增加机器,不就可以存放更多数据,提供更高的吞吐量了?

 

2)其次你得考虑一下这个mq的数据要不要落地磁盘吧?那肯定要了,落磁盘,才能保证别进程挂了数据就丢了。那落磁盘的时候怎么落啊?顺序写,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能是很高的,这就是kafka的思路。

 

(3)其次你考虑一下你的mq的可用性啊?这个事儿,具体参考我们之前可用性那个环节讲解的kafka的高可用保障机制。多副本 -> leader & follower -> broker挂了重新选举leader即可对外服务。

 

4)能不能支持数据0丢失啊?可以的,参考我们之前说的那个kafka数据零丢失方案

 

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

 

转载于:https://www.cnblogs.com/daiwei1981/p/9403925.html


http://lihuaxi.xjx100.cn/news/237406.html

相关文章

区块链基础:理论和术语

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 一、区块链: 1.百度百科上对区块链的定义是:区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机 技…

vm

为什么80%的码农都做不了架构师?>>> ps ax -O ppid,flags,mwchan | awk $6 ~ /^D/ || $6 "STAT" 转载于:https://my.oschina.net/doz/blog/1630464

堆和栈的区别 之 数据结构和内存

数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。 堆和栈都是一种数据项按序排列的数据结构。 栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧,它是一种具有后进先…

gdb -iex_如何使用IEX Cloud,Matplotlib和AWS在Python中创建自动更新数据可视化

gdb -iexPython is an excellent programming language for creating data visualizations.Python是用于创建数据可视化的优秀编程语言。 However, working with a raw programming language like Python (instead of more sophisticated software like, say, Tableau) presen…

tailf

功能说明:tailf命令几乎等同于tail -f,与tail -f不同的是,如果文件不增长,那么它不会去访问磁盘文件,也不会更改文件的访问时间。tailf命令在工作中的主要使命就是跟踪日志文件,首先将默认输出日志文件的最…

面向对象进阶2 组合

2019独角兽企业重金招聘Python工程师标准>>> 一:命名空间 class Person:Country 中国人 # 静态变量print(Person.Country) alex Person() # 创建了一个空的命名空间 alex.name alex # 对象 alex.Country 泰国人 egon Person() egon.name ego…

区块链和可持续性

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链和可持续性 在区块链算法和区块链平台方面,可持续性可以有多种解释。一方面,任何听说过比特币网络能源需求的…

python添加数组元素_Python列表附录–如何向数组添加元素,并附带示例说明

python添加数组元素欢迎 (Welcome) Hi! If you want to learn how to use the append() method, then this article is for you. This is a powerful list method that you will definitely use in your Python projects.嗨! 如果您想学习如何使用append()方法&…