微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,每种应用程序都在其自己的进程中运行。它们之间通过轻量级机制(通常是HTTP资源的API)进行通信(也可以采用消息队列来通信,如 RoocketMQ,Kafaka 等),可以采用不同的编程语言,使用不同的存储技术,自动化部署(如 Jenkins)减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。所以通过自动部署机制进行独立部署,使这些服务的集中化管理已经是少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术。例如 Eureka,Zookeeper 等都是比较常见的服务集中化管理框架。
接下来再给大家说一说一些大厂在面试这块的一些关于微服务的面试题。
一、什么是Spring Cloud?
在微服务中,SpringCloud是一个提供与外部系统集成的系统。它是一个敏捷的框架,可以短平快构建应用程序。与有限数量的数据处理相关联,它在微服务体系结构中起着非常重要的作用。
以下为 Spring Cloud 的核心特性:
- 版本化/分布式配置。
- 服务注册和发现。
- 服务和服务之间的调用。
- 路由。
- 断路器和负载平衡。
- 分布式消息传递。
二、什么是Spring Boot?
Spring boot是微服务面试问题的主要话题。
随着新功能的加入,Spring变得越来越复杂。无论何时启动新项目,都必须添加新的构建路径或Maven依赖项。简而言之,你需要从头开始做每件事。Spring Boot是一种帮助您避免所有代码配置的解决方案。
三、如何覆盖Spring Boot项目的默认属性?
这可以通过在application.properties文件中指定属性来完成。
例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来完成。
- 对于后缀 - spring.mvc.view.suffix: .jsp
- 对于前缀 - spring.mvc.view.prefix: /WEB-INF/
四、Actuator在Spring Boot中的作用
它是重要的功能之一,可帮助您访问在生产环境中运行的应用程序的当前状态。有多个指标可用于检查当前状态。它们还为RESTful Web服务提供端点,可以简单地用于检查不同的度量标准。
五、如何在Spring Boot应用程序中实现Spring安全性?
实施需要少的配置。您需要做的就是spring-boot-starter-security在pom.xml文件中添加starter。您还需要创建一个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();
}
}
六、Spring Boot支持哪些嵌入式容器?
无论何时创建Java应用程序,都可以通过两种方法进行部署:
使用外部的应用程序容器。
将容器嵌入jar文件中。
Spring Boot包含Jetty,Tomcat和Undertow服务器,所有服务器都是嵌入式的。
Jetty - 用于大量项目,Eclipse Jetty可以嵌入到框架,应用程序服务器,工具和集群中。
Tomcat - Apache Tomcat是一个开源JavaServer Pages实现,可以很好地与嵌入式系统配合使用。
Undertow - 一个灵活而突出的Web服务器,它使用小型单一处理程序来开发Web服务器。
七、微服务的端到端测试意味着什么?
端到端测试 验证工作流中的所有流程,以检查一切是否按预期工作。它还确保系统以统一的方式工作,从而满足业务需求。
八、为什么要选择微服务架构?
这是一个非常常见的微服务面试问题,你应该准备好了!微服务架构提供了许多优点。这里有几个:
- 微服务可以轻松适应其他框架或技术。
- 单个进程的失败不会影响整个系统。
- 为大企业和小型团队提供支持。
- 可以在相对较短的时间内独立部署。
九丶微服务架构有哪些优势?
- 独立开发 – 所有微服务都可以根据各自的功能轻松开发
- 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们
- 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行
- 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务
- 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起
十丶微服务有哪些特点?
- 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展
- 组件化 – 微服务被视为可以轻松更换和升级的独立组件
- 业务能力 – 微服务非常简单,专注于单一功能
- 自治 – 开发人员和团队可以彼此独立工作,从而提高速度
- 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件
- 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品
- 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择有用的工具来解决他们的问题
- 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃
十一丶微服务架构如何运作?
微服务架构具有以下组件:
微服务面试问题
- 客户端 – 来自不同设备的不同用户发送请求。
- 身份提供商 – 验证用户或客户身份并颁发安全令牌。
- API网关 – 处理客户端请求。
- 静态内容 – 容纳系统的所有内容。
- 管理 – 在节点上平衡服务并识别故障。
- 服务发现 – 查找微服务之间通信路径的指南。
- 内容交付网络 – 代理服务器及其数据中心的分布式网络。
- 远程服务 – 启用驻留在IT设备网络上的远程访问信息。
十二丶谈一下领域驱动设计
主要关注核心领域逻辑。基于领域的模型检测复杂设计。这涉及与公司层面领域方面的专家定期合作,以解决与领域相关的问题并改进应用程序的模型。在回答这个微服务面试问题时,您还需要提及DDD的核心基础知识。他们是:
- DDD主要关注领域逻辑和领域本身。
- 复杂的设计完全基于领域的模型。
- 为了改进模型的设计并解决任何新出现的问题,DDD不断与公司领域方面的专家合作。
为什么需要域驱动设计(DDD)?
什么是无所不在的语言?
什么是REST / RESTful以及它的用途是什么?
你对Spring Boot有什么了解?
什么是Spring引导的执行器?
Spring Cloud解决了哪些问题?
在Spring MVC应用程序中使用WebMvcTest注释有什么用处?
你能否给出关于休息和微服务的要点?
您对Distributed Transaction有何了解?
什么是有界上下文?
什么是双因素身份验证?
双因素身份验证的凭据类型有哪些?
什么是Oauth?
访问RESTful微服务的方法是什么?
微服务测试的主要障碍是什么?
过渡到微服务时的常见错误
您将如何在微服务上执行安全测试?