你知道的越多,你不知道的越多

点赞再看,养成习惯

GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善

面试开始

一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着铮亮的头,心想着肯定是尼玛顶级架构师吧!但是我们看过暖男敖丙的系列,腹有诗书气自华,虚都不虚。


小伙子之前问了你这么多Redis的知识,你不仅对答如流,你还能把各自场景的解决方案,优缺点说得这么流畅,说你是不是看过敖丙写的《吊打面试官》系列呀?

惊!!!老师你怎么知道的,我看了他的系列根本停不下来啊。

呵呵,Redis没难住你,但是我问个新的技术栈我还怕难不住你?我问问你你项目中用过消息队列么?你为啥用消息队列?

噗此,这也叫问题?别人用了我能不用么?别人用了我就用了呗,我就是为了用而用。

你心里嘀咕就好了,千万别说出来哈,说出来了没拿到Offer别到时候就在那说,敖丙那个渣男教我说的!


面试官你好:我们公司本身的业务体量很小,所以直接单机一把梭啥都能搞定了,但是后面业务体量不断扩大,采用微服务的设计思想分布式的部署方式,所以拆分了很多的服务,随着体量的增加以及业务场景越来越复杂了,很多场景单机的技术栈和中间件以及不够用了,而且对系统的友好性也下降了,最后做了很多技术选型的工作,我们决定引入消息队列中间件

哦?你说到业务场景越来越复杂,你那说一下你都在什么场景用到了消息队列?

嗯,我从三个方面去说一下我使用的场景吧。

Tip:这三个场景也是消息队列的经典场景,大家基本上要烂熟于心那种,就是一说到消息队列你脑子就要想到异步、削峰、解耦,条件反射那种。

异步:

我们之前的场景里面有很多步骤都是在一个流程里面需要做完的,就比如说我的下单系统吧,本来我们业务简单,下单了付了钱就好了,流程就走完了。

但是后面来了个产品经理,搞了个优惠券系统,OK问题不大,流程里面多100ms去扣减优惠券。

后来产品经理灵光一闪说我们可以搞个积分系统啊,也行吧,流程里面多了200ms去增减积分。

再后来后来隔壁的产品老王说:下单成功后我们要给用户发短信,也将就吧,100ms去发个短信。

再后来。。。(敖丙你有完没完!!!)


反正就流程有点像这样 ↓


你们可以看到这才加了三个,我可以斩钉截铁的告诉你真正的下单流程涉及的系统绝对在10个以上(主流电商),越大的越多。

这个链路这样下去,时间长得一批,用户发现我买个东西你特么要花几十秒,垃圾电商我不在你这里买了,不过要是都像并夕夕这么便宜,真香

但是我们公司没有夕夕的那个经济实力啊,那只能优化系统了。

Tip:我之前在的电商老东家要求所有接口的RtResponseTime响应时间)在200ms内,超出的全部优化,我现在所负责的系统QPS也是9W+就是抖动一下网络集群都可能炸锅那种,RT基本上都要求在50ms以内。


大家感受一下这个QPS。

嗯不错,链路长了就慢了,那你怎么解决的?

那链路长了就慢了,但是我们发现上面的流程其实可以同时做的呀,你支付成功后,我去校验优惠券的同时我可以去增减积分啊,还可以同时发个短信啊。

那正常的流程我们是没办法实现的呀,怎么办,异步

你对比一下是不是发现,这样子最多只用100毫秒用户知道下单成功了,至于短信你迟几秒发给他他根本不在意是吧。


小伙子我打断你一下,你说了异步,那我用线程,线程池去做不是一样的么?

诶呀,面试官你不要急嘛,我后面还会说到的,骚等。

解耦:

既然面试官这么问了,我就说一下为啥我们不能用线程去做,因为用线程去做,你是不是要写代码?

你一个订单流程,你扣积分,扣优惠券,发短信,扣库存。。。等等这么多业务要调用这么多的接口,每次加一个你要调用一个接口然后还要重新发布系统,写一次两次还好,写多了你就说:老子不干了!

而且真的全部都写在一起的话,不单单是耦合这一个问题,你出问题排查也麻烦,流程里面随便一个地方出问题搞不好会影响到其他的点,小伙伴说我每个流程都try catch不就行了,相信我别这么做,这样的代码就像个定时炸弹

面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?相关推荐

  1. 第十二期:面试官问你什么是消息队列?把这篇甩给他!

    消息队列不知道大家看到这个词的时候,会不会觉得它是一个比较高端的技术,反正我是觉得它好像是挺牛逼的. 一.什么是消息队列? 消息队列不知道大家看到这个词的时候,会不会觉得它是一个比较高端的技术,反正我 ...

  2. 面试官问你什么是消息队列?把这篇甩给他!

    来源:Java3y(ID:java3y) 一.什么是消息队列? 消息队列不知道大家看到这个词的时候,会不会觉得它是一个比较高端的技术,反正我是觉得它好像是挺牛逼的. 消息队列,一般我们会简称它为MQ( ...

  3. 关于使用消息队列今天被面试官问倒了

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务 ...

  4. 【240期】面试官问:说说基于 Redis 实现延时队列服务?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  5. 面试官问:Kafka 会不会丢消息?怎么处理的?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Kafka存在丢消息的问题,消息丢失会发生在Broker, ...

  6. 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?

    摘要:收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题. 本文分享自华为云社区<TCP 四次挥手收到乱序的 FIN 包会如何处理?>,作者:小林coding . ...

  7. 【059期】面试官问:序列化是什么,为什么要序列化,如何实现?

    >>号外:关注"Java精选"公众号,回复"面试资料",免费领取资料!"Java精选面试题"小程序,3000+ 道面试题在线刷, ...

  8. 【146期】面试官问:说一说 RabbitMQ 的几种工作模式和优化建议?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... 1.组 ...

  9. 面试阿里!妹子终面,阿里面试官问:有没有男朋友? 结果...

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 作者:  前线小熙  | 责编: 可可   来源 :开发者技术前线  刚好要到端午节前 ...

  10. 【169期】面试官问:说说为什么要限流,有哪些解决方案?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... ...

最新文章

  1. jQuery事件处理一瞥
  2. ASP .NET Core Web Razor Pages系列教程四:使用数据库进行交互(SqlServer 版)
  3. 架构师和产品经理的区别
  4. Python编程基础:第二十四节 作用域Scope
  5. [云炬创业学笔记]第二章决定成为创业者测试3
  6. 【Android OpenGL ES 开发 (五)】纹理相关(二)
  7. tfs 未能在以下位置创建报表文件夹 /TfsReports: 授予的权限不足,无法执行此操作
  8. Java开发人员需要掌握数据库的知识点有哪些?
  9. 第 2-2 课:各种内部类和枚举类 + 面试题
  10. AngularJs-指令和指令之间的交互(动感超人)
  11. android studio安装教程完整,Android Studio 安装配置方法完整教程【小白秒懂】
  12. java实现定时任务 Schedule
  13. python中访问lmdb
  14. 家用计算机存储容量,计算机内存储器容量有多大?
  15. python scipy.signal 包络_python scipy signal.freqz用法及代码示例
  16. 数学 - 泰勒公式,常见麦克劳林公式及Maple函数拟合
  17. Samsung SENS R60plus
  18. 单片机/开发板连接配置的三种方式
  19. canvas合并图片简单用法
  20. 三坐标检测之精密零件测量的恒温时间

热门文章

  1. PLL Simulink行为模型
  2. python模拟预测孩子身高代码_C语言 已知父母身高预测孩子身高程序 求帮找错
  3. 两个不同包里有相同的类
  4. 模仿百思不得姐项目笔记
  5. n维随机变量的分布函数和独立性
  6. 加个ing是什么意思_ing是什么意思?
  7. IBM建立大中华区云计算中心供验证测试
  8. 学计算机的可以考哪种证书,自学比较容易考的证书 哪些证书有用
  9. openstreetmap website部署
  10. Exp9 Web安全基础 ————20164316张子遥