首页 > 其他分享 >10道不得不会的SpringBoot面试题

10道不得不会的SpringBoot面试题

时间:2023-11-27 11:05:16浏览次数:23  
标签:10 面试题 SpringBoot spring 配置 boot session Spring

以下是 SpringBoot 面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答建议收藏,经常温习查阅

来看看你会做几道


  • 1. 为什么要用 spring boot?
  • 2. spring boot 有哪些优点?
  • 3. spring boot 核心配置文件是什么?
  • 4. spring boot的核心注解是什么?由那些注解组成?
  • 5. 说一下springboot的自动装配原理
  • 6. SpringBoot、Spring MVC和Spring有什么区别?
  • 7. SpringBoot启动时都做了什么?
  • 8. SpringBoot 中的监视器是什么?
  • 9. SpringBoot 中的starter到底是什么 ?
  • 10. 微服务中如何实现 session 共享?


本系列《最少必要面试题》

SpringBoot

1. 为什么要用 spring boot?

通过自动配置方式简化 Spring 应用的开发,弱化配置,遵循 约定大于配置的原则 ,使开发者专注于业务开发而无需过多考虑配置相关操作,通过启动类的 main 方法一键启动应用。

2. spring boot 有哪些优点?

  1. 独立运行。内嵌了 servlet,tomat 等,不需要打成 war 包部署到容器中,只需要将 SpringBoot 项目打成jar包就能独立运行。
  2. 简化配置。启动器自动依赖其他组件,简少了 maven 的配置。各种常用组件及配置已经默认配置完成,无需过多干预。
  3. 避免大量的 Maven 导入和各种版本冲突。
  4. 应用监控。Spring Boot 提供一系列端点可以监控服务及应用。

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

springboot 核心的两个配置文件:

  • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的, 比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效,且 bootstrap 里面的属性不能被覆盖;一般来说我们在 SpringCloud Config 或者 Nacos 中会用到它。
  • application (. yml 或者 . properties):用于 springboot 项目的自动化配置

4. spring boot的核心注解是什么?由那些注解组成?

核心注解为:**@SpringBootApplication**

该注解主要由三个注解组成:

@SpringBootConfiguration():代表当前是一个配置类 @EnableAutoConfiguration(): 启动自动配置 @ComponentScan():指定扫描哪些 Spring 注解

5. 说一下springboot的自动装配原理

  1. SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
  2. 查看@EnableAutoConfiguration,其作用是利用AutoConfigurationImportSelector给容器中导入一些组件。
  3. 查看AutoConfigurationImportSelector,其中public String[] selectImports(AnnotationMetadata annotationMetadata)方法内 最终调用getCandidateConfigurations()方法
  4. 查看 getCandidateConfigurations(AnnotationMetadata metadata,     AnnotationAttributes attributes),获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories"
  5. 然后把扫描到的这些文件包装成Properties对象。
  6. 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。

简而言之,整个过程就是将类路径下 "META-INF/spring.factories" 里面配置的所有 EnableAutoConfiguration 的值加入到容器中。

6. SpringBoot、Spring MVC和Spring有什么区别?

Spring:主要用来创建IOC容器,依赖注入,实现程序间的松耦合

SpringMVC: 主要是用来做WEB开发,通过各种组件的协调配合,简化Web应用的开发

SpringBoot: SpringBoot更像是一个管家,当使用到对应功能时,只需要导入指定应用启动器,SpringBoot就能够在底层默认其配置,大大简化了开发所需的繁杂配置

7. SpringBoot启动时都做了什么?

Springboot 的启动,主要创建了配置环境 (environment)、事件监听 (listeners)、应用上下文(applicationContext),并基于以上条件,在容器中开始实例化我们需要的 Bean,至此,通过 SpringBoot 启动的程序已经构造完成。

8. SpringBoot 中的监视器是什么?

SpringBoot Actuator 是 SpringBoot 一项重要功能,其可以帮助我们查看应用的运行状态,对运行时指标进行检查和监控,监视器提供了一组可以直接作为 httpurl 访问的 rest 端点来访问查看指定功能状态。

9. SpringBoot 中的starter到底是什么 ?

首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。

正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

拓展:如何自定义starter?

  1. 创建项目,创建两个模块分别为 spring-boot-starter-*spring-boot-starter-*-autoconfiguration
  2. spring-boot-starter-* pom 引入 spring-boot-starter-*-autoconfiguration
  3. spring-boot-starter-*-autoconfiguration 创建功能方法,创建 *properties类,创建一个配置类将功能方法类添加到 spring 容器,在 resouces 下创建 META-INF/spring.factories 配置     org.springframework.boot.autoconfigure.EnableAutoConfiguration=\    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
  4. 打包安装这两个模块到本地 maven 仓库,即可在其他项目引入 spring-boot-starter-* 注入功能类进行方法调用

10. 微服务中如何实现 session 共享?

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

低谷蓄力


标签:10,面试题,SpringBoot,spring,配置,boot,session,Spring
From: https://blog.51cto.com/wangshiyu/8580542

相关文章

  • springBoot项目启动卡在Root WebApplicationContext: initialization completed... (非
    通过源码启动排查发现,初始化连接池时创建了200次,通过配置文件中将initialSize值改为10,启动时间从1分钟变为了3秒。 ......
  • Week 10
    week10高级篇性能优化减少锁粒度在多线程编程中,如果多个线程需要访问共享资源,通常需要使用锁来保证资源的安全访问。但是,如果锁的粒度太粗,会导致线程之间的竞争过于激烈,从而影响程序的性能。以下是使用减少锁粒度进行性能优化的主要方式:细粒度锁:将共享资源的访问权限限制......
  • springboot 在配置文件中对敏感信息加密
    pom文件引入2.1.0版本对应springboot2.1.4release<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version></dependency>配......
  • Oracle 数据库存储过程调用SpringBoot API 接口方法
    数据库存储过程代码CREATEORREPLACEPROCEDUREFSMT.P_GET_HTTP_RES/*描述:存儲過程掉用HTTP接口作者:Janus日期:2023-11-23*/(M_DOC_NOINVARCHAR2,--??M_DOC_TYPEINVARCHAR2,--?据?型M_STANDBYINVARCHAR2,--?用字段M_EM......
  • springboot打印启动信息
    打印启动信息转载自:www.javaman.cn1springBean实例化流程基本流程:1、Spring容器在进行初始化时,会将xml或者annotation配置的bean的信息封装成一个BeanDefinition对象(每一个bean标签或者@bean注解都封装成一个BeanDefinition对象),所有的BeanDefinition存储到一个名为beanDefinitio......
  • 如何在win11系统桌面实现win10右键
    下载腾讯桌面整理并安装下载地址:腾讯桌面整理注意:下载独立版设置腾讯桌面整理鼠标右键,点击“显示更多选项”点击“实用功能”>>>“设置中心”点击“整理桌面”;取消勾选“穷Windows11风格桌面右键菜单”。完成以上操作即可实现在win11系统实现win10桌面......
  • 面试必刷TOP101:33、二叉树的镜像
    题目题解publicTreeNodeMirror(TreeNodepRoot){if(pRoot==null){returnnull;}TreeNoderoot=newTreeNode(pRoot.val);root.left=Mirror(pRoot.right);root.right=Mirror(pRoot.left);retur......
  • 基于springboot的医护人员排班系统-计算机毕业设计源码+LW文档
    选题的意义、研究内容及方法:(后面附主要参考文献)选题意义目的科学合理地安排医护人员工作,提高医护人员排班效率,在满足各病区个性化的基础上保证医护人员的统一管理。方法采用软件生命周期开发方法,自顶向下,逐步细化。对各个科室医护人员的排班信息进行维护,维护好相关信息后进行......
  • 学习Springboot的第五天
    一、运行复杂代码通过第四天的学习,解决了粗心错误,瞬间信心倍增,终于能赶赶进度了,此时我想创造的心按耐不住了,现实是残酷的。。。。打开一个复杂点的新工程之后,没有报jdk的问题,可是又出现另外的插件问题我又搜了一下,又是settings.xml的问题,还是得配置一段代码此处是settings.xm......
  • 初中英语优秀范文100篇-009 When I Grow up
    PDF格式公众号回复关键字:SHCZFW009记忆树1Growingupmeanstakingonresponsibilityandtakingcareofmyselfwell.翻译成长意味着承担责任并良好照顾自己。简化记忆承担责任句子结构主语:Growingup谓语:means表语:takingonresponsibilityandtakingcareo......