Spring Boot-面试题(52)

摘要:

1、通俗易懂,适合小白

2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系!

1. 什么是 Spring Boot 框架?

Spring Boot 是基于 Spring 框架的快速开发框架,它简化了 Spring 应用的初始搭建和开发过程。它通过自动配置和起步依赖减少了大量的配置工作。

2. Spring Boot 框架的有什么优缺点?

优点

  • 快速构建独立 Spring 应用
  • 内嵌服务器,无需部署 WAR 文件
  • 提供自动配置的 starter 项目依赖
  • 提供生产就绪功能如指标、健康检查等
  • 无需 XML 配置

缺点

  • 学习曲线较陡峭
  • 对于非常简单的应用可能过于复杂
  • 自动配置有时难以理解和定制

3. Spring Boot 核心注解都有哪些?

  • @SpringBootApplication:组合注解,包含@Configuration@EnableAutoConfiguration@ComponentScan
  • @RestController:组合@Controller@ResponseBody
  • @RequestMapping:映射 web 请求
  • @Autowired:自动装配依赖
  • @Configuration:标记类为配置类
  • @ComponentScan:组件扫描

4. Spring Boot 的目录结构是怎样的?

典型结构:

复制代码
src/
  main/
    java/
      com.example.demo/
        DemoApplication.java  # 主启动类
    resources/
      static/    # 静态资源
      templates/ # 模板文件
      application.properties # 配置文件
  test/
    java/
      com.example.demo/
        DemoApplicationTests.java # 测试类

5. Spring Boot 需要独立的容器运行吗?

不需要。Spring Boot 内置了 Tomcat、Jetty 或 Undertow 等服务器容器,可以直接运行。

6. Spring Boot 运行方式有哪几种?

  1. 通过 IDE 直接运行主类
  2. 使用 Maven:mvn spring-boot:run
  3. 打包成可执行 JAR:java -jar app.jar
  4. 打包成 WAR 部署到外部容器

7. Spring Boot 自动配置原理是什么?

通过@EnableAutoConfiguration注解触发,Spring Boot 会检查 classpath 中的 jar 包,根据META-INF/spring.factories文件中定义的自动配置类进行条件化配置。

8. Spring Boot 热部署有几种方式?

  1. 使用 Spring Boot DevTools
  2. 使用 JRebel 插件
  3. 配置 IDE 自动编译

9. Spring Boot 支持哪几种内嵌容器?

  • Tomcat (默认)
  • Jetty
  • Undertow

10. 什么是 Spring Boot Starter?

Starter 是一组方便的依赖描述符,可以一站式获取所需的所有相关技术依赖。例如spring-boot-starter-web包含了开发 web 应用所需的依赖。

11. Spring Boot Starter 有什么命名规范?

官方 starter 命名格式:spring-boot-starter-*

第三方 starter 命名格式:*-spring-boot-starter

12. Spring Boot 启动器都有哪些?

常见的有:

  • spring-boot-starter-web:Web 应用
  • spring-boot-starter-data-jpa:JPA 支持
  • spring-boot-starter-test:测试支持
  • spring-boot-starter-security:安全支持
  • spring-boot-starter-thymeleaf:Thymeleaf 模板

13. 什么是 JavaConfig?

JavaConfig 是 Spring 提供的基于 Java 的配置方式,替代传统的 XML 配置。使用@Configuration注解标记配置类。

14. 什么是 YAML?

YAML 是一种人类友好的数据序列化标准,常用于 Spring Boot 的配置文件。比 properties 文件更结构化。

15. YAML 配置和 properties 配置有什么区别?

  • YAML 支持层次结构,properties 是扁平结构
  • YAML 更易读,适合复杂配置
  • properties 文件更简单,适合简单配置

16. Spring Boot 是否可以使用 XML 配置?

可以,但不推荐。Spring Boot 推荐使用 JavaConfig 或注解配置,但可以通过@ImportResource导入 XML 配置。

17. Spring Boot 中核心配置文件是什么?

application.propertiesapplication.yml,默认放在resources目录下。

18. bootstrap.properties 和 application.properties 有何区别?

  • bootstrap.properties:由父 ApplicationContext 加载,优先级更高,常用于配置中心
  • application.properties:由子 ApplicationContext 加载

19. 什么是 Spring Profiles?

Profile 是 Spring 提供的环境隔离机制,可以通过@Profile注解或配置文件指定不同环境的配置。

20. Spring Security 和 Shiro 对比有什么优缺点?

Spring Security

  • 优点:深度集成 Spring 生态,功能全面
  • 缺点:配置复杂,学习曲线陡峭

Shiro

  • 优点:简单易用,轻量级
  • 缺点:功能相对较少,与 Spring 集成需要额外配置

21. 什么是 Spring Batch?

Spring Batch 是 Spring 提供的轻量级批处理框架,用于处理大量数据的批处理作业。

22. 什么是 CSRF 攻击?

跨站请求伪造(CSRF)是一种攻击方式,攻击者诱使用户在已认证的网站上执行非预期的操作。Spring Security 提供了 CSRF 防护。

23. Spring Boot 中监视器是什么?

Spring Boot Actuator 提供的监控端点,可以监控应用运行状态,如/health/metrics等。

24. Spring Boot 中如何禁用 Actuator 端点安全性?

application.properties中添加:

properties 复制代码
management.security.enabled=false

25. 如何监视所有 Spring Boot 微服务?

可以使用 Spring Boot Admin,它集成了 Actuator 端点,提供统一的监控界面。

26. spring-boot-starter-parent 有什么用?

作为父 POM,提供依赖管理、默认配置和插件配置,简化 Maven 配置。

27. Spring Boot jar 和普通 jar 有什么区别?

Spring Boot jar 是可执行 jar,包含内嵌容器和所有依赖,可以直接运行。普通 jar 需要部署到容器中运行。

28. Spring Boot 中如何实现全局异常处理?

使用@ControllerAdvice@ExceptionHandler注解:

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(500).body(e.getMessage());
    }
}

29. Spring Boot 中如何实现定时任务?

使用@Scheduled注解:

java 复制代码
@Component
public class ScheduledTasks {
    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("Current time: " + new Date());
    }
}

30. Spring Boot 中如何兼容旧 Spring 项目?

  1. 逐步迁移配置到 JavaConfig
  2. 使用@ImportResource导入旧 XML 配置
  3. 保持兼容的依赖版本

31. Spring Boot 中如何解决跨域问题?

java 复制代码
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE");
    }
}

32. Spring Boot 内嵌容器默认是什么?

默认是 Tomcat。

33. Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

  • 基于 Spring Framework 5
  • 响应式编程支持
  • 性能改进
  • Actuator 改进
  • 配置属性绑定改进

34. Spring、Spring MVC 和 Spring Boot 有什么区别?

  • Spring:核心框架,提供IoC和AOP
  • Spring MVC:基于 Spring 的 Web MVC 框架
  • Spring Boot:基于 Spring 的快速开发框架,简化配置

35. 如何实现 Spring Boot 应用程序的安全性?

使用 Spring Security:

java 复制代码
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

36. 如何重新加载 Spring Boot 上的更改内容,而无需重启服务?

使用 Spring Boot DevTools 或 JRebel 插件。

37. 如何自定义端口运行 Spring Boot 应用程序?

application.properties中:

properties 复制代码
server.port=8081

38. Spring Boot 如何禁用某些自动配置特性?

使用@EnableAutoConfiguration的exclude属性:

java 复制代码
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

39. Spring boot 中当 bean 存在时如何重启执行自动配置?

使用@ConditionalOnMissingBean注解的自动配置类会在没有相应 bean 时生效。

40. Spring Boot 如何编写一个集成测试?

java 复制代码
@SpringBootTest
@AutoConfigureMockMvc
class DemoApplicationTests {
    @Autowired
    private MockMvc mockMvc;

    @Test
    void contextLoads() throws Exception {
        mockMvc.perform(get("/"))
               .andExpect(status().isOk());
    }
}

41. Spring Boot 中 Actuator 有什么作用?

提供生产就绪功能,如健康检查、指标收集、环境信息等监控端点。

42. Spring Boot 有什么外部配置的可能来源?

  • 命令行参数
  • Java 系统属性
  • 操作系统环境变量
  • 配置文件(properties/yml)
  • @Configuration类

43. Spring Boot 支持松绑定表示什么含义?

属性名可以灵活匹配,如my.property-namemy.propertyNameMY_PROPERTYNAME都会绑定到同一个属性。

44. Spring Boot 如何注册一个定制的自动化配置?

  1. 创建META-INF/spring.factories文件
  2. 添加org.springframework.boot.autoconfigure.EnableAutoConfiguration
  3. 列出全限定名的自动配置类

45. 什么是 Swagger? Spring Boot 如何实现 Swagger?

Swagger 是 API 文档工具。Spring Boot 集成:

xml 复制代码
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
java 复制代码
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

46. 如何使用 Spring Boot 实现分页和排序?

使用 Spring Data JPA:

java 复制代码
public interface UserRepository extends JpaRepository<User, Long> {
    Page<User> findAll(Pageable pageable);
}

@GetMapping("/users")
public Page<User> getUsers(Pageable pageable) {
    return userRepository.findAll(pageable);
}

请求示例:/users?page=0&size=10&sort=name,asc

47. 如何使用 Maven 来构建一个 Spring Boot 程序?

  1. 使用spring-boot-starter-parent作为父POM
  2. 添加所需starter依赖
  3. 使用spring-boot-maven-plugin打包

48. Spring Boot web 应用程序如何部署为 JAR 或 WAR 文件?

JAR :默认方式,使用spring-boot-maven-plugin
WAR

  1. 修改打包方式为war
  2. 继承SpringBootServletInitializer
  3. 配置spring-boot-maven-plugin

49. 什么是 WebSocket?

WebSocket 是一种全双工通信协议,允许服务端主动向客户端推送数据。

50. Spring Boot 和 Spring 有什么区别?

Spring Boot 是基于 Spring 的快速开发框架,简化了配置和部署,提供了自动配置、起步依赖和内嵌服务器等特性。

51. 常见的系统架构风格有哪些?各有什么优缺点?

  1. 单体架构:简单但难以扩展
  2. 分层架构:逻辑清晰但性能有损耗
  3. 微服务架构:灵活可扩展但复杂度高
  4. 事件驱动架构:松耦合但难以调试
  5. 服务导向架构(SOA):重用性好但ESB可能成为瓶颈

52. 什么是 AKF 拆分原则?

AKF扩展立方体理论,三个维度扩展:

  1. X轴:水平复制(克隆)
  2. Y轴:功能拆分(微服务)
  3. Z轴:数据分区(分片)
相关推荐
斯普信专业组几秒前
Tomcat全方位监控实施方案指南
java·tomcat
忆雾屿11 分钟前
云原生时代 Kafka 深度实践:06原理剖析与源码解读
java·后端·云原生·kafka
武昌库里写JAVA24 分钟前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
gaoliheng00632 分钟前
Redis看门狗机制
java·数据库·redis
我是唐青枫35 分钟前
.NET AOT 详解
java·服务器·.net
小白杨树树1 小时前
【WebSocket】SpringBoot项目中使用WebSocket
spring boot·websocket·网络协议
Su米苏1 小时前
Axios请求超时重发机制
java
Undoom2 小时前
🔥支付宝百宝箱新体验!途韵归旅小帮手,让高铁归途变旅行
后端
不超限2 小时前
Asp.net Core 通过依赖注入的方式获取用户
后端·asp.net