java SSM及Springboot框架面试点整合

目录

Mybatis

1.什么是Mybatis?

2.为什么要用Mybatis?

3.Mybatis 的三种执行?

4.数据库三大范式是什么?

5.什么是游标?

6.MySQL存储引擎MyISAM与InnoDB区别?

7.InnoDB引擎的4大特性?

8.什么是索引?

9.哪些情况下索引会失效?

9.事物的四大特性(ACID)介绍一下?

10.什么是脏读?幻读?不可重复读?

11.什么是事务的隔离级别?MySQL的默认隔离级别是什么?

12.数据库的乐观锁和悲观锁是什么?怎么实现的?

13.什么是存储过程?

14.什么是触发器?

15.mysql中 in 和 exists 区别?

16.drop、delete与truncate的区别?

17.SQL优化?

18.大表数据查询,怎么优化

19.sql语句里面的choose when的使用?

20.常用函数?

21.防止sql注入

Spring

1.简单说一下spring?

2.IOC了解一哈?

3.AOP了解一哈?

SpringMVC

1.什么是Spring MVC?

2.请描述Spring MVC的工作流程?

3.Spring MVC常用的注解有哪些?

4.Spring MVC与Struts2区别?

5.重定向和转发的区别?

6.如何解决POST请求中文乱码问题,GET的又如何处理呢?

Springboot

1.SpringBoot配置devtools实现热部署?

2.什么是 Spring Boot?

3.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

4.什么是 JavaConfig?

5.Spring Boot 自动配置原理是什么?

6.比较一下 Spring Security 和 Shiro 各自的优缺点 ?

7.Spring Boot中的监视器是什么? 

8.什么是YAML? 

9.什么是 Spring Boot Stater?

10.springboot常用的starter有哪些?

11.Spring Boot Starter的工作原理?

12.RequestMapping 和 GetMapping 的不同之处在哪里?

14.Spring Boot 有哪几种读取配置的方式?

15.Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

17.Spring MVC/Boot 统一异常处理最佳实践?


Mybatis

1.什么是Mybatis?

  • Mybatis是一款优秀的持久层框架
  • 他支持定制化sql,存储过程以及高级映射
  • 他几乎避免了所有的JDBC代码,手动设置参数以及获取结果集。

2.为什么要用Mybatis?

  • 帮助程序员将数据存入到数据库中;
  • 传统的JDBC太复杂,简化了其操作,方便,简单,易上手;
  • 灵活,sql和代码的分离,提高了可维护性;
  • 提供xml标签,支持编写动态sql;
  • 使用的人多;

3.Mybatis 的三种执行?

  • SIMPLE: 默认的执行器, 对每条sql进行预编译->设置参数->执行等操作
  • BATCH: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作
  • REUSE: REUSE 执行器会重用预处理语句(prepared statements

4.数据库三大范式是什么?

  1. 第一范式:每个列都不可以再拆分。
  2. 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
  3. 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

5.什么是游标?

游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录并赋给主变量,交由主语言进一步处理。

6.MySQL存储引擎MyISAM与InnoDB区别?

MySQL中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

  • Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
  • MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
  • MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。

区别:

  1. InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
  2. InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
  3. MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
  4. InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。

7.InnoDB引擎的4大特性?

  • 插入缓冲(insert buffer)

  • 二次写(double write)

  • 自适应哈希索引(ahi)

  • 预读(read ahead)

8.什么是索引?

是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。

索引的优点:

  • 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

索引的缺点:

  • 时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
  • 空间方面:索引需要占物理空间。

索引的基本原理:(就是把无序的数据变成有序的查询

  1. 把创建了索引的列的内容进行排序

  2. 对排序结果生成倒排表

  3. 在倒排表内容上拼上数据地址链

  4. 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

9.哪些情况下索引会失效?

  1. 如果条件中有or,即使其中有条件带索引也不会使用。
  2. like查询是以%开头,索引会失效,以%结尾,不会失效。
  3. 查询条件中的列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。
  4. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

9.事物的四大特性(ACID)介绍一下?

  1. 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
  3. 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  4. 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

10.什么是脏读?幻读?不可重复读?

  • 脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
  • 不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
  • 幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

11.什么是事务的隔离级别?MySQL的默认隔离级别是什么?

Mysql 默认采用的 REPEATABLE_READ隔离级别;Oracle 默认采用的 READ_COMMITTED隔离级别

java SSM及Springboot框架面试点整合_第1张图片

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

12.数据库的乐观锁和悲观锁是什么?怎么实现的?

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制(一般多写的场景下用悲观锁就比较合适

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。实现方式:乐一般会使用版本号机制或CAS算法实现。(乐观锁适用于写比较少的情况下(多读场景)

13.什么是存储过程?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需要创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

14.什么是触发器?

触发器是用户定义在关系表上的一类由事件驱动的特殊的存储过程。触发器是指一段代码,当触发某个事件时,自动执行这些代码。在MySQL数据库中有如下六种触发器:

  • Before Insert
  • After Insert
  • Before Update
  • After Update
  • Before Delete
  • After Delete

15.mysql中 in 和 exists 区别?

mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。

  1. 如果查询的两个表大小相当,那么用in和exists差别不大。
  2. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。
  3. not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

16.drop、delete与truncate的区别?

java SSM及Springboot框架面试点整合_第2张图片

17.SQL优化?

SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts最好.

对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划,MySQL提供了explain命令来查看语句的执行计划。对于查询语句,最重要的优化方式就是使用索引。 而执行计划,就是显示数据库引擎对于SQL语句的执行的详细情况,其中包含了是否使用索引,使用什么索引,使用的索引的相关信息等。

18.大表数据查询,怎么优化

  1. 优化shema、sql语句+索引;
  2. 第二加缓存,memcached, redis;
  3. 主从复制,读写分离;(主库负责写,从库负责读)
  4. 垂直拆分,根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
  5. 水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key, 为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;

19.sql语句里面的choose when的使用?

java SSM及Springboot框架面试点整合_第3张图片

20.常用函数?

  1. instr(field, str) 第一个参数 field 是列字段,第二个参数 str 是要查询的串。select * from book where INSTR( book_name , "经" ) ----mysql 进行模糊查询时,可使用内部函数 instr,替代传统的 like 方式,并且速度更快。select instr(book_name, '水')  from book  ----返回串 str 的位置,没找到就是0。

21.防止sql注入

简而言之,SQL注入意味着通过用户输入的数据在查询中注入/插入SQL代码。

SQL注入的四种类型:

  • 基于布尔SQL注入

  • 基于联合SQL注入

java SSM及Springboot框架面试点整合_第4张图片

  • 基于时间SQL注入

java SSM及Springboot框架面试点整合_第5张图片

  • 基于错误SQL注入

在这种变体中,攻击者试图从数据库中获取信息,例如错误代码和消息。 攻击者注入SQL在语法上是不正确的,因此数据库服务器将返回错误代码和消息,这些错误代码和消息可用于获取数据库和系统信息。

解决方案:

  • 使用PreparedStatement而不是Statement来执行查询,从请求接收的用户名和密码的值仅被视为数据,因此不会发生SQL注入。
  • 通过正则表达式等在查询中使用数据之前,请先对其进行验证。
  • 不要使用常用词作为表名或列名。 例如,许多应用程序使用tbluser或tblaccount来存储用户数据。 电子邮件,名,姓是常用的列名。
  • 不要直接串联数据(作为用户输入接收)来创建SQL查询。
  • 通过权限和授予限制应用程序对数据库的访问。
  • 不要将敏感的错误代码和消息返回给最终用户。

注:mybatis底层其实就是使用了PreparedStatement,在编写MyBatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。使用#即输入参数在SQL中拼接的部分,传入参数后,打印出执行的SQL语句,会看到SQL是这样的:【 select id, username, password, role from user where username=? and password=? 】不管输入什么参数,打印出的SQL都是这样的。这是因为MyBatis启用了预编译功能,在SQL执行前,会先将上面的SQL发送给数据库进行编译;执行时,直接使用编译好的SQL,替换占位符“?”就可以了。因为SQL注入只能对编译过程起作用,所以这样的方式就很好地避免了SQL注入的问题。

 

 

Spring

1.简单说一下spring?

spring是轻量级的开源的javaEE框架,他可以解决企业应用开发的复杂性。spring有俩个核心部分,AOP面向切面编程及IOC控制反转。他的特点为:方便解耦,简化开发;支持AOP编程;方便程序测试;方便进行事务操作;方便与其他框架整合;

2.IOC了解一哈?

IOC是spring的俩大核心概念之一,IOC提供了一个bean容器,这个容器会帮助我们去创建对象,而不需要我们手动的去创建对象。IOC容器有一个非常强大的功能DI,依赖注入。我们可以通过写java代码和基于xml的自动装配的方式,把我们想要注入对象所依赖的一些其他的bean自动的注入进去。正是因为依赖注入,使得IOC有了非常强大的功能解耦。比如JDBCTemplate,将它注入到容器中,是需要一个数据源的。如果JDBCTemplate和德鲁伊的数据源强耦合在一起,会导致我们要想使用JDBCTemplate,必须使用德鲁伊的数据源。而通过依赖注入,我们只需要在注入的时候将他依赖一个datasource接口,不需要去依赖具体的实现,这样的好处是将来我们注入一个德鲁伊的数据源,它会自动帮我们将其注入到JDBCTemplate,如果我们注入其他的数据源,其他的数据源,也是一样的。这样JDBCTemplate和我们的数据源就已经完全的解耦和了。它不强依赖于任何一个数据源。同时程序在启动的时候,就会把所有的bean帮我们全部创建好,程序运行的时候就不需要再创建bean,提高的程序的运行速度。IOC中帮我们管理着很多的bean,像service,mapper,controller在我们的容器中只有一份,用的时候直接注入就行了,不需要我们再为了这些类去独立的写单例,节省了我们的时间。

  • IOC底层原理:(xml解析,工厂模式,反射)

java SSM及Springboot框架面试点整合_第6张图片

  • IOC接口:(IOC思想基于IOC容器来完成,IOC容器底层就是对象工厂)

java SSM及Springboot框架面试点整合_第7张图片

3.AOP了解一哈?

AOP是面向切面编程,在日常工作当中,会遇到很多重复性的代码,比如说事物,比如说日志。我们需要在很多类里边,同时把这些代码全部写进去,这样的话是非常非常麻烦的,就比如说事务,我们需要在所有的service层里边去开启事务,提交回滚,这些事情我们都要写,但是能不能不写。当然可以,spring的AOP就给我们提供这些方式。我们可以把这些共有的代码抽象出来,然后切入到我们想要切入的类里面,这样使各部分之间的耦合度降低,提高了代码的可重用性,同时提高了开发效率。AOP的实现是依靠动态代理来完成的,如果我们将来要代理的这个对象,他有接口,那我们就使用JDK动态代理来创建接口实现类代理对象,增强类的方法。如果他没有实现任何的借口,他会采用CGLib动态代理创建子类的代理对象,增强类的方法。

 

 

SpringMVC

1.什么是Spring MVC?

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。优点:

(1)可以支持各种视图技术,而不仅仅局限于JSP;

(2)与Spring框架集成(如IoC容器、AOP等);

(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。

(4) 支持各种请求资源的映射策略。

2.请描述Spring MVC的工作流程?

  1. 用户发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter处理器适配器;
  5. HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
  6. Handler执行完成返回ModelAndView;
  7. HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
  9. ViewResolver解析后返回具体View;
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户。

3.Spring MVC常用的注解有哪些?

  • @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
  • @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
  • @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
  • @Controller:标记一个类是Controller。

@PathVariable和@RequestParam的区别:@PathVariable主要用于接收http://host:port/path/{参数值}数据。@RequestParam主要用于接收http://host:port/path?参数名=参数值数据,这里后面也可以不跟参数值。

4.Spring MVC与Struts2区别?

相同点:

  • 都是基于mvc的表现层框架,都用于web项目的开发。

不同点:

  • 1.前端控制器不一样。Spring MVC的前端控制器是servlet:DispatcherServlet。struts2的前端控制器是filter:StrutsPreparedAndExcutorFilter。
  • 2.请求参数的接收方式不一样。Spring MVC是使用方法的形参接收请求的参数,基于方法的开发,线程安全,可以设计为单例或者多例的开发,推荐使用单例模式的开发(执行效率更高),默认就是单例开发模式。struts2是通过类的成员变量接收请求的参数,是基于类的开发,线程不安全,只能设计为多例的开发。
  • 3.Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,Spring MVC通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
  • 4.与spring整合不一样。Spring MVC是spring框架的一部分,不需要整合。在企业项目中,Spring MVC使用更多一些。

5.重定向和转发的区别?

  1. 转发在服务器端完成的;重定向是在客户端完成的
  2. 转发的速度快;重定向速度慢
  3. 转发的是同一次请求;重定向是两次不同请求
  4. 转发不会执行转发后的代码;重定向会执行重定向之后的代码
  5. 转发地址栏没有变化;重定向地址栏有变化
  6. 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

6.如何解决POST请求中文乱码问题,GET的又如何处理呢?

解决post请求乱码问题:

  • 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

get请求中文参数出现乱码解决方法有两个:

  • ①修改tomcat配置文件添加编码与工程编码一致
  • ②另外一种方法对参数进行重新编码:(String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”);ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。)

 

 

Springboot

1.SpringBoot配置devtools实现热部署?

https://www.cnblogs.com/liu2-/p/9118393.html

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

devtools的原理:深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

注意:在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。在SprintApplication.run之前调用System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全关闭重启支持。

2.什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,约定大于配置,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

  • 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
  • 开箱即用,远离繁琐的配置。
  • 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、监控、高速缓存等。
  • 没有代码生成,也不需要XML配置。
  • 避免大量的 Maven 导入和各种版本冲突

3.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,标注这个类是一个springboot的应用。主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

4.什么是 JavaConfig?

Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:

  • (1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
  • (2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
  • (3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

5.Spring Boot 自动配置原理是什么?

Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性进行自动配置功能,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。

6.比较一下 Spring Security 和 Shiro 各自的优缺点 ?

  1. Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
  2. Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
  3. Spring Security 功能强大;Shiro 功能简单

7.Spring Boot中的监视器是什么? 

Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。 

8.什么是YAML? 

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。 与properties相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。

9.什么是 Spring Boot Stater?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。

10.springboot常用的starter有哪些?

  • spring-boot-starter-web :提bai供 Spring MVC + 嵌入式的 Tomcat 。web开发du一整套
  • mybatis-spring-boot-starter :提供 MyBatis持久层操作数据库zhi
  • spring-boot-starter-test:提供完备的测试功能
  • spring-boot-starter-thymeleaf:提供Thymeleaf模板dao视图整合
  • spring-boot-starter-actuator:提供生产级监控
  • spring-boot-starter-security :使用 SpringSecurity 进行身份验证和授权
  • spring-boot-starter-data-redis`:提供 Redis整合能力

11.Spring Boot Starter的工作原理?

  • Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR ;
  • 根据spring.factories配置加载AutoConfigure类 ;
  • 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context 。

12.RequestMapping 和 GetMapping 的不同之处在哪里?

  • RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。

  • GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

14.Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @Value, @ConfigurationProperties 来绑定变量。【@Value("${info.address}");@ConfigurationProperties(prefix = "info")】

15.Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

17.Spring MVC/Boot 统一异常处理最佳实践?

http://www.zhaojun.im/springboot-exception/

 

 

你可能感兴趣的:(框架整合,java)