互联网大厂面试要求
数据结构和算法,软素质,工程素养,履历背景,学历,带团队管理,技术广度、技术深度、项目经验、系统设计
分析一下自己所处在的水平:
(1)自己在技术广度上做的如何?你现在主流技术栈哪些技术都有一定的了解,包括核心原理和常见技术方案
(2)自己在项目经验和生产经验上做的如何?你会的这些技术,自己在项目里到底用过多少?用的有多复杂?用的时候考虑了哪些项目细节和生产细节?
(3)技术深度,你现在对哪些技术是除了核心原理以及基础知识之外,对一些技术的底层的概念和原理有一定的了解
(4)系统设计,你目前自己独立负责过设计的系统和架构有多复杂?如果让你来独立设计秒杀系统、红包系统、12306系统,或者是一些其他大型的架构,你会如何来设计呢?
Spring Cloud
Eureka:服务注册中心
Feign:服务调用
Ribbon:负载均衡
Zuul/Spring Cloud Gatway:网关。灰度发布、统一熔断、统一降级、统一缓存、统一限流、统一授权认证
Hystrix:链路追踪、s限流方案、熔断方案、资源隔离、降级机制
Dubbo
动态代理:Proxy
负载均衡:Cluster,负载均衡,故障转移
注册中心:Registry
通信协议:Protocol,filter机制,http、rmi、dubbo等协议
信息交换:Exchange,Request和Response
网络通信:Transport,netty、mina
序列化:封装好的请求如何序列化成二进制数组,通过netty/mina发送出去
消息队列
- 用过消息队列么?
- 说说你们项目里是怎么用消息队列的?
- 为什么使用消息队列?
- 消息队列有什么优点和缺点?
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?
- 如何保证消息队列的高可用?
- 如何保证消息不被重复消费?如何保证消息消费时的幂等性?
- 如何保证消息的可靠性传输,要是消息丢失了怎么办?
- 如何保证消息的顺序性?
- 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
- 如果让你写一个消息队列,该如何进行架构设计,说一下你的思路?
为什么使用消息队列
消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?
消息队列常见的使用场景有 3 个:解耦、异步、削峰。
解耦
供应商商品信息变更了,供应商A系统发送数据到 商品服务B、货架服务C、活动服务D 三个系统,通过接口调用发送。
如果现在新增了一个搜索服务E也需要保存商品信息,供应商服务A就需要新增代码去调用。如果现在活动服务D不需要商品的变更信息,供应商A就需要删除调用D的代码。
在这个场景中,供应商A 系统跟其它各种业务系统严重耦合
如果使用 MQ,供应商A 系统产生一条数据,发送到 MQ 里面去,哪个服务需要数据自己去 MQ 里面消费,哪个服务不需要这条数据就取消对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护这个代码,也不需要考虑人家是否调用成功、失败超时等情况。
总结:通过一个 MQ,Pub/Sub 发布订阅消息这么一个模型,A 系统就跟其它系统彻底解耦了。
异步
现在供应商通过接口修改了商品信息,A 系统接收一个请求,需要在自己本地写库&#