Java-Interview-Advanced/docs/distributed-system/rpc-design.md

60 lines
4.3 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

这个面试题还是挺常见的,在面试突击第一季里,基本上带了一下,当时但是没有细讲,是因为当时面试突击第一季里对服务框架的原理没有做一个相对深入一点点的分析,当时主要就是讲了一些最基本的概念
人家并不是要你手撸一个**RPC框架**,资料,现场手撸一个**RPC框架**撸的特别的简单人家也不是要你手撸也不是说让你进来了以后就是让你来研发RPC框架的
系统设计的问题就是让你站在系统设计的角度来考虑一下到底如果要设计一个RPC框架你会如何来考虑
动态代理比如消费者和提供者其实都是需要一个实现某个接口的动态代理的RPC框架的一切的逻辑细节都是在这个动态代理中实现的动态代理里面的代码逻辑就是你的RPC框架核心的逻辑
JDK提供了API去创建针对某个接口的动态代理
调用动态代理对象的方法之后此时就应该先干一个事情通过Cluster层的一些组件服务注册中心是用什么技术来进行实现呢往简单了说服务注册中心也可以是你自己手撸一个也不难
自己手撸一个,服务去注册,其他服务去拉取注册表进行发现
**ZooKeeper**,稍微自己上网百度搜索一下,**ZooKeeper**入门使用教程,基本概念和原理,还有基本的使用,了解一下
**Cluster层**,从本地缓存的服务注册表里获取到要调用的服务的机器列表
**负载均衡****面试突击第一季**里,我们分析过**Dubbo的负载均衡策略**,此时你就可以把那些策略说一说,我要设计多少种策略,从服务的机器列表中采用负载均衡算法从里面选择出来一台机器
选择好了机器知道了对方的端口号而且知道你的请求调用调用哪个Interface的哪个方法把这些信息交给协议层
把数据组织一下,**协议****序列化机制****底层用什么网络通信框架**,比如**nettymina**现在用的比较少,序列化和反序列化有没有概念,**Java基础概念一个复杂的请求数据序列化成二进制的字节数组**
**反序列化就是从字节数组变成请求数据结构**
按照那个协议的规范对请求数据进行组织,不同的协议,组织出来的数据看起来是不一样的
**netty基本的原理**
解析完毕了之后就知道应该调用自己本地哪个Interface的实现类的哪个方法
**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问**
**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。**
**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问**
**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。**
**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**
**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**
**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**
**如果你能坚持下来学满6季还可以获取私人定制的面试一条龙VIP服务**
**如果是连续6季面试训练营都购买的同学还可以获取面试一条龙VIP服务**
**具体信息大家看“儒猿技术窝”公众号的知识店铺内的训练营详情即可**
**具体可参见训练营目录下的《训练营专属服务》文档。简单来说这个私人定制的面试VIP服务会为你的跳槽面试全程保驾护航**
**“儒猿技术窝”**,找到我们的训练营的详情页面