Spring Boot 面试题

本文整理了SpringBoot面试中常见的问题及解答,涵盖了SpringBoot的基本特性、启动器介绍、配置引用方式、工具类功能、Actuator用途等。同时,还探讨了SpringBoot中环境配置、异步任务处理、定时任务实现等高级特性。

Spring Boot 面试题

1、列举一些SpringBoot特性

  • 1、创建独立的Spring项目
  • 2、内置Tomcat和Jetty容器
  • 3、提供一个starter POMs来简化Maven配置
  • 4、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
  • 5、完全没有代码生成和xml配置文件

2、有什么常用的Spring Boot启动器?
spring-boot-starter: 核心启动器,包括自动配置支持,日志记录和YAML
spring-boot-starter-aop: 使用Spring AOP和AspectJ进行面向方面编程的启动器
spring-boot-starter-data-jpa: 使用Spring Data JPA和Hibernate的启动器
spring-boot-starter-jdbc: 用于将JDBC与HikariCP连接池一起使用的启动器
spring-boot-starter-security: 使用Spring Security的启动器
spring-boot-starter-test: 用于测试Spring Boot应用程序的启动器
spring-boot-starter-web: 用于构建Web的入门者,包括使用Spring MVC的RESTful应用程序

3、application.properties中如何引用已定义的配置参数?
使用${},比如:
book.name = XXX
book.desc = ${book.name} 's desc

4、spring boot Devtools有什么作用?
https://blog.youkuaiyun.com/isea533/article/details/70495714

5、Spring Boot Actuator有什么作用?
监控和管理Spring Boot应用,比如Mappring、健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。

6、RequestMapping 和 GetMapping 的不同之处在哪里?
RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

7、@ConfigurationProperties 注解的作用
将配置属性注入到bean
类似如下:
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

private String firstName;

}

application.properties属性:
person.firstName = XXX

8、@value和@configurationproperties的区别
https://www.cnblogs.com/slowcity/p/9097969.html

9、Spring Boot 如何定义多套不同环境配置?
提供多套配置文件,如:

applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
祥见:https://mp.weixin.qq.com/s/K0kdQwoo2t5FDsTUJttSAA

10、@responsebody有什么作用?
@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。

11、@Controller 和 @RestController有什么区别?
@RestController 是Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。而@Controller是用来创建处理http请求的对象,一般结合@RequestMapping使用。


12、@Component和@Bean有什么区别? (答案还不是特别确信)
@Component被用在要被自动扫描和装配的类上。@Component类中使用方法或字段时不会使用CGLIB增强(及不使用代理类:调用任何方法,使用任何变量,拿到的是原始对象)Spring 注解@Component等效于@Service,@Controller,@Repository
@Bean主要被用在方法上,来显式声明要用生成的类;用@Configuration注解该类,用@Bean标注方法等价于XML中配置bean。

现在项目上,本工程中的类,一般都使用@Component来生成bean。在把通过web service取得的类,生成Bean时,使用@Bean和getter方法来生成bean


13、有什么springboot的安全方面的实践?

https://mp.weixin.qq.com/s/HG4_StZyNCoWx02mUVCs1g

14、如何使用@Async?
现在启动类@SpringBootApplication后面加入@EnableAsync,定义@Component类中的异步任务方法,其中注解@Async,方法返回void或者Future<T>,调用方法即平常的@Autowired实例化即可。

15、springboot如何开启定时任务?
定义启动类@EnableScheduling,然后在任务类使用cron表达式来定义任务时间,比如@Scheduled(cron="/6 * * * * ?")代表每6秒一次,再如:“0 0 12 * * ?” 每天中午12点触发。

posted @ 2019-03-27 12:41 昕友软件开发 阅读( ...) 评论( ...) 编辑 收藏
### 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; } } ``` 通过这种方式,应用程序可以根据用户的语言设置显示不同的内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值