SpringBoot+SpringCloud面试总结都在这里

今天,我先说说目前最火最流行的SpringBoot、SpringCloud面试相关的知识,以便支持你们学习。面试

你们应该都知道,SpringBoot是目前最流行的微服务框架,SpringCloud也是目前最流行微服务治理框架。那你们对这两个框架到底知道多少呢?下面是我整理的内容。spring

微服务安全

1,什么是微服务?服务器

微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分红一组小的服务,每一个服务运行在其独立的本身的进程中,服务之间互相协调、互相协调,最终对外提供服务。服务之间采用轻量级的通讯机制互相沟通(一般是基于HTTP的RESTful API)。每一个服务都围绕着具体业务进行构建,而且可以被独立地部署到生产环境、类生产环境等。另外,应尽可能避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,能够有一个很是轻量级的集中式管理来协调这些服务,可使用不一样的语言来编写服务,也可使用不一样的数据存储。网络

从技术维度来讲:架构

微服务化的核心就是将传统的一站式应用,根据业务拆分红一个一个的独立服务,完全地去耦合,每个微服务提供单个业务功能的服务,一个服务作一件事,从技术角度看就是一种小而独立的处理过程,相似进程概念,可以单独启动或销毁。并发

二、微服务之间是如何通讯?app

第一种:远程过程调用,即RPC(Remote Procedure Invocation)负载均衡

直接经过远程过程调用来访问别的service,如:REST、Apache。框架

第二种:消息

使用异步消息来作服务间通讯。服务间经过消息管道来交换消息,从而通讯。如:Apache Kafka、RabbitMQ

SpringBoot

1,什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各类启动器,开发者能快速上手。

2,Spring Boot有哪些优势?

-快速建立独立运行的spring项目与主流框架集成 
-使用嵌入式的servlet容器,应用无需打包成war包 
-starters自动依赖与版本控制 
-大量的自动配置,简化开发,也可修改默认值 
-准生产环境的运行应用监控 
-与云计算的自然集成

三、Spring Boot 的配置文件有哪几种格式?

***.properties 和 ***.yml,它们的区别主要是书写格式不一样。

.yml是一种人类可读的数据序列化语言。

properties 是属性配置文件;

与属性文件相比,若是咱们想要在配置文件中添加复杂的属性,yml文件就更加结构化,并且更少混淆。能够看出YAML具备分层配置数据。

.yml 格式不支持 @PropertySource 注解导入配置

四、Spring Boot 的核心注解是哪一个?它主要由哪几个注解组成的?

启动类注解是@SpringBootApplication,它也是 Spring Boot 的核心注解 主要组合包含了如下 3 个注解:
1,@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
2,@EnableAutoConfiguration:打开自动配置的功能,也能够关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
3,@ComponentScan:Spring组件扫描。

5,运行 Spring Boot 有哪几种方式?

1),打包用命令或者放到容器中运行

2),用 Maven/ Gradle 插件运行

3),直接执行 main 方法运行

6,Spring Boot 支持的日志框架?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 做为日志框架,若是你使用 Starters 启动器,Spring Boot 将使用 Logback 做为默认日志框架。

7,SpringBoot 实现热部署有哪几种方式?

主要有两种方式:

  • Spring Loaded

  • Spring-boot-devtools

8,Spring Boot 如何配置多环境?

提供多套配置文件:

applcation.yml
application-dev.yml
application-test.yml
application-pro.yml
经过改变applcation里的profiles.active值来加载对应的环境。
spring:
  profiles:
    active: dev

SpringCloud

1,什么是SpringCloud?

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

2,SpringCloud有什么优点?

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

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

二、服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,而后可以查找并链接到该目录中的服务。

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

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

五、性能-问题 因为各类运营开销致使的性能问题。

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

3,SpringCloud如何实现服务的注册和发现?

服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka)

这一过程是Springcloud自动实现 只须要在main方法添加@EnableDisscoveryClient  同一个服务修改端口就能够启动多个实例

调用方法:传递服务名称经过注册中心获取全部的可用实例 经过负载均衡策略调用(ribbon和feign)对应的服务

4,做为服务注册中心,Eureka比Zookeeper好在哪里?

著名的CAP理论指出,一个分布式系统不可能同时知足C(一致性)、A(可用性)和P(分区容错性)。因为分区容错性P在是分布式系统中必需要保证的,所以咱们只能在A和C之间进行权衡。

所以,Zookeeper 保证的是CP, Eureka 则是AP。

5,什么是ribbon和feign,他们的区别?

SpringCloud的Netflix中提供了两个组件实现软负载均衡调用:ribbon 和 feign。 

Ribbon和Feign都是用于调用其余服务的,不过方式不一样

Ribbon使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法

Feign使用@FeignClient("指定服务名")调用提供方提供对外接口;

Ribbon和Feign的区别:

1),启动类使用的注解不一样,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

2),服务的指定位置不一样,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

3),调用方式不一样,Ribbon须要本身构建http请求,模拟http请求而后使用RestTemplate发送给其余服务,步骤至关繁琐。

Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将须要调用的其余服务的方法定义成抽象方法便可

6,什么是服务熔断?什么是服务降级?

服务直接的调用,好比在高并发状况下出现进程阻塞,致使当前线程不可用,慢慢的所有线程阻塞,致使服务器雪崩。

服务熔断:至关于保险丝,出现某个异常,直接熔断整个服务,而不是一直等到服务超时。经过维护一个本身的线程池,当线程到达阈值的时候就启动服务降级,若是其余请求继续访问就直接返回fallback的默认值。

7,什么是Hystrix(断路器)?它如何实现容错? 

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

在分布式系统里,许多依赖不可避免的会调用失败,好比超时、异常等, Hystrix可以保证在一个依赖出问题的状况下,不会致使总体服务失败,避免级联故障,以提升分布式系统的弹性。

8,什么是 zuul路由网关?

Zuul 包含了对请求的路由和过滤两个最主要的功能:

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中得到其余微服务的消息,也即之后的访问微服务都是经过Zuul跳转后得到。

注意:Zuul服务最终仍是会注册进Eureka

提供=代理+路由+过滤 三大功能

9,什么是SpringCloud Config分布式配置中心?

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不一样微服务应用的全部环境提供了一个中心化的外部配置。

十、分布式配置中心能干吗?

1),集中管理配置文件不一样环境不一样配置,动态化的配置更新,分环境部署好比dev/test/prod/beta/release

2),运行期间动态调整配置,再也不须要在每一个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置本身的信息

3),当配置发生变更时,服务不须要重启便可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴

扫码关注公众号,可获取学习资料和实战项目源码