Spring Boot面试题及答案

1. Spring Boot概念

Spring的一键式解决方案,能够简化搭建Spring项目的过程,省去了繁杂的配置过程,对开发者更友好。

2. Spring Boot有哪些优点

(1) 能够独立运行:内置了servlet容器

(2) 配置简单:搭建项目不再需要繁琐的配置

(3) 自动配置:根据当前类路径下的类和jar包自动配置bean

(4) 无代码生成和XML配置:在配置过程中没有代码生成,也不需要XML文件,完全通过注解实现

(5) 应用监控:提供监控服务,便于做健康检测

3. Spring Boot有哪些核心配置文件

有两种配置文件:

(1) bootstrap(.yml或者.properties):bootstrap是应用程序的父上下文,拥有更高的加载优先级,主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖

(2) application(.yml或者.properties):主要用于Sprint Boot项目的自动化配置。

4. Spring Boot 的配置文件有哪几种格式

.properties和.yml两种格式,主要的区别在于书写方式不同

(1) .properties

    app.user.name = javastack

(2) .yml

    app:
      user:
        name: javastack

除了书写格式之外,还有一个区别在于.yml格式不支持 @PropertySource 注解导入配置。

5. Spring Boot 的核心注解是哪个,它主要由哪些注解组成

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

(1) @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

(2) @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

(3) @ComponentScan:Spring组件扫描。

6. Spring Boot 是否需要独立的容器运行

Spring Boot内置了 Tomcat/Jetty 等容器,没有额外的容器也能够运行。

7. 运行 Spring Boot 有哪几种方式

(1) 打包用命令或者放到容器中运行

(2) 用 Maven/Gradle 插件运行

(3) 直接执行 main 方法运行

8. 开启Spring Boot特性有哪几种方式

(1) 继承spring-boot-starter-parent项目

(2) 导入spring-boot-dependencies项目依赖

9. 简单介绍一下Spring Boot 中的 Starters

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如果要使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

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

可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。

11. Spring Boot 支持哪些日志框架

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

此外,spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

12. Spring Boot 实现热部署有哪几种方式

主要有两种方式:(1)Spring Loaded (2) Spring-boot-devtools

13. 介绍一下Spring Boot 配置加载顺序

在 Spring Boot 里面,可以使用以下几种方式来加载配置。

(1) properties文件;

(2) YAML文件;

(3) 系统环境变量;

(4) 命令行参数;

配置属性加载的顺序如下:

(1)开发者工具 Devtools 全局配置参数;

(2)单元测试上的 @TestPropertySource 注解指定的参数;

(3)单元测试上的 @SpringBootTest 注解指定的参数;

(4)命令行指定的参数,如 java -jar springboot.jar --name="Java技术栈";

(5)命令行中的 SPRING_APPLICATION_JSON 指定参数, 如 java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar

(6)ServletConfig 初始化参数;

(7)ServletContext 初始化参数;

(8)JNDI参数(如 java:comp/env/spring.application.json);

(9)Java系统参数(来源:System.getProperties());

(10)操作系统环境变量参数;

(11)RandomValuePropertySource 随机数,仅匹配:ramdom.*;

(12)JAR包外面的配置文件参数(application-{profile}.properties(YAML))

(13)JAR包里面的配置文件参数(application-{profile}.properties(YAML))

(14)JAR包外面的配置文件参数(application.properties(YAML))

(15)JAR包里面的配置文件参数(application.properties(YAML))

(16)@Configuration配置文件上 @PropertySource 注解加载的参数;

(17)默认参数(通过 SpringApplication.setDefaultProperties 指定);

14. Spring Boot 如何定义多套不同环境配置

提供多套配置文件,如:

application-dev.properties

application-test.properties

application-prod.properties

15. Spring Boot 如何兼容老 Spring 项目

使用 @ImportResource 注解导入老 Spring 项目配置文件。

16. 有哪些方法可以保护 Spring Boot 应用

(1)在生产中使用HTTPS

(2)使用Snyk检查你的依赖关系

(3)升级到最新版本

(4)启用CSRF保护

(5)使用内容安全策略防止XSS攻击

17. Spring Boot 2.X 与1.X相比有什么新特性

(1)配置变更

(2)JDK 版本升级

(3)第三方类库升级

(4)响应式 Spring 编程支持

(5)HTTP/2 支持

(6)配置属性绑定

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是常见的 Spring Boot 面试题及其答案: 1. 什么是 Spring BootSpring Boot 是基于 Spring 框架的快速开发脚手架,它提供了常用的配置和依赖管理,使得开发者可以快速构建独立的、生产级别的 Spring 应用程序,而不需要过多的配置。 2. Spring BootSpring 框架的区别是什么? Spring BootSpring 框架的扩展,它提供了自动化配置、快速开发、无需 XML 配置文件等特性,使得开发者能够更快速地构建 Spring 应用程序。 3. Spring Boot 的优点有哪些? Spring Boot 的优点有: - 快速开发:Spring Boot 提供了自动化配置和依赖管理,使得开发者能够更快速地构建应用程序。 - 简化配置Spring Boot 提供了默认配置,开发者可以根据需要进行修改,而无需进行繁琐的配置。 - 易于部署:Spring Boot 应用程序可以打包成 jar 包或 war 包进行部署,无需安装应用程序的容器。 - 微服务:Spring Boot 支持微服务开发,可以使用 Spring Cloud 进行服务注册、发现、路由等操作。 - 社区活跃:Spring Boot 拥有庞大的社区,开发者可以从中获取各种资料、解决问题。 4. Spring Boot 中的 starter 是什么? Spring Boot 中的 starter 是一组预定义的依赖,它们包含了常用的类库或框架,开发者可以直接引入这些依赖,而无需手动配置相关的依赖。 5. Spring Boot 中的自动配置是什么? Spring Boot 中的自动配置是一种特殊的配置,它会根据应用程序的 classpath 中的 jar 包和配置文件,自动配置应用程序的环境。开发者可以通过注解或配置文件进行覆盖或修改。 6. Spring Boot 如何实现热部署? Spring Boot 可以通过添加 devtools 依赖实现热部署。在 pom.xml 中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>runtime</scope> </dependency> ``` 7. Spring Boot 如何实现跨域访问? Spring Boot 可以通过添加 cors 配置实现跨域访问。在配置类中添加以下代码: ```java @Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowCredentials(false).maxAge(3600); } }; } } ``` 8. Spring Boot 如何实现缓存? Spring Boot 可以通过添加缓存依赖实现缓存。在 pom.xml 中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> ``` 在配置类中添加以下代码: ```java @Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { return new ConcurrentMapCacheManager("cacheName"); } } ``` 在需要缓存的方法上添加 @Cacheable 注解即可实现缓存。 9. Spring Boot 如何实现安全认证? Spring Boot 可以通过添加 security 依赖实现安全认证。在 pom.xml 中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 在配置类中添加以下代码: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/user/**").hasAnyRole("ADMIN", "USER") .antMatchers("/").permitAll() .and() .formLogin() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login") .invalidateHttpSession(true) .deleteCookies("JSESSIONID"); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("ADMIN"); } } ``` 在需要认证的方法上添加 @Secured 注解即可实现安全认证。 以上是常见的 Spring Boot 面试题及其答案,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值