面试_java_SpringBoot常见面试题

120 阅读4分钟

SpringBoot相较于SSM的优点?

  • 部署方便:Spring Boot 内嵌了servlet 容器,比如Tomcat、Jetty ,不再需要打成war 包部署到tomcat的webapp目录下。只需要打成 jar 包就能在安装了 jdk 的电脑上独立运行。

  • 配置方便:SSM不仅要实现业务需求,还要自己在xml中配置SpringMVC、Spring、Mybatis信息。而Spring Boot不需要,可以专心于业务代码。

  • 应用监控:SpringBoot 提供了基于http、ssh、telnet 的项目监控。




SpringBoot 是否可以使用 XML 配置 ?

Spring Boot 推荐使用注解配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。

也正是用这个方法,来兼容一些老的spring项目。




SpringBoot核心配置文件是什么?

bootstrap.properties和application.properties

  • application (.yml或者.properties):用于 SpringBoot项目的自动化配置。

  • bootstrap(.yml 或者 .properties):比applicaton优先加载,且boostrap里面的属性不能被覆盖。一般来说我们在 SpringCloud Config 或者Nacos中会用到它。




SpringBoot 打成的 jar 包和普通的 jar 包有什么区别

  • 普通的jar包可以被其他项目所依赖,解压后直接就是包名,包里就是我们的代码。

  • Spring Boot 中默认打包成的 jar 叫可执行 jar包,可以通过命令 java -jar xxx.jar来运行,但不能被其他项目所依赖,不能直接使用其中的类。这种jar包解压后要在 \BOOT-INF\classes 目录下找到我们的代码。如果非要引用,可以在打包的时候到 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。




Springboot的CORS跨域问题是怎么引起的呢?怎样解决?

之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。


解决方法:

方法一:直接采用@CrossOrigin注解

用@CrossOrigin注解修饰整个Controller类。SpringMVC也是同样的,但要求在Spring4.2及以上的版本。


方法二:增加处理跨域请求的Configuration

增加一个配置类,CrossOriginConfig.java。继承WebMvcConfigurerAdapter或者实现WebMvcConfigurer接口,其他都不用管,项目启动时,会自动读取配置。

@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
    static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);
    }



说说你在使用SpringBoot时比较有印象的有哪些注解

1、@SpringBootApplication

这个注解是SpringBoot最核心的注解,用在 SpringBoot的主类上,标识这是一个 SpringBoot 应用,用来开启 SpringBoot 的各项能力。

实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。


2、@Configuration

指出该类是 Bean 配置的信息源,相当于XML中的,一般加在主类上。


3、@EnableAutoConfiguration

允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。


4、@ComponentScan

组件扫描。相当于,如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为bean。


5、@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。


6、@Controller

用于标注控制层组件。


7、@Service

用于标注业务层组件。


8、@Data

用于标注数据访问组件,即DAO组件。


9、@AutoWired

它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

与自动装配相对应的是组件扫描,通过定义资源的方式,让Spring IOC容器扫描资源所在的包,从而装配Bean。


10、@ResponseBody

作用在controller层方法上,表示该方法直接返回json数据给客户端。也可以直接用于类上,写在@Controller 上面一行,表示该类中的所有Controller方法均使用该注解。


11、@RestController

相当于上面 @Controller + @ResponseBody 合在一起的作用。


12、@RequestMapping

建立请求URL和处理方法之间的映射关系,可以写在方法和类上。用于类上时,表示类中的所有响应请求的方法都是以该地址作为路径前缀。


13、@RequestBody 与 @RequestParam

作用在controller方法的参数列表里

  • 如果请求类型是 POST 并且请求头的 Content-Type 字段为 application/json ,@RequestBody 就会将前端传来的 json 数据转换为自己定义好的 javabean 对象。
  • 如果请求类型是 GET ,就不能使用 @RequestBody,只能用 @RequestParam 来一对一接收。
  • 字段如果是默认值或者是Form表单提交的,也只能用@RequestParam来接收。




Spring Boot 配置加载顺序

(1)properties文件;(2)YAML文件;(3)系统环境变量;(4)命令行参数;




YAML 配置的优势在哪里 ?

  1. 配置有序,在一些特殊的场景下,配置有序很关键
  2. 支持数组,数组中的元素可以是基本数据类型也可以是对象
  3. 简洁



SpringBoot 中如何实现定时任务?

  • 使用 Spring 中的 @Scheduled 注解
  • 使用第三方框架 Quartz,定义Job和Trigger




blog.cnkj.site/Interview/I…

www.iamshuaidi.com/3870.html