mirror of
https://github.com/doocs/advanced-java.git
synced 2024-12-26 04:00:08 +08:00
Add mq-interview.md
This commit is contained in:
parent
ea37b92589
commit
77d48725bb
19
README.md
19
README.md
@ -1,12 +1,17 @@
|
||||
# Java 进阶知识总结
|
||||
|
||||
[![license](https://img.shields.io/badge/license-Attribution--NonCommercial%204.0%20-brightgreen.svg)](https://github.com/doocs/advanced-java/blob/master/LICENSE)
|
||||
[![GitHub forks](https://img.shields.io/github/forks/doocs/advanced-java.svg)](https://github.com/doocs/advanced-java/network)
|
||||
[![GitHub stars](https://img.shields.io/github/stars/doocs/advanced-java.svg)](https://github.com/doocs/advanced-java/stargazers)
|
||||
|
||||
|
||||
## 分布式系统
|
||||
|
||||
### 为什么要进行系统拆分
|
||||
- 为什么要进行系统拆分
|
||||
- 如何进行系统拆分
|
||||
- 拆分后不用 Dubbo 可以吗
|
||||
- Dubbo 和 thrift 有什么区别
|
||||
### 系统拆分
|
||||
- 为什么要进行系统拆分?
|
||||
- 如何进行系统拆分?
|
||||
- 拆分后不用 Dubbo 可以吗?
|
||||
- Dubbo 和 thrift 有什么区别?
|
||||
|
||||
### 分布式服务框架
|
||||
- 说一下 Dubbo 的工作原理?注册中心挂了可以继续通信吗?
|
||||
@ -90,8 +95,8 @@
|
||||
- 如何进行熔断?
|
||||
- 熔断框架都有哪些?具体实现原理知道吗?
|
||||
|
||||
|
||||
|
||||
### 降级
|
||||
- 如何进行降级?
|
||||
|
||||
|
||||
|
||||
|
72
docs/high-concurrency/mq-interview.md
Normal file
72
docs/high-concurrency/mq-interview.md
Normal file
@ -0,0 +1,72 @@
|
||||
## 消息队列面试场景
|
||||
|
||||
**面试官**:你好
|
||||
|
||||
**候选人**:你好
|
||||
|
||||
大家寒暄一下......
|
||||
|
||||
(面试官在你的简历上面看到了,呦,有个亮点,你在项目里用过 MQ,比如说你用过 `ActiveMQ`)
|
||||
|
||||
**面试官**:你在系统里用过消息队列吗?(面试官在随和的语气中展开了面试)
|
||||
|
||||
**候选人**:用过的(此时感觉没啥)
|
||||
|
||||
**面试官**:那你说一下你们在项目里是怎么用消息队列的?
|
||||
|
||||
**候选人**:巴拉巴拉,“我们啥啥系统发送个啥啥消息到队列,别的系统来消费啥啥的。比如我们有个订单系统,订单系统会每次下一个新的订单的时候,就会发送时一条消息到`ActiveMQ`里面去,后台有个库存系统负责获取了消息然后更新库存。”
|
||||
```
|
||||
部分同学在这里会进入一个误区,就是你仅仅就是知道以及回答你们是怎么用这个消息队列的,用这个消息队列来干了个什么事情?
|
||||
```
|
||||
|
||||
**面试官**:那你们为什么使用消息队列啊?你的订单系统不发送消息到 `MQ`,直接订单系统调用库存系统一个接口,咔嚓一下,直接就调用成功,库存不也就更新了。
|
||||
|
||||
**候选人**:额。。。(楞了一下,为什么?我没怎么仔细想过啊,老大让用就用了),硬着头皮胡言乱语了几句
|
||||
|
||||
(面试官此时听你楞了一下,然后听你胡言乱语了几句,开始心里觉得有点儿那什么了,怀疑你之前就压根儿没思考过这问题)
|
||||
|
||||
**面试官**:那你说说用消息队列都有什么优点和缺点?
|
||||
|
||||
(面试官此时心里想的是,你的 `MQ` 在项目里为啥要用?你没考虑过,那我稍微简单点儿,我问问你消息队列你之前有没有考虑过如果用的话,优点和缺点分别是啥?)
|
||||
|
||||
**候选人**:这个。。。(确实平时没怎么考虑过这个问题啊。。。胡言乱语了)
|
||||
|
||||
(面试官此时心里已经更觉得你这哥儿们不行,平时都没什么思考)
|
||||
|
||||
**面试官**:Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别?
|
||||
|
||||
(面试官问你这个问题,就是说,绕过比较虚的话题,直接看看你对各种 `MQ` 中间件是否了解,是否做过功课,是否做过调研)
|
||||
|
||||
**候选人**:我们就用过activemq,所以别的没用过。。。区别,也不太清楚。。。
|
||||
|
||||
(面试官此时却是觉得你这哥儿们平时就是瞎用,根本就没什么思考,觉得不行)
|
||||
|
||||
**面试官**:那你们是如何保证消息队列的高可用啊?
|
||||
|
||||
**候选人**:这个。。。我平时就是简单走 api 调用一下,不太清楚消息队列怎么部署的。。。
|
||||
|
||||
**面试官**:如何保证消息不被重复消费啊?如何保证消费的时候是幂等的啊?
|
||||
|
||||
**候选人**:啥?(`MQ` 不就是写入和消费就可以了,哪来这么多问题)
|
||||
|
||||
**面试官**:如何保证消息的可靠性传输啊?要是消息丢失了怎么办啊?
|
||||
|
||||
**候选人**:我们没怎么丢过消息啊。。。
|
||||
|
||||
**面试官**:那如何保证消息的顺序性?
|
||||
|
||||
**候选人**:顺序性?什么意思?我为什么要保证消息的顺序性?
|
||||
|
||||
**面试官**:如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
|
||||
|
||||
**候选人**:不是,我这平时没遇到过这些问题啊,就是简单用用,知道 `MQ` 的一些功能。
|
||||
|
||||
**面试官**:如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。
|
||||
|
||||
**候选人**:。。。。。我还是走吧。。。。
|
||||
|
||||
---
|
||||
|
||||
这是面试官的一种面试风格,就是面试官的问题不是发散的,而是从一个小点慢慢铺开。比如说面试官会可能跟你聊聊高并发话题,就这个话题里面跟你聊聊缓存、MQ 等等东西,由浅入深,一步步深挖。
|
||||
|
||||
其实上面是一个非常典型的关于消息队列的技术考察过程,好的面试官一定是从你做过的某一个点切入,然后层层展开深入考察,一个接一个问,直到把这个技术点刨根问底,问到最底层。
|
Loading…
Reference in New Issue
Block a user