1、什么是SpringBoot:
我们都知道spring本身是为了简化开发而创建出来的,但是经过了这么多年的开源之后,已经变得太笨重了。这个时候就需要springboot闪亮登场了,springboot是spring框架下的一个子项目,主要是为了简化spring的使用难度,简化了spring中的各种繁重的配置,提供了各种启动器,帮助我们快速开发。
2、SpringBoot的优点:
容易上手,提升开发效率
开箱即用,不用过多的配置
提供了内嵌服务器、安全管理、数据监控、运行状况检查等非业务性功能
没有代码生成,也不需要XML配置
避免了大量的Maven导入和版本冲突
3、SpringBoot中的核心注解:
@SpringBootApplication:这个注解是启动类上面的注解,也是非常核心的注解
@SpringBootConfiguration:实现配置文件的功能
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项
@ComponentScan:spring组件扫描
4、SpringBoot自动配置的原理:
@EnableAutoConfiguration给容器导入META-INF/spring.factories里定义的自动配置类,筛选有效的自动配置类,每一个自动配置类结合对应的Properties.java读取配置文件进行自动配置功能
5、YAML配置的优势在哪:
我们知道YAML是springboot里面的配置文件,按照我们想要的结构来添加属性,简单说就是,YAML是按照我们能看懂的格式来配置文件。那么YAML和springboot里面的另一个配置properties相比具有哪些优势呢
YAML配置有序,看起来比较符合我们的正常的解读思维
支持数组,因为数组中的元素可以是基本数据类型,也可以是对象
简洁,我觉得这点是最喜欢的
6、SpringBoot中bootstrap和application配置的区别:
在单纯的springboot项目中,可能不太遇到bootstrap配置,但是在整合了springcloud时,这个配置就常见了,那么两个区别主要体现在哪呢?
bootstrap(后缀可以是yml或者properties):bootstrap是由ApplicationContext加载,比application优先加载,配置在应用程序上下文的引导阶段,一般在我们的springcloud项目中用到,而且bootstrap里面的属性不能被覆盖。
application(后缀可以是yml或者properties):也是有ApplicationContext加载的,是用于springboot自动化配置
7、Springboot怎么解决跨域的问题:
在回答这个问题之前,我们要先了解什么叫跨域?
我们访问网络是要通过URL路径进行访问的,而URL里面的协议、端口和域名是叫作源,而如果我们访问任何一个URL路径时的协议、端口和域名全部相同,就叫做同源,可以正常访问。否则只要协议、端口和域名中有任何一个不同,就叫跨域。例如我们访问百度网站:https//www.baidu.com,这个是正确的,如果我们输成:http//www.baidu.com或者https//www.baibu.com又或者https//www.baidu.com:81,这样的话都会导致跨域的事件,怎么处理有三种办法:
第一个是:设置response对象header
response.addHeader("Access-Control-Allow-Credentials", "true");response.addHeader("Access-Control-Allow-Origin", "http://localhost:8080");response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS,DELETE,PUT");
第二个是:添加注解在controller或method上
@CrossOrigin(origins = "http://localhost:8080",methods = RequestMethod.POST,allowCredentials = "true")
第三个就是增加一个bean,重写WebMvcConfigurer
@Configurationpublic class GlobalCorsConfig {@Beanpublic WebMvcConfigurer corsConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")//放行哪些原始域.allowedOrigins("*")//是否发送Cookie信息.allowCredentials(true)//放行哪些原始域(请求方式).allowedMethods("GET","POST", "PUT", "DELETE");}};}}
8、如何让arraylist为线程安全:
有两个办法,第一个是继承ArrayList,重写里面的方法,重写的这些方法要写成synchronized,在这些synchronized的方法中调用ArrayList的方法。第二个比较简单,而且很实用:
List list = Collections.synchronizedList(new ArrayList());




