面试一线互联网大厂?那这道题目你必须得会!

2019-05-04 14:41:14 来源:网络整理 作者:管理员

原标题:面试一线互联网大厂?那这道题目你必须得会!

作者 | 中华石杉

责编 | 伍杏玲

本文经授权转载自石杉的架构笔记

这篇文章简单给大家来聊一个互联网大厂的Java面试题:如果让你设计一个消息中间件,你会怎么做?

这是面试官在考察一个高级以上的Java工程师的系统设计能力。

给你一个平时大家都常用的一个消息中间件作为命题,让你现场开放式发挥,立马开动脑筋说说如果让你来设计这么一个消息中间件。

让你从整体架构、核心流程、数据结构等各个层面来考虑,你会如何完成这个设计?

其实任何一个面试官都应该知道,如果一个人没有真的做过消息中间件开发的话,是不太可能在短时间内,瞬间给出一套特别靠谱的架构设计方案的。

但是用这个题目作为一个开放式命题,他最大的好处,就是可以尽可能的挖掘出一个候选人的较为真实的系统设计的能力和功底。

为什么这么说呢?

因为如果面试的时候很多东西都是一些常见的技术问题,比如说:

  • 消息中间件如何保证数据不丢失?
  • 聊聊Elasticsearch的架构原理以及性能优化?
  • 你们公司的微服务架构整体如何设计的?

这些问题相对来说都是比较固定的一些问题。

所谓固定的问题,就是只要你花费时间去学习了相关的技术,或者是在自己所在的公司确实有过一些落地的经验,通常来说就能回答出这些问题。

但是这些问题都不够开放,如果两个候选人都同样具备常规问题的回答能力,那么此时通过一道有深度的开放式问题,就可以把几个人里迅速拉开差距,找出来到底谁的技术功底更加深厚,谁的架构设计能力更加强。

那么本文就从各个角度来引导大家去思考一下,假如让你回答这个问题,你可以从哪些方面入手来现场做一些考虑和回答?

生产消费模型以及核心数据结构

首先第一个点,消息中间件本身要做的就是可以允许有人来生产消息,还可以允许有人来消费这个消息。

那么这里要考虑的第一个点,就是消息中间件自己本身的核心数据结构。

也就是说,如果有人生产了消息,你作为一个消息中间件,应该如何存储这个数据?

你会存储在内存里呢?还是存储在磁盘文件里呢?或者两者都同时共存?

可以先允许数据写入内存作为一个缓冲,然后每隔几秒再把数据刷入磁盘文件中?数据刷入磁盘文件之后,这个磁盘文件有多少个?

总不能搞一个磁盘文件来存放所有的数据吧?那么按照什么样的规则对磁盘文件做一个拆分?

数据写入磁盘文件之后,是不是要有相应的一些Metadata来标识这个数据的具体信息?比如这个数据的Offset偏移量,或者是一个内置的唯一ID?

接着现在数据是被存储在磁盘文件里了,那么此时你如何把数据投递到下游的消费者里去呢?

你的消费模型是什么样的?比如说一个Queue里的数据,是会均匀分配给消费者的各个实例呢?还是会怎么做呢?

建议大家可以去研究Kafka底层的文件存储原理,那是非常经典的高性能高并发消息中间件存储架构的实现。

可以参考一下RabbitMQ和Kafka的官网,研究一下不同中间件的消费模型是怎么做的。

面试一线互联网大厂?那这道题目你必须得会!

支撑TB级数据写入的分布式架构

接着考虑第二个大的问题,消息中间件肯定会遇到每天TB级海量数据高并发高吞吐写入的场景。那么消息中间件的架构如何支撑呢?

这里就要考虑一下,数据是不是要分布式的存储?

比如说假如一天写入几百TB的数据,那不可能都放在一台机器上吧?所以数据的分布式存储是不是你要考虑的另外一个很重要的问题?

是不是要考虑把一个大的数据集合做分片存储,比如说分成N片数据,每个数据分片放在一台机器上,这样就可以充分利用多台机器的资源来承载TB级的大量数据了。

此外还需要考虑,数据分片是不是要可以支撑扩容?

比如一开始设置的分片数量是10个,存在10台机器上。结果现在发现10台机器都扛不住了,需要扩容到20个分片,放在20台机器上才可以。

是不是要支持数据分片的扩容以及自动数据负载均衡迁移?也就是10个分片的数据自动均匀分配给扩容后的20个分片。

所以这种分布式以及可伸缩的架构,是另外一个非常核心的点。

我个人同样比较建议大家研究一下Kafka在这块的架构设计,非常的优秀,采用了Partition的概念实现数据分片,支持分布式的数据存储,而且还支持动态扩容。

面试一线互联网大厂?那这道题目你必须得会!

数据宕机场景下的高可用架构

大家此时就要考虑另外一个问题了,就是一旦数据分布式存储之后,那么每台机器上都有一部分数据。

万一这台机器宕机了呢?那么数据是不是就丢失了?

所以高可用的架构就必须考虑到了。

一般分布式系统实现高可用架构,都是采用多副本冗余机制

也就是说一份数据在多台机器上都搞一个副本,这样任何一台机器宕机了,数据肯定不会丢失,你还可以继续使用其他机器上的副本数据来支持生产和消费。

同样建议大家,研究一下Kafka的多副本冗余机制,他的每个Partition数据分片都是有多个副本的,任何一台机器宕机,丢失一个数据分片,还有其他机器上的副本分片在,可以支持数据不丢失。

面试一线互联网大厂?那这道题目你必须得会!

支持数据不丢失的ACK机制

最后再考虑一个问题,消息中间件肯定是要支持数据绝对不丢失的吧?

那么你必须要支持生产端和消费端的ACK机制,在这里你必须考虑两块ACK机制,一个是生产端,一旦投递了消息,必须要求他将数据比如写入多个副本之后,才返回一个ACK回调响应。

否则要是一直没收到ACK的话,就需要重发一条消息过去,保证生产投递成功。

另外一个是消费端,一旦消费处理成功一条消息了,必须返回一个ACK给消息中间件,然后消息中间件才能删除这条消息。

否则一旦消费者宕机,就必须重发这条消息给其他的消费者实例,保证消息一定会被处理成功。

这块如果大家不清楚,建议一定重看之前的系列文章,我们基于RabbitMQ来阐述的这个数据不丢失的全链路ACK机制。

面试一线互联网大厂?那这道题目你必须得会!

这种开放式面试题,牵扯了大量的底层细节和架构思想,非常区分不同人的技术水平。如果你简单回答,就本文涉及到的一些东西简单说一说,基本也能过关。

但是如果你想技压群雄,就必须要根据本文每个部分提示的东西,真的去对各种MQ中间件的底层源码进行深入的研究,然后才能在回答这个问题的时候,展现出“碾压其他人”的技术功底和架构实力。

祝你面试成功!

作者简介:中华石杉,十余年BAT架构经验,倾囊相授。

公众号:石杉的架构笔记(id:shishan100)

【END】

显示全文
为您推荐
榴莲和提子可以同时吃吗,可以(同吃太多会上火)
榴莲和提子可以同时吃吗,可以(同吃太多会上火)

榴莲和提子是两种常见的水果,就营养成分而言,它们并没有相克的地方,所以是可以同时吃的。不过大家要注意,榴莲是热性水果,它不能多吃,吃多了可能导致上火。...

发布时间:2023-10-03 08:00:08

为什么叫霸陵:因靠近灞河而得名(汉文帝刘恒的陵墓)
为什么叫霸陵:因靠近灞河而得名(汉文帝刘恒的陵墓)

【导读】 为什么叫霸陵:因靠近灞河而得名(汉文帝刘恒的陵墓),下面是小编为你收集整理的,希望对你有帮助!当年《美人心计》大火,陈键锋饰演的刘恒温文尔雅,和林心如演的窦漪房一起相亲相爱,最后抗击了吕后和朝廷的种种阴谋,成功登上皇位,刘恒也成功成为了一个历史上有名的明君,不过可惜英年早逝,据说他死后的陵墓叫......

发布时间:2023-10-03 07:01:12

最公认的千古一帝是谁 秦始皇属于中国史上第一个皇帝
最公认的千古一帝是谁 秦始皇属于中国史上第一个皇帝

最公认的千古一帝当然是秦始皇和汉武帝,在很多的歌曲中都提到过这两位皇帝,功劳是其他的皇帝不能比拟的。很多人都说秦始皇是暴君,但是他做的功劳更多,他所建立的秦朝是中国历史上第一个统一民族,秦朝也是很有标志性的朝代。...

发布时间:2023-10-03 07:00:08

QQ上没有邮箱那怎么办
QQ上没有邮箱那怎么办

【导读】 QQ上没有邮箱那怎么办,下面是小编为你收集整理的,希望对你有帮助!一、QQ上没有邮箱是因为QQ主面板上没有显示QQ邮箱图标;二、找到QQ邮箱图标步骤:1、在QQ软件主面板中,右键点击选择”打开界面管理器“选项;2、在界面管理器中,点击勾选显示QQ邮箱图标即可;三 、......

发布时间:2023-10-03 06:01:10

赵匡胤一脉绝了吗 赵匡胤为什么不传子
赵匡胤一脉绝了吗 赵匡胤为什么不传子

宋太祖赵匡胤并没有在儿子里选人来继位,而是让他弟弟来继承皇权。然而,赵光义却先后把赵匡胤的几个儿子逼死,但是赵匡胤一脉并没有因此断绝。赵匡胤死后,他的后代就远离皇权中心,他的几个儿子虽然相继死去,但是他的孙子们大多活了下来,一百多年后,赵匡胤一脉也是拿回了皇权。...

发布时间:2023-10-03 06:00:07

赵匡胤的后代拿回皇位了吗 赵匡胤后代在靖康之耻时上位
赵匡胤的后代拿回皇位了吗 赵匡胤后代在靖康之耻时上位

赵匡胤是宋朝的开国皇帝,赵匡胤把对他有威胁的将领都遣散回家了,但是没想到自己的弟弟竟然对皇位下手。历史上说赵匡胤是突然死亡的,其中有很多的原因都是不可知的,就有人认为是赵光义杀了赵匡胤才夺取皇位。...

发布时间:2023-10-03 05:04:40

外卖塑料盒可以用微波炉加热么
外卖塑料盒可以用微波炉加热么

【导读】 外卖塑料盒可以用微波炉加热么,下面是小编为你收集整理的,希望对你有帮助!根据情况而定。只有底部标志有三角箭头且框内数字为5的pp材质打包盒才能放。一次性塑料餐盒底部的可微波标志有7种,这些标志的塑料餐盒在制作原料上是不一样的,包括pet、pdpe、pvc、pe、pp、ps......

发布时间:2023-10-03 05:01:13

宇航员回来的不是本人?为什么说宇航员回来的不是本人
宇航员回来的不是本人?为什么说宇航员回来的不是本人

很多媒体都爆料从太空中回来的宇航员,并不是他本人,有可能宇航员在太空空中发生了变异现象,甚至可能宇航员在太空中和外星人达成了某些共识,所以宇航员虽然回来的时候外表和走之前十分类似,但是内在的本质和灵魂已经发生了翻天覆地的变化,这一点确实令人十分地惊恐。...

发布时间:2023-10-03 05:00:10

河南省东南部有哪些城市
河南省东南部有哪些城市

【导读】 河南省东南部有哪些城市,下面是小编为你收集整理的,希望对你有帮助!河南省东南部有信阳、驻马店、周口、漯河、商丘等城市。河南省,简称“豫”,中华人民共和国省级行政区。省会郑州,位于中国中部,素有“九州腹地、十省通衢”之称,是全国重要的综合交通枢纽和人流物流信息流中心。......

发布时间:2023-10-03 04:01:11

易经预测2020年灾难 2020年庚子年的说法
易经预测2020年灾难 2020年庚子年的说法

易经预测的2020年灾难都是谣言,大家要做到不信谣不传谣,不要在网上传播虚假的信息,不要在网上传播负能量。其实关于2020庚子年并没有预测,只不过是最近发生的事情比较多,很多人就在网上造谣生事,想要获得热度,其实易经并不能预测2020年发生的。...

发布时间:2023-10-03 04:00:09

小型食肉恐龙:剖齿龙 体长50厘米(仅出土牙齿化石)
小型食肉恐龙:剖齿龙 体长50厘米(仅出土牙齿化石)

【导读】 小型食肉恐龙:剖齿龙 体长50厘米(仅出土牙齿化石),下面是小编为你收集整理的,希望对你有帮助!剖齿龙是一种小型的食肉恐龙,目前由于出土的化石只有牙齿,所以科学家对于它的了解非常少,就连它的种属目前也是存在巨大疑问的,被认为可能是虚骨龙类中的伤齿龙科恐龙,它诞生于1亿5500万年前的侏罗纪末期。......

发布时间:2023-10-03 03:01:13

文艺复兴三杰分别是谁 前三杰后三杰共六人(皆是时代伟人)
文艺复兴三杰分别是谁 前三杰后三杰共六人(皆是时代伟人)

文艺复兴分为前三杰和后三杰,前三杰是指但丁、彼特拉克、薄伽丘,后三杰是拉斐尔、米开朗基罗、达芬奇。这六个人都有着杰出的作品,在各自领域上发扬光彩,当时的意大利就处在文化发展的高峰期,所以诞生出了很多的人才。...

发布时间:2023-10-03 03:00:10