转载

2019最热微服务面试题(上)

Nginx的一项调查显示,目前有36%的企业正在使用微服务,而另外26%的企业正在研究如何实现微服务。 因此,现在可能是开始从事微服务开发的好时机。 以下是一些最常见的微服务面试题。

1. 什么是Spring Cloud?

Spring Cloud在微服务中是一个提供与外部系统集成的系统。 这是一个可用于快速构建应用程序的框架。 它能够处理集群中大量的数据交互,从而在微服务体系结构中起着非常重要的作用。

对于典型案例,Spring Cloud提供了开箱即用的体验以及一系列扩展功能:

  • 版本管理和分布式配置
  • 服务注册、发现
  • 服务之间互相调用
  • 路由
  • 断路器和负载平衡。
  • 集群状态和集群选举
  • 全局锁和分布式消息

2. 什么是Spring Boot?

Spring Boot 是以微服务为主题的面试中一个主要关注点。

随着不断加入新的功能点,Spring变得越来越复杂。每当你创建一个新的项目,你必须添加新的构建路径或Maven依赖。简而言之,你将需要从头开始做所有的事。Spring Boot则可以帮助你避免所有的代码配置。

3. 如何覆盖Spring Boot的默认配置?

这可以通过在application.properties文件中指定属性来实现。

例如,在Spring MVC应用程序中,你必须指定视图文件的后缀和前缀。这可以通过在application.properties文件中使用以下的属性来完成。

对于后缀 - spring.mvc.view.suffix: .jsp
对于前缀 - spring.mvc.view.prefix: /WEB-INF/

4. Spring Boot Actuator是做什么用的?

它是Spring Boot提供的重要功能之一。它可以帮助开发者检查在生产环境运行的应用程序的状态,其中包含多个指标可用于检查程序当前的状态。它还提供RESTful的接口,可以用于检查不同的指标。

5. 如何在Spring Boot应用程序使用Spring Security?

使用Spring Security几乎不需要配置。你需要做的就是在 pom.xml 文件中添加 spring-boot-starter-security 。你还需要创建一个Spring配置类,在该类中覆盖一些必要的方法以扩展 WebSecurityConfigurerAdapter 类,实现应用程序的安全性。以下是一些示例代码:

package com.gkatzioura.security.securityendpoints.config;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {    

@Override    

protected void configure(HttpSecurity http) throws Exception {        

    http.authorizeRequests().antMatchers("/welcome").permitAll()            

        .anyRequest().authenticated()            

        .and()            

        .formLogin()            

        .permitAll()            

        .and()            

        .logout()            

        .permitAll();    

}

}

6. Spring Boot支持哪些内嵌的应用容器?

每当你在开发Java应用程序时,都可以通过两种方法进行部署:

  • 使用外部的应用容器
  • 将容器嵌入jar文件中

Spring Boot包含Jetty,Tomcat和Undertow服务器,所有这些应用容器都是嵌入式的,

  • Jetty - 在众多项目中广泛使用,Eclipse Jetty能够被嵌入框架,应用程序服务器,工具和集群中
  • Tomcat - Apache Tomcat是一种开源JSP实现,可与嵌入式系统很好地配合使用
  • Undertow - 灵活而卓越的Web服务器,它通过使用一系列简单的小型Handler来构建一个复杂的Web服务器

7. 什么是微服务的端对端测试 (End-To-End Testing) ?

端到端测试 验证工作流中的所有流程,以检查一切是否按预期进行。它还可以确保系统以统一的方式工作,从而满足业务的需求。

8. 什么是语义监控 (Semantic Monitoring)?

它结合了对整个应用程序的监视以及自动化测试。语义监控的主要好处是它能够找出对业务更有利的因素。

语义监视与服务层监视一起从业务的角度实现了对微服务的监视。一旦检测到问题,便可以更快地进行隔离和 错误分类 ,从而减少修复问题所需的时间。它对服务层和事务层进行分类,以找出受可用性或性能问题影响的事务。

9. 如何设置服务发现?

有多种方法可以用来设置服务发现。我推荐Netflix的Eureka,这是我认为最有效的。接入的过程非常简单,不需要对应用程序做很大的改动。另外,它支持多种类型的Web应用程序。

Eureka配置分成两个步骤,客户端配置和服务端配置。

使用配置文件可以轻松完成客户端的设置。Eureka会在classpath中搜索一个叫做 eureka-client.properties 的文件。它还能根据配置文件中指定的环境进行搜索。

在进行服务端配置之前,你必须首先配置客户端。在完成配置以后,服务器将启动用于查找其他服务器的客户端。默认情况下,Eureka服务器使用客户端配置来查找对端服务器。

10. 你为什么选择微服务架构?

这是一个非常常见的微服务面试问题,你应该做好准备! 微服务架构有许多优点,这里列出一些,

微服务可以轻松适配其他框架或技术

单点故障不会影响整个系统

不仅适合大型企业,同时也合适小型团队

每个服务可以独立部署,并且部署时间相对更少

11. 在微服务中为什么你需要服务报告和控制面板?

服务报表和控制面板主要用于监视和维护微服务。有多种工具可以帮助实现这个目标。 服务报告 和控制面板可用于:

  • 找出微服务公开的资源
  • 找出组件发生变更时受影响的服务
  • 提供查看文档的入口
  • 查看部署的组件版本
  • 检测组件的合规性和成熟度

12. 为什么大家对使用微服务犹豫不决?

我发现许多开发者对此问题感到困惑。毕竟,在面试微服务架构师角色时会被问到这个问题,因此承认其缺点可能会有些棘手。这里有一些比较好的答案:

  • 需要大量投资 - 微服务需要大量协作。由于各个团队之间互相独立的,为此他们需要始终能够保持良好的同步
  • 需要大量的基础设置建设 - 由于系统是分布式的,架构涉及很多不同的部分
  • 需要做超额的规划来处理运营开销 - 如果你打算使用微服务架构,则需要准备好运营管理的开销
  • 依赖于特定的人才队伍 - 需要熟练的、专业的工程师来支持异构分布的微服务

13. PACT是如何工作的?

PACT是一个开源工具。它有助于测试消费者(consumer)与服务提供者(service provider)之间的交互。然而消费者端的测试可以与服务提供者独立,消费者仅需关注自己调用的服务的可用性,在集群中的其他服务可以自由做出变更。消费者服务的开发者首先编写测试用例,其中定义了与服务提供者的交互方式,我们称为合同(contract)或在PACT中称为pact。合同包括服务提供者的状态,请求体和预期的响应。基于此,PACT对需要执行的测试创建相应的Stub。输出存储在JSON文件中。

14. 定义领域驱动设计

领域驱动设计的主要重点是核心领域逻辑。这涉及与领域专家的定期协作,以解决与该领域有关的问题并改善应用程序的模型。在回答这个微服务面试问题时,你还需要提及DDD的核心基础知识:

  • DDD主要关注领域逻辑和领域本身
  • 复杂的设计完全基于域的模型
  • 为了改进模型的设计并解决任何新出现的问题,DDD要求与领域专家持续的合作。

译自 https://dzone.com/articles/top ... -2019

原文  http://dockone.io/article/9871
正文到此结束
Loading...