java面试题(Spring Boot、Spring Cloud)

点赞关注+收藏,万分感谢!!

Spring Boot

1、SpringBoot 是什么?为什么我们选择使 SpringBoot开发?

spring boot 是为 spring 服务的,是用来简化新 spring 应用的初始搭建以及开发过程的。

做到开箱即用,迅速上手,让我们关注于业务而非配置。主要原因是:复杂的配置和一个混乱的的依赖管理。

2、为什么要用 spring boot?

配置简单

独立运行

自动装配

无代码生成和 xml 配置

提供应用监控

易上手

提升开发效率

3、spring boot 核心配置文件是什么?

spring boot 核心的两个配置文件:

bootstrap 配置文件是系统级别的,用来加载外部配置,如配置中心的配置信息,也可以用来定义系统不会变化的属性(不会被覆盖).bootstatp 文件的加载先于application文件。

application 配置文件是应用级别的,是当前应用的配置文件,用于 spring boot 项目的自动化配置。

4、spring boot 配置文件有哪几种类型?它们有什么区别?

配置文件有 . properties 格式和 . yml 格式,它们主要的区别是书法风格不同。

. properties 配置如下:

spring.RabbitMQ.port=5672

. yml 配置如下:

spring:

RabbitMQ:

port: 5672

yml 格式不支持 @PropertySource 注解导入。

5、spring boot 有哪些方式可以实现热部署?

模板热部署

在 SpringBoot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容 , 则刷新页面是得不到修改后的页面的 , 因此我们可以 在application.properties 中关闭模版引擎的缓存,如下:

Thymeleaf 的配置:

spring.thymeleaf.cache=false

FreeMarker 的配置:

spring.freemarker.cache=false

Groovy 的配置:

spring.groovy.template.cache=false

Velocity 的配置:

spring.velocity.cache=false

使用调试模式 Debug 实现热部署

此种方式为最简单最快速的一种热部署方式,运行系统时使用 Debug模式,无需装任何插件即可,但是无法对配置文件,方法名称改变,增加类及方法进行热部署,使用范围有限。

spring-boot-devtools

在Spring Boot 项目中添加 spring-boot-devtools依赖即可实现页面

和代码的热部署。如下:

org.springframework.boot

spring-boot-devtools

此种方式的特点是作用范围广,系统的任何变动包括配置文件修改、方法名称变化都能覆盖,但是后遗症也非常明显,它是采用文件变化后重启的策略来实现了,主要是节省了我们手动点击重启的时间,提高了实效性,在体验上回稍差。

spring-boot-devtools 默认关闭了模版缓存,如果使用这种方式不用单独配置关闭模版缓存。

Spring Loaded

此种方式与 Debug 模式类似,适用范围有限,但是不依赖于 Debug 模式启动,通过 Spring Loaded 库文件启动,即可在正常模式下进行实时热部署。此种需要在 run confrgration 中进行配置。

JRebel

Jrebel 是 Java 开发最好的热部署工具,对 Spring Boot 提供了极佳的支持,JRebel 为收费软件,试用期 14 天。可直接通过插件安装。

 6、jpa 和 hibernate 有什么区别?

jpa 全称 Java Persistence API,是 Java 持久化接口规范,hibernate 属于 jpa 的具体实现。

7、运行 SpringBoot 有哪几种方式?

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

2)用 Maven/ Gradle 插件运行

3)直接执行 main 方法运行

8、SpringBoot 自动配置的原理?

Spring Boot 的自动配置是基于 Spring Factories 机制实现的。

Spring Factories 机制是 Spring Boot 中的一种服务发现机制,这种扩展机制与 Java SPI 机制十分相似。

Spring Boot 会自动扫描所有 Jar 包类路径下 META-INF/spring.factories 文件,并读取其中的内容,进行实例化,这种机制也是 Spring Boot Starter 的基础。

@EnableAutoConfiguration 注解用于开启 Spring Boot 的自动配置功能, 它使用 Spring 框架提供的 @Import 注解通过 AutoConfigurationImportSelector类(选择器)给容器中导入自动配置组件。

ps:会自动去 maven 中读取每个 starter 中的spring.factories 文件 该文件里配置了所有需要被创建 spring 容器中的 bean。

使用@SpringBootApplication 注解 可以解决根类或者配置类头上注解过多的问题,一个@SpringBootApplication 相当于@Configuration,@EnableAutoConfiguration 和@ComponentScan 并具有他们的默认属性值。

Spring Cloud

1、什么是 spring cloud?

SpringCloud 是一系列框架的有序集合,它利用 SpringBoot 的开发便利性简化了分布式系统的开发,比如服务发现.服务网关.服务路由.链路追踪等。其设计目的是为了简化 Spring 应用的搭建和开发过程。

该框架遵循“约定大于配置”原则,采用特定的方式进行配置,从而使开发者无需定义大量的 XML 配置。通过这种方式,SpringBoot 致力于在蓬勃发展的快速应用开发领域成为领导者。

SpringCloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring cloud 提供了构建分布式系统所需的“全家桶”。

2、spring cloud 的核心组件有哪些?

Eureka:服务注册于发现。

简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

由两个组件组成:Eureka服务端和Eureka客户端。

Eureka服务端用作服务注册中心。支持集群部署。

Eureka客户端是一个java客户端,用来处理服务注册与发现。

在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。

首先,Feign会根据@FerignClient注解,通过动态代理,创建一个动态代理类。接下来,你只要通过调用接口的方式,就可以构造上面提到的Ribbon调用参数,

这个过程会自动填充。最后,通过构造的Ribbon请求,发起真正的调用,并通过反射组装返回值。

Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。

作用:Ribbon,主要提供客户侧的软件负载均衡算法。

简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。

通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。

作用:断路器,保护系统,控制故障范围。

简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,

如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,

导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

作用:api网关,路由,负载均衡等多种作用

简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。

当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值