SpringBoot/SpringCloud 面试题

12/28/2021 面试题JavaSpringSpringBootSpringCloud

心灵鸡汤

所谓的人间烟火,就是这样—个可以时而温暖时而冷漠的词语,所谓的人间,就是这样时而光明时而黑暗的时刻

# 一:SpringBoot概念

在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在spring配置文件中创建<bean>,依赖注入即为由spring容器为应用程序的某个对象提供资源,比如引用对象、常量数据等。

SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。

# 二:为什么要用SpringBoot?

  • Spring Boot使编码变简单
  • Spring Boot使配置变简单
  • Spring Boot使部署变简单
  • Spring Boot使监控变简单
  • Spring的不足

# 三:SpringBoot配置文件

# 3.1 SpringBoot 核心配置文件是什么?

Spring Boot提供了两种常用的配置文件:

  • bootstrap
  • application

# 3.2 SpringBoot 配置文件有哪几种类型?它们有什么区别?

Spring Boot提供了两种常用的配置文件,分别是 properties 文件和 yml 文件。相对于properties文件而言,yml文件更年轻,也有很多的坑。可谓成也萧何败萧何,yml通过空格来确定层级关系,使配置文件结构跟清晰,但也会因为微不足道的空格而破坏了层级关系。

# 四:SpringBoot有哪些方式可以实现热部署?

SpringBoot热部署实现有两种方式:

  1. 使用spring loaded

  2. 使用spring-boot-devtools

# 五:JPA 和 hibernate 的区别

  • JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb3规范的一部分
  • Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的超集
  • JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。那么Hibernate是如何实现与JPA的这种关系的呢。Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core
  • hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及Hibernate自身特殊功能的annotation
  • hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能
  • hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范

# 六:什么是 Spring Cloud?

从字面理解,Spring Cloud 就是致力于分布式系统、云服务的框架。

Spring Cloud 是整个 Spring 家族中新的成员,是最近云服务火爆的必然产物。

Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具,例如:

    • 配置管理
    • 服务注册与发现
    • 断路器
    • 智能路由
    • 服务间调用
    • 负载均衡
    • 微代理
    • 控制总线
    • 一次性令牌
    • 全局锁
    • 领导选举
    • 分布式会话
    • 集群状态
    • 分布式消息
    • ……

使用 Spring Cloud 开发人员可以开箱即用的实现这些模式的服务和应用程序。这些服务可以任何环境下运行,包括分布式环境,也包括开发人员自己的笔记本电脑以及各种托管平台。

# 七:Spring Cloud 断路器作用

在Spring Cloud中使用了Hystrix 来实现断路器的功能,断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决,如果问题似乎已经得到纠正,应用程序可以尝试调用操作

断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态

# 八:自动装配

springBoot 自动装配原理?

自动装配

  1. 容器在启动的时候会调用 EnableAutoConfigurationImportSelector.classselectImports 方法**「获取一个全面的常用 BeanConfiguration 列表」**

  2. 之后会读取 spring-boot-autoconfigure.jar 下面的 spring.factories「获取到所有的 Spring 相关的 Bean 的全限定名 ClassName」

  3. 之后继续**「调用 filter 来一一筛选」**,过滤掉一些我们不需要不符合条件的 Bean

  4. 最后把符合条件的 BeanConfiguration 注入默认的 EnableConfigurationPropertie 类里面的属性值,并且**「注入到 IOC 环境当中」**

# 九:ORM 框架

对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射

# 十:文章来源

最后更新: 2/21/2022, 8:10:09 PM