1、什么是springboot
答:Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式处理方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
2、Spring Boot有哪些优点?
答:
1.快速构建项目
2.对主流开发框架无配置集成
3.项目可独立运行,无需外部依赖Servlet容器
4.极大的提高了开发 和部署效率
5.提供运行时的监控
6.与云计算的天然集成
缺点:
版本迭代更新快,一些模块变动大;
由于自己不用做配置,报错时很难定位;
网上现成的解决方法少;
3 Spring Boot 最大的优势是什么呢?体现在哪些方面?
(1)Spring Boot 的最大的优势是“约定优于配置“。
“约定优于配置“使开发人员按照约定的方式来进行编程,可以减少软件开发人员需做决定的数量,既简单又不失灵活。
(2)Spring Boot Starter、Spring Boot Jpa 都是“约定优于配置“的一种体现。
Spring Boot Starter 在启动的过程中会根据约定的信息对资源进行初始化,Spring Boot Jpa 通过约定的方式来自动生成 Sql ,避免大量无效代码编写。
Spring 、Spring Boot 和 Spring Cloud 的关系?
(1)Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。
(2)Spring Boot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring ,是为了让人们更容易的使用 Spring 。
(3)Spring Cloud 是一系列框架的有序集合。
它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring Cloud 是为了解决微服务架构中服务治理而提供的一系列功能的开发框架,并且 Spring Cloud 是完全基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。
SpringBoot和Spring有什么区别呢?
- Spring Boot(自动配置(核心))
可以建立独立的Spring应用程序,内嵌了如Tomcat,Jetty和Undertow这样的容器,不着再做部署工作可以直接跑起来。 - SpringBoot将原有的XML配置改为Java配置,将bean注入改为使用注解注入的方式(@Autowire),并将多个xml、properties配置浓缩在一个appliaction.yml配置文件中。
- 提供了一些现有的功能,如量度工具,表单数据验证以及一些外部配置这样的一些第三方功能;
- 整合常用依赖(开发库,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM可以简化Maven的配置。当我们引入核心依赖时,SpringBoot会自引入其他依赖。
JPA 和 Hibernate 有哪些区别?JPA 可以支持动态 SQL 吗?
(1)因为JPA是一种规范,提供了一些相关的接口 不能直接使用,JPA底层需要某种JPA实现,Hibernate 是 JPA 的一个实现集。
(2)JPA 是根据实体类的注解来创建对应的表和字段,如果需要动态创建表或者字段,需要动态构建对应的实体类,再重新调用Jpa刷新整个Entity。动态SQL,mybatis支持的最好,jpa也可以支持,但是没有Mybatis那么灵活。
5 Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
- Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
2 :
(1)application 配置文件这个容易了解,主要用于 Spring Boot 项目的自动化配置。
(2)bootstrap 配置文件有以下几个应用场景。
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中增加连接到配置中心的配置属性来加载外部配置中心的配置信息;
少量固定的不能被覆盖的属性;
少量加密/解密的场景;
6、Spring Boot 有哪几种读取配置的方式?配置文件有哪几种格式?它们有什么区别?
(1): Spring Boot 可以通过 @PropertySource,@Value,@Environment,@ConfigurationProperties 来绑定变量,
(2)配置文件有2中格式:properties 和 .yml,
(3)它们的区别主要是书写格式不同。另外,.yml 格式不支持@PropertySource注解导入配置。
什么是YAML?
YAML是一种人类可读的数据序列化语言。它通常用于配置文件。
与属性文件相比,YAML文件具有分层配置数据,更加结构化,而且更少混淆.
6、如何在 Spring Boot 启动的时候运行少量特定的代码?
可以实现接口 ApplicationRunner 或者者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法.
8、你如何了解 Spring Boot 配置加载顺序?
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
1)properties文件;
2)YAML文件;
3)系统环境变量;
4)命令行参数;
10、开启 Spring Boot 特性有哪几种方式?
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
11、Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
12、运行 Spring Boot 有哪几种方式?
1)打包用命令或者者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
13、Spring Boot 的自动配置是如何实现的?
Spring Boot 项目的启动注解是@SpringBootApplication(又称为核心注解),它就是由下面三个注解组成的:
(1): @SpringBootConfiguration包合了 @Configuration 注解,实现配置文件的功能。
(2): @EnableAutoConfiguration打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
(3): @ComponentScan Spring组件扫描。
其中 @EnableAutoConfiguration 是实现自动配置的入口,该注解又通过 @Import 注解导入了AutoConfigurationImportSelector,在该类中加载 META-INF/spring.factories 的配置信息。然后筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,实现自动配置功能!
14 Spring Boot Starter 的工作原理是什么?
答:Spring Boot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
根据 spring.factories 配置加载 AutoConfigure 类,
根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context
总结一下,其实就是 Spring Boot 在启动的时候,按照约定去读取 Spring Boot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 Spring Boot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。
17、springboot常用的starter有哪些
spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa 数据库支持
spring-boot-starter-data-redis redis数据库支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter
18、Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,
假如你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,
19、SpringBoot 实现热部署有哪几种方式?
主要有两种方式:
Spring Loaded
Spring-boot-devtools
Spring-boot-devtools?
如何在不重启服务器的情况下在Spring引导时重新加载我的更改?
(1)这可以通过开发工具DevTools实现,添加DevTools依赖,有了这个依赖项,您保存的任何更改都将重新启动嵌入的tomcat,它有助于提高开发人员的工作效率。
(2)Java开发人员面临的关键挑战之一是:将文件更改自动部署到服务器并自动重启服务器。开发人员可以在Spring引导时重新加载更改,而不必重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布第一个版本时没有这个特性。这是开发人员最需要的特性。
(3)DevTools模块完全满足开发人员的需求。此模块将在生产环境中禁用。
它还提供了H2-database控制台,以便更好地测试应用程序。使用以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
23、springboot集成mybatis的过程
a: 添加mybatis的starter maven依赖
org.mybatis.spring.boot / mybatis-spring-boot-starter 1.2.0
b: 在mybatis的接口中 添加@Mapper注解
c: 在application.yml配置数据源信息
24、什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?思考一下在你的虚拟机上部署应用程序需要些什么??
第一步:安装 Java
第二部:安装 Web 或者是应用程序的服务器(Tomat)
第三部:部署应用程序 war 包
如果我们想简化这些步骤,应该如何做呢?让我们来思考如何使服务器成为应用程序的一部分?
你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了是不是很爽?这个想法是嵌入式服务器的起源。当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。
例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程序 jar。你就可以像运行正常 Java 应用程序一样来运行 web 应用程序了。
嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。
26、shiro和oauth还有cas他们之间的关系是什么?问下您公司权限是如何设计,还有就是这几个概念的区别??
cas和oauth是一个解决单点登录的组件,shiro主要是负责权限安全方面的工作,所以功能点不一致。但往往需要单点登陆和权限控制一起来使用,所以就有 cas+shiro或者oauth+shiro这样的组合。
token一般是客户端登录后服务端生成的令牌,每次访问服务端会进行校验,一般保存到内存即可,也可以放到其他介质;redis可以做Session共享,如果前端web服务器有几台负载,但是需要保持用户登录的状态,这场景使用比较常见。
我们公司使用oauth+shiro这样的方式来做后台权限的管理,oauth负责多后台统一登录认证,shiro负责给登录用户赋予不同的访问权限。
28、Spring Cache 三种常用的缓存注解和意义?
@Cacheable ,用来声明方法是可缓存,将结果存储到缓存中以便后续使用相同参数调用时不需执行实际的方法,直接从缓存中取值。
@CachePut,使用 @CachePut 标注的方法在执行前,不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
@CacheEvict,是用来标注在需要清除缓存元素的方法或类上的,当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。
3.什么是Java Config?
Spring Java Config是Spring社区的一个产品,它提供了一种纯java方法来配置Spring IoC容器。因此,它有助于避免使用XML配置。使用JavaConfig的优点是:
(1)面向对象的配置。因为配置在JavaConfig中定义为类,所以用户可以充分利用Java中的面向对象特性。一个配置类可以子类化另一个配置类,覆盖它的@Bean方法,等等。
(2)减少或消除XML配置。已经证明了基于依赖注入原则的外部化配置的好处。然而,许多开发人员不愿意在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯java方法来配置Spring容器,这种方法在概念上类似于XML配置。从技术上讲,仅使用 JavaConfig配置类来配置容器是可行的,但是在实践中,许多人发现将JavaConfig与XML混合并匹配是理想的。
(3)类型安全的重构能力。JavaConfig提供了一种类型安全的配置Spring容器的方法。由于Java 5.0对泛型的支持,现在可以通过类型而不是名称检索bean,不需要进行任何基于类型转换或字符串的查找。
6.什么是FreeMarker模板?如何使用Spring Boot实现它?
FreeMarker:
即一种基于模板和要改变的数据, 并用来生成输出文本,用来在MVC模式的Web开发框架中生成HTML页面。
使用:
导入依赖包 --》 配置文件 ---》 html中引入依赖直接用
18、Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用@ImportResource注解导入老 Spring 项目配置文件。
19、保护 Spring Boot 应用有哪些方法?
在生产中使用HTTPS
使用Snyk检查你的依赖关系
更新到最新版本
启用CSRF保护
使用内容安全策略防止XSS攻击
5.什么是ELK堆栈?如何与Spring Boot一起使用?
ELK堆栈由三个开源产品组成:
Elasticsearch、Logstash和Kibana from Elastic。
Logstash是一个日志管道工具,它接受来自不同来源的输入,执行不同的转换,并将数据导出到不同的目标。它是一个动态的数据收集管道,具有可扩展的插件生态系统和强大的弹性搜索协同作用
Kibana是一个可视化UI层,工作在Elasticsearch之上。**
这三个项目一起用于各种环境中的日志分析。因此Logstash收集和解析日志、弹性搜索索引并存储这些信息,而Kibana提供了一个UI层,提供可操作的可见性。
Spring Boot + ELK stack