作为一个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. springSecurity安全框架的学习和原理解读

    最近在公司的项目中使用了spring security框架,所以有机会来学习一下,公司的项目是使用springboot搭建 springBoot版本1.59 spring security 版本4.2 ...

  2. Codevs 均分纸牌(贪心)

    题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...

  3. HashMap之红黑树

    红黑树的设计,相比 jdk1.7 的 HashMap 而言,jdk1.8 最重要的就是引入了红黑树的设计,当冲突的链表长度超过 8 个的时候,链表结构就会转为红黑树结构. 01.故事的起因 “ JDK ...

  4. C++ 驱动开发 error LNK2019

    最近在写一个机器人的时候,发现驱动无法编译通过.本文告诉大家如何解决这个问题. 在 VisualStudio 2017 15.8 的版本提供新的功能C++ Just My Code Stepping ...

  5. CF 453C. Little Pony and Summer Sun Celebration

    CF 453C. Little Pony and Summer Sun Celebration 构造题. 题目大意,给定一个无向图,每个点必须被指定的奇数或者偶数次,求一条满足条件的路径(长度不超\( ...

  6. Nutch网页抓取速度优化

    Nutch网页抓取速度优化 Here are the things that could potentially slow down fetching 1) DNS setup 2) The numb ...

  7. Flutter 添加阴影效果

    Container( width: double.infinity, height: ScreenUtil.getInstance().setHeight(500), decoration: BoxD ...

  8. Visual Studio Team Services使用教程【1】:邀请团队成员

    2017.4.23之后建议朋友看下面的帖子 TFS2017 & VSTS 实战(繁体中文视频) Visual Studio Team Services(VSTS)与敏捷开发ALM实战关键报告( ...

  9. spring boot 实践总结(转)

    pring Boot是最流行的用于开发微服务的Java框架.在本文主要分享的是在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于个人经验和一些熟知的Spring Boot专家的文章 ...

  10. vue新增属性响应式更新的问题

    根据官方文档定义: 如果在实例创建之后添加新的属性到实例上,它不会触发视图更新. 受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删 ...