SpringBoot+SpringCloud面试总结都在这里
今天,我先说说目前最火最流行的SpringBoot、SpringCloud面试相关的知识,以便支持大家学习。
大家应该都知道,SpringBoot是目前最流行的微服务框架,SpringCloud也是目前最流行微服务治理框架。那大家对这两个框架到底知道多少呢?下面是我整理的内容。
微服务
1,什么是微服务?
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相协调,最终对外提供服务。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。从技术维度来说:微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的独立服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够单独启动或销毁。
2、微服务之间是如何通信?
第一种:远程过程调用,即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自动依赖与版本控制
-大量的自动配置,简化开发,也可修改默认值
-准生产环境的运行应用监控
-与云计算的天然集成
3、Spring Boot 的配置文件有哪几种格式?
***.properties 和 ***.yml,它们的区别主要是书写格式不同。.yml是一种人类可读的数据序列化语言。properties 是属性配置文件;与属性文件相比,如果我们想要在配置文件中添加复杂的属性,yml文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。.yml 格式不支持 @PropertySource 注解导入配置
4、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.ymlapplication-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开发分布式微服务时,我们面临以下问题
1、与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
2、服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
3、冗余-分布式系统中的冗余问题。
4、负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
5、性能-问题 由于各种运营开销导致的性能问题。
6、部署复杂性-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为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
10、分布式配置中心能干嘛?
1),集中管理配置文件不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
2),运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
3),当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴
下期预期:SpringBoot+SpringCloud微服务实战系列。
想获取更多的面试题或获取SpringCloud和Dubbo实战项目,请扫码关注公众号查看