2019最新dubbo面试题含答案

1、默认使用的是什么通信框架,还有别的选择吗?  
默认也推荐使用netty框架,还有mina。
  
2、服务调用是阻塞的吗?  
默认是阻塞的,可以异步调用,没有返回值的可以这么做。
  
3、一般使用什么注册中心?还有别的选择吗?  
推荐使用zookeeper注册中心,还有redis等不推荐。
  
4、默认使用什么序列化框架,你知道的还有哪些?  
默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
  
5、服务提供者能实现失效踢出是什么原理?  
服务失效踢出基于zookeeper的临时节点原理。
zookeeper中节点是有生命周期的.具体的生命周期取决于节点的类型.节点主要分为持久节点(Persistent)和临时节点(Ephemeral)
持久节点:所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点,也就是说不会因为创建该节点的客户端会话失效而消失
临时节点:临时节点的生命周期和客户端会话绑定,也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉
应用场景  怎么判断zookeeper中的机器是否可用?
在分布式系统中,我们常常需要知道某个机器是否可用,传统的开发中,可以通过Ping某个主机来实现,Ping得通说明对方是可用的,相反是不可用的,因为zookeeper是一个树形结构.ZK 中我们让所有的机其都注册一个临时节点,我们判断一个机器是否可用,我们只需要判断这个节点在ZK中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度
5.1 dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?
  消费者在启动时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。
每次调用时,按照本地存储的地址进行调用。消费者本地有一个生产者的列表,他会按照列表继续工作,倒是无法从注册中心去同步最新的服务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复
5.2
zookeeper实现分布式锁,zookeeper选举机制等

6、服务上线怎么不影响旧版本?  
采用多版本开发,不影响旧版本。
  
7、如何解决服务调用链过长的问题?  
可以结合zipkin实现分布式服务追踪。
  
8、说说核心的配置有哪些?
核心配置有 dubbo:service/ dubbo:reference/ dubbo:protocol/ dubbo:registry/ dubbo:application/ dubbo:provider/ dubbo:consumer/ dubbo:method/  
  
9、dubbo推荐用什么协议?  
默认使用dubbo协议。
  
10、同一个服务多个注册的情况下可以直连某一个服务吗?  
可以直连,修改配置即可,也可以通过telnet直接某个服务。
  
11、画一画服务注册与发现的流程图  

  
12、集群容错怎么做?  
  读操作建议使用Failover失败自动切换,默认重试两次其他服务器。写操作建议使用Failfast快速失败,发一次调用失败就立即报错。
13、在使用过程中都遇到了些什么问题?  
  
14、dubbo和dubbox之间的区别?  
dubbox是当当网基于dubbo上做了一些扩展,如加了服务可restful调用,更新了开源组件等。
  
15、你还了解别的分布式框架吗?
别的还有spring的spring cloud

16、dubbo中"读接口"和"写接口"有什么区别?
答案也是很明显的,因为默认 FailoverCluster会重试,如果是"写"类型的接口,如果在网络抖动情况下写入多个值,所以"写"类型的接口要换成 FailfastCluster
17 谈谈dubbo中的负载均衡算法及特点?一机轮少
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 Random LoadBalance 随机调用
Random LoadBalance:但调用量越大分布越均匀
RoundRobin LoadBalance:轮询,存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上
LeastActive LoadBalance:最少活跃调用数,使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
ConsistentHash LoadBalance:一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动
18 你是否了解spi,讲一讲什么是spi,为什么要使用spi?
spi是给拓展者使用的.一个好的开源框架,必须要留一些拓展点.让参与者尽量黑盒拓展,而不是白盒修改代码
如果从生活中的例子讲,就是比如浏览器插件,比如墙上的插头不够我们就接个排插,而不是伤筋动骨改插头(感觉不是很贴切,前期你暂且这么不规范的粗略理解)
19 对类加载机制了解吗,说一下什么是双亲委托模式,他有什么弊端,这个弊端有没有什么我们熟悉的案例,解决这个弊端的原理又是怎么样的
在ClassLoader的结构中,还有一个重要的字段parent,它也是一个ClassLoader的实例,这个字段表示的ClassLoader也称为这个ClassLoader的双亲.在类加载的过程中,可能会将某些加载类的请求交于自己的双亲处理.

如图,应用类加载器的双亲为扩展类加载器,扩展类加载器的双亲为启动类加载器.
系统中的ClassLoader在协同工作时,默认会使用双亲委托模式.即在类加载的时候,系统会判断当前类是否已经被加载,如果被加载,就会直接返回可用的类,否则就会尝试加载,在尝试加载时,会先请求双亲处理,如果双亲请求失败,则会自己加载. 
双亲委托模式的弊端:判断类是否加载的时候,应用类加载器会顺着双亲路径往上判断,直到启动类加载器.但是启动类加载器不会往下询问,这个委托路线是单向的,即顶层的类加载器,无法访问底层的类加载器所加载的类,如图
启动类加载器中的类为系统的核心类,比如,在系统类中,提供了一个接口,并且该接口还提供了一个工厂方法用于创建该接口的实例,但是该接口的实现类在应用层中,接口和工厂方法在启动类加载器中,就会出现工厂方法无法创建由应用类加载器加载的应用实例问题.

拥有这样问题的组件有很多,比如JDBC、Xml parser等.JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层,由java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成
19 Dubbo需要 Web 容器吗?
不需要,如果硬要用 Web 容器,只会增加复杂性,也浪费资源。
20 Dubbo内置了哪几种服务容器?
Spring Container  Jetty Container  Log4j Container
21 Dubbo支持分布式事务吗?
目前暂时不支持
22 服务读写推荐的容错策略是怎样的
读操作建议使用 Failover 失败自动切换,默认重试两次其他服务器。
写操作建议使用 Failfast 快速失败,发一次调用失败就立即报错。
23 Dubbo必须依赖的包有哪些?
Dubbo 必须依赖 JDK,其他为可选

==============感谢阅读================

发布了26 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ganyouxian_java/article/details/102678386