Dubbo 面试题,mybatis 架构图
Channel 、 Transporter 、 Client 、 Server 和 Codec
数据序列化层( Serialize ): 可复用的一些工具,扩展接口为 Serialization 、 ObjectInput 、
ObjectOutput 和 ThreadPool
3、默认使用的是什么通信框架,还有别的选择吗?
默认推荐使用 netty 框架,还有 mina
4、服务调用是阻塞吗?
默认是阻塞的,可以异步调用,没有返回值的可以这么做。
Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。
5、一般使用什么注册中心?还有别的选择吗?
推荐使用 Zokkeeper 作为注册中心,还有 Redis、Multicast、Simple 注册中心,但不推荐使用
6、默认使用什么序列化框架,你知道的还有哪些?
推荐使用 Hessian 序列化,还有 Dubbo、FastJson、Java 自带序列化。
7、服务提供者能实现失效踢出是什么原理?
服务失效踢出基于 zookepper 的临时节点原理。
8、服务上线怎么不影响旧版本?
采用多版本开发,不影响旧版本。
9、如何解决服务调用链过长的问题?
可以结合 zipkin 实现分布式服务追踪。
10、说说核心的配置有哪些?
11、Dubbo 推荐用什么协议?
?
12、同一个服务多个注册的情况下可以直连某一个服务吗?
可以点对点直连,修改配置即可,也可以通过 telnet 直接某个服务。
13、画一画服务注册与发现的流程图?
14、Dubbo 用到了那些设计模式?
工厂模式、装饰器模式、观察者模式、动态代理模式?
15、Dubbo 配置文件是如何加载到 Spring 中的?
Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema(XML)以及
Dubbo 自定义的 schema(XML),每个 schema 都会对应一个自己的 NamespaceHandler,NamespaceHandler 里面通过 BeanDefinitionParser 来解析配置信息并转化为需要加载的 bean 对象。
16、Dubbo 可以对结果进行缓存吗?
为了提高数据访问的速度。DUbbo 提供了声明式缓存,以减少用户加缓存的工作量
<dubbo:reference cache="true" />
其实比普通的配置文件就多了一个标签 cache=“true”
17、服务上线怎么兼容旧版本?
可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。
18、Dubbo 必须依赖的包有哪些?
Dubbo 必须依赖 JDK,其他为可选。
19、Dubbo 支持服务降级吗?
以通过 dubbo:reference 中设置 mock=“return null”。mock 的值也可以修改成 true,然后在跟接口同一个路径下实现一个 Mock 类,命名规则是“接口名称+Mock”后缀。然后在 Mock 类里实现自己的降级逻辑。
评论