【java面试题-SpringBoot篇-2024】

##java面试题大全

详细面试题-持续更新中-点击跳转

点赞、收藏、加关注
·
·

1、什么是 Spring Boot

SpringBoot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手

2、SpringBoot 与 SpringCloud 区别

  • SpringBoot 专注于快速方便的开发单个服务;Spring Cloud 关注的是多个服务之间的协调管理
  • SpringBoot 可以离开 SpringCloud 独立开发项目,但 SpringCloud 不能够离开 SpringBoot,SpringCloud 依赖于 SpringCloud

3、SpringBoot 有哪些优点

  • 可快速构建独立的 Spring 应用
  • 大量的自动配置,简化开发,方便集成第三方
  • 无需 XML 配置,减少冗余代码 ,开箱即用
  • 直接嵌入Tomcat、Jetty 和 Undertow 服务器:无须部署 WAR 文件
  • 通过依赖启动器简化构建配置:无须准备各种独立的 JAR 文件,只需在构建项目时根据开发场景需求选择对应的依赖启动器 “starter”
  • 提供生产就绪功能:SpringBoot 提供了一些用于生产环境运行时的特性,例如指标、监控检查和外部化配置

4、SpringBoot 的核心注解是哪个?由哪几个注解组成的

核心注解是启动类上面的注解:@SpringBootApplication,主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,提到 @Configuration 就要提到它的搭档 @Bean,使用这两个注解就可以创建一个简单的 Spring 配置类,可以用来替代相应的 XML 配置文件
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如:关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:会自动扫描指定包下的全部标有 @Component 的类,并注册成 Bean,当然包括 @Component 下的子注解 @Service,@Repository,@Controller

5、SpringBoot 支持哪些日志框架?推荐和默认的日志框架是哪个?

  • SpringBoot 支持 Java Util Logging,Log4j2,Logback 作为日志框架
  • 如果使用 Starters 启动器,SpringBoot 将使用 Logback 作为默认日志框架
  • 推荐的日志框架是 Log4j2

6、SpringBoot Starter 的工作原理,自动配置的原理

启动类上 @SpringBootApplication 注解整合了 @EnableAutoConfiguration 注解,该注解上有 @Import({AutoConfigurationImportSelector.class}) 注解,所以会读取 AutoConfigurationImportSelector 类,该类重写了 String[] selectImports 方法,最终会读取每个 starter 下面的 resources/META-INF/spring.factories 文件和 resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(高版本) 文件,然后根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context

7、运行 SpringBoot 有哪几种方式

  • 直接执行 main 方法运行
  • 打包用命令或者放到容器中运行
  • 用 Maven/ Gradle 插件运行

8、开启 SpringBoot 特性有哪几种方式

  • 继承 spring-boot-starter-parent 项目
  • 导入 spring-boot-dependencies 项目依赖

9、SpringBoot 事务的使用?事务失效怎么解决

使用:

  1. 启动类加上 @EnableTransactionManagement 注解,开启事务支持(默认是开启的)
  2. 在使用事务的 public(只有public 支持事务)方法(或者类,相当于该类的所有 public 方法都使用)加上 @Transactional 注解

失效解决:
大部分循环依赖spring自己就可以解决,spring有一个DefaultSingletonBeanRegistry对象,单实例对象注册器。里面有三个Map集合,也叫三级缓存,一级缓存存储完成单实例化的对象,二级缓存存储未完成实例化的对象(防止出现多例),三级缓存用来存储创建该对象的工厂(用来解决代理对象的问题)。但是构造方法注入产生循环依赖就需要自己手动解决,在形参前添加@Lazy注解延迟加载就可以解决

10、Async 异步调用方法

  1. 在启动类加入 @EnableAsync 使异步调用 @Async 注解生效
  2. 在方法上使用 @Async 注解即可实现方法的异步

11、如何在 Spring Boot 启动的时候运行一些特定的代码

  • 实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法
  • 使用 @PostConstruct 注解来在 Spring Bean 初始化后执行特定的代码。当一个 Bean 被实例化并且所有的属性被设置之后,带有 @PostConstruct 注解的方法将会被调用

12、Spring Boot 配置加载顺序

  1. bootstrap.yml:这些配置通常用于 Spring Cloud 等外部配置的加载
  2. bootstrap.properties
  3. application.yml
  4. application.properties
  5. 外部属性文件:通过 spring.config.location 属性来指定外部属性文件的位置
  6. 命令行参数
  7. 配置服务器:如 Nacos 配置中心

13、什么是 YAML?YAML 优点

  • YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果想要在配置文件中添加复杂的属性,YAML 文件采用分层配置数据,更加结构化
  • 优缺点:配置有序、简洁明了。相比 properties 配置文件,YAML 有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置

14、Spring Boot 是否可以使用 XML 配置

Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置

15、什么是 Spring Profiles

在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis 的配置等等。Spring 提供了 profiles 机制实现切换配置文件的功能。Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean,使用 spring.profiles.active 来指定哪个配置文件生效,值是 application-{profileName}.yml

16、Spring Boot 中如何解决跨域问题

原因: 由于浏览器的同源策略

使用 JSONP 解决:

通过 script 标签的 src 属性进行跨域请求,如果服务端要响应内容则首先读取请求参数 callback 的值,callback 是一个回调函数的名称,服务端读取 callback 的值后将响应内容通过调用 callback 函数的方式告诉请求方。如:<script src="http://跨域地址?callback=fun"></script>,响应结果就是 fun(result)。只可以发送 GET 请求

添加响应头解决:

服务端在响应头添加 Access-Control-Allow-Origin: *

后端编码解决:

  • 使用 Spring 提供的 CorsFilter 来实现:在配置类重注入这个 Bean 对象,为其设置允许跨域的地址
  • 通过实现 WebMvcConfigurer 接口然后重写 addCorsMappings 方法解决跨域问题,在参数 registry 上设置允许跨域的地址

通过 nginx 代理跨域:

由于服务端之间没有跨域,浏览器通过 nginx 去访问跨域地址

17、如何使用 Spring Boot 实现全局异常处理

全局异常处理可以用两个注解来实现:@ControllerAdvice + @ExceptionHandler

@Slf4j
@ControllerAdvice
public class GlobalExceptionAdvice {
    @ExceptionHandler({Exception.class})//捕获的全局异常类型
    @ResponseBody
    public Object handleException(HttpServletRequest request, Exception e) throws Exception {
        log.error(e.getMessage(), e);
        // 如果某个自定义异常有@ResponseStatus注解,就继续抛出
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("message", "全局异常处理" + e.getMessage());
        return map;
    }
}

18、常用的 starter maven 依赖项

  • spring-boot-starter-web:嵌入 Tomcat 和 web 开发需要 servlet 与 jsp 支持
  • spring-boot-starter-data-redis:Redis 数据库支持
  • mybatis-spring-boot-starter:第三方的 Mybatis 集成 starter
  • spring-boot-starter-security:用于构建基于Spring Security的安全应用程序
  • spring-boot-starter-test:用于构建基于 JUnit 和 Spring Test 的测试应用程序

19、spring-boot-starter-parent 有什么用

  • 默认配置管理:spring-boot-starter-parent 定义了许多默认的插件配置和依赖管理,包括 Maven 插件、编译器插件、资源插件等。这些默认配置可以帮助开发者避免重复配置,并且符合 Spring Boot 的最佳实践
  • 版本管理:spring-boot-starter-parent 中定义了许多 Spring Boot 和 Spring Framework 的版本信息,包括依赖库的版本、插件的版本等。这样一来,当使用 spring-boot-starter-parent 作为父项目时,就不需要显式地指定这些版本信息,简化了项目的管理和维护
  • 插件管理:spring-boot-starter-parent 中定义了许多常用的 Maven 插件,包括编译插件、打包插件、测试插件等。这些插件的默认配置可以帮助开发者快速构建和管理项目

20、项目中常见的注解

Spring:
在这里插入图片描述
SpringMVC:
在这里插入图片描述
SpringBoot:
在这里插入图片描述

  • 31
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄天灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值