首页 > 其他分享 >Spring Boot 20道面试题

Spring Boot 20道面试题

时间:2024-10-30 19:08:43浏览次数:1  
标签:面试题 Spring Boot class 讲解 注解 public

Java技术迷

+
目录

Spring Boot是在Spring框架基础上构建的用于简化Java开发的框架,因其简单易用、高效快速成为企业级应用的首选。在面试中,Spring Boot相关的问题常常被问及,下面我们来介绍一些最经典的20道Spring Boot面试题,并附上详细的案例。

1. 什么是Spring Boot?

Spring Boot是Spring家族的一部分,用于简化Spring应用的开发、部署和管理。它通过提供开箱即用的配置,简化了Spring应用的整个开发过程。

2. Spring Boot的主要优点是什么?

主要优点包括:

  • 简化配置:提供默认配置,无需手动配置。
  • 内嵌服务器:支持内嵌Tomcat、Jetty等服务器。
  • 微服务:支持微服务架构。
  • 自动化:提供丰富的工具支持自动化构建、测试和部署。

3. Spring Boot的核心注解是哪个?它有什么作用?

核心注解是@SpringBootApplication,它用于标注主程序类,表示该类是Spring Boot应用的入口。它包含了@Configuration@EnableAutoConfiguration@ComponentScan三个注解的组合。

?
123456@SpringBootApplicationpublic class MyApplication {    public static void main(String[] args) {        SpringApplication.run(MyApplication.class, args);    }}
登录后复制免费讲解

4. Spring Boot如何加载外部配置文件?

Spring Boot会自动加载application.propertiesapplication.yml作为默认配置文件,同时也支持通过@PropertySource注解加载其他配置文件。

?
1@PropertySource("classpath:custom.properties")
登录后复制免费讲解

5. Spring Boot如何实现跨域请求?

可以通过在@SpringBootApplication注解的类上使用@CrossOrigin注解,或者在Controller的方法上使用@CrossOrigin注解来实现跨域请求。

?
12345@RestController@CrossOrigin(origins = "http://localhost:3000")public class MyController {    // Controller方法}
登录后复制免费讲解

6. Spring Boot的热部署是如何实现的?

可以使用Spring Boot DevTools实现热部署,它支持类文件和资源文件的热部署。

?
12345<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-devtools</artifactId>    <optional>true</optional></dependency>
登录后复制免费讲解

7. Spring Boot如何配置多数据源?

可以通过@Primary注解设置主数据源,使用@Qualifier注解指定具体的数据源。

?
12345678910111213141516@Configurationpublic class DataSourceConfig {         @Bean(name = "primaryDataSource")    @Primary    @ConfigurationProperties(prefix = "spring.datasource.primary")    public DataSource dataSource() {        return DataSourceBuilder.create().build();    }     @Bean(name = "secondaryDataSource")    @ConfigurationProperties(prefix = "spring.datasource.secondary")    public DataSource secondaryDataSource() {        return DataSourceBuilder.create().build();    }}
登录后复制免费讲解

8. Spring Boot中如何实现AOP?

可以通过@Aspect注解定义切面,通过@Before@After等注解定义通知。

?
1234567891011121314@Aspect@Componentpublic class MyAspect {     @Before("execution(* com.example.demo.service.*.*(..))")    public void beforeAdvice() {        // 前置通知逻辑    }     @After("execution(* com.example.demo.service.*.*(..))")    public void afterAdvice() {        // 后置通知逻辑    }}
登录后复制免费讲解

9. Spring Boot的事务管理是如何实现的?

Spring Boot使用@Transactional注解来声明事务,可以在方法或类级别使用。

?
12345678@Servicepublic class MyService {     @Transactional    public void transactionalMethod() {        // 事务性操作    }}
登录后复制免费讲解

10. Spring Boot中如何使用缓存?

可以通过@EnableCaching注解开启缓存功能,使用@Cacheable@CachePut@CacheEvict等注解来定义缓存操作。

?
1234567891011121314151617181920212223@EnableCachingpublic class CacheConfig {    // 配置缓存} @Servicepublic class MyService {     @Cacheable(value = "myCache", key = "#id")    public String getFromCache(String id) {        // 从缓存中获取数据    }     @CachePut(value = "myCache", key = "#id")    public String updateCache(String id) {        // 更新缓存数据    }     @CacheEvict(value = "myCache", key = "#id")    public void removeFromCache(String id) {        // 从缓存中删除数据    }}
登录后复制免费讲解

11. Spring Boot的Profile是什么,如何使用?

Profile是一种用于标识特定环境配置的机制。通过在application.propertiesapplication.yml中使用spring.profiles.active指定激活的Profile,或通过@Profile注解在Bean上指定。

?
1234567# application-dev.ymlserver:  port: 8081 # application-prod.ymlserver:  port: 8082
登录后复制免费讲解 ?
1234567891011@Profile("dev")@Beanpublic MyBean devBean() {    return new MyBean("Dev Bean");} @Profile("prod")@Beanpublic MyBean prodBean() {    return new MyBean("Prod Bean");}
登录后复制免费讲解

12. Spring Boot中如何实现异步方法调用?

可以使用@Async注解标注方法,使其成为异步方法。

?
12345678@Servicepublic class MyService {     @Async    public CompletableFuture<String> asyncMethod() {        // 异步方法逻辑    }}
登录后复制免费讲解

13. Spring Boot如何处理异常?

可以使用@ControllerAdvice注解定义全局异常处理类,使用@ExceptionHandler处理特定异常。

?
12345678@ControllerAdvicepublic class GlobalExceptionHandler {     @ExceptionHandler(Exception.class)    public ResponseEntity<String> handleException(Exception e) {        // 异常处理逻辑    }}
登录后复制免费讲解

14. Spring Boot的自动装配是什么?

自动装配是Spring Boot的一项特性,通过@EnableAutoConfiguration@ComponentScan自动加载符合条件的Bean。

?
1234@SpringBootApplicationpublic class MyApplication {    // 主程序类}
登录后复制免费讲解

15. Spring Boot如何实现消息队列?

可以使用Spring Boot集成的消息队列中间件,如ActiveMQ、RabbitMQ,通过@EnableJms@EnableRabbit注解开启相应功能。

?
12345678910111213@EnableJmspublic class JmsConfig {    // 配置JMS} @Componentpublic class MyJmsListener {     @JmsListener(destination = "myQueue")    public void receiveMessage(String message) {        // 消息处理逻辑    }}
登录后复制免费讲解

16. Spring Boot中如何使用定时任务?

可以使用@Scheduled注解标注方法,定时执行任务。

?
12345678@Componentpublic class MyScheduledTask {     @Scheduled(fixedRate = 10000)    public void myTask() {        // 定时任务逻辑    }}
登录后复制免费讲解

17. Spring Boot的数据校验如何实现?

可以使用@Valid@Validated注解进行数据校验,结合BindingResult获取校验结果。

?
12345678@RestControllerpublic class MyController {     @PostMapping("/validate")    public ResponseEntity<String> validate(@Valid @RequestBody MyEntity entity, BindingResult result) {        // 数据校验逻辑    }}
登录后复制免费讲解

18. Spring Boot中如何集成Swagger生成API文档?

可以通过引入Swagger依赖,并使用@Api@ApiOperation等注解描述API接口。

?
12345<dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-swagger2</artifactId>    <version>3.0.0</version></dependency>
登录后复制免费讲解 ?
12345678910111213@Configuration@EnableSwagger2public class SwaggerConfig {     @Bean    public Docket api() {        return new Docket(DocumentationType.SWAGGER_2)            .select()            .apis(RequestHandlerSelectors.basePackage("com.example.demo"))            .paths(PathSelectors.any())            .build();    }}
登录后复制免费讲解

19. Spring Boot中如何实现文件上传?

可以使用MultipartFile处理文件上传。

?
12345678@RestControllerpublic class FileController {     @PostMapping("/upload")    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {        // 文件上传逻辑    }}
登录后复制免费讲解

20. Spring Boot中的WebSocket如何实现?

可以使用@ServerEndpoint注解创建WebSocket端点。

?
12345678@ServerEndpoint("/websocket")public class MyWebSocket {     @OnMessage    public void onMessage(Session session, String message) {        // WebSocket消息处理逻辑    }}
登录后复制免费讲解

以上只是其中的一部分问题和案例,Spring Boot作为一个强大的框架,还有很多方面值得深入学习。希望这些问题和案例能帮助你更好地理解和应用Spring Boot。

总结

标签:面试题,Spring,Boot,class,讲解,注解,public
From: https://www.cnblogs.com/sunny3158/p/18516421