Spring boot 面试题

本文深入探讨SpringBoot的简化配置特性,列举其诸多优势,如独立运行、简化配置、自动配置及简易监控,并介绍核心配置文件及其应用。同时,文章详解多环境配置策略,以及如何保护SpringBoot应用的安全。

又快到了金三银四的时间了,自己整理一些面试题,希望对大家有帮助。

一、什么是Spring Boot?

简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

二、Spring Boot 优点有哪些?

  1. 部署简单、独立运行(不需要预部署应用服务器,通过默认内嵌tomcat降低对运行环境的基本要求)
  2. 简化配置(基于properties/xml 文件配置转换成予以更为强大的yml文件)
  3. 自动配置(对常用的功能组件提供了默认的starter依赖来简化Maven配置)
  4. 监控更简单(基于spring-boot-actuator组件,通过restful接口获取Jvm性能指标、线程状态等运行信息)

三、核心配置文件有哪些?区别是什么?

Spring Boot 核心配置文件application和bootstrap

application 主要用于Spring Boot项目的配置。

bootstap:使用Spring Cloud Config 配置中心时,需要在bootstap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;例如eurka注册中心等;

四、Spring Boot 配置文件有几种格式?

.properties和.yml,区别主要是书写格式不一样,properties文件都需要写全,yml前面相同的可以不写,一层对应一层就好了。

1.properties

     server: port: 8086

2.yml

     server:
          port: 8086

yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的。

官方给的很多demo,都是用yml文件配置的。

注意点:

1,原有的key,例如spring.jpa.properties.hibernate.dialect,按“.”分割,都变成树状的配置

2,key后面的冒号,后面一定要跟一个空格

3, application.properties优先级比application.yml高

五、Spring Boot怎么读取配置?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量,

六、SpringBoot 支持哪些日志框架? 推荐和默认的日志框架是什么?

    支持Logging,Log4j2,Logback作为日志框架,如果使用Starters启动器,Spring Boot将使用LogBack作为默认日志框架

七、如何定义多套不同环境配置?

       提供多套配置文件,例如:

基于properties:

application-dev.properties

application-test.properties

           application-prod.properties    

基于yml:

server:
  port: 8080

my:
  name: demo

spring:
  profiles:
    active: dev

---
#development environment
spring:
  profiles: dev

server:
  port: 8160

my:
  name: ricky

---
#test environment
spring:
  profiles: test

server:
  port: 8180

my:
  name: test

---
#production environment
spring:
  profiles: prod

server:
  port: 8190

my:
  name: prod

指定环境启动

   1.jar运行方式

    java -jar xx.jar --spring.profiles.active=prod

 2.插件启动方式

     spring-boot:run -Drun.profiles=prod

八、保护Spring Boot应用有哪些方法?

            生产环境使用https

 启用csrf保护

使用内容安全策略防止Xss攻击

待续.....

 

 

### Spring Boot 面试题及答案 #### 1. 什么是 Spring BootSpring BootSpring 开源组织下的子项目,是 Spring 组件的一站式解决方案。它简化了 Spring 应用程序的初始化和开发过程,通过“约定大于配置”的原则,减少了手动配置的繁琐工作,使开发者能够更快速地构建独立、可运行的、生产级别的 Spring 应用程序[^1]。 #### 2. 什么是 Spring Boot 的自动配置? Spring Boot 的自动配置是其核心特性之一。它能够根据类路径上的依赖自动配置应用程序和框架所需的基本配置。例如,如果类路径上有数据库驱动程序,Spring Boot 会自动配置一个数据源。这种机制极大地简化了开发者的配置工作[^2]。 #### 3. 什么是 Spring Boot Starter? Spring Boot Starter 是一种特殊的依赖管理方式,它提供了一种快速集成 Spring Boot 项目所需依赖的机制。通过引入 Starter,开发者可以避免手动管理多个依赖及其版本的问题。例如,`spring-boot-starter-web` 包含了构建 Web 应用所需的所有依赖,如 Spring MVC、Tomcat 等[^2]。 #### 4. Spring Boot 的核心特性有哪些? Spring Boot 的核心特性包括: - **自动配置**:能够自动配置大部分常用的配置,如数据源、消息队列等,以便开发者能够快速地搭建应用程序[^3]。 - **简化 Maven 配置**:提供了一个简单的 Maven 插件,可以快速创建一个新的 Spring Boot 项目。 - **命令行界面**:提供了命令行界面,可以快速生成一些基础的代码和配置[^3]。 - **Actuator**:这是一个用于监控和管理 Spring Boot 应用的子项目,它可以提供很多有用的功能,如健康检查、指标收集等[^3]。 #### 5. 什么是 Spring Boot Actuator? Spring Boot Actuator 是 Spring Boot 提供的一个子项目,用于监控和管理应用程序。它提供了一系列的端点(Endpoint),可以用来查看应用程序的健康状态、内存使用情况、线程信息等。这些端点可以通过 HTTP 或 JMX 访问,非常适合用于生产环境中的应用监控。 #### 6. 如何在 Spring Boot 中启用 Actuator? 要在 Spring Boot 中启用 Actuator,只需在项目的 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` 添加依赖后,Spring Boot 会自动启用 Actuator 的默认端点。可以通过访问 `/actuator/health` 来查看应用的健康状态[^3]。 #### 7. Spring Boot 如何简化 Maven 配置? Spring Boot 提供了一个简单的 Maven 插件 `spring-boot-maven-plugin`,可以用于快速创建和构建 Spring Boot 项目。该插件支持打包可执行的 JAR 文件,并提供了一些便捷的配置选项,如指定主类、打包依赖等。通过这种方式,开发者可以轻松地构建出一个可以直接运行的 Spring Boot 应用程序。 #### 8. 什么是 Spring Boot 的“约定大于配置”原则? “约定大于配置”是 Spring Boot 的核心设计原则之一。它通过预设的默认配置和合理的约定,减少了开发者需要手动配置的内容。例如,默认情况下,Spring Boot 会自动扫描项目中的组件(如 `@Component`、`@Service` 等),并自动配置数据源、Web 服务器等。这种设计使得开发者可以专注于业务逻辑的实现,而是繁琐的配置工作。 #### 9. 如何在 Spring Boot 中自定义配置? 在 Spring Boot 中,可以通过 `application.properties` 或 `application.yml` 文件来自定义配置。例如,可以通过以下方式修改服务器的端口号: ```properties server.port=8081 ``` 或者使用 YAML 格式: ```yaml server: port: 8081 ``` 此外,还可以通过 `@ConfigurationProperties` 注解将配置文件中的属性映射到 Java 对象中,从而更方便地管理和使用配置信息。 #### 10. 如何在 Spring Boot 中禁用自动配置? 如果需要禁用某些自动配置,可以在主类或配置类上使用 `@EnableAutoConfiguration` 注解,并通过 `exclude` 属性指定要排除的自动配置类。例如: ```java @SpringBootApplication @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 通过这种方式,可以灵活地控制 Spring Boot 的自动配置行为,满足特定的需求。 #### 11. 什么是 Spring Boot CLI? Spring Boot CLI(Command Line Interface)是一个命令行工具,允许开发者通过简单的命令快速生成 Spring Boot 项目的基础代码和配置。CLI 支持多种语言,如 Groovy,可以用于快速原型开发。例如,可以通过以下命令生成一个简单的 Web 应用: ```bash spring init --dependencies=web my-project ``` CLI 工具非常适合用于快速启动项目,尤其是在没有 IDE 的情况下[^3]。 #### 12. 如何在 Spring Boot 中实现多环境配置? Spring Boot 支持多环境配置,可以通过 `application-{profile}.properties` 或 `application-{profile}.yml` 文件来实现。例如,可以创建 `application-dev.properties` 和 `application-prod.properties` 文件,分别用于开发环境和生产环境。在运行应用时,可以通过设置 `spring.profiles.active` 属性来指定当前使用的环境: ```properties spring.profiles.active=dev ``` 这种方式使得应用程序可以在同环境中使用同的配置,提高了灵活性和可维护性。 #### 13. 如何在 Spring Boot 中实现热部署? Spring Boot 提供了热部署的支持,可以通过 `spring-boot-devtools` 模块实现。只需在项目的 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> ``` 添加依赖后,Spring Boot 会在开发模式下自动重启应用,当代码发生变化时,无需手动重启服务器。此外,`spring-boot-devtools` 还支持 LiveReload,可以在浏览器中自动刷新页面。 #### 14. 如何在 Spring Boot 中实现日志管理? Spring Boot 支持多种日志框架,如 Logback、Log4j2 等。默认情况下,Spring Boot 使用 Logback 作为日志框架。可以通过 `application.properties` 或 `application.yml` 文件配置日志级别和输出格式。例如: ```properties logging.level.org.springframework=DEBUG logging.file.name=app.log logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n ``` 此外,还可以通过自定义 `logback-spring.xml` 文件来实现更复杂的日志配置。 #### 15. 如何在 Spring Boot 中实现国际化? Spring Boot 支持国际化(i18n),可以通过 `MessageSource` 接口实现多语言支持。首先,需要在 `resources` 目录下创建多个消息属性文件,如 `messages_en.properties` 和 `messages_zh.properties`。然后,可以通过 `@EnableWebMvc` 注解启用国际化支持,并通过 `LocaleResolver` 配置语言解析器。例如: ```java @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public LocaleResolver localeResolver() { return new SessionLocaleResolver(); } @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; } } ``` 通过这种方式,应用程序可以根据用户的语言设置显示同的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值