java面试题选择题,java常见的面试题及答案

  java面试题选择题,java常见的面试题及答案

  

目录

  (视频教程推荐:java课程)

  1.Dubbo面试问题

  2.对2答案的分析。Dubbo面试问题

  1.为什么要用杜博?

  2.Dubbo的整体架构设计有哪几层?

  3.默认使用什么通信框架?还有其他选择吗?

  4.服务呼叫是否被阻止?

  5.常用什么报名中心?还有别的选择吗?

  6.默认使用什么序列化框架?你还知道什么?

  7.服务商的失败踢出的原理是什么?

  8.在线服务如何不影响旧版本?

  9.如何解决服务调用链过长的问题?

  10.核心配置有哪些?

  11.Dubbo推荐什么协议?

  12.在同一服务多次注册的情况下,我可以直接连接到某个服务吗?

  13.画出服务注册和发现的流程图?

  14.Dubbo集群容错有几种方案?

  15.Dubbo服务降级。重试失败怎么办?

  16.Dubbo在使用过程中遇到了哪些问题?

  17.Dubbo Monitor的实现原理?

  18.Dubbo用的是什么设计模式?

  19.Dubbo配置文件是如何加载到Spring的?

  20.Dubbo SPI和Java SPI有什么区别?

  21.Dubbo支持分布式事务吗?

  22.Dubbo可以缓存结果吗?

  23.在线服务如何兼容旧版本?

  24.Dubbo必须依赖的包有哪些?

  25.Dubbo telnet命令可以做什么?

  26.Dubbo的支持服务降级了吗?

  27.Dubbo如何优雅地停止机器?

  28.Dubbo和Dubbox有什么区别?

  29.Dubbo和春云有什么区别?

  30.你知道其他分布式框架吗?

  3.3之间的区别。春云与杜博

  4.另一个微服务框架,SpringCloud

  SpringCloud组件的原理:Eureka、Feign、Ribbon、Hystrix、Zuul

  :

1.Dubbo 面试题

   1.为什么要用Dubbo?

  2.Dubbo的整体架构设计有哪几层?

  3.默认使用什么通信框架?还有其他选择吗?

  4.服务呼叫是否被阻止?

  5.常用什么报名中心?还有别的选择吗?

  6.默认使用什么序列化框架?你还知道什么?

  7.服务商的失败踢出的原理是什么?

  8.在线服务如何不影响旧版本?

  9.如何解决服务调用链过长的问题?

  10.核心配置有哪些?

  11.Dubbo推荐什么协议?

  12.在同一服务多次注册的情况下,我可以直接连接到某个服务吗?

  13.画出服务注册和发现的流程图?

  14.Dubbo集群容错有几种方案?

  15.Dubbo服务降级。重试失败怎么办?

  16.Dubbo在使用过程中遇到了哪些问题?

  17.Dubbo Monitor的实现原理?

  18.Dubbo用的是什么设计模式?

  19.Dubbo配置文件是如何加载到Spring的?

  20.Dubbo SPI和Java SPI有什么区别?

  21.Dubbo支持分布式事务吗?

  22.Dubbo可以缓存结果吗?

  23.在线服务如何兼容旧版本?

  24.Dubbo必须依赖的包有哪些?

  25.Dubbo telnet命令可以做什么?

  26.Dubbo的支持服务降级了吗?

  27.Dubbo如何优雅地停止机器?

  28.Dubbo和Dubbox有什么区别?

  29.Dubbo和春云有什么区别?

  30.你知道其他分布式框架吗?

  

2.Dubbo 面试题答案解析

  

1、为什么要用 Dubbo?

  随着面向服务的进一步发展,服务越来越多,服务之间的调用和依赖也越来越复杂。由此产生了一系列相应的技术,如服务提供、服务调用、连接处理、通信协议、序列化、服务发现、服务路由、日志输出等。已经诞生了。这样就出现了一个分布式系统的服务治理框架,Dubbo也就应运而生了。

  

2、Dubbo 的整体架构设计有哪些分层?

  接口服务层(Service):这一层与业务逻辑相关,根据提供者和消费者的业务设计相应的接口和实现。

  配置层(Config):外部配置接口,以ServiceConfig和ReferenceConfig为中心

  服务代理层(Proxy):服务接口透明代理,生成客户端的存根和服务器的骨架。ServiceProxy是中心,扩展接口是ProxyFactory。

  服务注册层(Registry):封装了服务地址的注册和发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。

  路由层(Cluster):封装了多个提供者的路由和负载均衡,并桥接注册中心,以Invoker为中心,扩展的接口为Cluster、Directory、Router和LoadBlancce。

  监控层(Monitor):RPC调用次数和调用时间监控,以统计为中心,扩展了MonitorFactory、Monitor、MonitorService等接口。

  远程调用层(Protocal):封装RPC调用,以调用和结果为中心,扩展接口为Protocal、Invoker和Exporter。

  信息交换层(Exchange):封装的请求响应模式,同步到异步。以请求和响应为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。

  网络 传输 层(Transport):摘要mina和netty是统一接口,以消息为中心,扩展接口是通道、传输器、客户端、服务器和编解码器。

  数据序列化层(Serialize):可重复使用工具。扩展接口是序列化、ObjectInput、ObjectOutput和ThreadPool。

  

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

  默认也推荐netty框架,还有mina。

  

4、服务调用是阻塞的吗?

  默认情况下被阻止,可以异步调用。如果没有返回值,可以这样做。Dubbo是基于NIO的非阻塞并行调用。客户端可以并行调用多个远程服务,而无需启动多线程。与多线程相比,成本更低,异步调用会返回一个Future对象。

  

5、一般使用什么注册中心?还有别的选择吗?

  建议使用Zookeeper作为注册中心。还有Redis,组播,简单注册中心,但不推荐。

  

6、默认使用什么序列化框架,你知道的还有哪些?

  推荐Hessian序列化,还有Duddo,FastJson和Java自己的序列化。

  

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

  服务失败踢出基于zookeeper的临时节点原理。

  

8、服务上线怎么不影响旧版本?

  采用多版本开发,不影响老版本。

  

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

  可以结合zipkin实现分布式服务跟踪。

  

10、说说核心的配置有哪些?

  

11、Dubbo 推荐用什么协议?

  

12、同一个服务多个注册的情况下可以直连某一个服务吗?

  可以点对点直接连接,只需修改配置,或者通过telnet直接连接到某个服务。

  (更多相关面试问题推荐:java面试问答)

  

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

  

14、Dubbo 集群容错有几种方案?

  

15、Dubbo 服务降级,失败重试怎么做?

  您可以在dubbo:reference中设置mock=return null 。Mock的值也可以更改为true,然后可以在与接口相同的路径中实现一个Mock类。命名规则是“接口名称模拟”后缀。然后在模拟类中实现您自己的降级逻辑。

  

16、Dubbo 使用过程中都遇到了些什么问题?

  在注册表中找不到相应的服务。检查服务实现类是否添加了@service注释,无法连接到注册表。检查配置文件中对应的测试ip是否正确。

  

17、Dubbo Monitor 实现原理?

  消费者将在发起呼叫之前通过过滤器链;当提供者收到请求时,它也是先取过滤器链,然后进行真正的业务逻辑处理。默认情况下,使用者和提供者的筛选器链中都有Monitorfilter。

  1.MonitorFilter向DubboMonitor发送数据。

  2.数据经DubboMonitor聚合后(默认聚合1min的统计数据),暂存在并发统计、原子引用统计图中。然后用一个有三个线程的线程池(线程名:DubboMonitorSendTimer)每隔1 m1分钟调用SimpleMonitorService遍历发送statisticsMap中的统计数据,每发送一个就重置当前统计数据的AtomicReference。

  3.SimpleMonitorService将这些聚合数据插入阻塞队列(队列的大写字母是100,000)

  4.SimpleMonitorService使用后台线程(线程名:dubbonitorasyncwritelogThread)将队列中的数据写入文件(该线程以无限循环的方式写入)

  5.SimpleMonitorService还会使用一个有一个线程的线程池(线程名:DubboMonitorTimer)每隔5min将文件中的统计数据绘制成图表。

  

18、Dubbo 用到哪些设计模式?

   Dubbo框架在初始化和通信时使用了多种设计模式,可以灵活控制类加载、权限控制等功能。

  工厂模式

  当提供程序导出服务时,将调用ServiceConfig的导出方法。配置中有以下字段:

  私有静态最终协议协议=

  extension loader . getextensionloader(protocol . class)。getAdaptiveExtensi

  on();在Dubbo有很多这样的代码。这也是一种工厂模式,只是JDKSPI用于获取实现类。这种实现的优点是它是可扩展的。如果要扩展实现,只需要在类路径下添加一个文件,代码零侵入。此外,与上面的自适应实现一样,您可以在调用时动态决定调用哪个实现。但由于这种实现采用动态代理,会给代码调试带来麻烦,需要分析实际调用的实现类。

  装饰器模式

  Dubbo在启动和调用阶段大量使用了装饰模式。以提供商提供的调用链为例。具体的调用链代码在ProtocolFilterWrapper的buildInvokerChain中完成。具体来说,注释中带有group=provider的过滤器是按顺序实现的,最后一个调用顺序是:

  echo filter-class loader filter-generic filter-context filter-

  ExecuteLimitFilter-trace filter-time out filter-monitor filter-

  ExceptionFilter具体来说,这里是装饰者和责任链模式的混合使用。比如EchoFilter的作用就是判断是否是echo测试请求,如果是就直接返回内容,这就是一个责任链的体现。而ClassLoaderFilter只在主函数中增加函数,改变当前线程的类加载器,这是典型的decorator模式。

  观察者模式

  Dubbo的提供者启动时,需要与注册中心交互,先注册自己的服务,然后订阅自己的服务。订阅时,它采用观察者模式并启动一个监听器。注册表会每隔5秒定期检查是否有服务更新。如果有更新,它将向服务提供商发送通知消息。提供程序收到通知消息后,将运行NotifyListener的notify方法,并执行侦听器方法。

  动态代理模式

  达博扩展JDK SPI的类ExtensionLoader的自适应实现是一个典型的动态代理实现。Dubbo需要灵活控制实现类,即在调用阶段根据参数动态决定调用哪个实现类,因此可以采用教师成为代理类的方法灵活调用。生成代理类的代码是ExtensionLoader的createAdaptiveExtensionClassCode方法。代理的主要逻辑是获取URL参数中指定参数的值作为实现类的键。

  

19、Dubbo 配置文件是如何加载到 Spring 中的?

   Spring容器启动时会读取Spring的一些默认模式和Dubbo定义的一些模式,每个模式都会对应自己的NamespaceHandler。在NamespaceHandler中,配置信息由BeanDefinitionParser解析,并转换成要加载的bean对象!

  

20、Dubbo SPI 和 Java SPI 区别?

  JDK SPI:

  JDK标准的SPI将一次加载所有的扩展实现。如果有些扩展是诚实的,会花时间,但是没用,浪费资源。所以只想加载一个的实现是不现实的。

  DUBBO SPI:

  1.在不改变Dubbo源代码的情况下扩展Dubbo。

  2.延迟加载。一次只能加载想要加载的扩展实现。

  3.增加了对扩展点IOC和AOP的支持,setter可以直接注入一个扩展点。

  它扩展了观点。

  4.Dubbo的扩展机制可以很好的支持第三方IoC容器,默认支持Spring Bean。

  

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

  目前不支持,但可以通过tcc-transaction框架实现。

  简介:tcc-transaction是一个开源的tcc补偿性分布式事务框架。

  TCC-Transaction可以通过Dubbo的隐式参数传递函数避免其侵入业务代码。

  

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

  为了提高数据访问的速度。Dubbo提供声明式缓存来减少用户缓存的工作量dubbo:reference cache=true/

  实际上,比普通的配置文件多了一个标签cache=true。

  

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

  可以按版本号过渡。注册表中注册了很多不同版本的服务,不同版本号的服务互不引用。它类似于服务分组的概念。

  

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

   Dubbo必须依赖于JDK,其他是可选的。

  

25、Dubbo telnet 命令能做什么?

   Dubbo服务发布后,我们可以使用telnet命令对其进行调试和管理。杜波2.0.5版及以上服务提供的端口支持telnet命令。

  连接服务

  telnethost 20880//回车进入Dubbo命令模式。

  查看服务列表

  杜博尔斯

  测试服务

  dubbols com.test.TestService

  创造

  删除

  查询ls(列出服务和方法)

  Ls:显示服务列表。

  Ls-l:显示服务详细信息列表。

  Ls XXX服务:显示服务的方法列表。

  Ls-l XXX服务:显示服务的方法详细信息列表。

  

26、Dubbo 支持服务降级吗?

  在dubbo:reference中设置mock=return null。Mock的值也可以更改为true,然后可以在与接口相同的路径中实现一个Mock类。命名规则是“接口名称模拟”后缀。然后在模拟类中实现您自己的降级逻辑。

  

27、Dubbo 如何优雅停机?

   Dubbo通过JDK的ShutdownHook完成宽限关机,所以如果使用kill -9 PID等强制关机指令,不会执行宽限关机,只有在通过kill PID时才会执行。

  

28、Dubbo 和 Dubbox 之间的区别?

   Dubbox是当当网在Dubbo停止维护后,基于Dubbo做的一个扩展项目,比如为Restful调用增加服务,更新开源组件等。

  

29、Dubbo 和 Spring Cloud 的区别?

  根据微服务架构各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。

  用Dubbo搭建的微服务架构就像组装一台电脑。我们在每个环节都有很高的选择自由度,但最终的结果很可能是因为一个不好的记忆质量而不亮,总让人感到不安,但如果你是高手,那么这些都不是问题;而春云就像一台杂牌机。随着弹簧源的集成,做了大量的兼容性测试,以确保机器具有更高的稳定性。但是,如果你想用原厂元件以外的东西,你需要对它的基础有足够的了解。

  

30、你还了解别的分布式框架吗?

  其他还有spring的spring Cloud,facebook的thrift,twitter的finagle等。

  

3.Spring Cloud 与 Dubbo 区别

   ken 0 @ 166 . com最大的区别:春云抛弃了Dubbo的RPC通信,采用了基于HTTP的REST方式。严格来说,这两种方法各有利弊。虽然在某种程度上,后者牺牲了服务调用的性能,但也避免了上述原生RPC带来的问题。而且,REST比RPC更灵活。服务提供者和调用方的依赖仅仅依赖于一纸契约,在代码层面没有很强的依赖性。这在强调快速进化的微服务环境中更合适。

  

4.另一种微服务框架SpringCloud

  请参考上一期:

  

SpringCloud组件原理:Eureka,Feign,Ribbon,Hystrix,Zuul

  相关推荐:java入门。以上是Java面试问题——Dubbo的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: