精华内容
下载资源
问答
  • 这篇博客总结了面试中最常见的微服务面试题,相信对你有所帮助。

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

    这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

    用知识改变命运,让我们的家人过上更好的生活

    在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。

    相关文章:

    Springboot 系列文章

    【Java基础】易错面试题,初级程序员面试必看


    1、什么是微服务?

    微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。 服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

    从技术维度来说

    微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

    2、微服务之间是如何通讯的?

    远程过程调用(Remote Procedure Invocation)

    直接通过远程过程调用来访问别的service。

    示例:REST、gRPC、Apache、Thrift

    优点:

    简单,常见。因为没有中间件代理,系统更简单

    缺点:

    只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
    降低了可用性,因为客户端和服务端在请求过程中必须都是可用的

    消息

    使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。

    示例:Apache Kafka、RabbitMQ

    优点:

    • 把客户端和服务端解耦,更松耦合 提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
    • 支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应

    缺点:

    消息中间件有额外的复杂性

    3、springcloud 与dubbo有哪些区别?

    相同点
    SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。

    不同点:
    SpringCloud是一套目前比较网站微服务框架了,整合了分布式常用解决方案遇到了问题注册中心Eureka、负载均衡器Ribbon ,客户端调用工具Rest和Feign,分布式配置中心Config,服务保护Hystrix,网关Zuul Gateway ,服务链路Zipkin,消息总线Bus等。

    Dubbo内部实现功能没有SpringCloud强大(全家桶),只是实现服务治理,缺少分布式配置中心、网关、链路、总线等,如果需要用到这些组件,需要整合其他框架。

    表 Spring Cloud与Dubbo功能对比
    功能名称 Dubbo Spring Cloud
    服务注册中心 ZooKeeper Spring Cloud Netflix Eureka、ZooKeeper
    服务调用方式 RPC REST API
    服务网关 Spring Cloud Netflix Zuul
    断路器 不完善 Spring Cloud Netflix Hystrix
    分布式配置 Spring Cloud Config
    服务跟踪 Spring Cloud Sleuth
    消息总线 Spring Cloud Bus
    数据流 Spring Cloud Stream
    批量任务 Spring Cloud Task


    4、请谈谈对SpringBoot 和SpringCloud的理解

    ① SpringBoot专注于快速方便的开发单个个体微服务。

    ② SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
    为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

    ③ SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系.

    ④ SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

    Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

    5、分布式系统面临的问题

    复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。

    • 服务雪崩
      多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.

    • 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。

    一般情况对于服务依赖的保护主要有以下三种解决方案:

    熔断模式:这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

    隔离模式:这种模式就像对系统请求按类型划分成一个个小岛的一样,当某个小岛被火少光了,不会影响到其他的小岛。例如可以对不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者公司最近推广的多中心。

    限流模式:上述的熔断模式和隔离模式都属于出错后的容错处理机制,而限流模式则可以称为预防模式。限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。

    6、什么是服务熔断,什么是服务降级

    服务熔断

    熔断机制是应对雪崩效应的一种微服务链路保护机制。
    当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回"错误"的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

    Hystrix服务降级

    其实就是线程池中单个线程障处理,防止单个线程请求时间太长,导致资源长期被占有而得不到释放,从而导致线程池被快速占用完,导致服务崩溃。

    Hystrix能解决如下问题:

    ① 请求超时降级,线程资源不足降级,降级之后可以返回自定义数据
    ② 线程池隔离降级,分布式服务可以针对不同的服务使用不同的线程池,从而互不影响
    ③ 自动触发降级与恢复
    ④ 实现请求缓存和请求合并

    7、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?

    优点

    • 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求
    • 开发简单、开发效率提高,一个服务可能就是专一的只干一件事。
    • 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
    • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
    • 微服务能使用不同的语言开发。
    • 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo 。
    • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
    • 微服务允许你利用融合最新技术。
    • 微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。
    • 每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。

    缺点

    • 开发人员要处理分布式系统的复杂性
    • 多服务运维难度,随着服务的增加,运维的压力也在增大
    • 系统部署依赖
    • 服务间通信成本
    • 数据一致性
    • 系统集成测试
    • 性能监控……

    8、你所知道的微服务技术栈有哪些?请列举一二

    • 服务开发
      Springboot、Spring、SpringMVC
    • 服务配置与管理
      Netflix公司的Archaius、阿里的Diamond等
    • 服务注册与发现
      Eureka、Consul、Zookeeper等
    • 服务调用
      Rest、RPC、gRPC
    • 服务熔断器
      Hystrix、Envoy等
    • 负载均衡
      Ribbon、Nginx等
    • 服务接口调用(客户端调用服务的简化工具)
      Feign等
    • 消息队列
      Kafka、RabbitMQ、ActiveMQ等
    • 服务配置中心管理
      SpringCloudConfig、Chef等
    • 服务路由(API网关)
      Zuul等
    • 服务监控
      Zabbix、Nagios、Metrics、Spectator等
    • 全链路追踪
      Zipkin,Brave、Dapper等
    • 服务部署
      Docker、OpenStack、Kubernetes等
    • 数据流操作开发包
      SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
    • 事件消息总线
      Spring Cloud Bus

    9、什么是 Eureka服务注册与发现

    Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。

    10、Eureka的基本架构是什么?

    Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。

    Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

    而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

    Eureka包含两个组件Eureka ServerEureka Client

    Eureka Server提供服务注册服务
    各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

    EurekaClient是一个Java客户端
    用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

    11、作为服务注册中心,Eureka比Zookeeper好在哪里?

    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

    因此,Zookeeper 保证的是CP, Eureka 则是AP。

    Zookeeper保证CP

    当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

    Eureka保证AP

    Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

    除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

    1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
    2. Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
    3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

    因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

    12、什么是 Ribbon负载均衡

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。

    简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

    13、Ribbon负载均衡能干嘛?

    • LB(负载均衡)
      LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。
      负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA。
      常见的负载均衡有软件Nginx,LVS,硬件 F5等。
      相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。

    • 集中式LB
      即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;

    • 进程内LB
      将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

    注意: Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

    14、什么是 Feign 负载均衡

    Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。 Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

    Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可。

    15、Feign 能干什么

    Feign旨在使编写Java Http客户端变得更容易

    前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

    Feign集成了Ribbon
    利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用

    Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),该请求发送给Eureka服务器(http://MICROSERVICECLOUD-DEPT/dept/list),
    通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。

    16、什么是 Hystrix断路器

    Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等, Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

    “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

    17、Hystrix断路器能干嘛?

    服务降级

    整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来

    服务熔断

    熔断机制是应对雪崩效应的一种微服务链路保护机制。
    当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回"错误"的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

    服务限流

    接近实时的监控

    除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix
    Dashboard),Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring
    Cloud也提供了Hystrix Dashboard的整合,对监控内容转化成可视化界面。

    18、什么是 zuul路由网关

    Zuul 包含了对请求的路由过滤两个最主要的功能:

    其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

    注意: Zuul服务最终还是会注册进Eureka

    提供=代理+路由+过滤 三大功能

    19、什么是SpringCloud Config分布式配置中心

    SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

    20、分布式配置中心能干嘛?

    ① 集中管理配置文件,不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
    ② 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息

    ③ 当配置发生变动时,服务不需要重启==即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露


    由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

    展开全文
  • 微服务面试题

    2020-12-14 14:57:03
    参考文章:20道你必须要背会的微服务面试题,面试一定会被问到 文章题目 1、什么是微服务? 2、微服务之间是如何通讯的? 3、springcloud 与dubbo有哪些区别? 4、请谈谈对SpringBoot 和SpringCloud的理解 5...

    参考文章:20道你必须要背会的微服务面试题,面试一定会被问到

    微服务相关高频面试题集合(2020)

    目录

    1、什么是微服务?

    2、微服务之间是如何通讯的?

    第一种:远程过程调用(Remote Procedure Invocation)

    第二种:消息

    3、springcloud 与dubbo有哪些区别?

    4、请谈谈对SpringBoot 和SpringCloud的理解

    5、分布式系统面临的问题

    6、什么是服务熔断,什么是服务降级

    7、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?

    8、你所知道的微服务技术栈有哪些?请列举一二

    9、什么是 Eureka服务注册与发现

    10、Eureka的基本架构是什么?

    11、作为服务注册中心,Eureka比Zookeeper好在哪里?

    12、什么是 Ribbon负载均衡

    13、Ribbon负载均衡能干嘛?

    14、什么是 Feign 负载均衡

    15、Feign 能干什么

    16、什么是 Hystrix断路器

    17、Hystrix断路器能干嘛?

    18、什么是 zuul路由网关

    19、什么是SpringCloud Config分布式配置中心

    20、分布式配置中心能干嘛?


    1、什么是微服务?

    微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。 服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

    从技术维度来说:

    微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

    2、微服务之间是如何通讯的?

    第一种:远程过程调用(Remote Procedure Invocation)

    直接通过远程过程调用来访问别的service。

    示例:REST、gRPC、Apache、Thrift

    优点:

    简单,常见。因为没有中间件代理,系统更简单

    缺点:

    只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应降低了可用性,因为客户端和服务端在请求过程中必须都是可用的

    第二种:消息

    使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。

    示例:Apache Kafka、RabbitMQ

    优点:

    把客户端和服务端解耦,更松耦合 提高可用性,因为消息中间件缓存了消息,直到消费者可以消费支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应

    缺点:

    消息中间件有额外的复杂性

    3、springcloud 与dubbo有哪些区别?

    相同点:

    SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。

    不同点:

    SpringCloud是一套目前比较网站微服务框架了,整合了分布式常用解决方案遇到了问题注册中心Eureka、负载均衡器Ribbon ,客户端调用工具Rest和Feign,分布式配置中心Config,服务保护Hystrix,网关Zuul Gateway ,服务链路Zipkin,消息总线Bus等。

    Dubbo内部实现功能没有SpringCloud强大(全家桶),只是实现服务治理,缺少分布式配置中心、网关、链路、总线等,如果需要用到这些组件,需要整合其他框架。

    springcloud是通过REST(http)传输协议,dubbo通过rpc调用

    表 Spring Cloud与Dubbo功能对比

    4、请谈谈对SpringBoot 和SpringCloud的理解

    SpringBoot专注于快速方便的开发单个个体微服务。SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系.SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

    5、分布式系统面临的问题

    复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。

    • 服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.
    • 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。

    一般情况对于服务依赖的保护主要有以下三种解决方案:

    • 熔断模式:这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。
    • 隔离模式:这种模式就像对系统请求按类型划分成一个个小岛的一样,当某个小岛被火少光了,不会影响到其他的小岛。例如可以对不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者公司最近推广的多中心。
    • 限流模式:上述的熔断模式和隔离模式都属于出错后的容错处理机制,而限流模式则可以称为预防模式。限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。

    6、什么是服务熔断,什么是服务降级

    服务熔断

    熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

    Hystrix服务降级

    其实就是线程池中单个线程障处理,防止单个线程请求时间太长,导致资源长期被占有而得不到释放,从而导致线程池被快速占用完,导致服务崩溃。

    Hystrix能解决如下问题:

    1. 请求超时降级,线程资源不足降级,降级之后可以返回自定义数据
    2. 线程池隔离降级,分布式服务可以针对不同的服务使用不同的线程池,从而互不影响
    3. 自动触发降级与恢复
    4. 实现请求缓存和请求合并

    7、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?

    优点

    1. 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求
    2. 开发简单、开发效率提高,一个服务可能就是专一的只干一件事。
    3. 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
    4. 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
    5. 微服务能使用不同的语言开发。
    6. 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo 。
    7. 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
    8. 微服务允许你利用融合最新技术。
    9. 微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。
    10. 每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。

    缺点

    1. 开发人员要处理分布式系统的复杂性
    2. 多服务运维难度,随着服务的增加,运维的压力也在增大
    3. 系统部署依赖
    4. 服务间通信成本
    5. 数据一致性
    6. 系统集成测试
    7. 性能监控……

    8、你所知道的微服务技术栈有哪些?请列举一二

    1. 服务开发Springboot、Spring、SpringMVC
    2. 服务配置与管理Netflix公司的Archaius、阿里的Diamond等
    3. 服务注册与发现Eureka、Consul、Zookeeper等
    4. 服务调用Rest、RPC、gRPC
    5. 服务熔断器Hystrix、Envoy等
    6. 负载均衡Ribbon、Nginx等
    7. 服务接口调用(客户端调用服务的简化工具)Feign, Ribbon等
    8. 消息队列Kafka、RabbitMQ、ActiveMQ等
    9. 服务配置中心管理SpringCloudConfig、Chef等
    10. 服务路由(API网关)Zuul等
    11. 服务监控Zabbix、Nagios、Metrics、Spectator等
    12. 全链路追踪Zipkin,Brave、Dapper等
    13. 服务部署Docker、OpenStack、Kubernetes等
    14. 数据流操作开发包SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
    15. 事件消息总线Spring Cloud Bus

    9、什么是 Eureka服务注册与发现

    Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。

    10、Eureka的基本架构是什么?

    Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。

    Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

    而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

    Eureka包含两个组件: Eureka Server 和 Eureka Client

    Eureka Server提供服务注册服务各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

    EurekaClient是一个Java客户端用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

    11、作为服务注册中心,Eureka比Zookeeper好在哪里?

    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

    因此,Zookeeper 保证的是CP, Eureka 则是AP

    Zookeeper保证CP

    当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

    Eureka保证AP

    Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

    除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

    1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
    2. Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
    3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

    因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

    12、什么是 Ribbon负载均衡

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。

    简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

    13、Ribbon负载均衡能干嘛?

    1. LB(负载均衡LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA。常见的负载均衡有软件Nginx,LVS,硬件 F5等。相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。
    2. 集中式LB即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;
    3. 进程内LB将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

    注意: Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

    14、什么是 Feign 负载均衡

    Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。 Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

    Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可。

    15、Feign 能干什么

    Feign旨在使编写Java Http客户端变得更容易。

    前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

    Feign集成了Ribbon利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用

    Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),该请求发送给Eureka服务器(http://MICROSERVICECLOUD-DEPT/dept/list),通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。

    16、什么是 Hystrix断路器

    Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等, Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

    “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

    17、Hystrix断路器能干嘛?

    1. 服务降级整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来
    2. 服务熔断熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。
    3. 服务限流
    4. 接近实时的监控除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring Cloud也提供了Hystrix Dashboard的整合,对监控内容转化成可视化界面。

    18、什么是 zuul路由网关

    Zuul 包含了对请求的路由和过滤两个最主要的功能:

    其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

    注意: Zuul服务最终还是会注册进Eureka

    提供=代理+路由+过滤 三大功能

    19、什么是SpringCloud Config分布式配置中心

    SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

    20、分布式配置中心能干嘛?

    1. 集中管理配置文件不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
    2. 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
    3. 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露
    展开全文
  • 【Java面试系列】Java微服务面试题

    万次阅读 2020-05-01 10:01:05
    1.微服务 面试题 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3。微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片,SOA 和...

    热门系列:


    目录

    1.微服务 面试题

    2.微服务 面试题解析

        1、您对微服务有何了解?

        2、微服务架构有哪些优势?

        3、微服务有哪些特点?

        4、设计微服务的最佳实践是什么?

        5、微服务架构如何运作?

        6、微服务架构的优缺点是什么?

        7、单片,SOA 和微服务架构有什么区别?

        8、在使用微服务架构时,您面临哪些挑战?

        9、SOA 和微服务架构之间的主要区别是什么?

        10、微服务有什么特点?

        11、什么是领域驱动设计?

        12、为什么需要域驱动设计(DDD)?

        13、什么是无所不在的语言?

        14、什么是凝聚力?

        15、什么是耦合?

        16、什么是 REST / RESTful 以及它的用途是什么?

        17、你对 Spring Boot 有什么了解?

        18、什么是 Spring 引导的执行器?

        19、什么是 Spring Cloud?

        20、Spring Cloud 解决了哪些问题?

        21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

        22、你能否给出关于微服务的要点?

        23、什么是不同类型的微服务测试?

        24、您对 Distributed Transaction 有何了解?

        25、什么是 Idempotence 以及它在哪里使用?

        26、什么是有界上下文?

        27、什么是双因素身份验证?

        28、双因素身份验证的凭据类型有哪些?

        29、什么是客户证书?

        30、PACT 在微服务架构中的用途是什么?

        31、什么是 OAuth?

        32、康威定律是什么?

        33、合同测试你懂什么?

        34、什么是端到端微服务测试?

        35、Container 在微服务中的用途是什么?

        36、什么是微服务架构中的 DRY?

        37、什么是消费者驱动的合同(CDC)?

        38、Web,RESTful API 在微服务中的作用是什么?

        39、您对微服务架构中的语义监控有何了解?

        40、我们如何进行跨功能测试?

        41、我们如何在测试中消除非决定论?

        42、Mock 或 Stub 有什么区别?

        43、您对 Mike Cohn 的测试金字塔了解多少?

        44、Docker 的目的是什么?

        45、什么是金丝雀释放?

        46、什么是持续集成(CI)?

        47、什么是持续监测?

        48、架构师在微服务架构中的角色是什么?

        49、我们可以用微服务创建状态机吗?

        50、什么是微服务中的反应性扩展?


    1.微服务 面试题

    1、您对微服务有何了解?

    2、微服务架构有哪些优势?

    3。微服务有哪些特点?

    4、设计微服务的最佳实践是什么?

    5、微服务架构如何运作?

    6、微服务架构的优缺点是什么?

    7、单片,SOA 和微服务架构有什么区别?

    8、在使用微服务架构时,您面临哪些挑战?

    9、SOA 和微服务架构之间的主要区别是什么?

    10、微服务有什么特点?

    11、什么是领域驱动设计?

    12、为什么需要域驱动设计(DDD)?

    13、什么是无所不在的语言?

    14、什么是凝聚力?

    15、什么是耦合?

    16、什么是 REST / RESTful 以及它的用途是什么?

    17、你对 Spring Boot 有什么了解?

    18、什么是 Spring 引导的执行器?

    19、什么是 Spring Cloud?

    20、Spring Cloud 解决了哪些问题?

    21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    22。你能否给出关于休息和微服务的要点?

    23、什么是不同类型的微服务测试?

    24、您对 Distributed Transaction 有何了解?

    25、什么是 Idempotence 以及它在哪里使用?

    26、什么是有界上下文?

    27、什么是双因素身份验证?

    28、双因素身份验证的凭据类型有哪些?

    29、什么是客户证书?

    30、PACT 在微服务架构中的用途是什么?

    31、什么是 OAuth?

    32、康威定律是什么?

    33、合同测试你懂什么?

    34、什么是端到端微服务测试?

    35、Container 在微服务中的用途是什么?

    36、什么是微服务架构中的 DRY?

    37、什么是消费者驱动的合同(CDC)?

    38、Web,RESTful API 在微服务中的作用是什么?

    39、您对微服务架构中的语义监控有何了解?

    40、我们如何进行跨功能测试?

    41、我们如何在测试中消除非决定论?

    42、Mock 或 Stub 有什么区别?

    43、您对 Mike Cohn 的测试金字塔了解多少?

    44、Docker 的目的是什么?

    45、什么是金丝雀释放?

    46、什么是持续集成(CI)?

    47、什么是持续监测?

    48、架构师在微服务架构中的角色是什么?

    49、我们可以用微服务创建状态机吗?

    50、什么是微服务中的反应性扩展?


    2.微服务 面试题解析

    1、您对微服务有何了解?

    微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。

    通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。这里,每个细胞独立于另一个细胞,但它也与其他细胞相关。这意味着对一个细胞的损害不会损害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。

    图 1:微服务的蜂窝表示 – 微服务访谈问题

    请参考上图。这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响或影响最小。

     

    2、微服务架构有哪些优势?

    图 2:微服务的 优点 – 微服务访谈问题

    · 独立开发 – 所有微服务都可以根据各自的功能轻松开发

    · 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们

    · 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行

    · 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务

    · 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起

     

    3、微服务有哪些特点?

    图 3:微服务的 特点 – 微服务访谈问题

    · 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展

    · 组件化 – 微服务被视为可以轻松更换和升级的独立组件

    · 业务能力 – 微服务非常简单,专注于单一功能

    · 自治 – 开发人员和团队可以彼此独立工作,从而提高速度

    · 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件

    · 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品

    · 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题

    · 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃

     

    4、设计微服务的最佳实践是什么?

    以下是设计微服务的最佳实践:

    图 4:设计微服务的最佳实践 – 微服务访谈问题

     

    5、微服务架构如何运作?

    微服务架构具有以下组件:

    图 5:微服务 架构 – 微服务面试问题

    · 客户端 – 来自不同设备的不同用户发送请求。

    · 身份提供商 – 验证用户或客户身份并颁发安全令牌。

    · API 网关 – 处理客户端请求。

    · 静态内容 – 容纳系统的所有内容。

    · 管理 – 在节点上平衡服务并识别故障。

    · 服务发现 – 查找微服务之间通信路径的指南。

    · 内容交付网络 – 代理服务器及其数据中心的分布式网络。

    · 远程服务 – 启用驻留在 IT 设备网络上的远程访问信息。

     

    6、微服务架构的优缺点是什么?

     

    7、单片,SOA 和微服务架构有什么区别?

    图 6: 单片 SOA 和微服务之间的比较 – 微服务访谈问题

    · 单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密封装。

    · 一个面向服务的架构是一种相互通信服务的集合。通信可以涉及简单的数据传递,也可以涉及两个或多个协调某些活动的服务。

    · 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。

     

    8、在使用微服务架构时,您面临哪些挑战?

    开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。

    · 自动化组件:难以自动化,因为有许多较小的组件。因此,对于每个组件,我们必须遵循 Build,Deploy 和 Monitor 的各个阶段。

    · 易感性:将大量组件维护在一起变得难以部署,维护,监控和识别问题。它需要在所有组件周围具有很好的感知能力。

    · 配置管理:有时在各种环境中维护组件的配置变得困难。

    · 调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题至关重要。

     

    9、SOA 和微服务架构之间的主要区别是什么?

    SOA 和微服务之间的主要区别如下:

     

    10、微服务有什么特点?

    您可以列出微服务的特征,如下所示:

    图 7:微服务的特征 – 微服务访谈问题

     

    11、什么是领域驱动设计?

    图 8: DDD 原理 – 微服务面试问题

     

    12、为什么需要域驱动设计(DDD)?

    图 9:我们需要 DDD 的因素 – 微服务面试问题

     

    13、什么是无所不在的语言?

    如果您必须定义泛在语言(UL),那么它是特定域的开发人员和用户使用的通用语言,通过该语言可以轻松解释域。

    无处不在的语言必须非常清晰,以便它将所有团队成员放在同一页面上,并以机器可以理解的方式进行翻译。

     

    14、什么是凝聚力?

    模块内部元素所属的程度被认为是凝聚力。

     

    15、什么是耦合?

    组件之间依赖关系强度的度量被认为是耦合。一个好的设计总是被认为具有高内聚力和低耦合性。

     

    16、什么是 REST / RESTful 以及它的用途是什么?

    Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计算机系统通过 Internet 进行通信的架构风格。这使得微服务更容易理解和实现。

    微服务可以使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合的微服务总是更容易。

     

    17、你对 Spring Boot 有什么了解?

    事实上,随着新功能的增加,弹簧变得越来越复杂。如果必须启动新的 spring 项目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring配置。所以一切都必须从头开始。

    Spring Boot 是解决这个问题的方法。使用 spring boot 可以避免所有样板代码和配置。因此,基本上认为自己就好像你正在烘烤蛋糕一样,春天就像制作蛋糕所需的成分一样,弹簧靴就是你手中的完整蛋糕。

    图 10: Spring Boot 的因素 – 微服务面试问题

     

    18、什么是 Spring 引导的执行器?

    Spring Boot 执行程序提供了 restful Web 服务,以访问生产环境中运行应用程序的当前状态。在执行器的帮助下,您可以检查各种指标并监控您的应用程序。

     

    19、什么是 Spring Cloud?

    根据 Spring Cloud 的官方网站,Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,领导选举,分布式会话,集群状态)。

     

    20、Spring Cloud 解决了哪些问题?

    在使用 Spring Boot 开发分布式微服务时,我们面临的问题很少由 Spring Cloud解决。

    · 与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安全问题。

    · 处理服务发现的能力 – 服务发现允许集群中的进程和服务找到彼此并进行通信。

    · 解决冗余问题 – 冗余问题经常发生在分布式系统中。

    · 负载平衡 – 改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布。

    · 减少性能问题 – 减少因各种操作开销导致的性能问题。

     

    21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试Spring MVC 应用程序。在上面显示的快照中,我们只想启动 ToTestController。执行此单元测试时,不会启动所有其他控制器和映射。

     

    22、你能否给出关于微服务的要点?

    虽然您可以通过多种方式实现微服务,但 REST over HTTP 是实现微服务的一种方式。REST 还可用于其他应用程序,如 Web 应用程序,API 设计和 MVC 应用程序,以提供业务数据。

    微服务是一种体系结构,其中系统的所有组件都被放入单独的组件中,这些组件可以单独构建,部署和扩展。微服务的某些原则和最佳实践有助于构建弹性应用程序。

    简而言之,您可以说 REST 是构建微服务的媒介。

     

    23、什么是不同类型的微服务测试?

    在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。

    · 在底层,我们有面向技术的测试,如单元测试和性能测试。这些是完全自动化的。

    · 在中间层面,我们进行了诸如压力测试和可用性测试之类的探索性测试。

    · 在顶层, 我们的 验收测试数量很少。这些验收测试有助于利益相关者理解和验证软件功能。

     

    24、您对 Distributed Transaction 有何了解?

    分布式事务是指单个事件导致两个或多个不能以原子方式提交的单独数据源的突变的任何情况。在微服务的世界中,它变得更加复杂,因为每个服务都是一个工作单元,并且大多数时候多个服务必须协同工作才能使业务成功。

     

    25、什么是 Idempotence 以及它在哪里使用?

    幂等性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像它只做了一次。

    用法:在远程服务或数据源中使用 Idempotence,这样当它多次接收指令时,它只处理指令一次。

     

    26、什么是有界上下文?

    有界上下文是域驱动设计的核心模式。DDD 战略设计部门的重点是处理大型模型和团队。DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。

     

    27、什么是双因素身份验证?

    双因素身份验证为帐户登录过程启用第二级身份验证。

    图 11: 双因素认证的表示 – 微服务访谈问题

    因此,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。

     

    28、双因素身份验证的凭据类型有哪些?

    这三种凭证是:

    图 12: 双因素认证的证书类型 – 微服务面试问题

     

    29、什么是客户证书?

    客户端系统用于向远程服务器发出经过身份验证的请求的一种数字证书称为客户端证书。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身份提供了强有力的保证。

     

    30、PACT 在微服务架构中的用途是什么?

    PACT 是一个开源工具,允许测试服务提供者和消费者之间的交互,与合同隔离,从而提高微服务集成的可靠性。

    微服务中的用法

    · 用于在微服务中实现消费者驱动的合同。

    · 测试微服务的消费者和提供者之间的消费者驱动的合同。

    查看即将到来的批次

     

    31、什么是 OAuth?

    OAuth 代表开放授权协议。这允许通过在 HTTP 服务上启用客户端应用程序(例如第三方提供商 Facebook,GitHub 等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。

     

    32、康威定律是什么?

    “任 何 设 计 系 统 的 组 织 ( 广 泛 定 义 ) 都 将 产 生 一 种 设 计 , 其 结 构 是 组 织 通 信 结 构的 副 本 。” – Mel Conway

    图 13: Conway 定律的表示 – 微服务访谈问题

    该法律基本上试图传达这样一个事实:为了使软件模块起作用,整个团队应该进行良好的沟通。因此,系统的结构反映了产生它的组织的社会边界。

     

    33、合同测试你懂什么?

    根据 Martin Flower 的说法,合同测试是在外部服务边界进行的测试,用于验证其是否符合消费服务预期的合同。

    此外,合同测试不会深入测试服务的行为。更确切地说,它测试该服务调用的输入&输出包含所需的属性和所述响应延迟,吞吐量是允许的限度内。

     

    34、什么是端到端微服务测试?

    端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体协同工作并满足所有要求。

    通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。

    图 14:测试层次 – 微服务面试问题

     

    35、Container 在微服务中的用途是什么?

    容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法。您可以将微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务,而无需任何额外的工作。

    图 15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题

     

    36、什么是微服务架构中的 DRY?

    DRY 代表不要重复自己。它基本上促进了重用代码的概念。这导致开发和共享库,这反过来导致紧密耦合。

     

    37、什么是消费者驱动的合同(CDC)?

    这基本上是用于开发微服务的模式,以便它们可以被外部系统使用。当我们处理微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者。

    通常,提供程序在 XML 文档中指定接口。但在消费者驱动的合同中,每个服务消费者都传达了提供商期望的接口。

     

    38、Web,RESTful API 在微服务中的作用是什么?

    微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。因此,要实现这一点,每个微服务必须具有接口。这使得 Web API 成为微服务的一个非常重要的推动者。RESTful API 基于 Web 的开放网络原则,为构建微服务架构的各个组件之间的接口提供了最合理的模型。

     

    39、您对微服务架构中的语义监控有何了解?

    语义监控,也称为 综合监控, 将自动化测试与监控应用程序相结合,以检测业务失败因素。

     

    40、我们如何进行跨功能测试?

    跨功能测试是对非功能性需求的验证,即那些无法像普通功能那样实现的需求。

     

    41、我们如何在测试中消除非决定论?

    非确定性测试(NDT)基本上是不可靠的测试。所以,有时可能会发生它们通过,显然有时它们也可能会失败。当它们失败时,它们会重新运行通过。

    从测试中删除非确定性的一些方法如下:

    1、 隔离

    2、 异步

    3、 远程服务

    4、 隔离

    5、 时间

    6、 资源泄漏

     

    42、Mock 或 Stub 有什么区别?

    存根

    · 一个有助于运行测试的虚拟对象。

    · 在某些可以硬编码的条件下提供固定行为。

    · 永远不会测试存根的任何其他行为。

    例如,对于空堆栈,您可以创建一个只为 empty()方法 返回 true 的存根。因此,这并不关心堆栈中是否存在元素。

    嘲笑

    · 一个虚拟对象,其中最初设置了某些属性。

    · 此对象的行为取决于 set 属性。

    · 也可以测试对象的行为。

    例如,对于 Customer 对象,您可以通过设置名称和年龄来模拟它。您可以将 age设置为 12,然后测试 isAdult()方法,该方法将在年龄大于 18 时返回 true。因此,您的 Mock Customer 对象适用于指定的条件。

     

    43、您对 Mike Cohn 的测试金字塔了解多少?

    Mike Cohn 提供了一个名为 Test Pyramid 的模型。这描述了软件开发所需的自动化测试类型。

    图 16: Mike Cohn 的测试金字塔 – 微服务面试问题

    根据金字塔,第一层的测试数量应该最高。在服务层,测试次数应小于单元测试级别,但应大于端到端级别。

     

    44、Docker 的目的是什么?

    Docker 提供了一个可用于托管任何应用程序的容器环境。在此,软件应用程序和支持它的依赖项紧密打包在一起。

    因此,这个打包的产品被称为 Container,因为它是由 Docker 完成的,所以它被称为 Docker 容器!

     

    45、什么是金丝雀释放?

    Canary Releasing 是一种降低在生产中引入新软件版本的风险的技术。这是通过将变更缓慢地推广到一小部分用户,然后将其发布到整个基础架构,即将其提供给每个人来完成的。

     

    46、什么是持续集成(CI)?

    持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程。这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共享代码和单元测试。

     

    47、什么是持续监测?

    持续监控深入监控覆盖范围,从浏览器内前端性能指标,到应用程序性能,再到主机虚拟化基础架构指标。

     

    48、架构师在微服务架构中的角色是什么?

    微服务架构中的架构师扮演以下角色:

    · 决定整个软件系统的布局。

    · 帮助确定组件的分区。因此,他们确保组件相互粘合,但不紧密耦合。

    · 与开发人员共同编写代码,了解日常生活中面临的挑战。

    · 为开发微服务的团队提供某些工具和技术的建议。

    · 提供技术治理,以便技术开发团队遵循微服务原则。

     

    49、我们可以用微服务创建状态机吗?

    我们知道拥有自己的数据库的每个微服务都是一个可独立部署的程序单元,这反过来又让我们可以创建一个状态机。因此,我们可以为特定的微服务指定不同的状态和事件。

    例如,我们可以定义 Order 微服务。订单可以具有不同的状态。Order 状态的转换可以是 Order 微服务中的独立事件。

     

    50、什么是微服务中的反应性扩展?

    Reactive Extensions 也称为 Rx。这是一种设计方法,我们通过调用多个服务来收集结果,然后编译组合响应。这些调用可以是同步或异步,阻塞或非阻塞。Rx是分布式系统中非常流行的工具,与传统流程相反。

     

    本内容由个人从参考资料收集而来,可能有不准确的地方,还请各位多多指正,谢谢!

    以下还有更多一线学习资料(2T),关注我的公众号,免费领取,如:

    以上资料,都是我个人平时收集而来,有网盘存储,长期有效!有兴趣的同学,可以扫码关注我的个人公众号:时代名猿,回复关键字:wyzl ,领取一线资料!

     

     

    展开全文
  • 85道Java微服务面试题整理(助力2020面试)

    万次阅读 多人点赞 2020-02-10 20:43:42
    微服务 面试题 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3。微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片,SOA 和微服务...

    微服务 面试题

    1、您对微服务有何了解?

    2、微服务架构有哪些优势?

    3。微服务有哪些特点?

    4、设计微服务的最佳实践是什么?

    5、微服务架构如何运作?

    6、微服务架构的优缺点是什么?

    7、单片,SOA 和微服务架构有什么区别?

    8、在使用微服务架构时,您面临哪些挑战?

    9、SOA 和微服务架构之间的主要区别是什么?

    10、微服务有什么特点?

    11、什么是领域驱动设计?

    12、为什么需要域驱动设计(DDD)?

    13、什么是无所不在的语言?

    14、什么是凝聚力?

    15、什么是耦合?

    16、什么是 REST / RESTful 以及它的用途是什么?

    17、你对 Spring Boot 有什么了解?

    18、什么是 Spring 引导的执行器?

    19、什么是 Spring Cloud?

    20、Spring Cloud 解决了哪些问题?

    21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    22。你能否给出关于休息和微服务的要点?

    23、什么是不同类型的微服务测试?

    24、您对 Distributed Transaction 有何了解?

    25、什么是 Idempotence 以及它在哪里使用?

    26、什么是有界上下文?

    27、什么是双因素身份验证?

    28、双因素身份验证的凭据类型有哪些?

    29、什么是客户证书?

    30、PACT 在微服务架构中的用途是什么?

    31、什么是 OAuth?

    32、康威定律是什么?

    33、合同测试你懂什么?

    34、什么是端到端微服务测试?

    35、Container 在微服务中的用途是什么?

    36、什么是微服务架构中的 DRY?

    37、什么是消费者驱动的合同(CDC)?

    38、Web,RESTful API 在微服务中的作用是什么?

    39、您对微服务架构中的语义监控有何了解?

    40、我们如何进行跨功能测试?

    41、我们如何在测试中消除非决定论?

    42、Mock 或 Stub 有什么区别?

    43、您对 Mike Cohn 的测试金字塔了解多少?

    44、Docker 的目的是什么?

    45、什么是金丝雀释放?

    46、什么是持续集成(CI)?

    47、什么是持续监测?

    48、架构师在微服务架构中的角色是什么?

    49、我们可以用微服务创建状态机吗?

    50、什么是微服务中的反应性扩展?

    1、您对微服务有何了解?

    微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。

    通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。这里,每个细胞独立于另一个细胞,但它也与其他细胞相关。这意味着对一个细胞的损害不会损害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。

    图 1:微服务的蜂窝表示 – 微服务访谈问题

    请参考上图。这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响或影响最小。

    2、微服务架构有哪些优势?

    图 2:微服务的 优点 – 微服务访谈问题

    · 独立开发 – 所有微服务都可以根据各自的功能轻松开发

    · 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们

    · 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行

    · 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务

    · 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起

    3、微服务有哪些特点?

    图 3:微服务的 特点 – 微服务访谈问题

    · 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展

    · 组件化 – 微服务被视为可以轻松更换和升级的独立组件

    · 业务能力 – 微服务非常简单,专注于单一功能

    · 自治 – 开发人员和团队可以彼此独立工作,从而提高速度

    · 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件

    · 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品

    · 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题

    · 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃

    4、设计微服务的最佳实践是什么?

    以下是设计微服务的最佳实践:

    图 4:设计微服务的最佳实践 – 微服务访谈问题

    5、微服务架构如何运作?

    微服务架构具有以下组件:

    图 5:微服务 架构 – 微服务面试问题

    · 客户端 – 来自不同设备的不同用户发送请求。

    · 身份提供商 – 验证用户或客户身份并颁发安全令牌。

    · API 网关 – 处理客户端请求。

    · 静态内容 – 容纳系统的所有内容。

    · 管理 – 在节点上平衡服务并识别故障。

    · 服务发现 – 查找微服务之间通信路径的指南。

    · 内容交付网络 – 代理服务器及其数据中心的分布式网络。

    · 远程服务 – 启用驻留在 IT 设备网络上的远程访问信息。

    6、微服务架构的优缺点是什么?

    7、单片,SOA 和微服务架构有什么区别?

    图 6: 单片 SOA 和微服务之间的比较 – 微服务访谈问题

    · 单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密封装。

    · 一个面向服务的架构是一种相互通信服务的集合。通信可以涉及简单的数据传递,也可以涉及两个或多个协调某些活动的服务。

    · 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。

    8、在使用微服务架构时,您面临哪些挑战?

    开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。

    · 自动化组件:难以自动化,因为有许多较小的组件。因此,对于每个组件,我们必须遵循 Build,Deploy 和 Monitor 的各个阶段。

    · 易感性:将大量组件维护在一起变得难以部署,维护,监控和识别问题。它需要在所有组件周围具有很好的感知能力。

    · 配置管理:有时在各种环境中维护组件的配置变得困难。

    · 调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题至关重要。

    9、SOA 和微服务架构之间的主要区别是什么?

    SOA 和微服务之间的主要区别如下:

    10、微服务有什么特点?

    您可以列出微服务的特征,如下所示:

    图 7:微服务的特征 – 微服务访谈问题

    11、什么是领域驱动设计?

    图 8: DDD 原理 – 微服务面试问题

    12、为什么需要域驱动设计(DDD)?

    图 9:我们需要 DDD 的因素 – 微服务面试问题

    13、什么是无所不在的语言?

    如果您必须定义泛在语言(UL),那么它是特定域的开发人员和用户使用的通用语言,通过该语言可以轻松解释域。

    无处不在的语言必须非常清晰,以便它将所有团队成员放在同一页面上,并以机器可以理解的方式进行翻译。

    14、什么是凝聚力?

    模块内部元素所属的程度被认为是凝聚力。

    15、什么是耦合?

    组件之间依赖关系强度的度量被认为是耦合。一个好的设计总是被认为具有高内聚力和低耦合性。

    16、什么是 REST / RESTful 以及它的用途是什么?

    Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计算机系统通过 Internet 进行通信的架构风格。这使得微服务更容易理解和实现。

    微服务可以使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合的微服务总是更容易。

    17、你对 Spring Boot 有什么了解?

    事实上,随着新功能的增加,弹簧变得越来越复杂。如果必须启动新的 spring 项目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring配置。所以一切都必须从头开始。

    Spring Boot 是解决这个问题的方法。使用 spring boot 可以避免所有样板代码和配置。因此,基本上认为自己就好像你正在烘烤蛋糕一样,春天就像制作蛋糕所需的成分一样,弹簧靴就是你手中的完整蛋糕。

    图 10: Spring Boot 的因素 – 微服务面试问题

    18、什么是 Spring 引导的执行器?

    Spring Boot 执行程序提供了 restful Web 服务,以访问生产环境中运行应用程序的当前状态。在执行器的帮助下,您可以检查各种指标并监控您的应用程序。

    19、什么是 Spring Cloud?

    根据 Spring Cloud 的官方网站,Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,领导选举,分布式会话,集群状态)。

    20、Spring Cloud 解决了哪些问题?

    在使用 Spring Boot 开发分布式微服务时,我们面临的问题很少由 Spring Cloud解决。

    · 与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安全问题。

    · 处理服务发现的能力 – 服务发现允许集群中的进程和服务找到彼此并进行通信。

    · 解决冗余问题 – 冗余问题经常发生在分布式系统中。

    · 负载平衡 – 改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布。

    · 减少性能问题 – 减少因各种操作开销导致的性能问题。

    21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试Spring MVC 应用程序。在上面显示的快照中,我们只想启动 ToTestController。执行此单元测试时,不会启动所有其他控制器和映射。

    22、你能否给出关于休息和微服务的要点?

    虽然您可以通过多种方式实现微服务,但 REST over HTTP 是实现微服务的一种方式。REST 还可用于其他应用程序,如 Web 应用程序,API 设计和 MVC 应用程序,以提供业务数据。

    微服务是一种体系结构,其中系统的所有组件都被放入单独的组件中,这些组件可以单独构建,部署和扩展。微服务的某些原则和最佳实践有助于构建弹性应用程序。

    简而言之,您可以说 REST 是构建微服务的媒介。

    23、什么是不同类型的微服务测试?

    在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。

    · 在底层,我们有面向技术的测试,如单元测试和性能测试。这些是完全自动化的。

    · 在中间层面,我们进行了诸如压力测试和可用性测试之类的探索性测试。

    · 在顶层, 我们的 验收测试数量很少。这些验收测试有助于利益相关者理解和验证软件功能。

    24、您对 Distributed Transaction 有何了解?

    分布式事务是指单个事件导致两个或多个不能以原子方式提交的单独数据源的突变的任何情况。在微服务的世界中,它变得更加复杂,因为每个服务都是一个工作单元,并且大多数时候多个服务必须协同工作才能使业务成功。

    25、什么是 Idempotence 以及它在哪里使用?

    幂等性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像它只做了一次。

    用法:在远程服务或数据源中使用 Idempotence,这样当它多次接收指令时,它只处理指令一次。

    26、什么是有界上下文?

    有界上下文是域驱动设计的核心模式。DDD 战略设计部门的重点是处理大型模型和团队。DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。

    27、什么是双因素身份验证?

    双因素身份验证为帐户登录过程启用第二级身份验证。

    图 11: 双因素认证的表示 – 微服务访谈问题

    因此,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。

    28、双因素身份验证的凭据类型有哪些?

    这三种凭证是:

    图 12: 双因素认证的证书类型 – 微服务面试问题

    29、什么是客户证书?

    客户端系统用于向远程服务器发出经过身份验证的请求的一种数字证书称为客户端证书。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身份提供了强有力的保证。

    30、PACT 在微服务架构中的用途是什么?

    PACT 是一个开源工具,允许测试服务提供者和消费者之间的交互,与合同隔离,从而提高微服务集成的可靠性。

    微服务中的用法

    · 用于在微服务中实现消费者驱动的合同。

    · 测试微服务的消费者和提供者之间的消费者驱动的合同。

    查看即将到来的批次

    31、什么是 OAuth?

    OAuth 代表开放授权协议。这允许通过在 HTTP 服务上启用客户端应用程序(例如第三方提供商 Facebook,GitHub 等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。

    32、康威定律是什么?

    “任 何 设 计 系 统 的 组 织 ( 广 泛 定 义 ) 都 将 产 生 一 种 设 计 , 其 结 构 是 组 织 通 信 结 构的 副 本 。” – Mel Conway

    图 13: Conway 定律的表示 – 微服务访谈问题

    该法律基本上试图传达这样一个事实:为了使软件模块起作用,整个团队应该进行良好的沟通。因此,系统的结构反映了产生它的组织的社会边界。

    33、合同测试你懂什么?

    根据 Martin Flower 的说法,合同测试是在外部服务边界进行的测试,用于验证其是否符合消费服务预期的合同。

    此外,合同测试不会深入测试服务的行为。更确切地说,它测试该服务调用的输入&输出包含所需的属性和所述响应延迟,吞吐量是允许的限度内。

    34、什么是端到端微服务测试?

    端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体协同工作并满足所有要求。

    通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。

    图 14:测试层次 – 微服务面试问题

    35、Container 在微服务中的用途是什么?

    容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法。您可以将微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务,而无需任何额外的工作。

    图 15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题

    36、什么是微服务架构中的 DRY?

    DRY 代表不要重复自己。它基本上促进了重用代码的概念。这导致开发和共享库,这反过来导致紧密耦合。

    37、什么是消费者驱动的合同(CDC)?

    这基本上是用于开发微服务的模式,以便它们可以被外部系统使用。当我们处理微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者。

    通常,提供程序在 XML 文档中指定接口。但在消费者驱动的合同中,每个服务消费者都传达了提供商期望的接口。

    38、Web,RESTful API 在微服务中的作用是什么?

    微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。因此,要实现这一点,每个微服务必须具有接口。这使得 Web API 成为微服务的一个非常重要的推动者。RESTful API 基于 Web 的开放网络原则,为构建微服务架构的各个组件之间的接口提供了最合理的模型。

    39、您对微服务架构中的语义监控有何了解?

    语义监控,也称为 综合监控, 将自动化测试与监控应用程序相结合,以检测业务失败因素。

    40、我们如何进行跨功能测试?

    跨功能测试是对非功能性需求的验证,即那些无法像普通功能那样实现的需求。

    41、我们如何在测试中消除非决定论?

    非确定性测试(NDT)基本上是不可靠的测试。所以,有时可能会发生它们通过,显然有时它们也可能会失败。当它们失败时,它们会重新运行通过。

    从测试中删除非确定性的一些方法如下:

    1、 隔离

    2、 异步

    3、 远程服务

    4、 隔离

    5、 时间

    6、 资源泄漏

    42、Mock 或 Stub 有什么区别?

    存根

    · 一个有助于运行测试的虚拟对象。

    · 在某些可以硬编码的条件下提供固定行为。

    · 永远不会测试存根的任何其他行为。

    例如,对于空堆栈,您可以创建一个只为 empty()方法 返回 true 的存根。因此,这并不关心堆栈中是否存在元素。

    嘲笑

    · 一个虚拟对象,其中最初设置了某些属性。

    · 此对象的行为取决于 set 属性。

    · 也可以测试对象的行为。

    例如,对于 Customer 对象,您可以通过设置名称和年龄来模拟它。您可以将 age设置为 12,然后测试 isAdult()方法,该方法将在年龄大于 18 时返回 true。因此,您的 Mock Customer 对象适用于指定的条件。

    43、您对 Mike Cohn 的测试金字塔了解多少?

    Mike Cohn 提供了一个名为 Test Pyramid 的模型。这描述了软件开发所需的自动化测试类型。

    图 16: Mike Cohn 的测试金字塔 – 微服务面试问题

    根据金字塔,第一层的测试数量应该最高。在服务层,测试次数应小于单元测试级别,但应大于端到端级别。

    44、Docker 的目的是什么?

    Docker 提供了一个可用于托管任何应用程序的容器环境。在此,软件应用程序和支持它的依赖项紧密打包在一起。

    因此,这个打包的产品被称为 Container,因为它是由 Docker 完成的,所以它被称为 Docker 容器!

    45、什么是金丝雀释放?

    Canary Releasing 是一种降低在生产中引入新软件版本的风险的技术。这是通过将变更缓慢地推广到一小部分用户,然后将其发布到整个基础架构,即将其提供给每个人来完成的。

    46、什么是持续集成(CI)?

    持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程。这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共享代码和单元测试。

    47、什么是持续监测?

    持续监控深入监控覆盖范围,从浏览器内前端性能指标,到应用程序性能,再到主机虚拟化基础架构指标。

    48、架构师在微服务架构中的角色是什么?

    微服务架构中的架构师扮演以下角色:

    · 决定整个软件系统的布局。

    · 帮助确定组件的分区。因此,他们确保组件相互粘合,但不紧密耦合。

    · 与开发人员共同编写代码,了解日常生活中面临的挑战。

    · 为开发微服务的团队提供某些工具和技术的建议。

    · 提供技术治理,以便技术开发团队遵循微服务原则。

    49、我们可以用微服务创建状态机吗?

    我们知道拥有自己的数据库的每个微服务都是一个可独立部署的程序单元,这反过来又让我们可以创建一个状态机。因此,我们可以为特定的微服务指定不同的状态和事件。

    例如,我们可以定义 Order 微服务。订单可以具有不同的状态。Order 状态的转换可以是 Order 微服务中的独立事件。

    50、什么是微服务中的反应性扩展?

    Reactive Extensions 也称为 Rx。这是一种设计方法,我们通过调用多个服务来收集结果,然后编译组合响应。这些调用可以是同步或异步,阻塞或非阻塞。Rx是分布式系统中非常流行的工具,与传统流程相反。

    SpringCloud面试

    1、什么是 Spring Cloud?

    Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

    2、使用 Spring Cloud 有什么优势?

    使用 Spring Boot 开发分布式微服务时,我们面临以下问题

    (1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。

    (2)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。

    (3)冗余-分布式系统中的冗余问题。

    (4)负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。

    (5)性能-问题 由于各种运营开销导致的性能问题。

    (6)部署复杂性-Devops 技能的要求。

    3、服务注册和发现是什么意思?Spring Cloud 如何实现?

    当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。

    4、Spring Cloud 和dubbo区别?

    (1)服务调用方式 dubbo是RPC springcloud Rest Api

    (2)注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper

    (3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

    5、SpringBoot和SpringCloud的区别?

    SpringBoot专注于快速方便的开发单个个体微服务。

    SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,

    为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

    SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系.

    SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

    6、负载平衡的意义什么?

    在计算中,负载平衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。

    7、什么是 Hystrix?它如何实现容错?

    Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。

    通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。

    思考以下微服务

    假设如果上图中的微服务 9 失败了,那么使用传统方法我们将传播一个异常。但这仍然会导致整个系统崩溃。

    随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达 1000.这是 hystrix 出现的地方 我们将使用 Hystrix 在这种情况下的 Fallback 方法功能。我们有两个服务 employee-consumer 使用由 employee-consumer 公开的服务。

    简化图如下所示

    现在假设由于某种原因,employee-producer 公开的服务会抛出异常。我们在这种情况下使用 Hystrix 定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。

    8、什么是 Hystrix 断路器?我们需要它吗?

    由于某些原因,employee-consumer 公开服务会引发异常。在这种情况下使用Hystrix 我们定义了一个回退方法。如果在公开服务中发生异常,则回退方法返回一些默认值。

    如果 firstPage method() 中的异常继续发生,则 Hystrix 电路将中断,并且员工使用者将一起跳过 firtsPage 方法,并直接调用回退方法。 断路器的目的是给第一页方法或第一页方法可能调用的其他方法留出时间,并导致异常恢复。可能发生的情况是,在负载较小的情况下,导致异常的问题有更好的恢复机会 。

    9、什么是 Netflix Feign?它的优点是什么?

    Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。

    Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定性。

    在 employee-consumer 的例子中,我们使用了 employee-producer 使用 REST模板公开的 REST 服务。

    但是我们必须编写大量代码才能执行以下步骤

    (1)使用功能区进行负载平衡。

    (2)获取服务实例,然后获取基本 URL。

    (3)利用 REST 模板来使用服务。 前面的代码如下

    @Controller
    public class ConsumerControllerClient {
        @Autowired
        private LoadBalancerClient loadBalancer;
        public void getEmployee() throws RestClientException, IOException {
            ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
            System.out.println(serviceInstance.getUri());
            String baseUrl=serviceInstance.getUri().toString();
            baseUrl=baseUrl+"/employee";
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<String> response=null;
            try{
                response=restTemplate.exchange(baseUrl,
                            HttpMethod.GET, getHeaders(),String.class);
            }
            catch (Exception ex)
                {
                System.out.println(ex);
            }
            System.out.println(response.getBody());
        }

    之前的代码,有像 NullPointer 这样的例外的机会,并不是最优的。我们将看到如何使用 Netflix Feign 使呼叫变得更加轻松和清洁。如果 Netflix Ribbon 依赖关系也在类路径中,那么 Feign 默认也会负责负载平衡。

    10、什么是 Spring Cloud Bus?我们需要它吗?

    考虑以下情况:我们有多个应用程序使用 Spring Cloud Config 读取属性,而Spring Cloud Config 从 GIT 读取这些属性。

    下面的例子中多个员工生产者模块从 Employee Config Module 获取 Eureka 注册的财产。

    如果假设 GIT 中的 Eureka 注册属性更改为指向另一台 Eureka 服务器,会发生什么情况。在这种情况下,我们将不得不重新启动服务以获取更新的属性。

    还有另一种使用执行器端点/刷新的方式。但是我们将不得不为每个模块单独调用这个 url。例如,如果 Employee Producer1 部署在端口 8080 上,则调用 http:// localhost:8080 / refresh。同样对于 Employee Producer2 http://localhost:8081 / refresh 等等。这又很麻烦。这就是 Spring Cloud Bus 发挥作用的地方。

    Spring Cloud Bus 提供了跨多个实例刷新配置的功能。因此,在上面的示例中,如果我们刷新 Employee Producer1,则会自动刷新所有其他必需的模块。如果我们有多个微服务启动并运行,这特别有用。这是通过将所有微服务连接到单个消息代理来实现的。无论何时刷新实例,此事件都会订阅到侦听此代理的所有微服务,并且它们也会刷新。可以通过使用端点/总线/刷新来实现对任何单个实例的刷新。

    11.springcloud断路器的作用

    当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)

    断路器有完全打开状态:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务

    半开:短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭

    关闭:当服务一直处于正常状态 能正常调用

    12、什么是SpringCloudConfig?

    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

    使用:

    (1)添加pom依赖

    (2)配置文件添加相关配置

    (3)启动类添加注解@EnableConfigServer

    13、Spring Cloud Gateway?

    Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

    使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。

    Spring Boot面试题

    1、什么是 Spring Boot?

    多年来,随着新功能的增加,spring 变得越来越复杂。访问spring官网页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。

    Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架之上。使用 spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring功能。

    2、Spring Boot 有哪些优点?

    Spring Boot 的优点有:

    1、减少开发,测试时间和努力。

    2、使用 JavaConfig 有助于避免使用 XML。

    3、避免大量的 Maven 导入和各种版本冲突。

    4、提供意见发展方法。

    5、通过提供默认值快速开始开发。

    6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish或其他任何东西。

    7、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。

    8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring 将在(application{environment} .properties)中加载后续的应用程序属性文件。

    3、什么是 JavaConfig?

    Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:

    (1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。

    (2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。

    (3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

    4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

    这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>

    5、Spring Boot 中的监视器是什么?

    Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。

    6、如何在 Spring Boot 中禁用 Actuator 端点安全性?

    默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

    7、如何在自定义端口上运行 Spring Boot 应用程序?

    为了在自定义端口上运行 Spring Boot 应用程序,您可以在application.properties 中指定端口。server.port = 8090

    8、什么是 YAML?

    YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。

    9、如何实现 Spring Boot 应用程序的安全性?

    为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

    10、如何集成 Spring Boot 和 ActiveMQ?

    对于集成 Spring Boot 和 ActiveMQ,我们使用依赖关系。 它只需要很少的配置,并且不需要样板代码。

    11、如何使用 Spring Boot 实现分页和排序?

    使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。

    12、什么是 Swagger?你用 Spring Boot 实现了它吗?

    Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

    13、什么是 Spring Profiles?

    Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。

    14、什么是 Spring Batch?

    Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。

    15、什么是 FreeMarker 模板?

    FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构进行动态网页生成。使用 Freemarker 的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理 html 页面设计。最后使用freemarker 可以将这些结合起来,给出最终的输出页面。

    16、如何使用 Spring Boot 实现异常处理?

    Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。

    17、您使用了哪些 starter maven 依赖项?

    使用了下面的一些依赖项

    spring-boot-starter-activemq

    spring-boot-starter-security

    这有助于增加更少的依赖关系,并减少版本的冲突。

    18、什么是 CSRF 攻击?

    CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

    19、什么是 WebSockets?

    WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。

    1、WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。

    2、WebSocket 是全双工的 -客户端和服务器通信是相互独立的。

    3、单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信

    4、Light -与 http 相比,WebSocket 消息数据交换要轻得多。

    20、什么是 AOP?

    在软件开发过程中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不同。因此,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。

    21、什么是 Apache Kafka?

    Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。

    22、我们如何监视所有 Spring Boot 微服务?

    Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。 它建立在 Spring Boot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。

    最后

    2019年常见的Java面试题总结了一份将近500页的pdf文档,欢迎关注我的公众号:程序员追风,领取这些整理的资料!

    喜欢文章记得关注我点个赞哟,感谢支持!

    展开全文
  • Go全栈面试题(3) -微服务面试题

    千次阅读 2019-05-28 13:26:22
    title: Go全栈面试题(2) -微服务面试题 tags: go author: Clown95 微服务面试题 Http get跟head get:获取由Request-URI标识的任何信息(以实体的形式),如果Request-URI引用某个数据处理过程,则应该以它产生的...
  • Java微服务面试题整理

    2020-02-11 19:54:30
    微服务 面试题 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3。微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片,SOA 和微服务...
  • 点击上方“Java后端技术之路”,选择“置顶或者星标”与你一起成长微服务面试题一、Spring Cloud有哪些特点?Spring cloud 流应用程...
  • 微服务面试题1.什么是分布式?分布式和集群的区别?2.什么是微服务?分布式和微服务的区别? 1.什么是分布式?分布式和集群的区别? 分布式:一个业务拆分成多个子业务,子业务分别部署在不同的服务器上。 集群:同...
  • 2019微服务面试题.pdf

    2019-09-26 20:19:42
    是一份知识点全面又能不断更新,与时俱进的学习手册,不仅收录了作者亲身面试遇到的问题,还收录了 面试时遇到的问题。我们会一直不断地更新和充实该宝典,同时也...的面试题,也许下一个版本就有你提供的面试题哦。
  • Java、微服务面试题

    2019-02-28 09:52:04
    1、该文档描述微服务架构划分 2、描述MQ、hystrix链路追踪 3、数据库MySQL集群、redis等 4、Java多线程等
  • 【面试题】-java分布式及微服务面试题汇总

    万次阅读 多人点赞 2019-05-06 16:35:38
    目录 1.CAP理论 2.BASE理论 3.接口的幂等性问题 4.消息中间件如何解决...10.Soa和微服务架构有哪些区别? 11.dubbo服务提供者,服务消费者需要配置哪些信息? 12.Dubbo有哪些负载均衡策略 13.Redis的持久化方式...
  • Java微服务面试题

    2020-03-20 14:06:53
    1、您对微服务有何了解? 微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们...
  • 微服务 面试题 1、您对微服务有何了解? 微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的...
  • 常见的微服务面试题

    2020-07-10 10:48:52
    1、什么是微服务微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。 服务之间...
  • MyBatis面试题 每天一个面试技巧–MyBatis面试题1 每天一个面试技巧–MyBatis面试题2 每天一个面试技巧–MyBatis面试题终极 ZooKeeper 面试题 每日一面冲击BAT–ZooKeeper 面试题1 每日一面冲击BAT–ZooKeeper 面试...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,804
精华内容 721
关键字:

微服务面试题