当前位置: 首页 > news >正文

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中添加:

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注解:

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

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

使用@Scheduled注解:

@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 中如何解决跨域问题?

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic 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:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected 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中:

server.port=8081

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

使用@EnableAutoConfiguration的exclude属性:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

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

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

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

@SpringBootTest
@AutoConfigureMockMvc
class DemoApplicationTests {@Autowiredprivate MockMvc mockMvc;@Testvoid 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 集成:

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

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

使用 Spring Data JPA:

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轴:数据分区(分片)
http://www.xdnf.cn/news/891703.html

相关文章:

  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • JS深入学习 — 循环、函数、数组、字符串、Date对象,Math对象
  • 前端面试四之Fetch API同步和异步
  • c++算法学习3——深度优先搜索
  • 【java面试】框架篇
  • snprintf函数用法及注意事项详解
  • Redisson简明教程—你家的锁芯该换了
  • 71 LV信息查看
  • DeepSeek私有化部署的理性抉择:谁需要?谁不必?
  • SSH 和 Telnet 介绍、区别与使用方法
  • JAVA-springboot JUnit单元测试
  • Qt实现一个悬浮工具箱源码分享
  • LeetCode_LCR 509 斐波拉契
  • 经济学顶刊QJE:构建从非结构化文本数据中挖掘经济规律的新框架!
  • 【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
  • 实测报告:设备 AI 知识库如何帮助新手快速掌握巡检技巧?
  • 在嵌入式中C语言中static修饰的变量常量和字符串常量存储位置
  • 总结vxe-grid的一些用法
  • 精度分析方法-不确定度
  • [蓝桥杯]三体攻击
  • MySQL的并发事务问题及事务隔离级别
  • 12V降5V12A大功率WD5030A,充电器、便携式设备、网络及工业领域的理想选择
  • 大语言模型评测体系全解析(中篇):专项能力评测与行业垂直场景
  • Mysql莫名奇妙重启
  • 实现单例模式的常见方式
  • Redis Set集合命令、内部编码及应用场景(详细)
  • GC1809:高性能音频接收与转换芯片
  • Python Day42 学习(日志Day9复习)
  • AI智能推荐实战之RunnableParallel并行链
  • .Net Framework 4/C# System.IO 命名空间(文件的输入输出)