11## 消息队列
22
3+
4+ * [ 1.消息队列有哪些应用场景?] ( #1消息队列有哪些应用场景 )
5+ * [ 2.消息队列的弊端有哪些?] ( #2消息队列的弊端有哪些 )
6+ * [ 3.使用消息队列,怎么确保消息不丢失?] ( #3使用消息队列怎么确保消息不丢失 )
7+ * [ 4.使用消息队列,如果处理重复消息?] ( #4使用消息队列如果处理重复消息 )
8+ * [ 5.Kafka的消息是有序的吗?如果保证Kafka消息的顺序性?] ( #5kafka的消息是有序的吗如果保证kafka消息的顺序性 )
9+ * [ 6.消息如何保证幂等性] ( #6消息如何保证幂等性 )
10+ * [ 7.消息队列积压怎么办] ( #7消息队列积压怎么办 )
11+ * [ 8.各种MQ的比较] ( #8各种mq的比较 )
12+ * [ 9.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时怎么解决?] ( #9如何解决消息队列的延时以及过期失效问题消息队列满了以后该怎么处理有几百万消息持续积压几小时怎么解决 )
13+ * [ 10.为什么使用消息队列?] ( #10为什么使用消息队列 )
14+ * [ 参考链接] ( #参考链接 )
15+
16+
317#### 1.消息队列有哪些应用场景?
418
519异步处理、流量控制、服务解耦、消息广播
@@ -137,29 +151,29 @@ Kafka只能保证局部有序,即只能保证一个分区里的消息有序。
137151
138152其实面试官主要是想看看:
139153
140- - ** 第一 ** ,你知不知道你们系统里为什么要用消息队列这个东西?
154+ - 第一 ,你知不知道你们系统里为什么要用消息队列这个东西?
141155
142156 不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。
143157
144158 没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好。因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。
145159
146- - ** 第二 ** ,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处?
160+ - 第二 ,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处?
147161
148162 你要是没考虑过这个,那你盲目弄个 MQ 进系统里,后面出了问题你是不是就自己溜了给公司留坑?你要是没考虑过引入一个技术可能存在的弊端和风险,面试官把这类候选人招进来了,基本可能就是挖坑型选手。就怕你干 1 年挖一堆坑,自己跳槽了,给公司留下无穷后患。
149163
150- - ** 第三 ** ,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研?
164+ - 第三 ,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研?
151165
152- 你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。每一个 MQ ** 没有绝对的好坏** ,但是就是看用在哪个场景可以 ** 扬长避短 ,利用其优势,规避其劣势** 。
166+ 你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。每一个 MQ 没有绝对的好坏,但是就是看用在哪个场景可以扬长避短 ,利用其优势,规避其劣势。
153167
154168 如果是一个不考虑技术选型的候选人招进了团队,leader 交给他一个任务,去设计个什么系统,他在里面用一些技术,可能都没考虑过选型,最后选的技术可能并不一定合适,一样是留坑。
155169
156170##### 面试题剖析
157171
158172其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?
159173
160- 面试官问你这个问题,** 期望的一个回答 ** 是说,你们公司有个什么 ** 业务场景 ** ,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。
174+ 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景 ,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。
161175
162- 先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:** 解耦 ** 、 ** 异步 ** 、 ** 削峰 ** 。
176+ 先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰 。
163177
164178##### 解耦
165179
@@ -175,9 +189,9 @@ Kafka只能保证局部有序,即只能保证一个分区里的消息有序。
175189
176190![ file] ( https://img2018.cnblogs.com/blog/1756639/201909/1756639-20190908223437000-220196142.jpg )
177191
178- ** 总结 ** :通过一个 MQ,Pub/Sub 发布订阅消息这么一个模型,A 系统就跟其它系统彻底解耦了。
192+ 总结 :通过一个 MQ,Pub/Sub 发布订阅消息这么一个模型,A 系统就跟其它系统彻底解耦了。
179193
180- ** 面试技巧** :你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个 MQ 去进行系统的解耦。在简历中体现出来这块东西,用 MQ 作解耦。
194+ 面试技巧:你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个 MQ 去进行系统的解耦。在简历中体现出来这块东西,用 MQ 作解耦。
181195
182196##### 异步
183197
@@ -187,7 +201,7 @@ Kafka只能保证局部有序,即只能保证一个分区里的消息有序。
187201
188202一般互联网类的企业,对于用户直接的操作,一般要求是每个请求都必须在 200 ms 以内完成,对用户几乎是无感知的。
189203
190- 如果 ** 使用 MQ** ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms,对于用户而言,其实感觉上就是点个按钮,8ms 以后就直接返回了,爽!网站做得真好,真快
204+ 如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms,对于用户而言,其实感觉上就是点个按钮,8ms 以后就直接返回了,爽!网站做得真好,真快
191205
192206![ file] ( https://img2018.cnblogs.com/blog/1756639/201909/1756639-20190908223437468-1330530320.jpg )
193207
@@ -211,4 +225,4 @@ Kafka只能保证局部有序,即只能保证一个分区里的消息有序。
211225
212226https://www.jianshu.com/p/88a4da652e23
213227
214- https://blog.csdn.net/qq_41701956/article/details/103276267
228+ https://blog.csdn.net/qq_41701956/article/details/103276267
0 commit comments