杨校老师课堂之Spring Boot框架面试题【开发工程师面试前必看】

2022-12-27 17:05:50 浏览数 (3)

1. 什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。

2. 为什么要用SpringBoot

快速开发,快速整合,配置简化、内嵌服务容器

3. SpringBoot与SpringCloud 区别

  1. SpringBoot是快速开发的Spring框架;
  2. SpringCloud 不是一项单独的技术,而是一整套的解决方案的集合,换句话说,也就是SpringCloud是一套系列性的知识体系;
  3. SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。

4. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含 了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如: java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描,也就是进行扫描Component注解

5.SpringBoot的自动配置原理是什么

  • 主要是Spring Boot的启动类上的核心注解SpringBootApplication注解主配置类,有了这个主配置类启动时就会为SpringBoot开启一个@EnableAutoConfiguration注解自动配置功能。
  • 有了这个EnableAutoConfiguration的话就会:
    • 从配置文件META_INF/Spring.factories加载可能用到的自动配置类
    • 去重,并将exclude和excludeName属性携带的类排除
    • 过滤,将满足条件(@Conditional)的自动配置类返回

6.简单说下@ControllerAdvice和@RestController注解的区别

① 注解@ControllerAdvice是一个组件注解(Component annotation),它允许实现类通过类路径扫描被自动检测到。当使用 MVC 命名空间或者 MVC Java 配置时自动启用 ② @RestController:相当于@Controller @ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

7.spring boot 核心配置文件是什么?bootstrap.properties 和application.properties 有何区别 ?

  • 单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
  • spring boot 核心的两个配置文件:
    •  bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud 配置就会使用这个文件。且 boostrap 里面的属性不能被覆盖;
    • application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置

8. SpringBoot多数据源拆分的思路

先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties 读取properties中的配置,使用@MapperScan注册到对应的mapper包中

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

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

代码语言:javascript复制
@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
		.allowedOrigins("*")
		.allowCredentials(true)
		.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
		.maxAge(3600);
	}
}

Spring Security 和 Shiro 各自的优缺点

  • 由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。
  • Shiro 和 Spring Security相比,主要有如下一些特点
    • Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
    • Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
    • Spring Security 功能强大;Shiro 功能简单

作者: 杨校

出处: https://mryang.blog.csdn.net

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询

1 人点赞