相关推荐recommended
Spring Boot最经典的20道面试题,你都会了吗?
作者:mmseoamin日期:2024-04-27

目录

  • 介绍Spring Boot最经典的20道面试题,你都会了吗?
    • 1. 什么是Spring Boot?
    • 2. Spring Boot的主要优点是什么?
    • 3. Spring Boot的核心注解是哪个?它有什么作用?
    • 4. Spring Boot如何加载外部配置文件?
    • 5. Spring Boot如何实现跨域请求?
    • 6. Spring Boot的热部署是如何实现的?
    • 7. Spring Boot如何配置多数据源?
    • 8. Spring Boot中如何实现AOP?
    • 9. Spring Boot的事务管理是如何实现的?
    • 10. Spring Boot中如何使用缓存?
    • 11. Spring Boot的Profile是什么,如何使用?
    • 12. Spring Boot中如何实现异步方法调用?
    • 13. Spring Boot如何处理异常?
    • 14. Spring Boot的自动装配是什么?
    • 15. Spring Boot如何实现消息队列?
    • 16. Spring Boot中如何使用定时任务?
    • 17. Spring Boot的数据校验如何实现?
    • 18. Spring Boot中如何集成Swagger生成API文档?
    • 19. Spring Boot中如何实现文件上传?
    • 20. Spring Boot中的WebSocket如何实现

      介绍Spring Boot最经典的20道面试题,你都会了吗?

      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三个注解的组合。

        @SpringBootApplication
        public class MyApplication {
            public static void main(String[] args) {
                SpringApplication.run(MyApplication.class, args);
            }
        }
        

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

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

        @PropertySource("classpath:custom.properties")
        

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

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

        @RestController
        @CrossOrigin(origins = "http://localhost:3000")
        public class MyController {
            // Controller方法
        }
        

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

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

        
            org.springframework.boot
            spring-boot-devtools
            true
        
        

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

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

        @Configuration
        public 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等注解定义通知。

        @Aspect
        @Component
        public 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注解来声明事务,可以在方法或类级别使用。

        @Service
        public class MyService {
            @Transactional
            public void transactionalMethod() {
                // 事务性操作
            }
        }
        

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

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

        @EnableCaching
        public class CacheConfig {
            // 配置缓存
        }
        @Service
        public 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.properties或application.yml中使用spring.profiles.active指定激活的Profile,或通过@Profile注解在Bean上指定。

        # application-dev.yml
        server:
          port: 8081
        # application-prod.yml
        server:
          port: 8082
        
        @Profile("dev")
        @Bean
        public MyBean devBean() {
            return new MyBean("Dev Bean");
        }
        @Profile("prod")
        @Bean
        public MyBean prodBean() {
            return new MyBean("Prod Bean");
        }
        

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

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

        @Service
        public class MyService {
            @Async
            public CompletableFuture asyncMethod() {
                // 异步方法逻辑
            }
        }
        

        13. Spring Boot如何处理异常?

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

        @ControllerAdvice
        public class GlobalExceptionHandler {
            @ExceptionHandler(Exception.class)
            public ResponseEntity handleException(Exception e) {
                // 异常处理逻辑
            }
        }
        

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

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

        @SpringBootApplication
        public class MyApplication {
            // 主程序类
        }
        

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

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

        @EnableJms
        public class JmsConfig {
            // 配置JMS
        }
        @Component
        public class MyJmsListener {
            @JmsListener(destination = "myQueue")
            public void receiveMessage(String message) {
                // 消息处理逻辑
            }
        }
        

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

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

        @Component
        public class MyScheduledTask {
            @Scheduled(fixedRate = 10000)
            public void myTask() {
                // 定时任务逻辑
            }
        }
        

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

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

        @RestController
        public class MyController {
            @PostMapping("/validate")
            public ResponseEntity validate(@Valid @RequestBody MyEntity entity, BindingResult result) {
                // 数据校验逻辑
            }
        }
        

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

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

        
            io.springfox
            springfox-swagger2
            3.0.0
        
        
        @Configuration
        @EnableSwagger2
        public 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处理文件上传。

        @RestController
        public class FileController {
            @PostMapping("/upload")
            public ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file) {
                // 文件上传逻辑
            }
        }
        

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

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

        @ServerEndpoint("/websocket")
        public class MyWebSocket {
            @OnMessage
            public void onMessage(Session session, String message) {
                // WebSocket消息处理逻辑
            }
        }
        

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

        感谢阅读,如有任何问题或建议,请随时留言。