目录
前言:在熟悉SpringBoot框架面试题前,需要掌握Spring家族等ssm框架的面试题,有需要的小伙伴可以翻看下面小编的这篇博客:
一、SpringBoot
1、简述约定大于配置的含义
约定优于配置(Convention over Configuration),又称按约定编程,是一种软件设计范式。
本质上是说,系统、类库或框架应该假定合理的默认值,而非要求提供不必要的配置。
约定优于配置简单来理解,就是遵循约定。
2、SpringBoot的优缺点
spring的缺点:虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。 除此之外,项目的依赖管理也是一件耗时耗力的事情。
起步依赖 :简单的说,起步依赖就是将具备某种功能的依赖坐标打包到一起,并提供一些默认的功能。
自动配置 :springboot会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用@autowired或者@resource等注解来使用它。
3、热部署
在开发过程中,通常会对一段业务代码不断地修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作极大的降低了程序开发效率。为此,Spring Boot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目 。
热部署:在修改完代码之后,不需要重新启动容器,就可以实现更新。
使用步骤:
1)添加SpringBoot的热部署依赖启动器
2)开启Idea的自动编译
3)开启Idea的在项目运行中自动编译的功能
4、SpringBoot的全局配置文件
Spring Boot配置文件的命名及其格式:
-
application.properties
-
application.yaml
-
application.yml
yml>yaml>properties
5、Spring Boot 需要独立的容器运行吗?
不需要,Spring Boot内置了 Tomcat/ Jetty 等容器。
6、为什么导入dependency时不需要指定版本?
在Spring Boot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-web。将spring-boot-starter-parent依赖作为Spring Boot项目的统一父项目依赖管理,并将项目版本号统一为2.2.2.RELEASE,该版本号根据实际开发需求是可以修改的;spring-boot-starter-web依赖启动器的主要作用是提供Web开发场景所需的底层所有依赖。
7、SpringBoot的自动配置原理
springboot应用启动;
@SpringBootApplication起作用;
@EnableAutoConfiguration,开启自动配置功能;
@AutoConfigurationPackage:这个组合注解主要是@Import(AutoConfigurationPackages.Registrar.class),它通过将Registrar类导入到容器中,而Registrar类作用是扫描主配置类同级目录以及子包,并将相应的组件导入到springboot创建管理的容器中;
@Import(AutoConfigurationImportSelector.class):它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法执行的过程中,会使用内部工具类SpringFactoriesLoader,查找classpath上所有jar包中的META-INF/spring.factories进行加载,实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程
8、Spring Boot整合MyBatis
- 在 pom.xml 文件中添加 MyBatis 依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
2.创建数据库配置文件 application.yml,在其中配置数据库连接信息。
3.在启动类上添加 @MapperScan 注解,用于扫描 MyBatis 的接口。
@MapperScan("com.example.demo.mapper")
4.创建 MyBatis 接口,并使用 @Mapper 注解标注。
@Mapperpublic interface UserMapper { // ...}
这样就完成了 Spring Boot 与 MyBatis 的整合,您就可以在项目中使用 MyBatis 操作数据库了。
9、SpringBoot整合redis
1.添加依赖,在项目的pom.xml中添加如下:
<!-- redis依赖包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.在application.yml中配置redis数据库连接信息,如下:
#redis配置 #Redis服务器地址 spring.redis.host=127.0.0.1 #Redis服务器连接端口 spring.redis.port=6379 #Redis数据库索引(默认为0) spring.redis.database=0 #连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=50 #连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=3000 #连接池中的最大空闲连接 spring.redis.jedis.pool.max-idle=20 #连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=2 #连接超时时间(毫秒) spring.redis.timeout=5000
3.编写Redis操作工具类
4.写一个测试用例类来完成对redis的整合 ,测试成功即整合成功。
10、security是什么 ,作用?
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。
用户认证、会话管理和密码加密等功能。
11、说说Security 流程
1、 首先, 当用户登录时, 前端会把用户输入的用户名、 密码信息传输到后台, 后台用一个类对象将其封装起来,通常使用的是UsernamePasswordAuthenticationToken这个类。
2、 再来, 到程序负责验证这个类对象。 验证方法是调用Service根据username从数据库中取用户信息到实体类的实例中,比较两者的密码, 如果密码正确就成功登陆, 同时把包含着用户的用户名、 密码、 所具有的权限等信息的类对象放到SecurityContextHolder(安全上下文容器, 类似Session) 中去。
3、 其次, 在用户访问一个资源的时候, 需要先判断是否是受限资源。 如果是的话还要判断当前是否未登录,没有的话就跳到登录页面。
4、 最后!如果用户已经登录, 并访问一个受限资源的时候, 程序要根据url去数据库中取出该资源所对应的所有可以访问的角色, 然后拿着当前用户的所有角色一一对比, 判断用户是否可以访问。
12、Spring Boot整合Spring Security
见小编自己的Spring Boot-new文件夹下的Security 下的Security .md。
13、跨域的理解,SprinBoot中跨域的三种解决方法?
跨域是指不同域名之间的相互访问,这是由浏览器的同源策略决定的,同源就是说协议 ,域名,端口号完全一致,有一个不一致就会造成跨域问题。
解决办法:
1. CrossOrigin注解,表示所有的URL均可访问此资源
2.实现WebMvcConfigurer,重写addCorsMappings方法就行,配置好参数。这个配置属于全局配置,配置好了全部的接口都遵循此规则。
3.过滤器配置
14、SpringBoot实现定时任务
1、添加schedule依赖
<!--添加schedule依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
2、添加@Scheduled(cron = "0/2 * * * * ?") //每个两秒触发一次,表示多久触发一次
3、启动类添加注解,启动定时任务
@EnableScheduling
二、Linux
- 介绍下Linux的常用命令
常用的文件操作:ls、cd、mkdir、mv、cp、tar、vi等
常用的用户操作:useradd、userdel、su、groupadd等
常用的进程操作:netstat、 lsof -i:3306、ps –ef、kill等
常用的权限操作:chmod、chown等
2.介绍下Vi命令的使用过程
Vi 打开文件
输入i进入编辑模式,修改文件内容
输入esc进入命令模式,输入:wq保存退出
3、介绍下MySQL主从复制
随着软件系统的用户量逐渐递增,MySQL数据库的压力会越来越大,有时候一台数据库就扛不住了,这是就需要多台数据库来一起分工合作。
过程:
1) 主数据库的写操作都会记录到一个二进制日志文件bin-log中
2) 从数据库会启动一个IO线程,不断去读取日志文件中的内容
3) 如果有写操作,IO线程会写到自己的 Relay日志中
4) 从数据库同时还会启动一个SQL 线程,不断去读取Relay日志中的操作
5) 如果读到写操作,再转换为SQL语句,更新从数据库的对应数据
三、Redis
关于Redis 的面试题,可以查看小编的收藏目录下的面试题补充,里面有关于Redis 的学习文章。