这次面试被我严重低估了,一开始以为是纯流程面,随便乱问的。实际上事后复盘发现,人家还真是对着我简历上的东西问的。只是我自己没发现而已。
流程如下:
1、自我介绍。正常介绍
2、项目介绍。这里我介绍的很有问题,只介绍了纯业务。我事后复盘发现,需要三段式介绍。也就是业务介绍+项目架构+个人职责。此题不合格。
3、你们项目用的MySQL,在高并发请求下,会有什么瓶颈?
这里我直接回答的项目是低并发,没遇到。实际上虽然是低并发,我们项目依旧做了高并发支持。甚至我的个人职责中,负责编写的MySQL的Dockerfile中就做了连接池调优、主从复制、并发线程控制等手段。但我没想起来。
因此得出结论:面试官问的这个是我个人职责,不是我以为的随便问。
正确答案应该是这样:
连接数耗尽:每个请求都要占一个数据库连接,高并发下连接池打满,导致新请求等待或超时。可以通过连接池调优缓解。
锁竞争:大量并发写操作导致行锁/间隙锁竞争加剧,事务等待更久,甚至死锁。可缩小事务范围减少锁持有时间缓解。
磁盘I/O瓶颈:读写频繁,磁盘I/O成为瓶颈。可以通过读写分离缓解。
CPU飙升:大量查询和事务处理消耗CPU资源,导致整体性能下降。可通过限制并发线程数解决。
4、你们项目的RabbitMQ主要用来做什么?发送短信,并列举引入之前的发送短信失败问题。
5、怎么解决的短信失败?
我答得服务那里做重试,实际上面试官想听到我说的是死信队列+TTL的做法。这个依然是我简历里写的,RabbitMQ集群搭建相关联问题。
正确答案:
核心实现思路:死信队列 + TTL
在业务队列中,消费失败后,消息发到重试队列并设置TTL,该队列不绑定消费者,等TTL到期,消息自动进入死信交换机,之后再投回业务队列。这个流程需要重试交换机和重试队列的绑定键与死信交换机和业务队列的绑定键相同。之后再进行下一次重试。如果重试次数消耗完,就进入死信队列,将失败消息入库。
三个问题连续失败,加上面试本来预定就是20分钟,因此这里就挂了,后面开始流程:
6、空窗期解释(2年)
7、期望薪资、之前薪资、所在地、反问环节等流程。
#发面经攒人品#