Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day29】
面试题2:常见的RPC框架有哪些?
面试题3:说说RPC和SOA、SOAP、REST的区别吧
每日小结
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识
、集合容器
、并发编程
、JVM
、Spring全家桶
、MyBatis等ORMapping框架
、MySQL数据库
、Redis缓存
、RabbitMQ消息队列
、Linux操作技巧
等。
[](
)面试题1:说说你对RPC框架的理解?
=================================================================================
RPC (Remote Procedure Call)即
远程过程调用
,是分布式系统常见的一种通信方法
。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。
除 RPC 之外,常见的多系统数据交互方案还有分布式消息队列、HTTP 请求调用、数据库和分布式缓存等。
其中 RPC 和 HTTP 调用是没有经过中间件的,它们是端到端系统的直接数据交互。
通俗点说
RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
RPC会隐藏底层的通讯细节
(不需要直接处理Socket通讯或Http通讯)。客户端发起请求,服务器返回响应(
类似于Http的工作方式
)RPC在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。
[](
)追问1:RPC框架实现原理是什么样的
在RPC框架中主要有三个角色:提供者
、消费者
和注册中心
。如下图所示:
提供者: 暴露服务的服务提供方。
调用者: 调用远程服务的服务消费方。
注册中心: 服务注册与发现的注册中心。
原理图如上,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法
,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
比如说,A服务器想调用B服务器上的一个方法:Employee getEmployeeByName(String fullName)
RPC整个调用过程,主要经历如下几个步骤:
1、建立通信
首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接
。
主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
2、服务寻址
要解决寻址的问题
,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么。
通常情况下我们需要提供B机器(主机名或IP地址)以及特定的端口,然后指定调用的方法或者函数的名称以及入参出参等信息,这样才能完成服务的一个调用。
可靠的寻址方式(主要是提供服务的发现)
是RPC的实现基石,比如可以采用redis或者zookeeper来注册服务
等等。
从服务提供者的角度看:
当提供者服务启动时,需要自动向注册中心注册服务
;当提供者服务停止时,需要向注册中心注销服务;
提供者
需要定时向注册中心发送心跳
,一段时间未收到来自提供者的心跳后,认为提供者已经停止服务,从注册中心上摘取掉对应的服务。从调用者的角度看:调用者启动时订阅注册中心的消息并从注册中心获取提供者的地址;
当有提供者上线或者下线时,注册中心会告知到调用者;
调用者下线时,取消订阅
。
3、网络传输
序列化
当A机器上的应用发起一个RPC调用时,调用方法和其入参等信息需要通过底层的网络协议如TCP传输到B机器,由于网络协议是基于二进制的,所有我们传输的参数数据都需要先进行序列化(Serialize)或者编组(marshal)成二进制的形式才能在网络中进行传输。然后通过寻址操作和网络传输将序列化或者编组之后的二进制数据发送给B机器。
反序列化
当B机器接收到A机器的应用发来的请求之后,又需要对接收到的参数等信息进行反序列化操作(序列化的逆操作),即将二进制信息恢复为内存中的表达方式,然后再找到对应的方法(寻址的一部分)进行本地调用(一般是通过生成代理Proxy去调用,
通常会有JDK动态代理、CGLIB动态代理
、Javassist生成字节码技术等),之后得到调用的返回值。
4、服务调用
B机器进行本地调用(通过代理Proxy)之后得到了返回值,此时还需要再把返回值发送回A机器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A机器,而当A机器接收到这些返回值之后,则再次进行反序列化操作,恢复为内存中的表达方式,最后再交给A机器上的应用进行相关处理(一般是业务逻辑处理操作)。
课间休息,又来秀一下来自咱们群里同学的搬砖工地,坐标:北京 西北旺。
作者:陈哈哈
[](
)面试题2:常见的RPC框架有哪些?
================================================================================
Thrift
:thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。Dubbo
:Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。 Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,Dubbo自2011年开源后,已被许多非阿里系公司使用。Spring Cloud
:Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。Spring Cloud基于Spring Boot, 使得开发部署极其简单。
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day29】相关推荐
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day38】—— 实战那些事儿2
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day37】—— 并发编程3
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day34】—— 消息队列2
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day23】—— 算法1
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day36】—— 实战那些事儿1
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day25】—— JVM1
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day24】—— 分布式1
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day28】—— 数据库5
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day51】—— tomcat
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day35】—— JVM2
大家好,我是陈哈哈,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍 ...
最新文章
- 【转载】Linux系统与性能监控
- 《Unreal Engine 4蓝图可视化编程》一1.6 改变目标方向
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
- (JAVA)List
- 比亚迪汉鸿蒙系统测评_国产强强联合,比亚迪与华为联手打造的“汉”定制款华为P40亮相...
- ecshop 手机端没做和电脑一样显示
- 系统上云服务器地址,可以自己安装系统的云服务器地址
- html表头跟随滚动,JS实现table表格固定表头且表头随横向滚动而滚动_心善_前端开发者...
- 沙盘模拟软件_3D电子心理沙盘系统
- 教你三种Model(AR)中自定义验证规则的方法
- Spring Boot Actuator [监控与管理]
- IDEA 导出配置方法
- SMARTDRV.EXE下载和安装说明
- USB免驱摄像头采集图像【VS2012+opencv+directShow(CcameraDS)实现】
- 渗透测试常见问题以及方法
- Netty之线程唤醒wakeup
- 【MC-CNN论文翻译】Computing the Stereo Matching Cost with a Convolutional Neural Network
- PWN-CTF:gef工具安装
- 迈卡名车茂品牌LOGO全新升级
- iPhone手机忘记了ID账号密码怎么办
热门文章
- 保研至暗时,九推可能是你最后的机会!
- win10系统怎么安装ie11
- 华为手机如何设置主页面_华为手机怎么进行桌面管理?正确管理华为手机桌面图标及屏幕的方法...
- 近几年CVPR图像压缩总结
- 电脑计算机键盘没反应了怎么办,电脑键盘无法使用怎么办 键盘没反应解决办法...
- 全球及中国DIN筒夹行业运营前景与投资决策建议报告2022版
- Paper-9 精读VAIL (2019 ICLR)
- 持续测试(Continuous Testing)
- 史上最全!作为一名Java面试者你应该知道的
- 基于FPGA的任意字节数的串口发送(含源码工程)