互联网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.mzph.cn/news/95189.shtml

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

相关文章

学习记忆——宫殿篇——记忆宫殿——记忆桩——卧室——莫兰勋爵在地铁走失的案子

《神探夏洛克》第三季第一集中提到“思维殿堂”&#xff0c;其实指的就是记忆宫殿。讲述了一个名叫莫兰勋爵在地铁走失的案子&#xff0c;这里简单给大家罗列以下破案信息&#xff1a; 订阅报纸的男人、伦敦养狗的女人、穿着黑色运动的非裔女人、松木、云杉、雪松、新樟脑球、碳…

linux 列出网络上所有活动的主机

列出网络上所有活动的主机 #!/bin/bash# {start..end}会由shell对其进行扩展生成一组ip地址for ip in 192.168.0.{1..255} ;do ping $ip -c 2 &> /dev/null ; # $?获取退出状态&#xff0c;顺利退出则为0 if [ $? -eq 0 ]; then echo $ip is alive fidone https://zh…

SSR服务器端渲染

SSR 代表服务器端渲染&#xff08;Server-Side Rendering&#xff09;&#xff0c;它是一种用于构建 web 应用程序的技术。与传统的客户端渲染&#xff08;Client-Side Rendering&#xff09;不同&#xff0c;SSR 是在服务器上生成完整的 HTML 页面&#xff0c;并将其发送给浏览…

AtCoder Beginner Contest 232(A-G)

A - QQ solver (atcoder.jp)直接按题意模拟即可。 B - Caesar Cipher (atcoder.jp)按题意模拟即可 C - Graph Isomorphism (atcoder.jp)按题意模拟即可 D - Weak Takahashi (atcoder.jp) 一个非常套路的网格dp E - Rook Path (atcoder.jp) &#xff08;1&#xff09;题意 有…

Linux6.1中为什么用Radix树替换位图(bitmap)来管理进程pid

在过去的几十年中&#xff0c;Linux内核为了有效地管理进程&#xff0c;采用了位图&#xff08;bitmap&#xff09;数据结构来记录和跟踪进程的PID。我们知道Linux支持的最大进程数量为65535个&#xff0c;那么用位图来表示的话只需要16位bit就够了&#xff0c;这大大节约了内存…

探秘前后端开发世界:猫头虎带你穿梭编程的繁忙街区,解锁全栈之路

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【Java】接口 interface

目录 概述 示例代码&#xff1a; 接口成员访问特点 示例代码&#xff1a; 概述 什么是接口 接口就是一种公共的规范标准&#xff0c;只要符合规范标准&#xff0c;大家都可以调用。 Java 中的接口更多的体现在对行为的抽象&#xff01; 1. 接口 用关键字 interface 修饰 pub…

【Windows】安装Microsoft Store,Microsoft Store离线包

用了大半年的Windows&#xff0c;今天发现没有Microsoft store 安装方法有2&#xff1a; 方法一、到这里找相关程序 https://store.rg-adguard.net/ …… 方法二、用下边的离线包 二选一下载&#xff1a; 离线包下载&#xff1a;https://wwon.lanzout.com/i4xPL1atnotc离…

spfa算法_C++详解

spfa定义 SPFA算法的全称是:Shortest Path Faster Algorithm,该算法是西南交通大学段凡丁于1994年发表的,它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,其中k为所有顶点进队的平均次数,可以证明k一般小于等于2,可以处理负边,但无法处理带负环的图(负环和…

RPA是什么?AI和RPA可以结合吗?

随着科技的快速发展&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;逐渐成为企业提高效率、降低成本、优化流程的重要工具。本文将从RPA的概念、特点以及AI和RPA的结合等方面进行阐述&#xff0c;探讨其对企业和社会的意义。 一、RPA的概念和特点 机器人流程自动化…

从零手搓一个【消息队列】创建核心类, 数据库设计与实现

文章目录 一、创建核心类1, 交换机2, 交换机类型3, 队列4, 绑定5, 交换机转发 & 绑定规则6, 消息7, 消息属性 二、数据库设计1, 使用 SQLite2, 使用 MyBatis2.1, 创建 Interface2.2, 创建 xml 文件 三、硬盘管理 -- 数据库1, 创建 DataBaseManager 类2, init() 初始化数据库…

算法题系列10·最长公共前缀

目录 题目描述 思路 实现 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;&qu…

C++【4】指针与引用;数组指针;指针数组

/* 指针变量作为函数参数 函数的参数可以是指针类型&#xff0c;它的作用是将一个变量的地址传送到另一个函数中。 指针变量作为函数参数与变量本身作为函数参数不同&#xff0c;变量作函数参数传递的是具体值。 而指针作为函数参数传递的是内存的…

LabVIEW开发教学实验室自动化INL和DNL测试系统

LabVIEW开发教学实验室自动化INL和DNL测试系统 如今&#xff0c;几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说&#xff0c;了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…

蓝桥杯每日一题2023.10.5

3420. 括号序列 - AcWing题库 题目描述 题目分析 对于这一我们需要有前缀知识完全背包 完全背包的朴素写法&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1010; int n, m, v[N], w[N], f[N][N]; int main() {cin >> n >> m;fo…

PyTorch实例:简单线性回归的训练和反向传播解析

文章目录 &#x1f966;引言&#x1f966;什么是反向传播&#xff1f;&#x1f966;反向传播的实现&#xff08;代码&#xff09;&#x1f966;反向传播在深度学习中的应用&#x1f966;链式求导法则&#x1f966;总结 &#x1f966;引言 在神经网络中&#xff0c;反向传播算法…

利用python来打印九九乘法表

一. 打印九九乘法表 法一 # 定义起始行 row 1# 最大打印 9 行 while row < 9:# 定义起始列col 1# 最大打印 row 列while col < row:# end ""&#xff0c;表示输出结束后&#xff0c;不换行# "\t" 可以在控制台输出一个制表符&#xff0c;协助在输…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

OpenCV 15(SIFT/SURF算法)

一、SIFT Harris和Shi-Tomasi角点检测算法&#xff0c;这两种算法具有旋转不变性&#xff0c;但不具有尺度不变性&#xff0c;以下图为例&#xff0c;在左侧小图中可以检测到角点&#xff0c;但是图像被放大后&#xff0c;在使用同样的窗口&#xff0c;就检测不到角点了。 尺度…

JavaScript操作CSS样式

上节课我们基本完成了游戏的主体&#xff0c;这节课我们来学习如果使用JavaScript去操作CSS样式 ● 例如&#xff0c;我们现在想当玩家输入对的数字之后&#xff0c;我们讲背景改为绿色&#xff0c;并且把number的框宽度变大 const secretnumber Math.trunc(Math.random() * …