Java SpringBoot框架面试题(入门必看)

目录

一、SpringBoot

二、Linux

三、Redis 


前言:在熟悉SpringBoot框架面试题前,需要掌握Spring家族等ssm框架的面试题,有需要的小伙伴可以翻看下面小编的这篇博客:

Java 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的自动配置原理

  1. springboot应用启动;

  2. @SpringBootApplication起作用;

  3. @EnableAutoConfiguration,开启自动配置功能;

  4. @AutoConfigurationPackage:这个组合注解主要是@Import(AutoConfigurationPackages.Registrar.class),它通过将Registrar类导入到容器中,而Registrar类作用是扫描主配置类同级目录以及子包,并将相应的组件导入到springboot创建管理的容器中;

  5. @Import(AutoConfigurationImportSelector.class):它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法执行的过程中,会使用内部工具类SpringFactoriesLoader,查找classpath上所有jar包中的META-INF/spring.factories进行加载,实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程

8、Spring Boot整合MyBatis

  1. 在 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

  1. 介绍下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 的学习文章。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值