美团一面凉经
今天下午面的,面到一半就知道挂定了。。。为啥看大家伙的美团面筋都是八股,我上来就是场景题?
1.自我介绍
2.讲讲你的实习项目吧
3.怎么保证你向另一端发送的请求能被接受到?
4.假设现在有个场景,一个结算系统,一个积分系统,一个用户消费后,需要通过积分系统增加对应的积分。那么你怎么实现这个请求的发送?说了同步和异步
5.你刚刚说消息队列和RPC远程调用是吧,那你在选择这两种方式的时候,评判标准是什么? 我答了时效性。
6.还有别的评判标准吗?我想了想说消息队列可以起存储消息的作用,可以让消息在队列中存储一段时间,后面再进行处理,面试官说这也是时效性。(我说我想不到了 ...)
7.假如用消息队列,那么会不会出现,消费了但是积分没增加的情况?怎么解决呢?
8.楼主说的rabbitMQ,从可靠性以及生产者、队列、消费者三个维度来说了怎么保证消息不丢失?
9.你刚刚说消费端用消息确认模式,那我假设消息消费失败了怎么办,(我说可以重入列,or 本地重试,重试了放死信队列,后期处理)
10.假如我现在结算系统发送给积分系统的消息,确认失败返回了nack报文怎么办?(我说可以建立重试机制。)
11.那么我要是一直重试失败,MQ就是接受不到这个消息,怎么办? (想了想说,可以从网络的角度去考虑,可能当前出现了网络阻塞,因此可以把消息先发送给另一个消息队列,或者直接先落库。)
12.但是你这样,相当于原来的MQ没有被使用了呀? 而且你这样存储入库了,怎么保证时效性呢?(我其实没听懂他什么意思,事后问同事,同事说用了MQ不就已经不考虑实时性了吗。。。) 回到那个一直重试的问题,求求大佬说一下,我场景题太差了。
13.我们换个问题吧,假如我现在MQ中有两个增加积分的消息,会不会出现被积分系统重复消费的问题? 怎么解决呢? 我说可以设置唯一分布式ID,通过唯一性来解决幂等问题。或者也可以通过数据库的唯一性id来解决这个问题。
14.你理解错了我的意思,我的意思是这两个消息的内容是一样的,但是id不同,你该怎么处理?
15.(我还是没听懂他的意思,我理解是如果不是重试机制下发出相同ID的消息,正常发出的两个内容相同的消息正常消费不就可以了吗。。)他说,那我换个问法吧,假如现在有一个List<Student> student的字段有 id name classid 现在这个列表中,存在多个相同的学生(id name classid都相同),你怎么做去重,同时做分组(将存在重复的,以及不存在的分组)?写个代码实现一下吧。
16.你把刚刚那题,在数据库的场景下,写个sql语句吧。(..太久没写sql了框架用多了。。。给忘了怎么写了)
17.了解spring吗,事务以及对应的传播机制,循环依赖怎么解决的?
18.分布式锁了解吗?为什么要给分布式锁加ttl呢?
19.反问:知道自己铁挂了,就直接问对自己的评价,需要哪方面加强了。
#美团#