Spring Cloud 面试题

转载自   Spring Cloud 面试题

问题一:

什么是Spring Cloud?

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

 

问题二:

使用Spring Cloud有什么优势?

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

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

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

  • 冗余-分布式系统中的冗余问题。

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

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

  • 部署复杂性-Devops技能的要求。

问题三:

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

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

 

问题四:

负载平衡的意义什么?

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

 

问题五:

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

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

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

思考以下微服务

 

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

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

简化图如下所示 

 

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

 

问题六:

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

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

  

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

 

 

问题七:

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

 Feign是受到Retrofit,JAXRS-2.0和WebSocket启发的java客户端联编程序。Feign的第一个目标是将约束分母的复杂性统一到http apis,而不考虑其稳定性。在employee-consumer的例子中,我们使用了employee-producer使用REST模板公开的REST服务。

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

  • 使用功能区进行负载平衡。

  • 获取服务实例,然后获取基本URL。

  • 利用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默认也会负责负载平衡。

 

问题八:

什么是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,则会自动刷新所有其他必需的模块。如果我们有多个微服务启动并运行,这特别有用。这是通过将所有微服务连接到单个消息代理来实现的。无论何时刷新实例,此事件都会订阅到侦听此代理的所有微服务,并且它们也会刷新。可以通过使用端点/总线/刷新来实现对任何单个实例的刷新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三章用sql语句操作数据

一、sql是什么&#xff1a; 1.结构化查询语言 2.在什么情况下使用&#xff1a; &#xff08;1&#xff09;对sqlserver执行所有操作的时候 &#xff08;2&#xff09;对程序进行增删改查的时候 3.sql组成&#xff1a; &#xff08;1&#xff09;DML数据操作语言&#xff0c;ins…

从真实项目中抠出来的设计模式——第二篇:过滤器模式

一&#xff1a;实际场景介绍 我们在给用户做订单催付通知的时候&#xff0c;会有这样的一种场景&#xff0c;用户在系统后台设置一组可以催付的规则&#xff0c;比如说订单金额大于xx元&#xff0c;非黑名单用户&#xff0c;来自 哪个地区&#xff0c;已购买过某个商品&#x…

2015蓝桥杯省赛---java---A---8(移动距离)

题目描述 思路分析 行号的差的绝对值列号的差的绝对值 代码实现 package lanqiao;import java.util.Scanner;public class Main {public static void main(String[] args) {int w0,m0,n0;Scanner scanner new Scanner(System.in);wscanner.nextInt();mscanner.nextInt();…

RecyclerView多布局的简单使用

RecyclerView多布局的简单 RecyclerView 是在Android5.0之后推出的&#xff0c;是一个比ListView更加灵活更加高效的适配器类型控件。但是RecyclerView不同于其他类型的适配器&#xff0c;它还需要一个LayoutManager进行页面控制展示。RecyclerView提供了三种布局管理器&#x…

Spring Boot 面试题

转载自 Spring Boot 面试题 问题一 什么是Spring Boot&#xff1f; 多年来&#xff0c;随着新功能的增加&#xff0c;spring变得越来越复杂。只需访问https://spring.io/projects页面&#xff0c;我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必…

可以代表学计算机的标志,桌面上的图标可以用来表示

语音内容&#xff1a;大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以计算机为例&#xff0c;桌面上的图标可以用来表示文件、文件夹或快捷方式。“计算机”一般是指“电子计算机”&#xff0c;电子计算机(electronic computer)通…

第四章数据查询基础

第四章数据查询基础 一、查询流程&#xff1a; 1.客户端–》请求一条查询语句–》数据库–》返回查询结果 二、导出数据库脚本&#xff1a; 1.选中数据库–》右击–》任务–》生成脚本–》下一步–》选择存放路径–》高级–》选择架构和数据–》下一步–》确定。 三、查询的语法…

Visual Studio 2017迎来F# 4.1

三月初发布的Visual Studio 2017&#xff0c;包含了F# 4.1和Visual F#工具的更新。F# 4.1带来了语言层面提升以及与C# 7的互操作能力&#xff0c;而那些Visual F#工具是支持Roslyn workspaces的首个版本。 正如上文提到的&#xff0c;F# 4.1带来了语言层面提升以及与C# 7的互操…

Spring 事务原理和使用

转载自 Spring 事务原理和使用 1.SpringTransactional的配置 步骤一、在Spring配置文件中引入命名空间 <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:tx"http://www…

第五章模糊查询和聚合函数

第五章模糊查询和聚合函数 一、模糊查询&#xff1a; 1.关键词&#xff1a;like 2._代表&#xff1a;一个字符&#xff0c;eg:like ‘c’&#xff0c;查询的结果是三个字&#xff0c;中间必须是c 3.%代表&#xff1a;多个字符&#xff0c;eg:like ‘%张’,查询的结果是张结尾的…

Android模拟器之神奇Genymotion的安装

Android模拟器之神奇Genymotion的安装 经常有人问我&#xff0c;Android开发不适用真机的情况下&#xff0c;用什么模拟器比较好用&#xff01;我这里推荐两款&#xff0c;一个是前两年开发时使用的“夜神模拟器”&#xff0c;这个在这就不多说了&#xff01;直接下载安装就可以…

微软在.NET官网上线.NET 架构指南频道

微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://github.com/dotnet/eShopOnContainers , 最近微软给这个参考应用写了完善的文档&#xff0c;放在.NET官网的.NET架构频道https://www.microsoft.com/net/architecture。 整个.NET 架构按照4个部分展开&am…

2015蓝桥杯省赛---java---B---10(生命之树)

题目描述 思路分析 dfs无根树变有根树 代码实现 package lanqiao;import java.util.Scanner;public class Main {//提升作用域public static int n;public static int[] w;//每个点的权重public static int[] ww;//每个点作为根节点时能得到的最大权和public static int[][…

第六章连接和分组查询

第六章连接和分组查询 一、分组查询&#xff1a; 1.语法&#xff1a;select 列名 from 表名 where 条件 group by 分组的列 order by 列名 排序方式&#xff08;asc/desc&#xff09; 2.多列分组的语法&#xff1a; select 列名1,列名2 from 表名 where 条件 group by 分组的列…

wps工资表怎么用计算机,wps制作工资表的方法步骤图

wps是一款强大的日常办公软件&#xff0c;我们可以使用wps来制作工资表&#xff0c;想知道具体的操作吗?下面就让学习啦小编告诉你wps如何制作工资表&#xff0c;希望对大家有所帮助。wps制作工资表的方法第一节 建立与使用 WPS表格WPS Office 2007办公 软件中提供了一个名为 …

Java8面试题

转载自 Java8面试题 问题一&#xff1a; Java8支持函数编程是什么意思&#xff1f; 在Java 8之前&#xff0c;所有东西都是面向对象的。除了原语之外&#xff0c;java中的 所有内容都作为对象存在。对方法/函数的所有调用都是使用对象或类引用进行的。 方法/功能本身并不…

Linux中打包和解压到的方法

打包aa为ab.tar.gz tar zcvf ab.tar.gz aa 即可 如果要解压到当前位置 tar zxvf ab.tar.gz 但是如果要解压到其它位置,命令有点不一样的地方,如像要解压到另外的目录,如cc tar zxvf ab.tar.gz -C cc   或者写全路径也行tar zxvf ab.tar.gz -C /home/cc 这样就把这个包的内…

为什么转换到Visual Studio 2017如此 “容易”

与VS 2015相比&#xff0c;Visual Studio 2017在C 功能方面有重大的飞跃。我们希望升级到新版本后能让您的日常工作变得更轻松。 这篇文章主要介绍从Visual Studio 2015升级到2017的步骤。在这个版本中&#xff0c;我们团队使代码库移动到Visual Studio 2017非常容易。这里有四…

jdk的安装与环境变量的配置

jdk安装步骤&#xff1a; 1.双击jdk1.7应用程序进行安装 2.遇到下一步就点&#xff0c;遇到确定也点。最后完成 3.默认安装的路径为&#xff1a;C:\Program Files (x86)\Java\jdk1.7.0_51 4.安装完成之后进行环境变量配置 5.右击计算机&#xff08;此电脑&#xff09; 6.点击属…