模拟面试(一)|微服务架构面试思路一图懂

你好,我是大明。

恭喜你学完第一章的内容,终于到了要验收成果的时刻了。微服务这一章的内容很多,而且知识点之间盘根错节,记忆起来并不容易,所以为了帮助你更好地掌握这部分内容,我们在这里设置了面试题。

你在回答的时候,最好是能够写成一个文档,至少也要口头上说一遍。千万不要只在脑海里面回忆一遍。因为在真正面试的时候,脑海中的记忆到嘴里说出的话,还需要一个转换。

此外,在回答的时候你可以从以下几个角度来评估自己的回答:

  • 在面试前有没有想好自己要打造什么人设?你的回答有没有围绕这个人设进行?
  • 当你看到一个问题的时候,你能不能瞬间想到可以怎么刷亮点?怎么引导面试官?
  • 有没有在回答中留下足够的引导话术?
  • 有没有在我准备的回答基础上,糅合自己的项目经历,打造独一无二的回答?

我希望你可以通过我给你列出的这些问题,回想起我教给你的那些方案,真正地掌握这部分内容,下面我们开始通关吧!

整体性问题

✨ 什么是微服务架构?

✨ 怎么保证微服务架构的高可用?

还有下面这些问题,横跨了多个主题,可以从不同的角度回答。

✨ 怎么判定服务是否已经健康?

✨ 如果服务不健康该怎么办?

✨ 怎么判定服务已经从不健康状态恢复过来了?

✨ 听你说你用到了 Redis 作为缓存,如果你的 Redis 崩溃了会怎么样?

✨ 听你说你用到了 Kafka 作为消息队列,如果你的 Kafka 崩溃了怎么办?

✨ 现在需要设计一个开放平台,即提供接口给合作伙伴用,你觉得需要考虑一些什么问题?

01|服务注册与发现:注册中心应该选 AP 还是 CP?

🔍 什么是注册中心?

🔍 服务注册与发现机制的基本模型是怎样的?

🔍 服务上线与服务下线的步骤是什么?

🔍 注册中心选型需要考虑哪些因素?

🔍 你为什么使用 Zookeeper/Nacos/etcd 作为你的注册中心?

🔍 什么是CAP?

🔍 在服务注册与发现里面你觉得应该用 AP 还是 CP?

🔍 如何保证服务注册与发现的高可用?

🔍 服务器崩溃,如何检测?

🔍 客户端容错的措施有哪些?

🔍 注册中心崩溃了怎么办?

🔍 注册中心怎么判断服务端已经崩溃了?

02|负载均衡:调用结果、缓存机制怎么影响负载均衡的?

⚖️ 你了解负载均衡算法吗?

⚖️ 静态负载均衡算法和动态负载均衡算法的核心区别是什么?

⚖️ 轮询与随机负载均衡算法有什么区别?

⚖️ 你了解平滑的加权轮询算法吗?

⚖️ 如何根据调用结果来调整负载均衡效果?

⚖️ 为什么有些算法要动态调整节点的权重?权重究竟代表了什么?

⚖️ 你们公司的算法有没有调整过权重?为什么?

⚖️ 最快响应时间负载均衡算法有什么缺点?

⚖️ 如果我现在有一个应用,对内存和 CPU 都非常敏感,你可以针对这个特性设计一个负载均衡算法吗?

⚖️ 为什么使用轮询、加权轮询、随机之类的负载均衡算法,系统始终会出现偶发性的流量不均衡,以至于某台服务器出故障的情况?怎么解决这一类问题?

03|熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

🔥 为什么说熔断可以提高系统的可用性?

🔥 如何判断节点的健康状态,需要看哪些指标?

🔥 触发熔断之后,该熔断多久?

🔥 响应时间超过多少应该触发熔断?

🔥 响应时间超过阈值就一定要触发熔断吗?

🔥 怎么避免偶发性超过阈值的情况?

🔥 服务熔断后如何恢复?

🔥 产生抖动的原因,以及如何解决抖动问题?

04|降级:为什么每次大促的时候总是要把退款之类的服务停掉?

🤚 什么时候会用到降级,请举例说明?

🤚 降级有什么好处?

🤚 跨服务降级常见的做法是什么?

🤚 你怎么评估业务服务的重要性?或者说,你怎么知道 A 服务比 B 服务更加重要?

🤚 请说一说服务内部常见的降级思路。

🤚 怎么判断哪些服务需要降级?

🤚 触发降级之后,应该保持在降级状态多久?

🤚 服务降级之后如何恢复,如何保证恢复过程中不发生抖动?

🤚 你们公司的产品首页是如何保证高可用的?

05|限流:别说算法了,就问你阈值怎么算?限流的目的是什么?

🏁 限流算法都包括哪些?

🏁 不同的限流算法怎么选?

🏁 限流的对象应该如何选择?

🏁 怎么确定流量的阈值?

🏁 如何应对突发流量?

🏁 被限流的请求会被怎么处理?

🏁 为什么使用了限流,系统还是有可能崩溃?

🏁 我们有一个功能,对于普通用户来说,一些接口需要限制在每分钟不超过 10 次,整天不能超过 1000 次;VIP 用户不限制。你怎么解决这个问题?

06|隔离:怎么保证尊贵的 VIP 用户体验不受损?

🤝 什么是隔离,你用来解决什么问题?

🤝 你了解哪些隔离策略?你用过哪些?

🤝 当某个服务崩溃的时候,你有什么办法保证其它服务不受影响?

🤝 在使用线程池、连接池和协程池的时候,怎么避免业务之间相互影响?

07|超时控制:怎么保证用户一定能在1s内拿到响应?

🕙 为什么要做超时控制?

🕙 为什么缺乏超时控制有可能引起连接泄露、线程泄露?

🕙 什么是链路超时控制?

🕙 如何确定超时时间?

🕙 怎么在链路中传递超时时间?

🕙 超时时间传递的是什么?

🕙 如何计算网络传输时间?

🕙 什么是时钟同步问题?

🕙 客户端和服务端谁来监听超时?

🕙 超时之后能不能中断业务?怎么中断?

08|调用第三方:下游的接口不稳定性能又差怎么办?

🌊 如何保证调用第三方接口的可用性?

🌊 如果在出错的时候你会切换不同的第三方,但是如果全部第三方换一遍之后都崩溃了,怎么办?

🌊 调用第三方接口出错的时候,你是怎么重试的?重试次数和重试间隔你是怎么确定的?

🌊 你怎么判定第三方服务已经非常不可用,以至于要切换一个新的第三方服务了?

🌊 对时效性要求不高的接口,你可以怎么优化架构?

🌊 在压力测试一个接口的时候,如果这个接口依赖了一个第三方接口,你怎么解决?

🌊 公司业务依赖一个非常关键的第三方依赖,我要怎么保证我在调用第三方的时候不出错?

一图懂

图片

最后我将这节课的内容整理成了一张图片,图片能够更好地展现知识点之间的联系,你可以参考,如果你觉得有用的话,可以把这节课的内容分享给身边的朋友,邀他一起学习,共同进步。好了,我们下一章再见吧!