微服务面试题

目录

Nacos

nacos注册面试题

负载均衡面试题

Feign 调用过程分析

feign面试题

重难点分析

FAQ分析

nacos配置面试题

重难点分析

FAQ分析

Sentinel

重难点分析

FAQ分析

网关

重难点分析

FAQ 分析

单点登录


Nacos

nacos注册面试题

  1. 为什么要将服务注册到nacos?(为了更好的查找这些服务)
  2. 在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的?(5秒心跳)
  3. 对于Nacos服务来讲它是如何判定服务实例的状态?(检测心跳包,15,30)
  4. 服务消费方是如何调用服务提供方的服务的?(RestTemplate)

负载均衡面试题

  1. @Bean注解的作用?(一般用于配置类内部,描述相关方法,用于告诉spring此方法的返回值要交给spring管理,bean的名字默认为方法名,假如需要指定名字可以@Bean(“bean的名字”),最多的应用场景是整合第三方的资源-对象)
  2. @Autowired注解的作用?(此注解用于描述属性,构造方法,set方法等,用于告诉spring框架,按找一定的规则为属性进行DI操作,默认按属性,方法参数类型查找对应的对象,假如只找到一个,则直接注入,类型多个时还会按照属性名或方法参数名进行值的注入,假如名字也不同,就出报错.)
  3. Nacos中的负责均衡底层是如何实现的?(通过Ribbon实现,Ribbon中定义了一些负载均衡算法,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务)
  4. Ribbon 是什么?(Netflix公司提供的负载均衡客户端,一般应用于服务的消费方法)
  5. Ribbon 可以解决什么问题? (基于负载均衡策略进行服务调用, 所有策略都会实现IRule接口)
  6. Ribbon 内置的负载策略都有哪些?(8种,可以通过查看IRule接口的实现类进行分析)
  7. @LoadBalanced的作用是什么?(描述RestTemplate对象,用于告诉Spring框架,在使用RestTempalte进行服务调用时,这个调用过程会被一个拦截器进行拦截,然后在拦截器内部,启动负载均衡策略。)
  8. 我们可以自己定义负载均衡策略吗?(可以,基于IRule接口进行策略定义,也可以参考NacosRule进行实现)

Feign 调用过程分析

  1. 通过 @EnableFeignCleints 注解告诉springcloud,启动 Feign Starter 组件。

  2.  Feign Starter 会在项目启动过程中注册全局配置,扫描包下所由@FeignClient注解描述的接口,然后由系统底层创建接口实现类(JDK代理类),并构建类的对象,然后交给spring管理(注册 IOC 容器)。

  3. Feign接口被调用时,底层代理对象会将接口中的请求信息通过编码器创建 Request对象,基于此对象进行远程过程调用。

  4.  Feign客户端请求对象会经Ribbon进行负载均衡,挑选出一个健康的 Server 实例(instance)。

  5.  Feign客户端会携带 Request 调用远端服务并返回一个响应。

  6. Feign客户端对象对Response信息进行解析然后返回客户端。

feign面试题

  1. 为什么使用feign?(基于Feign可以更加友好的实现服务调用,简化服务消费方对服务提供方方法的调用)。
  2. @FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)
  3. Feign方式的调用,底层负载均衡是如何实现的?(Ribbon)
  4. @EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类)

重难点分析

  1. 何为注册中心?(用于记录服务信息的一个web服务,例如淘宝平台,滴滴平台,美团外卖平台,……)
  2. 注册中心的核心对象?(服务提供方,服务消费方,注册中心-Registry)
  3. 市面上常用注册中心?(Google-Consul,Alibaba-Nacos,…)
  4. Nacos安装、启动、服务的注册、发现机制以及实现过程
  5. 服务调用时RestTemplate对象的应用。
  6. 基于Feign方式的服务调用及基本原理?

FAQ分析

  1. Nacos是什么,提供了什么特性(服务的注册、发现、配置)?

  2. 你为什么会选择Nacos?(活跃度、稳定、性能、学习成本)

  3. Nacos的官网?(nacos.io)

  4. Nacos在github的源码?(github.com/alibaba/nacos)

  5. Nacos在windows环境下安装?(解压即可使用)

  6. Nacos在windows中的的初步配置?(application.properties访问数据库的数据源)

  7. Nacos服务注册的基本过程?(服务启动时发送web请求)

  8. Nacos服务消费的基本过程?(服务启动时获取服务实例,然后调用服务)

  9. Nacos服务负载均衡逻辑及设计实现?(Ribbon)

  10. 注册中心的核心数据是什么?(服务的名字和它对应的网络地址)

  11. 注册中心中心核心数据的存取为什么会采用读写锁?(底层安全和性能)

  12. Nacos健康检查的方式?(基于心跳包机制进行实现)

  13. Nacos是如何保证高可用的?(重试,本地缓存、集群)

  14. RestTemplate的基本作用是什么?

  15. Feign是什么,它的应用是怎样的,feign应用过程中的代理对象是如何创建的(JDK)?

  16. Feign方式的调用过程,其负载均衡是如何实现?(Ribbon)

nacos配置面试题

  • 什么是配置中心?(存储项目配置信息的一个服务)
  • 为什么要使用配置中心?(集中管理配置信息,动态发布配置信息)
  • 市场上有哪些主流的配置中心?(Apollo,nacos,……)
  • 配置中心一般都会配置什么内容?(可能会经常变化的配置信息,例如连接池,日志、线程池、限流熔断规则)
  • 什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册地址,配置中心)
  • 项目中为什么要定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
  • Nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?(可以从内存,客户端获取了配置中心的配置信息以后,会将配置信息在本地内存中存储一份.)
  • 微服务应用中我们的客户端如何获取配置中心的信息?(我们的服务一般首先会从内存读取配置信息,同时我们的微服务还可以定时向nacos配置中心发请求拉取(pull)更新的配置信息)
  • 微服务应用中客户端如何感知配置中心数据变化?(1.4.x版本的nacos客户端会基于长轮询机制从nacos获取配置信息,所谓的长轮询就是没有配置更新时,会在nacos服务端的队列进行等待.)
  • 服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,配置文件名字bootstrap.yml,配置中心的dataId名字是否正确,分组是否正确,配置的名字是否正确,缩进关系是否正确,假如是动态发布,类上是否有@RefreshScope注解)
  • 你项目中使用的日志规范是什么?(SLF4J)
  • 你了解项目中的日志级别吗?(debug,info,error,…,可以基于日志级别控制日志的输出)
  • Nacos配置管理模型的背景?(环境不同配置不同)
  • Nacos配置中的管理模型是怎样的?(namespace,group,service/data-id)
  • Nacos客户端(微服务)是否可以读取共享配置?(可以)

重难点分析

  • 配置中心的选型。(市场活跃度、稳定性、性能、易用)

  • Nacos配置中心基本应用。(新建,修改、删除配置以后,在Nacos客户端应用配置)

  • 配置管理模型应用。(namespace,group,service/dataId)

  • Nacos配置变更的动态感知。(底层原理分析)

FAQ分析

  • 为什么需要配置中心?(动态管理发布配置,无需重启服务,更好保证服务的可用)

  • 配置中一般要配置什么内容?(经常变化的配置数据-日志级别,线程池、连接池、…)

  • 市面上有哪些主流配置中心?(Nacos,….)

  • 配置中心选型时要重点考虑哪些因素?(市场活跃度、稳定性、性能、易用)

  • Nacos客户端(微服务业务)如何动态感知配置中心数据变化的?(nacos2.0之前nacos客户端采用长轮询机制每隔30秒拉取nacos配置信息.)

  • Nacos配置管理模型是怎样的?(命名空间-namespace,分组-group,服务实例-dataId)

Sentinel

  1. Sentinel是什么?(阿里推出一个流量控制平台,防卫兵)
  2. 类似Sentinel的产品你知道有什么?(hystrix-一代微服务产品)
  3. Sentinel是如何对请求进行限流的?(基于sentinel依赖提供的拦截器)
  4. 你了解哪些限流算法?(计数器、令牌桶、漏斗算法,滑动窗口算法,…)
  5. Sentinel 默认的限流算法是什么?(滑动窗口算法)
  6. 你了解sentinel中的阈值应用类型吗?(两种-QPS,线程数)
  7. Sentinel的限流规则中默认有哪些限流模式?(直连,关联,链路)
  8. Sentinel的限流效果有哪些?(快速失败,预热,排队)
  9. 何为降级熔断?(让外部应用停止对服务的访问,生活中跳闸,路障设置-此路不通)
  10. 为什么要进行熔断呢?(平均响应速度越来越慢或经常出现异常,这样可能会导致调用链堆积,最终系统崩溃)
  11. Sentinel中限流,降级的异常父类是谁?(BlockException)
  12. Sentinel 出现降级熔断时,系统底层抛出的异常是谁?(DegradeException)
  13. Sentinel中异常处理接口是谁?(BlockExceptionHandler)
  14. Sentinel中异常处理接口下默认的实现类为? (DefaultBlockExceptionHandler)
  15. 假如Sentinel中默认的异常处理规则不满足我们的需求怎么办?(自己定义)
  16. 我们如何自己定义Sentinel中异常处理呢?(直接或间接实现BlockExceptionHandler )
  17. Sentinel熔断降级策略有哪些?(慢调用比例、异常比例、异常数)
  18. 如何理解热点数据?(访问频度比较高的数据,某些商品、谋篇文章、某个视频)
  19. 热点数据的限流规则是怎样的?(主要是针对参数进行限流设计)
  20. 热点数据中的特殊参数如何理解?(热点限流中的某个参数值的阈值设计)
  21. 对于热点数据的访问出现限流以后底层异常是什么?(ParamFlowException)
  22. 如何理解sentinel中的系统规则?(是对所有链路的控制规则,是一种系统保护策略)
  23. Sentinel的常用系统规则有哪些?(RT,QPS,CPU,线程,Load-linux,unix)
  24. Sentinel系统保护规则被触发以后底层会抛出什么异常?(SystemBlockException)
  25. 如何理解Sentinel中的授权规则?(对指定资源的访问给出的一种简易的授权策略)
  26. Sentinel的授权规则是如何设计的?(白名单和黑名单)
  27. 如何理解Sentinel中的白名单?(允许访问的资源名单)
  28. 如何理解Sentinel中的黑名单?(不允许访问的资源名单)、
  29. Sentinel如何识别白名单和黑名单?(在拦截器中通过调用RequestOriginParser对象的方法检测具体的规则)
  30. 授权规则中RequestOriginParser类的做用是什么?(对流控应用值进行解析,检查服务访问时传入的值是否与RequestOriginParser的parseOrigin方法返回值是否相同。)

重难点分析

  1. Sentinel诞生的背景?(计算机的数量是否有限,处理能力是否有限,并发比较大或突发流量比较大)

  2. 服务中Sentinel环境的集成,初始化?(添加依赖-两个,sentinel配置)

  3. Sentinel 的限流规则?(阈值类型-QPS&线程数,限流模式-直接,关联,链路)

  4. Sentinel 的降级(熔断)策略?(慢调用,异常比例,异常数)

  5. Sentinel 的热点规则设计(掌握)?

  6. Sentinel 系统规则设计?(了解,全局规则定义,针对所有请求有效)

  7. Sentinel 授权规则设计?(掌握,黑白名单)

FAQ分析

  1. 为什么要限流?
  2. 你了解的那些限流框架?(sentinel)
  3. 常用的限流算法有那些?(计数,令牌桶-电影票,漏桶-漏斗,滑动窗口)
  4. Sentinel有哪些限流规则?(QPS,线程数)
  5. Sentinel有哪些限流模式?(直接,关联-创建订单和查询订单,链路限流-北京六环外不限号,但是五环就限号)
  6. Sentinel 的降级(熔断)策略有哪些?(慢调用-响应时长,异常比例-异常占比,异常数)
  7. Sentinel 的热点规则中的热点数据?(热卖商品,微博大咖,新上映的电影)
  8. 如何理解Sentinel 授权规则中的黑白名单?

网关

  1. 什么是网关?服务访问(流量)的一个入口,类似生活中的“海关“
  2. 为什么使用网关?(服务安全,统一服务入口管理,负载均衡,限流,鉴权)
  3. Spring Cloud Gateway 应用的初始构建过程(添加依赖,配置)
  4. Gateway 服务的启动底层是通过谁去实现的?(Netty网络编程框架-ServerSocket)
  5. Gateway 服务做请求转发时一定要在注册中心进行注册吗?(不一定,可以直接通过远端url进行服务访问)
  6. 为什么负载均衡?        网关才是服务访问的入口,所有服务都会在网关层面进行底层映射,所以在访问服务时,要基于服务serivce id(服务名)去查找对应的服务,让请求从网关层进行均衡转发,以平衡服务实例的处理能力。
  7. 网关层面是如何实现负载均衡的?(通过服务名去查找具体的服务实例)
  8. 网关层面是如何通过服务名查找服务实例的?(Ribbon)
  9. 你了解Ribbon中的哪些负载均衡算法?(轮询,权重,hash,……可通过IRule接口进行查看分析)
  10. 网关进行请求转发的流程是怎样,有哪些关键对象?(XxxHandlerMapping,Handler,。。。)
  11. 网关层面服务的映射方式怎样的?(谓词-path,…,服务名/服务实例)
  12. 网关层如何记录服务的映射?(通过map,并要考虑读写锁的应用)
  13. 何为谓词?(网关中封装了判断逻辑的一个对象)
  14. 谓词逻辑的设计是怎样的?(谓词判断逻辑返回值为true则进行请求转发)
  15. 你了解哪些谓词逻辑?(path,请求参数,请求方式,请求头,….)
  16. 我们可以自己定义谓词工厂对象吗?(可以的)
  17. 网关过滤器的作用是什么?(对请求和响应数据做一个预处理)
  18. 网关过滤器的类型有哪些?(局部过滤器,全局过滤器)
  19. 如何理解局部过滤器?(针对具体链路的应用的过滤器,需要进行配置)
  20. 你了解哪些局部过滤器?
  21. 如何理解全局过滤器?(作用于所有请求链路)
  22. 如何自己定义全局过滤器?(直接或间接实现GlobalFilter接口)
  23. 网关层面结合sentinel实现限流,其限流的类型有几种?(两种-route id,api)
  24. 网关层面可以自定义限流后的异常处理结果吗?(可以)
  25. 你知道Sentinel底层限流的算法有哪些?(滑动窗口,令牌桶,漏斗,。。。)

重难点分析

  1. 网关(Gateway)诞生的背景?(第一:统一微服务访问的入口,第二:对系统服务进行保护,第三进行统一的认证,授权,限流)
  2. 网关的选型?(Netifix Zuul,Spring Cloud Gateway,…)
  3. Spring Cloud Gateway的入门实现(添加依赖,路由配置,启动类)
  4. Spring Cloud Gateway中的负载均衡?(网关服务注册,服务的发现,基于uri:lb://服务id方式访问具体服务实例)
  5. Spring Cloud Gateway中的断言配置?(掌握常用几个就可,用时可以通过搜索引擎去查)
  6. Spring Cloud Gateway中的过滤器配置?(掌握过滤器中的两大类型-局部和全局)
  7. Spring Cloud Gateway中的限流设计?(Sentinel)

FAQ 分析

  1. Gateway在互联网架构中的位置?(nginx->gateway–>微服务–>微服务)
  2. Gateway底层负载均衡的实现?(Ribbon)
  3. Gateway应用过程中设计的主要概念?(路由id,路由uri,断言,过滤器)
  4. Gateway中你做过哪些断言配置?(after,header,path,cookie,…)
  5. Gateway中你用的过滤器有哪些?(添加前缀,去掉前缀,添加请求头,…,负载均衡,…)

单点登录
 

1.Eureka自我保护机制是什么?
由于网络故障出现网络分区,15 分钟内 85% 服务器出现心跳异常,eureka会进入保护状态,在保护状态下,所有服务的注册信息都不会被删除

2.什么是hystrix降级?
当一个服务调用后台服务失败,无法获得后台服务的结果时,可以通过hystrix执行当前服务的降级代码来返回降级结果,例如调用后台商品列表失败时,可以执行从缓存服务器获取缓存数据返回给客户端

3.hystrix的限流措施是什么?
hystrix的熔断可以限制后台服务的调用流量,避免故障向其他服务传播引起雪崩效应。
当 10 秒内达到 20 次请求,50%出现失败时会触发熔断,
之后进入半开状态,会尝试向后台服务发送客户端调用,调用成功可以自动关闭断路器恢复正常

4.ribbon的主要的重试参数是什么?至少说出两个
MaxAutoRetries - 一台服务器的重试次数
MaxAutoRetriesNextServer - 更换服务器的次数
ReadTimeout - 等待后台服务响应的超时时间

5.springcloud config配置中心默认把配置文件存放在哪里?
git仓库

6. bus消息总线的作用是什么?
bus通过mq服务器来发送配置刷新指令,微服务模块收到指令后,在不重启的情况下可以执行配置刷新操作,重新连接配置中心服务器获取新的配置信息。

7.seata的三大组件是什么?
TC事务协调器,负责协调各个模块事务的执行
TM事务管理器,负责启动全局事务,并对全局事务状态进行决策
RM资源管理器,负责与TC通信,上报分支事务状态和执行二阶段的事务操作

8.seata at事务中数据源代理的作用是什么?
数据源代理中提供了全自动事务控制的代码,对执行的数据操作记录日志

9.什么是TCC事务,和 seata at 事务有什么不同?
tcc事务是 Try、Confirm和Cancel三个操作,
Try 操作在第一阶段对数据进行预留,或者称为冻结数据
Confirm 操作在第二阶段确认预留的资源,即执行二阶段的提交操作
Cancel 操作在第二阶段取消预留的资源,即执行二阶段的回滚操作
TCC事务对业务有侵入,两个阶段的三种操作的代码都需要自己来编写,
而 seata at 事务对业务无侵入,只需添加配置就可以实现分布式事务,使用简便
80%的业务场景下都可以使用 seata at 事务

10.RabbitMQ 的六种工作模式
简单模式
工作模式
发布和订阅模式
路由模式
主题模式
RPC模式

11.简述 RocketMQ 的事务消息执行流程
第一步发送“半消息”
第二步执行本地事务
第三步对事务消息进行提交或回滚:

本地事务执行成功,提交事务消息
本地事务执行失败,回滚事务消息
由于网络终端,无法执行第三步时,RocketMQ 服务器会每隔1分钟回查事务状态
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值