Java SpringBoot微服务面试题

Java SpringBoot微服务面试题

  • 前言
  • 1、什么是 SpringBoot?
  • 2、什么是起步依赖?
  • 3、什么是自动配置?
  • 4、什么是命令行界面?
  • 5、什么是Actuator监控器?
  • 6、SpringBoot 的核心注解有哪些?
  • 7、什么是YAML?
  • 8、Spring Boot 需要独立的容器运行吗?
  • 9、如何使用SpringBoot实现分页和排序?
  • 10、spring boot事件监听器有几种实现方式?
  • 11、SpringBoot事务如何管理?
  • 12、SpringBoot读取配置文件的方式?
  • 13、SpringBoot 支持哪些日志框架?
  • 14、SpringBoot的优势?
  • 15、SprinBoot容器启动流程是怎样的?
  • 16、Spring Boot是如何实现自动装配?
  • 17、Spring Boot是如何启动Tomcat的?
  • 18、如果让你实现一个SpringBoot-starter,你应该怎么做?
  • 19、您对微服务有何了解?
  • 20、微服务之间是如何通讯的?
  • 21、微服务架构有哪些优势?
  • 22、什么是 REST / RESTful 以及它的用途是什么?
  • 23、微服务拆分遵循原则的?
  • 总结


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、什么是 SpringBoot?

SpringBoot是Spring开源框架下的子项目,是Spring的一站式解决方案,它不用我们自己手动的去写一堆xml配置,SpringBoot提供了4个核心组件,分别是:
起步依赖、自动配置、命令行界面、Actuator监控。
在我看来,SpringBoot是约定优于配置这一理念下的产物,所以在很多的地方,都会看到这类的思想。它的目的是简化企业应用程序的配置,它使得开发者只需要关心业务需求。

2、什么是起步依赖?

起步依赖,简单来说就是为了实现某个特定功能,而把它需要的依赖库聚合在一起。
如果开发项目中需要实现该功能,只需要加⼊该功能的起步依赖就行了,不需要考虑这些库的版本冲突 。
比如spring-boot-starter-web,starter-jdbc,starter- aop。

3、什么是自动配置?

简单来说就是自动把第三方组件的Bean配置到SpringIOC容器里面,不需要我们自己再去配置。在SpringBoot应用中,只需要在启动类加上@EnableAutoConfiguration注解,就可以实现自动配置。
底层原理大概是这样的:
当SpringBoot启动的时候,会创建一个SpringApplication类,然后调用SpringFactoriesLoader中的loadFactoryNames方法去加载META-INF/Spring.factories文件,返回一个配置类的列表;
然后再通过@EnableAutoConfiguration注解,它里面导入了一个AutoConfigurationImportSelector类,它重写了ImportSelector接口的selectImports方法,从而实现了把这些配置类的自动配置到IOC容器中。整个流程中还会初始化Spring上下文信息和启动应用监听等等。

4、什么是命令行界面?

命令行界面简称CLI,是用来运行spring命令的。
用于创建和测试springBoot应用程序的。

5、什么是Actuator监控器?

Actuator 是SpringBoot自带的监控组件,它实现了对应用程序运行情况的监控,比如健康状态、Bean加载情况、线程信息、日志信息等 。
Actuator内置了很多的端点,每个端点都可以启用和禁用。

6、SpringBoot 的核心注解有哪些?

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

  • 1、@SpringBootConfiguration注解:包含了@Configuration注解,用在某一个类上,就表示这是一个Spring Boot的配置类,类里面包含@bean注解的方法都会初始化到IOC容器中。
  • 2、@EnableAutoConfiguration注解:打开自动配置的功能,我们也可以关闭某个自动配置的功能,比如关闭数据源自动配置功能;可以使用启动类上的exclude参数进行关闭。
    @SpringBootApplication(exclude=DataSourceAutoConfiguration.class)
  • 3、@ComponentScan注解:扫描@Component、@Controller、@Service等注解的bean,默认会扫描启动类所在的同级包及其子包。

7、什么是YAML?

YAML是一种高可读性的数据序列化语言。它通常用于配置文件。
与XML文件相比,YAML文件就更加结构化,而且不容易混淆。
可以看出YAML具有分层配置数据的特点。

8、Spring Boot 需要独立的容器运行吗?

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

9、如何使用SpringBoot实现分页和排序?

使用SpringBoot实现分页非常简单。使用Spring Data-JPA可以实现分页。

  • 1、添加起步依赖spring-boot-starter-data-jpa
  • 2、启动类添加@EnableJpaAuditing注解
  • 3、实体类添加@EntityListeners(AuditingEntityListener.class)监听注解
  • 4、repository 数据访问层继承JpaRepository类
    public interface UserRepository extends JpaRepository<User, Long> {}
  • 5、接口实现,注入依赖
    @Resource
    private UserRepository userRepository;。

10、spring boot事件监听器有几种实现方式?

  • 1、通过@EventListener注解实现事件监听;
  • 2、将监听器装载入spring容器;
  • 3、在application.properties中配置监听器;
  • 4、手动向ApplicationContext中添加监听器。

11、SpringBoot事务如何管理?

如果项目引入了starter-jdbc起步依赖,在单数据源的情况下不需要我们自己去管理事务,
Spring Boot 会默认使用DataSourceTransactionManager 来管理事务,我们只要在程序的service层加上 @Transactional 注解即可使用。
但是在多数据源的情况下,那么我们要为每个数据源创建一个事务管理器,这里默认使用jdbc的事务管理器,之后在service层加上 @Transactional注解,需要指定value属性为对应的事务管理器名称。
如果是分布式事务管理:

  • 第1种是使用jta-atomikos实现:
    第1步:添加起步依赖spring-boot-starter-jta-atomikos
    第2步:配置多数据库连接信息 application.yml
    第3步:创建配置类,创建多数据源
    第4步:注入jdbcTemplate.execute方法测试
  • 第2种是使用阿里开源的Seata框架。

12、SpringBoot读取配置文件的方式?

  • 方式1:使用注解@Value读取属性配置,用在方法上:@Value(“${server.port}”)
  • 方式2:使用注解@ConfigurationProperties读取属性配置,用着类上,使用此种方式,必须要有成员变量的getter、setter方法。
  • 方式3:使用注解 @PropertySource 和 @Value 来读取属性配置
  • 方式4:使用注解 @PropertySource 和 @ConfigurationProperties 来读取属性配置
  • 方式5:使用环境变量 Environment 读取属性配置。

13、SpringBoot 支持哪些日志框架?

SpringBoot 支持 Java 自带的Logging, Log4j2, Logback 作为日志框架,
SpringBoot 默认使用 Logback 作为日志框架,
但不管是哪种日志框架,都支持将日志信息输出到控制台或者本地文件中

14、SpringBoot的优势?

  • 1.简化配置,可以快速构建项目;
  • 2.内置tomcat服务器,项目可独立运行;
  • 3.约定大于配置,实现自动装配;
  • 4.集成了常用的第三方库的配置。

15、SprinBoot容器启动流程是怎样的?

第一部分:创建SpringApplication对象

  • 1.创建springbootApplication对象
  • 2.获取当前应用的启动类型,默认是servlet;
    1).none:不基于web容器启动
    2).servlet:基于web容器启动
    3).reactive:响应式启动(spring5新特性)
  • 3.读取META-INFO下的spring.factories文件,获取对应的初始化器和监听器装配到集合中(List集合);
  • 4.设置程序运行的主类(main方法所在的类)
    第二部分:调用SpringApplication对象的run方法
  • 5.调用run方法启动,并记录项目启动时间(System.nanoTime()方法);
  • 6.获取并启用监听器(通过循环调用listeners.starting()方法)
  • 7.准备环境变量,将配置文件读取到容器中(支持yml,yaml,xml,properties)
  • 8.打印banner信息,可以自定义(在resources目录下添加一个banner.txt的文件)
  • 9.创建应用程序的上下文(调用createApplicationContext()方法)
  • 10.刷新上下文(refreshContext()方法),实现自动装配和启动tomcat
  • 11.实例化一个异常报告器(只会捕获启动过程中抛出的异常)
  • .通过回调机制告诉springboot容器已经启动成功啦。

16、Spring Boot是如何实现自动装配?

  • 1.⾸先SpringBoot启动类有一个@SpringBootApplication复合注解;
  • 2.它包含了一个@EnableAutoConfiguration复合注解;
  • 3.它又包含了一个@Import注解,导入了一个AutoConfigurationlmportSelector类;
  • 4.通过该类的selectImports()方法去读取需要被自动装配的组件下的spring.factories文件;
  • 5.然后将符合条件(通过@ConditionalOnXXX)的类限定名集合返回给IOC容器,并将这些组件注册为bean。

17、Spring Boot是如何启动Tomcat的?

  • 1.⾸先SpringBoot在启动时会先创建⼀个Spring容器;
  • 2.在创建Spring容器过程中,会利⽤@ConditionalOnClass注解来判断当前classpath中是否存在Tomcat依赖,如果存在则会⽣成⼀个启动Tomcat的Bean
  • 3.Spring容器创建完之后,就会获取启动Tomcat的Bean,然后创建Tomcat对象,并绑定端⼝等,然后启动Tomcat。

18、如果让你实现一个SpringBoot-starter,你应该怎么做?

  • 1.创建一个start项目,名称叫XXX-spring-boot-starter,引入spring-boot-starter依赖;
  • 2.创建一个XXXProperties类,引入@ConfigurationProperties注解表明这是一个配置文件,并指定prefix属性:
    在这里插入图片描述
  • 3.创建一个XXXAutoConfiguration自动配置类,引用定义好的配置文件;在自动配置类中编写我们的实现类:
    在这里插入图片描述
    让starter生效,starter集成应用有两种方式:
    1).被动生效 :通过SpringBoot的SPI的机制来去加载我们的starter:
    我们需要在META-INF下新建一个spring.factories文件,key为org.springframework.boot.autoconfigure.EnableAutoConfiguration,value是我们创建的自动配置类的全限定名:
    在这里插入图片描述
    2).主动生效:需要主动声明启用该starter才生效:
    通过自定义一个@Enable注解,然后通过@Import注解把自动配置类引入进来,使用的时候需要在启动类上面开启这个注解:
    在这里插入图片描述
  • 4.打包:通过mvn install命令构建就可以了(如果需要部署到公司的仓库:maven deploy)
  • 5.新建一个新的SpringBoot项目,引入我们刚写的starter:
    在这里插入图片描述
  • 6.然后在配置文件(application.yml)中配置XXXProperties 的属性信息就可以啦:
    在这里插入图片描述

19、您对微服务有何了解?

微服务架构核心就是将传统的一站式应用,按照业务拆分成一个一个的服务,每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境。

20、微服务之间是如何通讯的?

  • 1、同步通讯:
    dobbo通过 RPC 远程过程调用;Springcloud通过 REST 接口,json调用等。
  • 2、异步通讯:使用消息队列,如:RocketMq、Kafka 等。

21、微服务架构有哪些优势?

  • 1、独立开发:所有微服务都可以根据各自的功能轻松开发
  • 2、独立部署:能够被独立地部署到生产环境
  • 3、故障隔离:即使应用程序的一项服务不起作用,系统仍可继续运行
  • 4、混合技术堆栈:可以使用不同的语言和技术来构建同一应用程序的不同服务

22、什么是 REST / RESTful 以及它的用途是什么?

REST是一种设计API接口的风格,但不是标准,具有高可读性,高可用性。
如果一个架构符合REST的接口风格,我们就称它为RESTful架构,
传统的接口设计,就是过程式的,每个特定的动作有特定的接口。
RESTful接口设计,路径一般就是操作的实体对象复数,有GET(查询)/POST(添加)/PUT(修改)/DELETE(删除)等接口。

23、微服务拆分遵循原则的?

  • 1.水平拆分
    横向拆分,即按照不同的业务功能,拆分成不同的微服务,如天气数据采集、数据存储、天气查询等服务,形成独立的业务领域微服务集群;
  • 2.垂直拆分
    纵向拆分,即把一个业务功能里的不同模块或组件进行拆分。例如,把公共组件拆分成独立的基础设施,下沉到底层,形成相对独立的基础设施层;
  • 3.使用DDD
    一个微服务,应该能反映出某个业务的领域模型。使用DDD,不但可以减少微服务环境中通用语言的复杂性,而且可以帮助团队搞清楚领域的边界,理清上下文边界* 1、同步通讯:

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]狗狗表情识别VOC+YOLO格式3971张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3971 标注数量(xml文件个数)&#xff1a;3971 标注数量(txt文件个数)&#xff1a;3971 标注…

基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

基于java SSM springbootredis网上水果超市商城设计和实现以及文档 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 …

一文读懂什么是 OCR 识别

在数字化时代&#xff0c;信息处理和数据管理是企业运营的重要环节。然而&#xff0c;手工输入信息存在效率低和准确性低的问题&#xff0c;严重影响了企业的工作流程和决策过程。因此&#xff0c;OCR&#xff08;Optical Character Recognition&#xff09;识别技术的应用变得…

C++观察者模式代码实例

文章目录 C观察者模式代码实例一C观察者模式代码实例二 C观察者模式代码实例一 下面是一个简单的C观察者模式的实现示例&#xff0c;这里仅给出核心代码框架&#xff0c;完整的工程应包含对应的头文件声明及必要的#include指令等。 // 观察者接口&#xff08;Observer&#x…

nginx介绍及编译安装

nginx介绍 是一个流行的开源的高性能的HTTP和反向代理服务器&#xff0c;也可以用作邮件代理服务器。它以其高性能、稳定性、丰富的功能集和低资源消耗而闻名 nginx特点 高性能&#xff1a; Nginx以其高效的事件驱动架构而闻名&#xff0c;能够处理大量并发连接而不会消耗过多…

面试官:集群部署时的分布式 Session 如何实现?

欢迎来到百战百胜&#xff01;我们致力于为广大IT从业者、学生和爱好者提供全面、实用的资源和服务。加入我们的聊天群&#xff0c;这里有专业大佬为你提供有价值的建议和指导&#xff01; 微信搜索&#xff1a;IT开DD那点小事 更多访问&#xff1a;www.besthub.tech ​ 面试题…

C++入门05 类与对象

图源&#xff1a;文心一言 听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;类与对象 &#x1…

尚硅谷(SpringCloudAlibaba微服务分布式)学习代码Eureka部分

1.项目结构 2.cloud2024 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

【C++】auto、范围for循环、宏函数和内联函数

auto、范围for、内联函数、宏函数和nullptr 一、auto — 类型推导的魔法&#xff08;C 11)1、auto 是什么&#xff1f;2、工作原理3、优势4、限制和注意事项 二、范围for (C11)1、基本语法2、优势3、工作原理4、注意事项5、C11&#xff1a; 范围 for 循环的扩展&#xff1a; 三…

MCU最小系统电路设计(以STM32F103C8T6为例)

目录 一、何为最小系统&#xff1f; 二、最小系统电路设计 1.电源 &#xff08;1&#xff09;各种名词解释 &#xff08;2&#xff09;为什么会有VDD_1 _2 _3区分&#xff1f; &#xff08;3&#xff09;Mirco USB &#xff08;4&#xff09;5v->3.3v滤波电路 &#…

尚硅谷webpack5笔记2

Loader 原理 loader 概念 帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块。 loader 执行顺序 分类pre: 前置 loadernormal: 普通 loaderinline: 内联 loaderpost: 后置 loader执行顺序4 类 loader 的执行优级为:pre > normal > inline > post 。相…

算法day01_ 27. 移除元素、977.有序数组的平方

推荐阅读 从零开始学数组&#xff1a;深入浅出&#xff0c;带你掌握核心要点 初探二分法 再探二分法 系统的纪录一下刷算法的过程&#xff0c;之前一直断断续续的刷题&#xff0c;半途而废&#xff0c;现在重新开始。话不多说&#xff0c;开冲&#xff01; 27.移除元素 题目 给…

雾锁王国Enshrouded服务器CPU内存配置怎么选择?

雾锁王国/Enshrouded服务器CPU内存配置如何选择&#xff1f;阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置&#xff0c;支持4人玩家畅玩&#xff0c;自带10M公网带宽&#xff0c;1个月90元&#xff0c;3个月271元&#xff0c;幻兽帕鲁服务器申请页面 https://t.aliyun.com…

php基础学习之错误处理(其一)

一&#xff0c;错误处理的概念 错误处理指的是系统(或者用户)在执行某些代码的时候&#xff0c;发现有错误&#xff0c;就会通过错误处理的形式告知程序员&#xff0c;俗称报错 二&#xff0c;错误分类 语法错误&#xff1a;书写的代码不符合 PHP 的语法规范&#xff0c;语法错…

协议-http协议-基础概念01-发展历程-http组成-http是什么-相关的应用-相关的协议

发展历程-http组成-http是什么-相关的应用-相关的协议 参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; 01-HTTP的发展历程 1989 年&#xff0c;任职于欧洲核子研究中心&#xff08;CERN&#xff09;的蒂姆伯纳斯 - 李&#xff08;Tim Ber…

异地文件共享慢如何解决?

如今&#xff0c;随着信息化的迅猛发展&#xff0c;异地文件共享已经成为了许多企业和个人不可或缺的一部分。在实际应用过程中&#xff0c;我们常常会遇到异地文件共享速度缓慢的问题。本文将深入探讨异地文件共享慢的原因&#xff0c;并介绍一种解决方案——天联组网&#xf…

R语言数学建模(一)—— 基础知识

R语言数学建模&#xff08;一&#xff09;—— 基础知识 文章目录 R语言数学建模&#xff08;一&#xff09;—— 基础知识前言一、建模软件1.1 软件建模的基础1.2 模型的分类1.3 不同类型模型间的联系1.4 一些术语1.5 建模如何适应数据分析过程 二、Tidyverse基础2.1 tidyvers…

【mysql】1812 - Tablespace is missing for table `job`.`xxl_job_log`.

打开表提示&#xff1a; 1812 - Tablespace is missing for table job.xxl_job_log. 1812-表“job”缺少表空间xxl_job_log。 尝试删除表重建表 DROP TABLE IF EXISTS job.xxl_job_log; 提示&#xff1a; 1051 - Unknown table job.xxl_job_log 1051-未知表“job.xxl_job_lo…

什么是去中心化云计算?

去中心化云计算是一种新型的云计算方式&#xff0c;它与传统的中心化云计算不同&#xff0c;将数据和计算任务分布到多个节点上&#xff0c;而不是将数据集中存储在中心服务器上。这种云计算方式具有许多优势&#xff0c;包括提高数据安全性、降低运营成本、增强可扩展性和灵活…

【监督学习之模型选择与评估】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱1. 模型选择&#xff1a;2. 模型评估&#xff1a;3. 超参数调优&#xff1a;4. 最终模型选择&#xff1a;实践建议&#xff1a; 详细内容总结 简述概要 了解模型选择与评估 知识图谱 在监督学习中&…