很快2019年就要过去,过完春节咱们将迎来咱们的金三银四,咱们须要作好充足的准备把握此次机会,给你们收集了2019年大厂常见的一些面试真题,给你们整理了一个备战春招系列,之后一一更新给你们。前端
一、您对微服务有何了解?
微服务,又称微服务 架构,是一种架构风格,它将应用程序构建为以业务领域为
模型的小型自治服务集合 。
通俗地说,你必须看到蜜蜂如何经过对齐六角形蜡细胞来构建它们的蜂窝状物。
他们最初从使用各类材料的小部分开始,并继续从中构建一个大型蜂箱。这些细
胞造成图案,产生坚固的结构,将蜂窝的特定部分固定在一块儿。这里,每一个细胞
独立于另外一个细胞,但它也与其余细胞相关。这意味着对一个细胞的损害不会损
害其余细胞,所以,蜜蜂能够在不影响完整蜂箱的状况下重建这些细胞程序员

图 1:微服务的蜂窝表示 – 微服务访谈问题面试
请参考上图。这里,每一个六边形形状表明单独的服务组件。与蜜蜂的工做相似,
每一个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在
蜂箱中同样,每一个服务组件造成一个强大的微服务架构,以提供更好的可扩展性。
此外,敏捷团队能够单独处理每一个服务组件的问题,而对整个应用程序没有影响
或影响最小。
二、微服务架构有哪些优点?

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

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

图 4:设计微服务的最佳实践 – 微服务访谈问题spring
五、微服务架构如何运做?
微服务架构具备如下组件:

图 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。执行此单元测试时,不会启动全部其余控制器和映射。
22。你可否给出关于休息和微服务的要点?
虽然您能够经过多种方式实现微服务,但 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是分布式系统中很是流行的工具,与传统流程相反。
但愿 这些 微服 务面 试问 题可 以帮 助您 进行 微服 务架 构师 访谈 。

最后:
有关于微服务的面试详解就到这里了,有机会在后面的备战春招系列专题里面会给你们分享Mybatis,ZooKeeper ,Dubbo,kafka 等面试专题。全部的专题我也总结到一个pdf文档了restful
整个系列大概有1000道面试真题详解,须要源文件可关注微信公众号:Java程序员汇集地。
