【2022版】Dubbo面试题整理(含答案解析)

article/2025/9/24 3:27:03

1、为什么要用 Dubbo?

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

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

接口服务层(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、说说核心的配置有哪些?

在这里插入图片描述

11、Dubbo 推荐用什么协议?

在这里插入图片描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

15、Dubbo 服务降级,失败重试怎么做?

可以通过 dubbo:reference 中设置 mock=“return null”。mock 的值也可以修改为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名规则是 “接口名称+Mock” 后缀。然后在 Mock 类里实现自己的降级逻辑

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

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

17、Dubbo 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 钟,将文件中的统计数据画成图表

18、Dubbo 用到哪些设计模式?

Dubbo 框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载、权限控制等功能。

工厂模式

Provider 在 export 服务时,会调用 ServiceConfig 的 export 方法。ServiceConfig中有个字段:

private static final Protocol protocol =
ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi
on();

Dubbo 里有很多这种代码。这也是一种工厂模式,只是实现类的获取采用了 JDKSPI 的机制。这么实现的优点是可扩展性强,想要扩展实现,只需要在 classpath下增加个文件就可以了,代码零侵入。另外,像上面的 Adaptive 实现,可以做到调用时动态决定调用哪个实现,但是由于这种实现采用了动态代理,会造成代码调试比较麻烦,需要分析出实际调用的实现类。

装饰器模式

Dubbo 在启动和调用阶段都大量使用了装饰器模式。以 Provider 提供的调用链为例,具体的调用链代码是在 ProtocolFilterWrapper 的 buildInvokerChain 完成的,具体是将注解中含有 group=provider 的 Filter 实现,按照 order 排序,最后的调用顺序是:

EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter ->
ExecuteLimitFilter -> TraceFilter -> TimeoutFilter -> MonitorFilter ->
ExceptionFilter

更确切地说,这里是装饰器和责任链模式的混合使用。例如,EchoFilter 的作用是判断是否是回声测试请求,是的话直接返回内容,这是一种责任链的体现。而像ClassLoaderFilter 则只是在主功能上添加了功能,更改当前线程的 ClassLoader,这是典型的装饰器模式。

观察者模式

Dubbo 的 Provider 启动时,需要与注册中心交互,先注册自己的服务,再订阅自己的服务,订阅时,采用了观察者模式,开启一个 listener。注册中心会每 5 秒定时检查是否有服务更新,如果有更新,向该服务的提供者发送一个 notify 消息,provider 接受到 notify 消息后,运行 NotifyListener 的 notify 方法,执行监听器方法。

动态代理模式

Dubbo 扩展 JDK SPI 的类 ExtensionLoader 的 Adaptive 实现是典型的动态代理实现。Dubbo 需要灵活地控制实现类,即在调用阶段动态地根据参数决定调用哪个实现类,所以采用先生成代理类的方法,能够做到灵活的调用。生成代理类的代码是 ExtensionLoader 的 createAdaptiveExtensionClassCode 方法。代理类主要逻辑是,获取 URL 参数中指定参数的值作为获取实现类的 key。

最后

在这里插入图片描述在这里插入图片描述
整理好的全套面试题文档,点开下面卡片,扫码免费领取


http://chatgpt.dhexx.cn/article/jc1vJcK8.shtml

相关文章

Dubbo 面试题及答案

文章目录 1.Dubbo是什么&#xff1f;2.为什么要用Dubbo&#xff1f;3.Dubbo 和 Dubbox 有什么区别&#xff1f;4.Dubbo 停止维护了吗&#xff1f;5.你读过 Dubbo 的源码吗&#xff1f;6.在使用过程中都遇到了些什么问题&#xff1f;7.Dubbo和SpringCloud的区别&#xff1f;spri…

史上最全40道Dubbo面试题及答案

其实关于Dubbo的面试题&#xff0c;我觉得最好的文档应该还是官网&#xff0c;因为官网有中文版&#xff0c;照顾了很多阅读英文文档吃力的小伙伴。但是官网内容挺多的&#xff0c;于是这里就结合官网和平时面试被问的相对较多的题目整理了一下。 1&#xff0c;说说一次Dubbo服…

2020 Dubbo面试题大全

Java面试总结汇总&#xff0c;整理了包括Java基础知识&#xff0c;集合容器&#xff0c;并发编程&#xff0c;JVM&#xff0c;常用开源框架Spring&#xff0c;MyBatis&#xff0c;数据库&#xff0c;中间件等&#xff0c;包含了作为一个Java工程师在面试中需要用到或者可能用到…

史上最全 40 道 Dubbo 面试题及答案

前言 Dubbo是国内最出名的分布式服务框架&#xff0c;也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术&#xff0c;无论你是否用过&#xff0c;你都必须熟悉。 下面我为大家准备了一些 Dubbo 常见的的面试题&#xff0c;一些是我经常问别人…

Dubbo面试题

java基础-1 java基础-2 Dubbo面试题 springboot面试题 SQL常见的面试题 Linux常见的面试题 1、Dubbo是什么&#xff1f; Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架&#xff0c;现已成为 Apache 基金会孵化项目。 dubbo是一个分布式框架&#xff0c…

Dubbo常见面试题

关注Java后端技术栈“ 回复“面试”获取最新资料 其实关于Dubbo的面试题&#xff0c;我觉得最好的文档应该还是官网&#xff0c;因为官网有中文版&#xff0c;照顾了很多阅读英文文档吃力的小伙伴。但是官网内容挺多的&#xff0c;于是这里就结合官网和平时面试被问的相对较多的…

Dubbo面试题汇总【40题】

1、Dubbo 是什么&#xff1f; 2、为什么要用Dubbo&#xff1f; 3、Dubbo 和 Spring Cloud 有什么区别&#xff1f; 4、dubbo 都支持什么协议&#xff0c;推荐用哪种&#xff1f; 5、Dubbo 需要 Web 容器吗&#xff1f; 6、Dubbo 内置了哪几种服务容器&#xff1f; 7、Dub…

70道Dubbo面试题及答案(最新整理)

Dubbo面试题及答案【最新版】Dubbo面试题大全(2021版)&#xff0c;发现网上很多Dubbo面试题及答案整理都没有答案&#xff0c;所以花了很长时间搜集&#xff0c;本套Dubbo面试题大全 如果不背 Dubbo面试题的答案&#xff0c;肯定面试会挂&#xff01; 这套Dubbo面试题大全&…

5G SCMA MPA算法

SCMA编码原理如图1所示&#xff0c;这里以六个用户在四个资源块上传输&#xff0c;每个用户采用4点星座图进行调制为例来说明。每个用户对应一个独一无二的码本&#xff0c;每个码本是一个44的复数矩阵&#xff0c;其中矩阵的行表示资源块&#xff0c;矩阵的列表示码字。每个用…

CSMA/CA协议详解

参考&#xff1a;(20条消息) CSMA/CA协议详解【计算机网络】_蓝莓派Alex的博客-CSDN博客_csma/ca 笔记&#xff1a; 无线电波能够向所有的方向传播&#xff0c;且其传播距离受限。当电磁波在传播过程中遇到障碍物时&#xff0c;其传播距离就会受到限制。 如图&#xff1a;如果…

【通信-SCMA】基于串行干扰消除的多用户检测算法附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

SCOM

SCOM&#xff1a;Synchronized COMmunication module 使用的时候要包含:#include <scom.h> 使用的类型和常数typedef struct SCOM_Attrs { /* SCOM object creation attributes */Char dummy; /* no attributes at present */} SCOM_Attrs;t…

SCMA稀疏码多址调制解调系统概述和matlab仿真

目录 1. 引言 2. 数学原理 2.1 资源分配和稀疏码本 2.2 SCMA的编码和调制 2.3 SCMA的信道传输和解调 3. 实现过程 3.1 稀疏码本的构建 3.2 SCMA编码过程 3.3 SCMA解调过程 4. 应用领域 5. 实现难点 5.1 资源分配和编码映射 5.2 信道传输和解调算法 5.3 多用户干扰…

5G通信演进和常见名词释义

写在前面 由于工作性质的变化&#xff0c;需要对5G的通信原理、架构和标准进行深入的了解。借此分享一下5G通信技术初步学习的内容。 通信系统发展演进 5G的含义&#xff0c;即第五代移动通信系统和技术。这种叫法是3G时代开创的&#xff0c;随3G-4G-5G一直沿用下来。那有没…

CSMA、CSMA/CD与CSMA/CA协议

载波监听多路访问&#xff08;CSMA&#xff09;协议 若每个站点在发送数据之前都先侦听一下公用信道&#xff0c;如果信道空闲后再发送&#xff0c;则就会大大降低冲突的可能性&#xff0c;从而提高信道的利用率 。 CS&#xff1a;载波侦听/监听&#xff0c;每一个站在发送数据…

CSMACD协议与CSMACA协议

CSMA/CD协议 全称&#xff1a;载波监听多点接入/碰撞检测CSMA/CD&#xff08;carrier sense multiple access with collision detection&#xff09; CS&#xff1a;载波侦听/监听&#xff0c;每一个站在发送数据之前要检测一下总线是否有其他计算机在发送数据。 MA&#xff1…

深度解读华为5G空口新技术:F-OFDM和SCMA

长江后浪推前浪&#xff0c;4G建设方兴未艾&#xff0c;业界关于5G的讨论已如火如荼。对于每一代移动通信&#xff0c;空口技术都相当于王冠上的明珠。 本文引用地址&#xff1a; http://www.eepw.com.cn/article/271583.htm 在月初的世界移动通信大会上&#xff0c;华为发布了…

基于polar码和SCMA的多用户检测的联合检测译码matlab仿真,polar采用SCAN软译码,SCMA用MPA算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 构造的核心是通过信道极化&#xff08;channel polarization&#xff09;处理&#xff0c;在编码侧采用方法使各个子信道呈现出不同的可靠性&#xff0c;当码长持续增加时&#xff0c;部分信道将…

OTFS-SCMA学习笔记

参考资料&#xff1a;OTFS-SCMA: A Downlink NOMA Scheme for Massive Connectivity in High Mobility Channels OTFS系统流程 X [ m , n ] X[m,n] X[m,n]是DD时延多普勒域 Γ { ( m M Δ f , n N T ) , m 0 , … , M − 1 , n 0 , … , N − 1 } \Gamma\left\{\left(\frac…

【通信】基于Matlab模拟SCMA系统时延调度算法

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 ⛄ 内容介绍 稀疏码多址接入(Sparse Code Multiple …