Dubbo面试题以及答案,看完碾压面试官
- 1.dubbo是什么?
- 2.为什么要用到dubbo(你们技术选型的时候为什么要考虑到用它)?
- 3.Dubbo的协议(推荐用哪种?)
- 4.Dubbo需要WEB容器吗?
- 5.Dubbo内置了几种服务容器?
- 6.Dubbo里面有哪几种节点角色?
- 7.画一画服务注册与发现的流程图?
- 8.Dubbo默认使用什么注册中心,还有别的选择吗?
- 9.Dubbo有哪几种配置方式?
- 10.Dubbo核心的配置有哪些?
- 11在Provider上可以配置的Consumer端的属性有哪些?
- 12Dubbo启动时如果依赖服务不可用怎么办?
- 13Dubbo推荐使用什么序列化框架,你知道的还有哪些?
- 14Dubbo默认使用的是什么通信框架,还有别的选择吗?
- 15Dubbo有哪几种集群容错方案,默认是哪种?
- 16Dubbo有哪几种负载均衡策略,默认是哪几种?
- 17注册了多个同一样的服务,如果检测指定的某一个服务呢?
- 18Dubbo支持多协议吗?
- 19当一个服务接口有多种实现怎么办?
- 20服务上线怎么兼容旧版本?
- 21Dubbo可以对结果进行缓存吗?
- 22Dubbo服务之间的调用是阻塞的吗?
- 23Dubbo支持分布式事务吗?
- 24Dubbo telnet 命令能做什么?
- 25Dubbo支持服务降级吗?
- 26Dubbo如何优雅停机?
- 27服务提供者能实现失效踢出是什么原理?
- 28如何解决服务调用链过长的问题?
- 29服务读写推荐的容错策略是怎样的?
- 30Dubbo必须依赖的包有哪些?
- 31Dubbo的管理控制台能做什么?
- 32Dubbo服务暴露的过程?
- 33Dubbo和dubbox的区别?
- 34你还了解过其他的分布式框架吗?
- 35Dubbo能集成Spring Cloud吗?
- 36在使用中遇到的那些问题?
- 37你觉得用dubbo好还是用Spring Cloud好?
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 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 [1]。)作为注册中心
redis(阿里内部并没有采用 Redis 做为注册中心,而是使用自己实现的基于数据库的注册中心,即:Redis 注册中心并没有在阿里内部长时间运行的可靠性保障,此 Redis 桥接实现只为开源版本提供,其可靠性依赖于 Redis 本身的可靠性)不推荐
simple,mukticast (Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。)但不推荐
9.Dubbo有哪几种配置方式?
1.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/>
12Dubbo启动时如果依赖服务不可用怎么办?
Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,默认check=“true”,可以通过check=“false”关闭检查。
13Dubbo推荐使用什么序列化框架,你知道的还有哪些?
推荐使用Hessian序列化,它的底层就是基于Hessian,还有0Dubbo,fastJson,java自带的序列化
14Dubbo默认使用的是什么通信框架,还有别的选择吗?
默认是Netty框架,也是推荐使用的,还有Mina,,Grizzly
15Dubbo有哪几种集群容错方案,默认是哪种?
集群容错方案 | 说明 |
---|---|
Failover Cluster | 失败自动切换,自动重试其他服务器(默认) |
Failfast Cluster | 快速失败,立即报错,只发起一次调用 |
Failsafe Cluster | 失败安全,出现异常时,直接忽略 |
Failback Cluster | 失败自动恢复,记录失败请求,定时重发 |
Failking Cluster | 并行调用多个服务器,只要一个成功及返回 |
Failcast Cluster | 广播逐个调用所有的提供者,任意一个报错则报错 |
16Dubbo有哪几种负载均衡策略,默认是哪几种?
前面提到过, 随机(默认),轮询,最少活跃数,一致Hash
17注册了多个同一样的服务,如果检测指定的某一个服务呢?
可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。
注册了多个同一样的服务,如果检测指定的某一个服务呢?
18Dubbo支持多协议吗?
Dubbo支持配置多个协议,在不同服务上支持不同协议或者同一服务上同时支持多协议。
19当一个服务接口有多种实现怎么办?
可以用group属性来分,服务提供方和消费方都可以指定同一个group即可。
20服务上线怎么兼容旧版本?
可以使用版本号(version)过度,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念类似
21Dubbo可以对结果进行缓存吗?
可以,Dubbo提供了声明式缓存,用于加速热门数据的访问速度,以减少用户加载缓存的工作量
22Dubbo服务之间的调用是阻塞的吗?
默认是同步等待结果阻塞的,支持异步调用。
23Dubbo支持分布式事务吗?
支持(2018)但不成熟生产环境不可使用
24Dubbo telnet 命令能做什么?
进行服务治理
25Dubbo支持服务降级吗?
Dubbo2.2.0以上支持
26Dubbo如何优雅停机?
Dubbo是通过jdk的shutDownHook来完成优雅停机的,所以如果使用Kill-9 PID等强制关闭指令,是不会执行优雅停机的,只是通过kill PID时,才会执行。
27服务提供者能实现失效踢出是什么原理?
服务失效踢出基于Zookeeper的临时节点原理
28如何解决服务调用链过长的问题?
Dubbo可以使用Pinpoint和Apache Skywalking实现分布式服务追踪
29服务读写推荐的容错策略是怎样的?
读操作建议使用Failover失败自动切换,写操作建议使用Failfst快速失败,并一次调用失败就立即报错
30Dubbo必须依赖的包有哪些?
Dubbo必须依赖JDK,其他可选
31Dubbo的管理控制台能做什么?
路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能
32Dubbo服务暴露的过程?
Dubbo会在Spring实例化完bean之后,在刷新容器最后一步发送ContextRefreshEvent事件的时候,通知实现了ApplicationListener的serviceBean类进行回调onApplicationEvent事件方法,Dubbo会在这个方法中调用ServiceBean父类ServiceConfig的export方法,而该方法真正实现了服务的发布
33Dubbo和dubbox的区别?
Dubbox是继Dubbo停止维护后,当当网基于dubbo做的一个拓展应用
34你还了解过其他的分布式框架吗?
springcloud,facebook的Thrift,teitter的finagle
35Dubbo能集成Spring Cloud吗?
可以的
36在使用中遇到的那些问题?
dubbo的设计目的是为了满足高并发小数据量的rpc调用,在大数据下的性能表现并不好,建议使用rmi或者http协议
37你觉得用dubbo好还是用Spring Cloud好?
没有好坏,只有适合 我倾向于Dubbo ,Spring Cloud的更新速度太快,配置太繁琐,外国人的东西总归不如自己人的东西顺手