RPC框架项目的学习

学习RPC主要文章

声哥文章  

https://blog.csdn.net/qq_40856284/category_10138756.html

PANDA文章(更易懂一些)

https://blog.csdn.net/qq_38685503/category_10794078.html

RPC八股文

关于RPC的一些问题的八股文总结_技术交流_牛客网

下面补一些RPC八股文链接里面没有答案的部分以及修改的部分

PS:因为注册中心用的NACOS 所以没有记录zookeeper的问题

一.注册中心

4.常用的服务注册中心, 注册中心的差异

​​​​​​微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比_琦彦-CSDN博客_zookeeper和nacos

5.为什么用Nacos做注册中心?

Nacos的使用比较简单

6.集群一般有几个节点,为什么?

三个,选举leader

7.socket过程中发生的系统调用

socket系统调用过程_hhhhhyyyyy8的博客-CSDN博客_socket的系统调用

补一张我照着原贴抄的笔记

19.分布式数据一致性协议都知道哪些 20.Raft了不了解

 常用的分布式一致性协议_TJtulong的博客-CSDN博客_分布式一致性协议

 21.分布式事务的几种解决方案

微服务架构-实现技术之三大关键要素2数据一致性:分布式事物+CAP&BASE+可靠事件模式+补偿模式+Sagas模式+TCC模式+最大努力通知模式+人工干预模式_xiaofeng10330111的博客-CSDN博客_sagas

33.服务端用的哪个类监听的

这里我觉得应该是serverBootstrap

34.自己实现的定时器是啥?

定时器用的是Netty的IdleStateHandler方法

PANDA的第十三章有写

手把手实现RPC框架--简易版Dubbo构造(十三)Netty心跳机制、实现服务负载均衡_PANDA博客-CSDN博客

用法

IdleStateHandler_丶洗牙刷脸-CSDN博客_idlestatehandler使用

37.如果是你如何设计一个nacos ,rpc如何调用

照搬阿里

二、序列化与反序列化以及协议

5.有没有阅读过序列化(Java Serialization、Fastjson)之后的数据

序列化后数据的解读_weixin_30410119的博客-CSDN博客

9.序列化怎么做的(序列化怎么实现)?Kryo原理了解吗?

源码分析kryo对象序列化实现原理_库克look的博客-CSDN博客_kryo 源码分析

10.你说到你自定义了一个简单协议,自定义的协议头里包括哪些内容,多少字节,各自的作用是什么

PANDA文章有提到

首先是 4 字节魔数,表示一个协议包,用来识别是我们自定义的协议;接着是 Package Type,表示这是一个调用请求还是响应结果;Serializer Type 表示实际数据使用的序列化器编号,这个服务端和客户端应当使用统一标准;Data Length 就是实际数据的长度,设置这个字段主要防止粘包,最后就是经过序列化后的实际数据,可能是 RpcRequest 也可能是 RpcResponse 经过序列化后的字节,取决于 Package Type。


11.对象有一个属性是对象引用,怎么序列化

递归序列化类型和值

12.如何实现编解码及序列化?

手把手实现RPC框架--简易版Dubbo构造(七)netty传输与通用序列化接口实现_PANDA博客-CSDN博客

定义CommonEncoder编码器将原始数据转换为字节流,然后根据上面提到的协议格式,将各个字段写到一个字节数组中(堆外内存ByteBuf[ ]),通过构造器传进的序列化器序列化。

PS:序列化器为自定义序列化接口CommonSerializer的实现类(JSON、Kryo),与kryo原理的序列化器不同。

解码器就是将收到的字节序列还原为实际对象,主要就是进行字段的校验,比较重要的就是取出序列化器编号,以获得正确的反序列化方式,并且利用length字段来确定数据包的长度(防止粘包),读出正确长度的字节数组,然后反序列化成对应的对象。

13.那你这个序列化还是针对Java语言的,如何实现跨语言的序列化或者RPC框架?

跨语言问题在于序列化方式

由于本项目实现了两种序列化器,所以想要实现跨语言序列化使用JSON序列化器即可

三、Netty

14.Netty使用场景

15.Netty的线程模型

16.RPC过程网络上发生了什么

21.Netty解决粘包的几种方式

26.怎么实现保持长连接的

手撸架构,Netty 与 RPC面试48问_vincent-CSDN博客

1.TCP 的粘包的概念是对的吗

2.简述AIO、BIO、NIO的具体使用、区别及原理

5.说说你对Netty的认识?

Netty经典高频面试题!_技术交流_牛客网

3.BIO,NIO,AIO的痛点,怎么优化?

Java 性能优化之——从BIO 到 NIO,再到 AIO_vincent_wen0766的博客-CSDN博客

4.IO/NIO/AIO区别?介绍Reactor,介绍Proactor?

reactor和proactor模式_系统运维-CSDN博客

为啥要用异步IO不用多线程

异步IO和多线程的关系_Viewwuyou-CSDN博客_异步io和多线程

6.NIO中Channel的作用

7.NIO的设计架构?JDK中NIO有哪些重要组件?

Java NIO?看这一篇就够了!_u011381576的博客-CSDN博客_nio

8.为什么选Netty用来做通信框架?

12.为什么大多数rpc框架都用Netty(聊了下Netty的特点)?你为什么会用到Netty?

三大特点:高并发、传输快和封装好     

9.Netty怎么实现高性能的?Netty高性能主要依赖了哪些特性?Netty为什么快?

NIO、零拷贝、线程模型

零拷贝:彻底理解Netty-----零拷贝_爱琴孩的博客-CSDN博客

10.netty bytebuf工作原理,和NIO里buffer区别?  

Netty原理:ByteBuf对Nio bytebuffer做了什么导致效率提升?_doomwatcher的博客-CSDN博客

17.RPC多个请求是在一个连接完成的吗

一个长连接

19.基于Netty实现通信,使用了哪些TCP优化参数?

option(ChannelOption.SO_BACKLOG, 256)

服务端接受连接的最大队列长度,如果队列已满,客户端连接将被拒绝。

option(ChannelOption.SO_KEEPALIVE, true)

启用该功能时,TCP会主动探测空闲连接的有效性。可以将此功能视为TCP的心跳机制,默认的心跳间隔是7200s即2小时

childOption(ChannelOption.TCP_NODELAY, true)

nodelay没有延迟

20.粘包半包怎么解决的

自定义协议、设置Data Length 防止粘包

22.Netty底层原理

23.Netty中的select过程

24.Netty的两个线程池,为什么两个,有什么区别,具体说来。

Netty初始化的时候需要初始化两个线程池,你能简单说一说吗?

netty全过程图解(最详细清晰版)_PANDA博客-CSDN博客_netty

27.如何实现心跳保持

option(ChannelOption.SO_KEEPALIVE, true)

28.多少个线程

Netty 默认是 CPU 处理器数的两倍,bind 完之后启动

四、负载均衡

1.项目中负载均衡怎么实现的

2.项目中负载均衡算法用到那些

利用列表获取某个服务的所有提供者,根据选择的负载均衡策略选择其中一个提供者,实现的负载均衡策略有随机策略和轮询策略

9.如何设计负载均衡器

接收客户端请求,将请求转发给集群中的各台服务器处理,服务器将处理结果返回给负载均衡器,负载均衡器将处理结果转发给相应的客户端。

能够根据客户端的性能要求选择相应服务器

五、RPC 和 HTTP

原贴写的很清楚了这里不做补充

六、Nacos

 NACOS面试题

Nacos面试题_KGyyds的博客-CSDN博客_nacos面试

因为项目本身Nacos只是作为注册中心,所以只提取其中几个题

1.为什么要将服务注册到Nacos?

为了更好的查找这些服务

2.在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的?

(5秒心跳包Nacos中的负载均衡底层是如何实现的?(通过Ribbon实现,Ribbon中定义了一些负载均衡算法,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务)
Ribbon是什么?(Netflix公司提供的负载均衡客户端,一般应用于服务的消费方法)
Ribbon可以解决什么问题?(基于负载均衡策略进行服务调用,所有策略都会实现IRule接口)
)

3.对于Nacos来讲它是如何判断服务实例的状态?

(检测心跳包 ,15,30)

4.服务消费方是如何调用服务提供方的服务的?

通过本地创建的代理对象调用远程接口

5.Nacos中的负载均衡底层是如何实现的?

(通过Ribbon实现,Ribbon中定义了一些负载均衡算法,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务)

6.Ribbon是什么?

(Netflix公司提供的负载均衡客户端,一般应用于服务的消费方法)

7.Ribbon可以解决什么问题?

(基于负载均衡策略进行服务调用,所有策略都会实现IRule接口)

8.Ribbon内置的负载均衡策略有哪些?

Ribbon详解与实例_JinXYan的博客-CSDN博客_ribbon

​​

纠正:轮询策略

补一个面经

Java面试,你应该准备这些知识_程序员小灰的博客-CSDN博客_java面试需要准备什么

刷面经时如果遇到没总结到此文章的问题将会更新

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值