SpringBoot,SpringCloud框架面试攻略

我们一般简历上,都说自己熟悉 Spring Boot,SpringCloud 或者说正在学习 Spring Boot,SpringCloud面试官一问时,我们都只停留在简单的使用阶段,很多东西都不清楚,也让面试官对我们大失所望。

所以我就总结了一些这些框架可能会被问到的问题,如下:

1. Spring Boot

(1)什么是 Spring Boot?

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

(2)什么是 Spring Boot?

Spring Boot 优点非常多,如:
独立运行
简化配置
自动配置
无代码生成和XML配置
应用监控
上手容易
...
Spring Boot 集这么多优点于一身,还有理由不使用它呢?

(3)Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。

application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。

使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外 部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密/解密的场景;

(4)Spring Boot 的配置文件有哪几种格式?它们有什么区别?

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

1).properties

app.user.name = javastack

2).yml

app:
user:
name: javastack

(5)Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功
能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描

(6)Spring Boot 需要独立的容器运行吗?

可以不需要,内置了 Tomcat/ Jetty 等容器。

(7)运行 Spring Boot 有哪几种方式?

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

2)用 Maven/ Gradle 插件运行

3)直接执行 main 方法运行

(8)你如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技    
术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-
jpa 启动器依赖就能使用了。

(9)SpringBoot 实现热部署有哪几种方式?

Spring Loaded
Spring-boot-devtools

(10)Spring Boot 可以兼容老 Spring 项目吗,如何做?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件

1. Spring Cloud

(1)什么是Spring Cloud?

springCloud是基于SpringBoot的一整套实现微服务的框架,提供与外部系统的集成。Spring cloud 
跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。

(2)使用Spring Cloud有什么优势?

Spring Cloud是一个集成了众多开源的框架,利用Spring Boot的开发便利性实现了服务治理、服务注册与发现、负
载均衡、数据监控,REST API发布方式等,基本囊括了分布式框架所需要的所有功能。是一套易开放、易部署、易
维护的分布式开发工具包。

(3)SpringCloud-微服务的解决方案(框架)中有哪些技术?

1. Eureka注册中心
2. Ribbon负载均衡器
3. Hystrix熔断器
4. Feign远程调用技术
5. zuul网关
  - 动态路由--只需要在yml中配置即可
  - 权限控制--过滤器
  - 负载均衡

(4)服务注册和发现是什么意思?Spring Cloud如何实现?

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

如图
SpringBoot,SpringCloud框架面试攻略

(5)什么是Hystrix断路器?我们需要它吗?

由于某些原因,employee-consumer公开服务会引发异常。在这种情况下使用Hystrix我们定义了一个回退方法。如 
果在公开服务中发生异常,则回退方法返回一些默认值。

如果firstPage method() 中的异常继续发生,则Hystrix电路将中断,并且员工使用者将一起跳过firtsPage方法,并直
接调用回退方法。 断路器的目的是给第一页方法或第一页方法可能调用的其他方法留出时间,并导致异常恢复。可
能发生的情况是,在负载较小的情况下,导致异常的问题有更好的恢复机会 。

如图:
SpringBoot,SpringCloud框架面试攻略

(6)什么是Ribbon负载均衡器

分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负
载均衡器

如图:
SpringBoot,SpringCloud框架面试攻略

(7)什么是Feign远程调用技术?为什么我们要使用Feign呢?

首先我们的项目使用了SpringCloud技术,而Feign可以和SpringCloud技术无缝整合。并且,你一旦使用了Feign作 
为http客户端,调用远程的http接口就会变得像调用本地方法一样简单

(8)什么是Zuul网关?

如果在整个体系中,每个微服务都自己去管理用户状态,那显然是不可取的,所以一般都是放在服务网关中的。那
么我们就需要在服务网关中统一处理用户登录状态,是否放行用户请求。

(9)SpringBoot和Spring cloud的区别?

1.springboot可以单独使用,它不依赖于springcloud 
而springcloud必然依赖于springboot,属于依赖关系。 
2. Springboot专注于快速方便的开发单个个体服务。 
3. SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
4. 为各个微服务之间提供,配置管理、服务发现、断路器、路由、等集成服务。为各个微服务之间提供,配置管理、服务发现、断路器、路由、等集成服务。