直击面试现场,关于RocketMQ面试,还是要上一些比较尖锐的面试题,本篇文章也是要答复“直击RocketMQ面试现场”。
模拟面试现场
站在面试官的角度,他会怎么问你呢?如果你是面试官,我想你会这么问。
面试官问:你熟悉RocketMQ吗?
候选人回答,熟悉RocketMQ,我在业务服务中经常使用它。
面试官问:那你来说说平常都是怎么用的?
候选人回答,我在需要异步处理的业务中使用RocketMQ,并且主要使用了RocketMQ的“pull模式”的消费者客户端,用这个客户端的主要原因是考虑到性能问题。
面试官问:为什么“pull模式”的消费者客户端的性能要高,RocketMQ还支持哪些消费模式?
候选人回答,“pull模式”是Consumer客户端主动的从Broker Server拉取消息,并且它采用监听器来实时的监听消息队列中的消息,我们开发者可以很方便的控制消费消息的速度,其实准确的说不是考虑“性能问题”,而是消费消息的稳定性问题。
RocketMQ除了支持“pull模式”以外,还支持“push模式”和“pop模式”,其中“pop模式”是RocketMQ 5.0中的新特性。
面试官问:面试官此时会觉得你还行,知道的挺多的,那他肯定不会再问类似得问题了,于是他会和你聊一些可以验证你“是否背过八股文的问题”,比如“RocketMQ的Name Server是怎么启动的?”
候选人回答:如果你自己部署过Name Server,那你肯定会知道的,但是没有亲自实战过或者没看过源码,那大概率是不知道的。我们应该这样回答,Name Server的角色是服务端,他主要负责提供消息队列路由信息,所以我们可以通过RocketMQ提供的启动脚本(不记得名称没关系)启动它,启动的过程中会从本地文件中读取持久化的一些配置信息(这些不是消息路由信息,只是一些Name Server中的key-value配置信息),启动成功之后,它就会等待客户端(比如Consumer、Producer和Broker Server)来连接。
面试官问:如果到这里,面试官会再挖一个坑,“你说说,消息路由信息是存储在哪里的”?
候选人回答:如果此时你只是背了一些八股文,你大概率会说“肯定是Name Server中”,但实际上并不是这样的,消息路由信息是存储在Broker Server中的,Broker Server用本地缓存和本地文件来存储消息路由信息,会通过定时心跳的方式,将这些消息路由信息同步到Name Server中。
面试官问:Consumer客户端和Producer客户端怎么获取消息路由信息呢?
候选人回答:每次在生产和消费消息之前,会从本地缓存中获取消息路由信息,如果获取不到,就利用客户端通信渠道,向Name Server发起RPC请求,获取消息路由信息,然后再更新到本地缓存中。
面试官问:“Consumer客户端和Producer客户端的本地缓存中存储的消息路由信息,什么时候会更新了?”
候选人回答:定时器,他们会启动一个定时器,定时的刷新本地缓存中的消息路由信息,并且这个定时器的定时周期可以再启动Name Server时设定,所以Consumer和Producer中的消息路由信息会存在一定的延迟。
好吧,如果到这里面试官大概率已经知道你对RocketMQ已经非常熟悉了。为什么这样说了,RocketMQ的知识点太多了,如果他一个个的问下去,太累了。但是它通过这一系列的比较尖锐的问题考察,发你你确实用过RocketMQ,并且也看过RocketMQ的源码。
当然这个是比较入门级别的面试,更多高级的RocketMQ面试,会在接下来的文章中输出。
总结
咱们在准备面试的时候,一定要多模拟面试一下,多自测下,换位思考,假如你是面试官,你该怎么去问。
公众号初衷
知识输出是笔者的初衷,借助知识输出,能够认识更多的牛人,能够和牛人沟通,也是自己技术提升的一个机会。