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根烟 一维数组一条烟 …...
SpringMVC--获取请求参数、域对象共享数据
SpringMVC获取请求参数 通过ServletAPI获取 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请 求的请求报文的对象 RequestMapping("/testParam") public String testParam(HttpServletRequest request){S…...
2月13日,30秒知全网,精选7个热点
///深圳支持数字经济核心区试点,市民每月免费享有1T网络流量支持基础电信企业、广电企业及互联网企业加快推进全市内容分发网络(CDN)扩容及智能改造行动,优化和完善CDN节点部署,积极利用边缘计算技术,推动互…...
【C++设计模式】学习笔记(2):模式分类与模版方法 Template Method
目录 简介模式分类GOF-23 模式分类从封装变化角度对模式分类重构获得模式 Refactoring to Patterns重构关键技法“组件协作”模式Template Method 模式动机(Motivation)结构化软件设计流程面向对象软件设计流程早绑定与晚绑定模式的定义结构(Structure)要点总结结语简介 He…...
【Swift 60秒】92 - Nil coalescing
0x00 Lesson The nil coalescing operator unwraps an optional and returns the value inside if there is one. If there isn’t a value - if the optional was nil - then a default value is used instead. Either way, the result won’t be optional: it will either b…...
python pip安装的包的路径
以ubuntu为例从一个店家那里拿到的一个ubuntu环境中,同时安装了python3.6和python2.7,又安装了ros,最后pip安装包的位置很混乱,安装的包不知道安装在了哪里。使用vscode的时候需要代码提示,就得找到包的路径࿰…...
个人收藏学习
【默认收藏夹】 CompletableFuture使用详解(全网看这一篇就行) 从头开始学MySQL-------存储过程与存储函数(4) 聊聊支付流程的设计与实现逻辑 聊聊消息中心的设计与实现逻辑 SpringBoot2 整合JTA组件,多数据源事务管理…...
【C++】类和对象---需掌握的功能
目录1.初始化列表1.1构造函数赋值1.2初始化列表格式:编译器执行的顺序:特性:1.3explicit关键字类型替换过程多参数构造函数类型替换(C11)2.static成员编程题3.匿名对象4.友元4.1友元函数4.2友元类5.内部类6.拷贝对象时…...
2.12、进程互斥的软件实现方法
学习提示: 理解各个算法的思想、原理结合上小节学习的 “实现互斥的四个逻辑部分”,重点理解各算法在进入区、退出区都做了什么分析各算法存在的缺陷(结合 “实现互斥要遵循的四个原则” 进行分析) 1、单标志法 算法思想:两个进…...
Java面试题-数据库
数据库相关 MySQL的索引使用 默认会有主键索引。 索引分类:单值索引、复合索引、唯一索引 详细文章 MySQL explain 分析 MySQL通过explain关键字分析SQL的执行计划。(Oracle通过EXPLAIN PLAN FOR sql) IDSELECT_TYPETABLEPARTITIONSTYPEPOSS…...
select 与 where、group by、order by、limit 子句执行优先级比较
当 select 和 其他三种语句的一者或者多者同时出现时,他们之间是存在执行先后顺序的。 他们的优先级顺序是:where > group by > select > order by > limit 目录 1、select 与 where 2、group by 与 where 、select 2、select 与 order…...
深圳做网站做app/友情链接只有链接
var viewer new Cesium.Viewer("cesiumContainer", { animation: false, //动画控制不显示 timeline: false, //时间线不显示 fullscreenButton: false, //全屏按钮不显示 infoBox: false }); //去除版权…...
黑龙江省建设安全协会网站/seo需要掌握哪些技术
pomelo(五) Tutorial 2 Treasures #Tutorial 2 -- Treasures ##描述 Treasures 游戏是从 LordOfPomelo 中抽取出来,去掉了大量的游戏逻辑,用以更好的展示 Pomelo 框架的用法以及运作机制。 Treasures 很简单,输入一个用户名后,会…...
大型集团网站建设/建网站seo
先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义; Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或…...
网站开发 ssh 菜鸟/seo课程培训机构
介绍 在Kubernetes集群上运行多个服务和应用程序时,集中式集群级日志记录可以帮助您快速排序和分析Pod生成的大量日志数据。 一种流行的集中式日志记录解决方案是Elasticsearch, F luentd和K ibana(EFK)。 Elasticsearch是一个实…...
上海青浦区网站建设公司/谷歌下载
random库是使用随机数的python标准库。 伪随机数:采用梅森旋转算法生产的伪随机数列中元素 random库主要用于生成随机数基本随机数函数 随机数种子相同的种子生成的随机数是相同的,可以复现结果。 扩展随机数函数例 圆周率的计算 蒙特卡洛方法from rando…...
上海网站建设定制/买卖网站
作者|覃云今天,Chrome 70 正式版发布,Windows、Linux、Mac 和 iOS 平台都可开始使用,但 Android 平台还需等些时日。Chrome 70 此次带来的更新主要包括:支持在 Windows 平台上安装 PWA、新增 AV1 解码器、支持画中画功…...