【助力2020面试】精心整理85道Java微服务面试题(含答案)

微服务 面试题

一、您对微服务有何了解?
二、微服务架构有哪些优点?
3。微服务有哪些特色?
四、设计微服务的最佳实践是什么?
五、微服务架构如何运做?
六、微服务架构的优缺点是什么?
七、单片,SOA 和微服务架构有什么区别?
八、在使用微服务架构时,您面临哪些挑战?
九、SOA 和微服务架构之间的主要区别是什么?
十、微服务有什么特色?
十一、什么是领域驱动设计?
十二、为何须要域驱动设计(DDD)?
1三、什么是无所不在的语言?
1四、什么是凝聚力?
1五、什么是耦合?
1六、什么是 REST / RESTful 以及它的用途是什么?
1七、你对 Spring Boot 有什么了解?
1八、什么是 Spring 引导的执行器?
1九、什么是 Spring Cloud?
20、Spring Cloud 解决了哪些问题?
2一、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
22。你可否给出关于休息和微服务的要点?
2三、什么是不一样类型的微服务测试?
2四、您对 Distributed Transaction 有何了解?
2五、什么是 Idempotence 以及它在哪里使用?
2六、什么是有界上下文?
2七、什么是双因素身份验证?
2八、双因素身份验证的凭据类型有哪些?
2九、什么是客户证书?
30、PACT 在微服务架构中的用途是什么?
3一、什么是 OAuth?
3二、康威定律是什么?
3三、合同测试你懂什么?
3四、什么是端到端微服务测试?
3五、Container 在微服务中的用途是什么?
3六、什么是微服务架构中的 DRY?
3七、什么是消费者驱动的合同(CDC)?
3八、Web,RESTful API 在微服务中的做用是什么?
3九、您对微服务架构中的语义监控有何了解?
40、咱们如何进行跨功能测试?
4一、咱们如何在测试中消除非决定论?
4二、Mock 或 Stub 有什么区别?
4三、您对 Mike Cohn 的测试金字塔了解多少?
4四、Docker 的目的是什么?
4五、什么是金丝雀释放?
4六、什么是持续集成(CI)?
4七、什么是持续监测?
4八、架构师在微服务架构中的角色是什么?
4九、咱们能够用微服务建立状态机吗?
50、什么是微服务中的反应性扩展?

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

微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。
通俗地说,你必须看到蜜蜂如何经过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各类材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞造成图案,产生坚固的结构,将蜂窝的特定部分固定在一块儿。这里,每一个细胞独立于另外一个细胞,但它也与其余细胞相关。这意味着对一个细胞的损害不会损害其余细胞,所以,蜜蜂能够在不影响完整蜂箱的状况下重建这些细胞。
图 1:微服务的蜂窝表示 – 微服务访谈问题
请参考上图。这里,每一个六边形形状表明单独的服务组件。与蜜蜂的工做相似,每一个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在蜂箱中同样,每一个服务组件造成一个强大的微服务架构,以提供更好的可扩展性。此外,敏捷团队能够单独处理每一个服务组件的问题,而对整个应用程序没有影响或影响最小。

二、微服务架构有哪些优点?

图 2:微服务的 优势 – 微服务访谈问题
· 独立开发 – 全部微服务均可以根据各自的功能轻松开发
· 独立部署 – 基于其服务,能够在任何应用程序中单独部署它们
· 故障隔离 – 即便应用程序的一项服务不起做用,系统仍可继续运行
· 混合技术堆栈 – 可使用不一样的语言和技术来构建同一应用程序的不一样服务
· 粒度缩放 – 单个组件可根据须要进行缩放,无需将全部组件缩放在一块儿

三、微服务有哪些特色?

图 3:微服务的 特色 – 微服务访谈问题
· 解耦 – 系统内的服务很大程度上是分离的。所以,整个应用程序能够轻松构建,更改和扩展
· 组件化 – 微服务被视为能够轻松更换和升级的独立组件
· 业务能力 – 微服务很是简单,专一于单一功能
· 自治 – 开发人员和团队能够彼此独立工做,从而提升速度
· 持续交付 – 经过软件建立,测试和批准的系统自动化,容许频繁发布软件
· 责任 – 微服务不关注应用程序做为项目。相反,他们将应用程序视为他们负责的产品
· 分散治理 – 重点是使用正确的工具来作正确的工做。这意味着没有标准化模式或任何技术模式。开发人员能够自由选择最有用的工具来解决他们的问题
· 敏捷 – 微服务支持敏捷开发。任何新功能均可以快速开发并再次丢弃

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

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

五、微服务架构如何运做?

微服务架构具备如下组件:
图 5:微服务 架构 – 微服务面试问题
· 客户端 – 来自不一样设备的不一样用户发送请求。
· 身份提供商 – 验证用户或客户身份并颁发安全令牌。
· API 网关 – 处理客户端请求。
· 静态内容 – 容纳系统的全部内容。
· 管理 – 在节点上平衡服务并识别故障。
· 服务发现 – 查找微服务之间通讯路径的指南。
· 内容交付网络 – 代理服务器及其数据中心的分布式网络。
· 远程服务 – 启用驻留在 IT 设备网络上的远程访问信息。

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

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

图 6: 单片 SOA 和微服务之间的比较 – 微服务访谈问题
· 单片架构相似于大容器,其中应用程序的全部软件组件组装在一块儿并紧密封装。
· 一个面向服务的架构是一种相互通讯服务的集合。通讯能够涉及简单的数据传递,也能够涉及两个或多个协调某些活动的服务。
· 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。

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

开发一些较小的微服务听起来很容易,但开发它们时常常遇到的挑战以下。
· 自动化组件:难以自动化,由于有许多较小的组件。所以,对于每一个组件,咱们必须遵循 Build,Deploy 和 Monitor 的各个阶段。
· 易感性:将大量组件维护在一块儿变得难以部署,维护,监控和识别问题。它须要在全部组件周围具备很好的感知能力。
· 配置管理:有时在各类环境中维护组件的配置变得困难。
· 调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题相当重要。

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

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

十、微服务有什么特色?

您能够列出微服务的特征,以下所示:
图 7:微服务的特征 – 微服务访谈问题

十一、什么是领域驱动设计?

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

十二、为何须要域驱动设计(DDD)?

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

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

若是您必须定义泛在语言(UL),那么它是特定域的开发人员和用户使用的通用语言,经过该语言能够轻松解释域。
无处不在的语言必须很是清晰,以便它将全部团队成员放在同一页面上,并以机器能够理解的方式进行翻译。

1四、什么是凝聚力?

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

1五、什么是耦合?

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

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

Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计算机系统经过 Internet 进行通讯的架构风格。这使得微服务更容易理解和实现。
微服务可使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合的微服务老是更容易。

1七、你对 Spring Boot 有什么了解?

事实上,随着新功能的增长,弹簧变得愈来愈复杂。若是必须启动新的 spring 项目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring配置。因此一切都必须从头开始。
Spring Boot 是解决这个问题的方法。使用 spring boot 能够避免全部样板代码和配置。所以,基本上认为本身就好像你正在烘烤蛋糕同样,春天就像制做蛋糕所需的成分同样,弹簧靴就是你手中的完整蛋糕。
图 10: Spring Boot 的因素 – 微服务面试问题

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

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

1九、什么是 Spring Cloud?

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

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

在使用 Spring Boot 开发分布式微服务时,咱们面临的问题不多由 Spring Cloud解决。
· 与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安全问题。
· 处理服务发现的能力 – 服务发现容许集群中的进程和服务找到彼此并进行通讯。
· 解决冗余问题 – 冗余问题常常发生在分布式系统中。
· 负载平衡 – 改进跨多个计算资源(例如计算机集群,网络连接,中央处理单元)的工做负载分布。
· 减小性能问题 – 减小因各类操做开销致使的性能问题。

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

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

2二、你可否给出关于休息和微服务的要点?

虽然您能够经过多种方式实现微服务,但 REST over HTTP 是实现微服务的一种方式。REST 还可用于其余应用程序,如 Web 应用程序,API 设计和 MVC 应用程序,以提供业务数据。
微服务是一种体系结构,其中系统的全部组件都被放入单独的组件中,这些组件能够单独构建,部署和扩展。微服务的某些原则和最佳实践有助于构建弹性应用程序。
简而言之,您能够说 REST 是构建微服务的媒介。

2三、什么是不一样类型的微服务测试?

在使用微服务时,因为有多个微服务协同工做,测试变得很是复杂。所以,测试分为不一样的级别。
· 在底层,咱们有面向技术的测试,如单元测试和性能测试。这些是彻底自动化的。
· 在中间层面,咱们进行了诸如压力测试和可用性测试之类的探索性测试。
· 在顶层, 咱们的 验收测试数量不多。这些验收测试有助于利益相关者理解和验证软件功能。

2四、您对 Distributed Transaction 有何了解?

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

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

幂等性是可以以这样的方式作两次事情的特性,即最终结果将保持不变,即好像它只作了一次。
用法:在远程服务或数据源中使用 Idempotence,这样当它屡次接收指令时,它只处理指令一次。

2六、什么是有界上下文?

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

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

双因素身份验证为账户登陆过程启用第二级身份验证。
图 11: 双因素认证的表示 – 微服务访谈问题
所以,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。

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

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

2九、什么是客户证书?

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

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

PACT 是一个开源工具,容许测试服务提供者和消费者之间的交互,与合同隔离,从而提升微服务集成的可靠性。
微服务中的用法
· 用于在微服务中实现消费者驱动的合同。
· 测试微服务的消费者和提供者之间的消费者驱动的合同。
查看即将到来的批次

3一、什么是 OAuth?

OAuth 表明开放受权协议。这容许经过在 HTTP 服务上启用客户端应用程序(例如第三方提供商 Facebook,GitHub 等)来访问资源全部者的资源。所以,您能够在不使用其凭据的状况下与另外一个站点共享存储在一个站点上的资源。

3二、康威定律是什么?

“任 何 设 计 系 统 的 组 织 ( 广 泛 定 义 ) 都 将 产 生 一 种 设 计 , 其 结 构 是 组 织 通 信 结 构的 副 本 。” – Mel Conway
图 13: Conway 定律的表示 – 微服务访谈问题
该法律基本上试图传达这样一个事实:为了使软件模块起做用,整个团队应该进行良好的沟通。所以,系统的结构反映了产生它的组织的社会边界。

3三、合同测试你懂什么?

根据 Martin Flower 的说法,合同测试是在外部服务边界进行的测试,用于验证其是否符合消费服务预期的合同。
此外,合同测试不会深刻测试服务的行为。更确切地说,它测试该服务调用的输入&输出包含所需的属性和所述响应延迟,吞吐量是容许的限度内。

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

端到端测试验证了工做流中的每一个流程都正常运行。这可确保系统做为一个总体协同工做并知足全部要求。
通俗地说,你能够说端到端测试是一种测试,在特定时期后测试全部东西。
图 14:测试层次 – 微服务面试问题

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

容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法。您能够将微服务封装在容器映像及其依赖项中,而后可使用它来滚动按需实例的微服务,而无需任何额外的工做。
图 15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题

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

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

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

这基本上是用于开发微服务的模式,以便它们能够被外部系统使用。当咱们处理微服务时,有一个特定的提供者构建它,而且有一个或多个使用微服务的消费者。
一般,提供程序在 XML 文档中指定接口。但在消费者驱动的合同中,每一个服务消费者都传达了提供商指望的接口。

3八、Web,RESTful API 在微服务中的做用是什么?

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

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

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

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

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

4一、咱们如何在测试中消除非决定论?

非肯定性测试(NDT)基本上是不可靠的测试。因此,有时可能会发生它们经过,显然有时它们也可能会失败。当它们失败时,它们会从新运行经过。
从测试中删除非肯定性的一些方法以下:
一、 隔离
二、 异步
三、 远程服务
四、 隔离
五、 时间
六、 资源泄漏

4二、Mock 或 Stub 有什么区别?

存根
· 一个有助于运行测试的虚拟对象。
· 在某些能够硬编码的条件下提供固定行为。
· 永远不会测试存根的任何其余行为。
例如,对于空堆栈,您能够建立一个只为 empty()方法 返回 true 的存根。所以,这并不关心堆栈中是否存在元素。
嘲笑
· 一个虚拟对象,其中最初设置了某些属性。
· 此对象的行为取决于 set 属性。
· 也能够测试对象的行为。
例如,对于 Customer 对象,您能够经过设置名称和年龄来模拟它。您能够将 age设置为 12,而后测试 isAdult()方法,该方法将在年龄大于 18 时返回 true。所以,您的 Mock Customer 对象适用于指定的条件。

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

Mike Cohn 提供了一个名为 Test Pyramid 的模型。这描述了软件开发所需的自动化测试类型。
图 16: Mike Cohn 的测试金字塔 – 微服务面试问题
根据金字塔,第一层的测试数量应该最高。在服务层,测试次数应小于单元测试级别,但应大于端到端级别。

4四、Docker 的目的是什么?

Docker 提供了一个可用于托管任何应用程序的容器环境。在此,软件应用程序和支持它的依赖项紧密打包在一块儿。
所以,这个打包的产品被称为 Container,由于它是由 Docker 完成的,因此它被称为 Docker 容器!

4五、什么是金丝雀释放?

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

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

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

4七、什么是持续监测?

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

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

微服务架构中的架构师扮演如下角色:
· 决定整个软件系统的布局。
· 帮助肯定组件的分区。所以,他们确保组件相互粘合,但不紧密耦合。
· 与开发人员共同编写代码,了解平常生活中面临的挑战。
· 为开发微服务的团队提供某些工具和技术的建议。
· 提供技术治理,以便技术开发团队遵循微服务原则。

4九、咱们能够用微服务建立状态机吗?

咱们知道拥有本身的数据库的每一个微服务都是一个可独立部署的程序单元,这反过来又让咱们能够建立一个状态机。所以,咱们能够为特定的微服务指定不一样的状态和事件。
例如,咱们能够定义 Order 微服务。订单能够具备不一样的状态。Order 状态的转换能够是 Order 微服务中的独立事件。

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

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

SpringCloud面试题

一、什么是 Spring Cloud?

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

二、使用 Spring Cloud 有什么优点?

使用 Spring Boot 开发分布式微服务时,咱们面临如下问题
(1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
(2)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,而后可以查找并链接到该目录中的服务。
(3)冗余-分布式系统中的冗余问题。
(4)负载平衡 --负载平衡改善跨多个计算资源的工做负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
(5)性能-问题 因为各类运营开销致使的性能问题。
(6)部署复杂性-Devops 技能的要求。

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

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

四、Spring Cloud 和dubbo区别?

(1)服务调用方式 dubbo是RPC springcloud Rest Api
(2)注册中心,dubbo 是zookeeper springcloud是eureka,也能够是zookeeper
(3)服务网关,dubbo自己没有实现,只能经过其余第三方技术整合,springcloud有Zuul路由网关,做为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

五、SpringBoot和SpringCloud的区别?

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

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

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

七、什么是 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 服务。
可是咱们必须编写大量代码才能执行如下步骤
(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 默认也会负责负载平衡。

十、什么是 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断路器的做用

当一个服务调用另外一个服务因为网络缘由或自身缘由出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源致使更多的请求等待,发生连锁效应(雪崩效应)
断路器有彻底打开状态:一段时间内 达到必定的次数没法调用 而且屡次监测没有恢复的迹象 断路器彻底打开 那么下次请求就不会请求到该服务
半开:短期内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭
关闭:当服务一直处于正常状态 能正常调用

十二、什么是SpringCloudConfig?

在分布式系统中,因为服务数量巨多,为了方便服务配置文件统一管理,实时更新,因此须要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
使用:
(1)添加pom依赖
(2)配置文件添加相关配置
(3)启动类添加注解@EnableConfigServer

1三、Spring Cloud Gateway?

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关做为流量的,在微服务系统中有着很是做用,网关常见的功能有路由转发、权限校验、限流控制等做用。
使用了一个RouteLocatorBuilder的bean去建立路由,除了建立路由RouteLocatorBuilder可让你添加各类predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各类过滤器,用来对请求作各类判断和修改。

Spring Boot面试题

一、什么是 Spring Boot?

多年来,随着新功能的增长,spring 变得愈来愈复杂。访问spring官网页面,咱们就会看到能够在咱们的应用程序中使用的全部 Spring 项目的不一样功能。若是必须启动一个新的 Spring 项目,咱们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。所以,开始一个新的 spring 项目须要不少努力,由于咱们如今必须从头开始作全部事情。
Spring Boot 是解决这个问题的方法。Spring Boot 已经创建在现有 spring 框架之上。使用 spring 启动,咱们避免了以前咱们必须作的全部样板代码和配置。所以,Spring Boot 能够帮助咱们以最少的工做量,更加健壮地使用现有的 Spring功能。

二、Spring Boot 有哪些优势?

Spring Boot 的优势有:
一、减小开发,测试时间和努力。
二、使用 JavaConfig 有助于避免使用 XML。
三、避免大量的 Maven 导入和各类版本冲突。
四、提供意见发展方法。
五、经过提供默认值快速开始开发。
六、没有单独的 Web 服务器须要。这意味着你再也不须要启动 Tomcat,Glassfish或其余任何东西。
七、须要更少的配置 由于没有 web.xml 文件。只需添加用@ Configuration 注释的类,而后添加用@Bean 注释的方法,Spring 将自动加载对象并像之前同样对其进行管理。您甚至能够将@Autowired 添加到 bean 方法中,以使 Spring 自动装入须要的依赖关系中。
八、基于环境的配置 使用这些属性,您能够将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring 将在(application{environment} .properties)中加载后续的应用程序属性文件。

三、什么是 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,不须要任何强制转换或基于字符串的查找。

四、如何从新加载 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>复制代码

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

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

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

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

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

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

八、什么是 YAML?

YAML 是一种人类可读的数据序列化语言。它一般用于配置文件。与属性文件相比,若是咱们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,并且更少混淆。能够看出 YAML 具备分层配置数据。

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

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

十、如何集成 Spring Boot 和 ActiveMQ?

对于集成 Spring Boot 和 ActiveMQ,咱们使用依赖关系。 它只须要不多的配置,而且不须要样板代码。

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

使用 Spring Boot 实现分页很是简单。使用 Spring Data-JPA 能够实现将可分页的传递给存储库方法。

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

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

1三、什么是 Spring Profiles?

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

1四、什么是 Spring Batch?

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

1五、什么是 FreeMarker 模板?

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

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

Spring 提供了一种使用 ControllerAdvice 处理异常的很是有用的方法。 咱们经过实现一个 ControlerAdvice 类,来处理控制器类抛出的全部异常。

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

使用了下面的一些依赖项
spring-boot-starter-activemq
spring-boot-starter-security
这有助于增长更少的依赖关系,并减小版本的冲突。

1八、什么是 CSRF 攻击?

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

1九、什么是 WebSockets?

WebSocket 是一种计算机通讯协议,经过单个 TCP 链接提供全双工通讯信道。
一、WebSocket 是双向的 -使用 WebSocket 客户端或服务器能够发起消息发送。
二、WebSocket 是全双工的 -客户端和服务器通讯是相互独立的。
三、单个 TCP 链接 -初始链接使用 HTTP,而后将此链接升级到基于套接字的链接。而后这个单一链接用于全部将来的通讯
四、Light -与 http 相比,WebSocket 消息数据交换要轻得多。

20、什么是 AOP?

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

2一、什么是 Apache Kafka?

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

2二、咱们如何监视全部 Spring Boot 微服务?

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

最后

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

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

相关文章
相关标签/搜索