互联网Java工程师面试题·Dubbo篇·第一弹

目录

1、为什么要用 Dubbo?

2、Dubbo 的整体架构设计有哪些分层?

3、默认使用的是什么通信框架,还有别的选择吗?

4、服务调用是阻塞的吗?

5、一般使用什么注册中心?还有别的选择吗?

6、默认使用什么序列化框架,你知道的还有哪些?

7、服务提供者能实现失效踢出是什么原理?

8、服务上线怎么不影响旧版本?

9、如何解决服务调用链过长的问题?

10、说说核心的配置有哪些?

11、Dubbo 推荐用什么协议?

12、同一个服务多个注册的情况下可以直连某一个服务吗?

13、画一画服务注册与发现的流程图?

14、Dubbo 集群容错有几种方案?

16、Dubbo 使用过程中都遇到了些什么问题?

17、Dubbo Monitor 实现原理?


1、为什么要用 Dubbo

        随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA) ,也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。

2Dubbo 的整体架构设计有哪些分层?

接口服务层 Service ):该层与业务逻辑相关,根据 provider consumer 的业务设计对应的接口和实现
配置层 Config ):对外配置接口,以 ServiceConfig ReferenceConfig 为中心
服务代理层 Proxy ):服务接口透明代理,生成服务的客户端 Stub 和 服务端的 Skeleton ,以 ServiceProxy 为中心,扩展接口为 ProxyFactory
服务注册层 Registry ):封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory Registry RegistryService
路由层 Cluster ):封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker 为中心,扩展接口为 Cluster Directory Router LoadBlancce
监控层 Monitor ): RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory Monitor MonitorService
远程调用层 Protocal ):封装 RPC 调用,以 Invocation Result 为中心,扩展接口为 Protocal Invoker Exporter
信息交换层 Exchange ):封装请求响应模式,同步转异步。以 Request 和Response 为中心,扩展接口为 Exchanger ExchangeChannel 、ExchangeClient 和 ExchangeServer
网络传输层(Transport ):抽象 mina netty 为统一接口,以 Message 为中心,扩展接口为 Channel Transporter Client Server Codec
数据序列化层 Serialize ):可复用的一些工具,扩展接口为 Serialization 、ObjectInput、 ObjectOutput ThreadPool

3、默认使用的是什么通信框架,还有别的选择吗?

默认也推荐使用 netty 框架,还有 mina

4、服务调用是阻塞的吗?

默认是阻塞的,可以异步调用,没有返回值的可以这么做。
Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。

5、一般使用什么注册中心?还有别的选择吗?

推荐使用 Zookeeper 作为注册中心,还有 Redis Multicast Simple 注册中心,但不推荐。

6、默认使用什么序列化框架,你知道的还有哪些?

推荐使用 Hessian 序列化,还有 Duddo FastJson Java 自带序列化。

7、服务提供者能实现失效踢出是什么原理?

服务失效踢出基于 zookeeper 的临时节点原理。

8、服务上线怎么不影响旧版本?

采用多版本开发,不影响旧版本。

9、如何解决服务调用链过长的问题?

可以结合 zipkin 实现分布式服务追踪。

10、说说核心的配置有哪些?

配置
配置说明
dubbo:service
服务配置
dubbo:reference
引用配置
dubbo:protocol
协议配置
dubbo:application
应用配置
dubbo:module
模块配置
dubbo:registry
注册中心配置
dubbo:monitor
监控中心配置
dubbo:provider
提供方配置
dubbo:consumer
消费方配置
dubbo:method
方法配置
dubbo:argument
参数配置

11Dubbo 推荐用什么协议?

dubbo:// (推荐)
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://

12、同一个服务多个注册的情况下可以直连某一个服务吗?

可以点对点直连,修改配置即可,也可以通过 telnet 直接某个服务。

13、画一画服务注册与发现的流程图?


14Dubbo 集群容错有几种方案?

集群容错方案
说明
Failover Cluster
失败自动切换,自动重试其它服务器(默认)
Failfast Cluste
快速失败,立即报错,只发起一次调用
Failsafe Cluster
失败安全,出现异常时,直接忽略
Failback Cluster
失败自动恢复,记录失败请求,定时重发
Forking Cluster
并行调用多个服务器,只要一个成功即返回
Broadcast Cluster
广播逐个调用所有提供者,任意一个报错则报错

16Dubbo 使用过程中都遇到了些什么问题?

在注册中心找不到对应的服务 , 检查 service 实现类是否添加了 @service 注解无法连接到注册中心, 检查配置文件中的对应的测试 ip 是否正确

17Dubbo Monitor 实现原理?

Consumer 端在发起调用之前会先走 filter 链; provider 端在接收到请求时也是先走 filter 链,然后才进行真正的业务逻辑处理。
默认情况下,在 consumer provider filter 链中都会有 Monitorfilter
1 MonitorFilter DubboMonitor 发送数据
2 DubboMonitor 将数据进行聚合后(默认聚合 1min 中的统计数据)暂存到 ConcurrentMap<Statistics, AtomicReference> statisticsMap,然后使用一个含有 3 个线程(线程名字: DubboMonitorSendTimer )的线程池每隔 1min 钟,调用 SimpleMonitorService 遍历发送 statisticsMap 中的统计数据,每发送完毕一个,就重置当前的 Statistics AtomicReference
3 SimpleMonitorService 将这些聚合数据塞入 BlockingQueue queue 中(队列大写为 100000
4 SimpleMonitorService 使用一个后台线程(线程名为:DubboMonitorAsyncWriteLogThread)将 queue 中的数据写入文件(该线程以死循环的形式来写)
5 SimpleMonitorService 还会使用一个含有 1 个线程(线程名字:DubboMonitorTimer)的线程池每隔 5min 钟,将文件中的统计数据画成图表

要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/148393.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SoloX:Android和iOS性能数据的实时采集工具

SoloX&#xff1a;Android和iOS性能数据的实时采集工具 github地址&#xff1a;https://github.com/smart-test-ti/SoloX 最新版本&#xff1a;V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具&#xff0c;目前主要功能特点&#xff1a; 无需ROOT/越狱…

美团外卖优惠券小程序 美团优惠券微信小程序 自带流量主模式 带教程

小程序带举牌小人带菜谱流量主模式&#xff0c;挺多外卖小程序的&#xff0c;但是都没有搭建教程 搭建&#xff1a; 1、下载源码&#xff0c;去微信公众平台注册自己的账号 2、解压到桌面 3、打开微信开发者工具添加小程序-把解压的源码添加进去-appid改成自己小程序的 4、…

蓝桥等考Python组别九级007

第一部分&#xff1a;选择题 1、Python L9 &#xff08;15分&#xff09; 运行下面程序&#xff0c;可以输出几行“*”&#xff1f;&#xff08; &#xff09; for i in range(0, 3): for j in range(0, 5): print(*, end ) print() 2345 正确答案&#xff1a;B 2、P…

交叉编译和GCC编译器

目录 交叉编译 hello.c文件 提问 GCC编译器 GCC编译过程 GCC常用选项 编译多个文件 预处理 编译 汇编 链接 交叉编译 hello.c文件 #include <stdio.h>int main(int argc, char argv) {if(argc > 2)printf("Hello, %s!\n", argv[1]);elseprintf…

Java基于SSM的校园一卡通系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

540. 有序数组中的单一元素

链接&#xff1a; 540. 有序数组中的单一元素 代码&#xff1a; 方法一&#xff1a;全数组的二分查找 思路和算法 假设只出现一次的元素位于下标 xxx&#xff0c;由于其余每个元素都出现两次&#xff0c;因此下标 xxx 的左边和右边都有偶数个元素&#xff0c;数组的长度是奇…

《C和指针》笔记31:多维数组的数组名、指向多维数组的指针、作为函数参数的多维数组

文章目录 1. 指向多维数组的数组名2. 指向多维数组的指针3. 作为函数参数的多维数组 1. 指向多维数组的数组名 我们知道一维数组名的值是一个指针常量&#xff0c;它的类型是“指向元素类型的指针”&#xff0c;它指向数组的第1个元素。那么多维数组的数组名代表什么呢&#x…

桥梁模板人工费多少钱?

桥梁模板是桥梁工程中不可或缺的一部分&#xff0c;它起到支撑和固定混凝土浇筑的作用。在桥梁建设中&#xff0c;模板人工费用是一个重要的成本因素。那么&#xff0c;桥梁模板人工费到底是多少呢&#xff1f;下面我们来详细了解一下。 首先&#xff0c;需要明确的是&#xff…

全栈开发笔记2:项目部署上线的三种方式

文章目录 最原始的方式宝塔Docker 部署其他 本文为编程导航实战项目学习笔记。 项目部署的三种方式&#xff1a; 最原始方式✅ yum 手动安装 jdk mysql tomcat nginx打包前端项目&#xff0c;放到某个目录&#xff0c;修改 nginx 配置修改线上的 mysql 配置&#xff0c;打包 j…

数据集笔记:OpenCelliD(手机基站开放数据库)

下载数据的方式可见&#xff1a;【数据获取】全球最大手机基站开源数据库 1 读取数据 import pandas as pdpd.read_csv(C:/Users/16000/Downloads/454.csv/454.csv,headerNone,names[radio,mcc,net,area,cell,unit,lon,lat,range,samples,changeable1,created1,updated,AveSi…

【易语言】m3u8下载器源码

前阵子接了个下载视频的小单子&#xff0c;部分视频是m3u8链接的&#xff0c;临时弄了个批量下载器&#xff0c;如图&#xff1a; 这东西网上虽然很多&#xff0c;但还是喜欢自己折腾一下&#xff0c;就直接开源了。代码好不好&#xff0c;只看能不能跑。 原理就是调用ffmpeg&a…

【项目】基于C++11实现的数据库连接池

文章目录 前置知识关键技术点项目背景连接池功能点介绍MySQL Server参数介绍功能设计连接池功能点介绍开发平台选型关于MySQL数据库编程MySQL接口介绍测试表设计Connection设计数据库配置文件mysql.conf日志文件log.hppConnectionPool设计压力测试源码链接:前置知识 关键技术…

VD6283TX环境光传感器驱动开发(4)----移植闪烁频率代码

VD6283TX环境光传感器驱动开发----4.移植闪烁频率代码 闪烁定义视频教学样品申请源码下载开发板设置开发板选择IIC配置串口配置开启X-CUBE-ALS软件包时钟树配置ADC使用定时器触发采样KEIL配置FFT代码配置app_x-cube-als.c需要添加函数 闪烁定义 光学闪烁被定义为人造光源的脉动…

量化交易全流程(六)

本节目录 多因子风险模型 自从股票市场产生以来&#xff0c;大量的学者、业界人员都在研究股票的价格波动究竟是由什么决定的。一个明显的事实是&#xff0c;股票的价格波动一定是由多种因素决定的&#xff0c;比如大盘因素、市值因素和行业因素。对于大盘因素&#xff0c;股…

uniapp项目实践总结(二十七)苹果应用商店上架教程

导语&#xff1a;之前介绍了如何打包一个苹果安装包文件&#xff0c;如果想要上架苹果 ios 应用商店&#xff0c;那么就来这里学习一下方法吧。 目录 准备材料上架步骤审核事项 准备材料 基本信息 构建版本&#xff1a;需要一个 ipa 格式安装包&#xff1b;logo&#xff1a…

一文拿捏Spring之IOC、循环依赖、Spring的设计模式

1.IOC(控制反转)与DI(依赖注入) &#x1f31f;面试题(IOC-DI): IOC控制反转是一种实现对象解耦的思想。传统情况下是采用new的方式来创建对象&#xff0c;这个对象是由我们来直接控制的&#xff0c;但是有了IOC后&#xff0c;我们可以在IOC运行期间通过DI动态的将依赖的对象进…

数组结构与算法

文章目录 数据结构与算法稀疏数组sparse队列单向链表双向链表单向环形列表&#xff1a;CircleSingleLinkedList栈递归排序算法快速排序思路 树赫夫曼树 &#xff08;HuffmanTree&#xff09;二叉排序树&#xff08;Binary sort tree&#xff09;构建二叉树遍历二叉树 平衡二叉树…

分布式架构篇

1、微服务 微服务架构风格&#xff0c;就像是把一个单独的应用程序开发为一套小服务&#xff0c;每个服务运行在自己的进程中&#xff0c;并使用轻量级机制通信&#xff0c;通常是 HTTP API。这些服务围绕业务能力来构建&#xff0c;并通过完全自动化部署机制来独立部署。这些…

【3】c++设计模式——>UML表示类之间的关联关系

关联关系 关联&#xff08;Assocition&#xff09;关系是类与类之间最常见的一种关系&#xff0c;它是一种结构化的关系&#xff0c;表示一个对象与另一个对象之间有联系&#xff0c;如汽车和轮胎、师傅和徒弟、班级和学生等。在UML类图中&#xff0c;用&#xff08;带接头或不…

列表的增删改查和遍历

任务概念 什么是任务 任务是一个参数为指针&#xff0c;无法返回的函数&#xff0c;函数体为死循环不能返回任务的实现过程 每个任务是独立的&#xff0c;需要为任务分别分配栈称为任务栈&#xff0c;通常是预定义的全局数组&#xff0c;也可以是动态分配的一段内存空间&#…