Dubbo 高频面试题及详细答案(企业真实面试版)-1_第1页
Dubbo 高频面试题及详细答案(企业真实面试版)-1_第2页
Dubbo 高频面试题及详细答案(企业真实面试版)-1_第3页
Dubbo 高频面试题及详细答案(企业真实面试版)-1_第4页
Dubbo 高频面试题及详细答案(企业真实面试版)-1_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Dubbo高频面试题及详细答案(企业真实面试版)本套面试题基于一线互联网、外包、中大型企业真实面试汇总,覆盖Dubbo基础概念、架构原理、注册中心、通信机制、容错机制、负载均衡、序列化、线程模型、踩坑实战、调优场景,答案通俗易懂、贴合面试口语,可直接背诵使用。一、基础概念篇1.简单介绍一下Dubbo?Dubbo是一款开源的、高性能、轻量级的Java微服务RPC框架,由阿里开源,目前是Apache顶级项目。核心作用是解决分布式系统中服务之间的远程调用问题。它主要帮我们实现:远程方法调用、服务注册发现、负载均衡、容错降级、流量管控、服务治理等能力,让分布式服务开发像调用本地方法一样简单。整体特点可以概括为:高性能、透明化调用、丰富的服务治理、可扩展、高可用。2.Dubbo的核心功能有哪些?核心功能主要分为五大块:1.远程通信:基于Netty实现高性能网络通信,支持多种协议、序列化方式。2.服务注册与发现:依托注册中心实现服务自动注册、动态发现,支持集群部署。3.负载均衡:客户端内置多种负载均衡策略,自动分发请求到不同服务节点。4.容错降级:提供重试、失败自动切换、熔断、降级、超时控制等容错机制。5.服务治理:支持权重配置、灰度发布、流量控制、日志监控、动态配置等运维治理能力。3.Dubbo和SpringCloud的区别?很多面试官喜欢问这个对比,核心区别如下:1.定位不同:Dubbo是专注于RPC远程调用的框架,核心是通信和服务治理;SpringCloud是一整套微服务生态全家桶,包含注册中心、网关、配置、熔断、链路追踪等全套组件。2.通信方式不同:Dubbo默认基于TCP协议,自定义二进制协议,性能更高;SpringCloud原生基于HTTP协议,相对更通用、跨语言,但性能稍弱。3.粒度不同:Dubbo调用粒度更细,适合服务内部高频调用;SpringCloud更适合标准化、跨团队、跨语言的微服务架构。4.生态不同:SpringCloud依托Spring生态,开箱即用;Dubbo更轻量化,专注RPC治理,可无缝整合SpringCloud。4.Dubbo适用场景?1.大型分布式系统、微服务架构内部服务之间的高频调用场景。2.对接口响应速度、吞吐量要求高,需要高性能RPC通信的场景。3.需要精细化服务治理、负载均衡、容错降级、灰度发布的项目。4.传统单体项目拆分为微服务,需要统一服务注册发现和远程调用的场景。二、核心架构篇(面试重点)5.Dubbo的五大核心角色是什么?各自作用?Dubbo标准架构包含五个核心角色,是面试必背点:1.Provider(服务提供者):暴露服务接口,启动后将服务注册到注册中心,供消费者调用。2.Consumer(服务消费者):调用远程服务,启动时从注册中心订阅服务列表,本地缓存服务节点信息。3.Registry(注册中心):负责服务注册、服务发现、节点动态通知,常用Zookeeper、Nacos。4.Monitor(监控中心):统计服务调用次数、响应时间、异常率等监控数据,用于运维排查。5.Container(容器):服务运行容器,一般是Spring容器,负责启动、加载Dubbo服务。6.Dubbo完整调用流程?完整流程可以按步骤口述,面试满分答案:1.服务提供者启动,扫描@DubboService注解,将接口信息、IP、端口、版本等信息注册到注册中心。2.服务消费者启动,向注册中心订阅需要调用的服务,注册中心返回可用的服务节点列表。3.消费者本地缓存服务节点列表,后续调用优先走本地缓存,不频繁请求注册中心。4.消费者发起远程调用,通过负载均衡策略选中一个服务提供者节点。5.客户端通过Netty发送二进制RPC请求,携带接口名、方法名、参数、版本等信息。6.服务提供者接收请求,匹配对应的接口和方法执行业务逻辑。7.执行结果通过网络返回给消费者,完成一次远程调用。8.监控中心异步收集本次调用的耗时、状态、异常信息,用于统计监控。7.注册中心挂了,Dubbo服务还能调用吗?可以正常调用。因为消费者启动时已经将服务列表缓存到本地内存,日常调用不会依赖注册中心。注册中心只负责服务注册、动态推送节点变更,不参与实际业务调用过程。缺点是:注册中心宕机期间,如果有新服务上线、旧服务下线,消费者无法感知,会出现调用失效或者调用到下线节点的情况,直到注册中心恢复同步数据。三、注册中心与配置篇8.Dubbo支持哪些注册中心?各自优缺点?主流三种:Zookeeper、Nacos、Redis1.Zookeeper(经典推荐)优点:稳定性高、支持持久节点、临时节点、适合做服务注册发现,集群一致性好。缺点:部署较重、不适合频繁大量节点变更,性能一般。2.Nacos(现在主流)优点:轻量、高性能、同时支持注册中心+配置中心,部署简单,原生适配微服务。缺点:相较于Zookeeper成熟度略晚,但目前企业首选。3.Redis优点:性能极高、简单易用。缺点:无一致性协议,服务注册数据可靠性差,生产环境极少使用。9.Zookeeper作为注册中心,临时节点和持久节点的作用?Dubbo在Zookeeper中,服务提供者是临时节点,消费者和配置是持久节点。1.临时节点:服务提供者宕机、断开连接后,节点自动消失,注册中心自动剔除失效服务,消费者及时感知,不会调用僵尸节点。2.持久节点:消费者订阅信息、配置信息永久保存,不会因为客户端断开而删除,保证服务订阅关系稳定。四、通信、序列化、协议篇10.Dubbo默认协议是什么?有什么特点?默认协议是Dubbo协议,基于TCP自定义二进制协议。核心特点:1.采用长连接、单连接、NIO异步通信,基于Netty实现。2.协议轻量化、报文体积小,传输效率高,适合高频小数据量接口调用。3.不适合传输超大文件、超大报文场景。11.Dubbo支持哪些协议?适用场景?1.Dubbo协议:默认,高性能、高频小接口调用,服务内部通信首选。2.HTTP协议:跨语言、通用性强,适合对外提供接口、前端对接。3.gRPC协议:跨语言、标准化,适合多语言微服务架构。4.TCP自定义协议:极致性能场景定制使用。12.Dubbo默认序列化方式?优缺点?默认序列化:Hessian2优点:序列化速度快、压缩率高、兼容性好、支持复杂对象。缺点:存在部分版本兼容问题、极少数特殊对象序列化异常。除此之外还支持:JSON、Kryo、Protobuf等序列化方式。13.Hessian和JSON序列化对比?1.Hessian:二进制序列化,体积小、速度快、性能高,适合内部服务调用。2.JSON:文本序列化,可读性强、跨语言极好,但体积大、性能低,适合对外接口。五、负载均衡机制(高频)14.Dubbo有几种负载均衡策略?各自原理?Dubbo内置5种负载均衡策略,面试常问前四种:1.Random随机(默认)随机挑选服务节点,概率均匀,简单高效,适合节点性能一致的集群。2.RoundRobin轮询按顺序依次分发请求,均匀分配流量。缺点是无法适配节点性能差异,性能差的节点会拖慢整体调用。3.LeastActive最少活跃调用优先选择当前处理请求最少、压力最小的节点,自动适配节点性能差异,线上最常用、最稳定。4.ConsistentHash一致性哈希相同参数的请求固定访问同一个节点,适合会话保持、缓存预热、幂等性接口场景。5.ShortestResponse最短响应时间优先选择平均响应时间最短的节点,适合节点性能差异大的集群。15.默认负载均衡是哪个?为什么?默认是Random随机。原因:实现简单、无状态、性能极高、不会产生单点压力,在服务节点配置一致的常规集群下,流量分布足够均匀,适合绝大多数业务场景。六、容错、重试、降级机制(面试核心)16.Dubbo容错策略有哪些?Dubbo集群容错共6种,常用4种:1.FailFast快速失败(默认)只发起一次调用,失败直接抛异常。适合非幂等接口,避免重复操作。2.FailRetry失败重试调用失败自动重试其他节点,可配置重试次数。适合幂等、查询类接口。3.FailSafe失败安全调用失败直接忽略异常,返回空结果。适合日志、统计、非核心无关业务。4.FailBack失败自动恢复调用失败后台定时重试,适合消息投递、异步通知场景。其余两种:Broadcast广播调用、Forking并行调用,极少使用。17.重试机制会带来什么问题?怎么解决?存在问题:重试会导致接口重复执行,如果是新增、修改、扣款等非幂等接口,会产生脏数据、重复数据、资金问题。解决方案:1.查询接口开启重试,增删改接口关闭重试,使用FailFast。2.所有写接口实现幂等性,通过唯一订单号、请求号防重。3.合理设置重试次数和超时时间。18.Dubbo超时机制原理?超时时间怎么设置?Dubbo调用超时后,客户端直接终止本次调用,抛出超时异常,不会等待服务端继续执行。服务端任务会继续执行直至结束,存在资源浪费。超时配置优先级:方法级>接口级>全局默认默认超时时间1000ms,生产一般根据业务调整为2000ms~5000ms。19.Dubbo服务降级怎么做?主要两种方式:1.静默降级(mock=empty):服务异常直接返回空,不抛异常,不影响主流程。2.自定义Mock降级:自定义降级类,服务异常时返回兜底数据、默认数据,保障服务可用。一般用于非核心业务,高峰期、服务抖动时做流量保护。七、线程模型与性能调优20.Dubbo线程模型?Dubbo采用IO线程+业务线程分离模型:1.IO线程(Netty线程):专门负责接收连接、读取网络报文、解析请求,不处理业务。2.业务线程池:专门执行业务代码、数据库操作、接口逻辑。优势:IO线程不被阻塞,保证服务吞吐能力,避免因为业务卡顿拖垮整体通信。21.Dubbo常见性能瓶颈和调优手段?1.合理配置线程池大小:避免线程过少阻塞、过多上下文切换。2.关闭非必要重试:写接口禁用重试,防止流量放大。3.调整超时时间:根据业务耗时适配,避免误超时或长时间阻塞。4.优化序列化方式:高频接口使用高性能序列化。5.使用合适的负载均衡策略:核心业务使用LeastActive适配节点压力。6.接口粒度优化:避免超大报文、一次性查询过多数据。八、经典面试踩坑问题(压轴题)22.服务提供者宕机,消费者如何感知?1.服务提供者宕机后,Zookeeper临时节点自动删除。2.注册中心推送节点变更通知给所有消费者。3.消费者更新本地服务列表,剔除下线节点,后续请求不再路由到故障机器。4.若注册中心推送延迟,消费者本地调用失败后,通过容错机制自动切换节点,保证不影响业务。23.Dubbo心跳机制作用?Dubbo客户端和服务端定时发送心跳包,默认60s一次。作用:1.检测长连接是否有效,清除无效连接。2.防止防火墙断开闲置长连接。3.保证服务节点状态实时健康。24.说说Dubbo泛化调用场景?泛化调用不需要引入服务接口依赖,直接通过接口名、方法名、参数调用远程服务。适用场景:网关、动态调用平台、测试平台、后台管理系统,统一调用各类未知服务接口。25.Dubbo版本号和分组的作用?分组group:用于区分不同环境、不同业务模块,比如测试组、生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论