Dubbo面试题2023
1、为什么要用Dubbo
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务
的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、
序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治
理框架就出现了,Dubbo也就这样产生了。
2、Dubbo的整体架构设计有哪些分层
2.1、接口服务层(Service):
该层与业务逻辑相关,根据provider和consumer的业务设计对应的接口和实现。
2.2、配置层(Config):
对外配置接口,以ServiceConfig和ReferenceConfig为中心。
2.3、服务代理层(Proxy):
服务接口透明代理,生成服务的客户端Stub和服务端的Skeleton,以ServiceProxy为中心,
扩展接口为ProxyFactory
2.4、服务注册层(Registry):
封装服务地址的注册和发现,以服务URL为中心,扩展接口为RegistryFactory、Registry、
RegistryService。
2.5、路由层(Cluster):
封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、
Directory、Router和LoadBlancce。
2.6、监控层(Monitor):
RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor
和MonitorService。
2.7、远程调用层(Protocal):
封装RPC调用,以Invocation和Result为中心,扩展接口为Protocal、Invoker和Exporter。
2.8、信息交换层(Exchange):
封装请求响应模式,同步转异步。以Request和Response为中心,扩展接口为Exchanger、
ExchangeChannel、ExchangeClient和ExchangeServer。
2.9、网络传输层(Transport):
抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、
Client、Server和Codec。
2.10、数据序列化层(Serialize):
可复用的一些工具,扩展接口为Serialization、ObjectInput、ObjectOutput和ThreadPool。
3、Dubbo默认使用的是什么通信框架,还有别的选择吗
默认也推荐使用netty框架,还有mina。
4、Dubbo服务调用是阻塞的吗
默认是阻塞的,可以异步调用,没有返回值的可以这么做。
Dubbo是基于NIO的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,
相对多线程开销较小,异步调用会返回一个Future对象。
5、Dubbo一般使用什么注册中心?还有别的选择吗?
5.1、推荐注册中心:Zookeeper。
5.2、别的选择注册中心:Redis、Multicast、Simple注册中心,但不推荐。
6、Dubbo默认使用什么序列化框架,你知道的还有哪些
推荐使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
7、Dubbo服务提供者能实现失效踢出是什么原理
服务失效踢出基于zookeeper的临时节点原理。
8、服务上线怎么不影响旧版本
采用多版本开发,不影响旧版本。
9、如何解决服务调用链过长的问题
可以结合zipkin实现分布式服务追踪。
10、说说核心的配置有哪些
10.1、dubbo:service 服务配置10.2、dubbo:reference 引用配置
10.3、dubbo:protocol 协议配置
10.4、dubbo:application 应用配置
10.5、dubbo:module 模块配置
10.6、dubbo:registry 注册中心配置
10.7、dubbo:monitor 监控中心配置
10.8、dubbo:provider 提供方配置
10.9、dubbo:consumer 消费方配置
10.10、dubbo:method 方法配置
10.11、dubbo:argument 参数配置
11、Dubbo推荐用什么协议
dubbo://(推荐)
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://
12、同一个服务多个注册的情况下可以直连某一个服务吗
可以点对点直连,修改配置即可,也可以通过telnet直接某个服务。
13、Dubbo集群容错有几种方案
13.1、Failover Cluster:失败自动切换,自动重试其它服务器(默认)
13.2、Failfast Cluster:快速失败,立即报错,只发起一次调用
13.3、Failsafe Cluster:失败安全,出现异常时,直接忽略
13.4、Failback Cluster:失败自动恢复,记录失败请求,定时重发
13.5、Forking Cluster:并行调用多个服务器,只要一个成功即返回
13.6、Broadcast Cluster:广播逐个调用所有提供者,任意一个报错则报错
14、Dubbo服务降级,失败重试怎么做
可以通过dubbo:reference中设置mock="return null"。
mock的值也可以修改为true,然后再跟接口同一个路径下实现一个Mock类,命名规则是“接口名称+Mock”
后缀。然后在Mock类里实现自己的降级逻辑。
15、Dubbo使用过程中都遇到了些什么问题
15.1、在注册中心找不到对应的服务,检查service实现类是否添加了@service注解
5.2、无法连接到注册中心,检查配置文件中的对应的测试ip是否正确
16、Dubbo Monitor实现原理
Consumer端在发起调用之前会先走filter链;provider端在接收到请求时也是先走filter链,然后才
进行真正的业务逻辑处理。
默认情况下,在consumer和provider的filter链中都会有Monitorfilter。
16.1、MonitorFilter向DubboMonitor发送数据。
16.2、DubboMonitor将数据进行聚合后(默认聚合1min中的统计数据)暂存ConcurrentMap
<Statistics,AtomicReference>statisticsMap,然后使用一个含有3个线程(线程名字:
DubboMonitorSendTimer)的线程池每隔1min钟,调用SimpleMonitorService遍历发送
statisticsMap中的统计数据,每发送完毕一个,就重置当前的Statistics的AtomicReference
16.3、SimpleMonitorService将这些聚合数据塞入BlockingQueuequeue中(队列大写为100000)
16.4、SimpleMonitorService使用一个后台线程(线程名为:DubboMonitorAsyncWriteLogThread)
将queue中的数据写入文件(该线程以死循环的形式来写)
16.5、SimpleMonitorService还会使用一个含有1个线程(线程名字:DubboMonitorTimer)的线
程池每隔5min钟,将文件中的统计数据画成图表
相关文章:
Dubbo面试题2023
1、为什么要用Dubbo 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务 的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、 …...

Swift(5)
目录 集合类型 数组 编辑 合集 合集操作 字典 Where 集合类型 Swift提供了三种主要的集合类型:组合,合集,字典。 数组是有序的值的集合。 合集是唯一值的无序集合。 字典是无序的键值对集合。 数组 Swift数组的类型的完整写法是…...

[Java 进阶面试题] CAS 和 Synchronized 优化过程
最有用的东西,是你手里的钱,有钱就有底气,还不快去挣钱~ 文章目录CAS 和 Synchronized 优化过程1. CAS1.1 CAS的原理1.2 CAS实现自增自减的原子性1.3 CAS实现自旋锁1.4 CAS针对ABA问题的优化2. synchronized2.1 synchronized加锁阶段分析2.2 synchronized优化CAS 和 Synchroniz…...
算法思想 - 贪心算法
本文主要介绍算法中贪心算法的思想: 保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。贪心思想相关题目分配饼干455. Assign Cookies (Easy)Input: [1,2], [1,2,3] Output: 2Explanation: You have 2 children and 3 cookies. The greed factors of 2 …...

解决需求变更难题的8大方案
需求变更8大原因为什么会出现需求变更,这是由于需求约束、规则有了新的变化、由于政策发生变化,客户、沟通方式、流程化、标准化的问题等导致。这里在在过去的项目经验中,提出了常见的8大需求变更的原因。政策发生变化:指由于国家…...

NSSROUND#8[Basic]
文章目录一、[NSSRound#8 Basic]MyDoor二、[NSSRound#8 Basic]Upload_gogoggo三、[NSSRound#8 Basic]MyPage四、[NSSRound#8 Basic]ez_node一、[NSSRound#8 Basic]MyDoor <?php error_reporting(0);if (isset($_GET[N_S.S])) {eval($_GET[N_S.S]); }if(!isset($_GET[file])…...

Vue3代码初体验找不同
文章目录🌟 写在前面🌟 代码分析🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓…...

opencv调取摄像头录制
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

html标签手册
完整的HTML页面📑 ①基础标签📑📑📑 HTML <!DOCTYPE> 声明 !DOCTYPE声明必须是 HTML 文档的第一行,位于 html标签之前。 !DOCTYPE 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版…...

SpringMVC--视图、RESTful案例、处理AJAX请求
SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView 若使用的视图技术为…...

一个同学升了leader,今年活还没干,他就已经想好组里成员的两次绩效考核怎么打了,还说:leader都是这样的!...
绩效是大家都比较关注的事情,那么作为领导,一般是怎么打绩效的呢?一位网友爆料:一个大学同学升了leader,前段时间跟他吃饭,他说他已经想好了今年组里成员的两次绩效考核怎么打了。该网友有点吃惊࿰…...

Docker 面试知识点
Docker 是什么? 是实现容器技术的一种工具是一个开源的应用容器引擎使用 C/S 架构模式,通过远程API 来管理 (我们本机是 C,docker 引擎是 S,实际的构建过程是在 docker 引擎下完成的)可以打包一个应用及依赖包到一个轻量级、可移植的容器中 …...

C++高级篇学习笔记
文章目录 前言 本文记录C一些面试难点问题剖析。 1. 左右值和右值引用的作用 左值:可以在左边,表达式结束后依然存在的持久对象,一般有名字,可以取地址。 提示: 前置自加/自减 可以做左值; 右值在右边&a…...
gentoo基本安装过程
该文章是本人在gentoo官方安装文档的基础上简单总结的,也是本人自己实践过的,目前本人用的就是gentoo,对于真的需要安装gentoo的朋友,建议还是参考官方文档,说的比较详细,这个可以简单看看,可以…...
【LeetCode】1234. 替换子串得到平衡字符串
1234. 替换子串得到平衡字符串 题目描述 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符串 s,…...
[动手写操作系统]-01-开机运行系统
文章目录 **概念和目标**概念目标理论源码概念和目标 概念 assembler: 汇编程序BIOS: BIOS(Basic Input Output System,基本输入输出系统)是个可编程的微型操作系统,用于管理计算机中的软硬件,它控制着系统的启动,系统是如何连接外部设备,怎样响应,调整相应操作,都是…...
最长回文子序列问题
最长回文子序列问题 问题描述:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 注意是子序列而不是子…...

月薪11k!从财务专员到软件测试工程师,成都校区小哥哥用三个月实现转行换岗
好久没和大家分享学员的转行经历了,或许在一些人看来他们的故事与自己无关,但同样也能引起一些人的共鸣,可以帮助到那些陷于就业焦虑的同学找到目标和方向。相仿的年龄、相同的职业、相似的压力…在转行软件测试追求更好生活的路上࿰…...

Android 逆向工具大整理,碉堡了
文章目录jadx打开 gui 界面把安装包打开双击变量名和方法名可以高亮所有出现的地方**强大的搜索功能****搜索资源****查看 APK 签名****查看 APK dex 数,方法数****查看资源,配置清单****展开包名**查找方式引用反混淆导出 Gradle 工程导出反编译资源lib…...

二维数组的定义
1. 概念二维数组就是一种数组的数组,其本质上还是一个一维数组,只是它的数据元素又是一个一维数组。如果你对这个概念想象不出来,给大家举个栗子,相信吸烟的同学一下子就会明白。一根烟 一个变量一包烟 20根烟 一维数组一条烟 …...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...