作为一个JAVA工程师,出去项目拿20k薪资以上,dubbo绝对是面试必问的,即使你对dubbo在项目架构上的作用不了解,但dubbo的基础知识也必须掌握。

整理分享一些面试中常会被问到的dubbo基础知识,或许会给正在面试、准备面试的小伙伴一点帮助。

1、dubbo是什么?

dubbo是阿里的开源的基于java的高性能rpc分布式服务框架,现已(2018)成为Apache基金会的孵化项目

2、为什么要用到dubbo(你们技术选型的时候为什么要考虑到用它)?

因为它是阿里的开源项目,国内很多的互联网都在用。已经经过了很多线上的考验。内部使用了Netty、Zookeeper确保了高性能高可用性。

使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,是前端应用能更快的响应多变的市场需求。

3、Dubbo的协议(推荐用哪种?)

dubbo(推荐使用 采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)),http,redis,webservice,rmi,hessian,thrift,memcached,rest(调你会的说)

4、Dubbo需要WEB容器吗?

不需要,如果硬要用的话,只会增加复杂性,也会浪费资源

5、Dubbo内置了几种服务容器?

  • Spring Contaniner
  • Jetty Container
  • Log4j Container

Dubbo的服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。

6、Dubbo里面有哪几种节点角色?

节点 角色说明

  • Provider 暴露服务的服务提供方
  • Consumer 调用远程服务的服务消费方
  • Registry 服务注册与发现的注册中心
  • Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行容器

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

8、Dubbo默认使用什么注册中心,还有别的选择吗?

  • 推荐使用Zookeeper(Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。)作为注册中心
  • redis(阿里内部并没有采用 Redis 做为注册中心,而是使用自己实现的基于数据库的注册中心,即:Redis

    注册中心并没有在阿里内部长时间运行的可靠性保障,此 Redis 桥接实现只为开源版本提供,其可靠性依赖于 Redis 本身的可靠性)不推荐

simple,mukticast (Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。)但不推荐

9、Dubbo有哪几种配置方式?

  • XML配置
  • API配置
  • 注解配置
  • 属性配置

10.Dubbo核心的配置有哪些?

配置 配置说明

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

(最少能说出一下几个都是常用的 不知道一定不熟悉)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!--服务名称-->
<dubbo:application name="hello-world-app" />
<!--注册中心地址配置-->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!--协议配置-->
<dubbo:protocol name="dubbo" port="20880" />
<!--服务配置-->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />
<!--引用配置-->
<dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />
</beans>

11、在Provider上可以配置的Consumer端的属性有哪些?

关键几个:

  • timeout:方法调用超时
  • retries:失败重试次数,默认重试2次
  • loadbalance:负载均衡算法,默认随机(random)(roundrobin,leastactive,ConsisitenHash,分别表示:轮询,最少活跃调用,一致Hash)
  • actives:消费者端,最大并发调用限制
<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService"
timeout="300" retry="2" loadbalance="random" actives="0" /> <dubbo:service interface="com.alibaba.hello.api.WorldService" version="1.0.0" ref="helloService"
timeout="300" retry="2" loadbalance="random" actives="0" >
<dubbo:method name="findAllPerson" timeout="10000" retries="9" loadbalance="leastactive" actives="5" />
<dubbo:service/>

12、Dubbo启动时如果依赖服务不可用怎么办?

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,默认check=“true”,可以通过check=“false”关闭检查。

13、Dubbo推荐使用什么序列化框架,你知道的还有哪些?

推荐使用Hessian序列化,它的底层就是基于Hessian,还有0Dubbo,fastJson,java自带的序列化

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

默认是Netty框架,也是推荐使用的,还有Mina,,Grizzly

15、Dubbo有哪几种集群容错方案,默认是哪种?

集群容错方案 说明

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

16、Dubbo有哪几种负载均衡策略,默认是哪几种?

前面提到过, 随机(默认),轮询,最少活跃数,一致Hash

17、注册了多个同一样的服务,如果检测指定的某一个服务呢?

可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。

注册了多个同一样的服务,如果检测指定的某一个服务呢?

18、Dubbo支持多协议吗?

Dubbo支持配置多个协议,在不同服务上支持不同协议或者同一服务上同时支持多协议。

19、当一个服务接口有多种实现怎么办?

可以用group属性来分,服务提供方和消费方都可以指定同一个group即可。

20、服务上线怎么兼容旧版本?

可以使用版本号(version)过度,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念类似

21、Dubbo可以对结果进行缓存吗?

可以,Dubbo提供了声明式缓存,用于加速热门数据的访问速度,以减少用户加载缓存的工作量

22、Dubbo服务之间的调用是阻塞的吗?

默认是同步等待结果阻塞的,支持异步调用。

23、Dubbo支持分布式事务吗?

支持(2018)但不成熟生产环境不可使用

24、Dubbo telnet 命令能做什么?

进行服务治理

25、Dubbo支持服务降级吗?

Dubbo2.2.0以上支持

26、Dubbo如何优雅停机?

Dubbo是通过jdk的shutDownHook来完成优雅停机的,所以如果使用Kill-9 PID等强制关闭指令,是不会执行优雅停机的,只是通过kill PID时,才会执行。

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

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

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

Dubbo可以使用Pinpoint和Apache Skywalking实现分布式服务追踪

29、服务读写推荐的容错策略是怎样的?

读操作建议使用Failover失败自动切换,写操作建议使用Failfst快速失败,并一次调用失败就立即报错

30、Dubbo必须依赖的包有哪些?

Dubbo必须依赖JDK,其他可选

31、Dubbo的管理控制台能做什么?

路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能

32、Dubbo服务暴露的过程?

Dubbo会在Spring实例化完bean之后,在刷新容器最后一步发送ContextRefreshEvent事件的时候,通知实现了ApplicationListener的serviceBean类进行回调onApplicationEvent事件方法,Dubbo会在这个方法中调用ServiceBean父类ServiceConfig的export方法,而该方法真正实现了服务的发布

33、Dubbo和dubbox的区别?

Dubbox是继Dubbo停止维护后,当当网基于dubbo做的一个拓展应用

34、你还了解过其他的分布式框架吗?

springcloud,facebook的Thrift,teitter的finagle

35、Dubbo能集成Spring Cloud吗?

可以的

36、在使用中遇到的那些问题?

dubbo的设计目的是为了满足高并发小数据量的rpc调用,在大数据下的性能表现并不好,建议使用rmi或者http协议

37、你觉得用dubbo好还是用Spring Cloud好?

没有好坏,只有适合 我倾向于Dubbo ,Spring Cloud的更新速度太快,配置太繁琐,外国人的东西总归不如自己人的东西顺手

关注微信公众号:【程序员内点事】,免费获取2000G学习资料,内含精选面试题,SSM、Spring全家桶、微服务、MySQL、MyCat、集群、分布式、中间件、Linux、网络、多线程,Jenkins、Nexus、Docker、ELK等等免费学习视频,持续更新!

死磕面试 - Dubbo基础知识37问(必须掌握)的更多相关文章

  1. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  2. PHP面试 PHP基础知识 十(网络协议)

    网络协议 HTTP协议状态码 状态分为五大类:1XX.2XX.3XX.4XX.5XX 1XX:信息类状态码  表示接受请求正在处理 2XX:success 成功状态码  请求正常处理完毕 3XX:重定 ...

  3. 死磕面试系列,Java到底是值传递还是引用传递?

    Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...

  4. 2、dubbo基础知识

    1.简介 2.dubbo架构 3.dubbo环境搭建 注意:cmd命令都是在bin目录的地址栏直接输入 xxx.cmd 4.配置dubbo-admin 步骤一: 步骤二: 步骤三: 步骤四: 步骤五: ...

  5. PHP面试 PHP基础知识 十一(开发环境及相关配置)

    开发环境及相关配置 版本控制软件 集中式和分布式 集中式:集中式版本控制工具,版本库集中存放在中央服务器,团队成员里的每个人工作时从中央服务器下载代码,个人修改后再提交到中央服务器 分布式:分布式版本 ...

  6. PHP面试 PHP基础知识 九(面向对象)

    面向对象 PHP的类权限控制修饰符 public(公共的) . protected(受保护的).private(私有的) public :最高权限   可以在类的内部使用  可以在类的外部使用  可以 ...

  7. PHP面试 PHP基础知识 八(会话控制)

    ---恢复内容开始--- PHP会话控制技术 首先了解一下为什么要使用会话控制技术? 本身web 与服务器的交互是通过HTTP协议来实现的,而HTTP协议又是无状态协议.就是说明HTTP协议没有一个內 ...

  8. PHP面试 PHP基础知识 七(文件及目录处理)

    文件操作 文件打开函数 fopen()函数 //用来打开一个文件 打开时需要指定打开模式 语法:fopen( filename, mode, include_path, context); filen ...

  9. PHP面试 PHP基础知识 六(正则表达式)

    正则表达式 正则表达式的作用 分割.查找.匹配.替换字符串 分隔符:正斜线(/).hash符号(#).以及取反符号(~)   通用原子:\d(代表十进制的0-9).\D (取反除了0-9).\w(数字 ...

随机推荐

  1. cccc初赛 L3-003 长城

    L3-009. 长城 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 邓俊辉 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长 ...

  2. 2018-8-10-win10-uwp-获取文件夹出错

    title author date CreateTime categories win10 uwp 获取文件夹出错 lindexi 2018-08-10 19:16:50 +0800 2018-2-1 ...

  3. tf.contrib.learn.preprocessing.VocabularyProcessor()

    tf.contrib.learn.preprocessing.VocabularyProcessor (max_document_length, min_frequency=0, vocabulary ...

  4. C# 字典 Dictionary 的 TryGetValue 与先判断 ContainsKey 然后 Get 的性能对比

    本文使用 benchmarkdotnet 测试字典的性能,在使用字典获取一个可能存在的值的时候可以使用两个不同的写法,于是本文分析两个写法的性能. 判断值存在,如果值存在就获取值,可以使用下面两个不同 ...

  5. Oracle如何分组排序并产生序号

    SELECT C.ORG_SHORTNAME, B.USER_NAME, ROW_NUMBER () OVER ( PARTITION BY B.ORG_ID ORDER BY A.TOTAL_SCO ...

  6. c++ vector 的坑

    一个空的vector执行pop_back操作会发生什么 由于之前看STL源码剖析的时候,发现所执行的操作如下: 只是简单的将末尾的finish迭代器减1后destroy.这让人产生一个疑问:假如这个v ...

  7. python类方法、类属性和静态方法

    class Game(object): #类属性 num = 0 #实例方法 def __init__(self): #实例属性 self.name = "laowang" #类方 ...

  8. Python反射笔记

    通过字符串的形式,导入模块.使用__import__ In [3]: SYS = __import__("sys") In [4]: SYS.path 如果导入模块在多级文件夹下 ...

  9. 洛谷$P1600$ 天天爱跑步 树上差分

    正解:树上差分 解题报告: 传送门$QwQ$! 这题还挺妙的,,,我想了半天才会$kk$ 首先对一条链$S-T$,考虑先将它拆成$S-LCA$和$LCA-T$,分别做.因为总体上来说差不多接下来我就只 ...

  10. 洛谷$P2046\ [NOI2010]$海拔 网络流+对偶图

    正解:网络流+对偶图 解题报告: 传送门$QwQ$ $umm$之前省选前集训的时候叶佬考过?然而这和我依然不会做有什么关系呢$kk$ 昂这题首先要两个结论?第一个是说每个位置的海拔一定是0/1,还一个 ...