关于spring:Spring-全家桶Java之Sping-MVC-SpringBoot常见面试题总结附答案

37次阅读

共计 6220 个字符,预计需要花费 16 分钟才能阅读完成。

Spring 全家桶 100 问,常见面试题总结,一共分为三篇,本篇为第 1 篇!

一,Spring boot 有哪些形式能够实现热部署?

应用 devtools 启动热部署,增加 devtools 库,在配置文件中把 spring. devtools. restart. enabled 设置为 true;应用 Intellij Idea 编辑器,勾上主动编译或手动从新编译。109.jpa 和 hibernate 有什么区别?jpa 全称 Java Persistence API,是 Java 长久化接口标准,hibernate 属于 jpa 的具体实现。

二,Spring boot 外围配置文件是什么?

  1. 配置文件有 . properties 格局和 . yml 格局,它们次要的区别是书法格调不同。
  2. properties 配置如下:spring. RabbitMQ. port=5672
  3. yml 配置如下:spring: RabbitMQ: port: 5672
  4. yml 格局不反对 @PropertySource 注解导入。

三,为什么要用 spring boot?

  1. 配置简略
  2. 独立运行
  3. 主动拆卸
  4. 无代码生成和 xml 配置
  5. 提供利用监控
  6. 易上手
  7. 晋升开发效率

四,什么是 spring boot?

spring boot 是为 spring 服务的,是用来简化新 spring 利用的初始搭建以及开发过程的。

五,@Autowired 的作用是什么?

@Autowired 它能够对类成员变量、办法及构造函数进行标注,实现主动拆卸的工作,通过 @Autowired 的应用来打消 set/get 办法。

六,@RequestMapping 的作用是什么?

将 http 申请映射到相应的类 / 办法上。

七,Spring mvc 有哪些组件?

  1. 前置控制器 DispatcherServlet。
  2. 映射控制器 HandlerMapping。
  3. 处理器 Controller。
  4. 模型和视图 ModelAndView。
  5. 视图解析器 ViewResolver。

八,说一下 spring mvc 运行流程?

  1. spring mvc 先将申请发送给 DispatcherServlet。
  2. DispatcherServlet 查问一个或多个 HandlerMapping,找到解决申请的 Controller。
  3. DispatcherServlet 再把申请提交到对应的 Controller。
  4. Controller 进行业务逻辑解决后,会返回一个 ModelAndView。
  5. Dispathcher 查问一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象。
  6. 视图对象负责渲染返回给客户端。

九,说一下 spring 的事务隔离?

spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(应用数据库的设置),其余四个隔离级别和数据库的隔离级别统一:

ISOLATION_DEFAULT:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么;

ISOLATIONREADUNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可被其余事务读取(会呈现幻读、脏读、不可反复读);

ISOLATIONREADCOMMITTED:提交读,一个事务提交后能力被其余事务读取到(会造成幻读、不可反复读),SQL server 的默认级别;

ISOLATIONREPEATABLEREAD:可反复读,保障屡次读取同一个数据时,其值都和事务开始时候的内容是统一,禁止读取到别的事务未提交的数据(会造成幻读),MySQL 的默认级别;ISOLATION_SERIALIZABLE:序列化,代价最高最牢靠的隔离级别,该隔离级别能避免脏读、不可反复读、幻读。

脏读:示意一个事务可能读取另一个事务中还未提交的数据。比方,某个事务尝试插入记录 A,此时该事务还未提交,而后另一个事务尝试读取到了记录 A。

不可反复读:是指在一个事务内,屡次读同一数据。

幻读:指同一个事务内屡次查问返回的后果集不一样。比方同一个事务 A 第一次查问时候有 n 条记录,然而第二次同等条件下查问却有 n+1 条记录,这就如同产生了幻觉。产生幻读的起因也是另外一个事务新增或者删除或者批改了第一个事务后果集外面的数据,同一个记录的数据内容被批改了,所有数据行的记录就变多或者变少了。

十,spring 事务实现形式有哪些?

申明式事务:申明式事务也有两种实现形式,基于 xml 配置文件的形式和注解形式(在类上增加 @Transaction 注解)。

编码方式:提供编码的形

十一,spring 主动拆卸 bean 有哪些形式?
no:默认值,示意没有主动拆卸,应应用显式 bean 援用进行拆卸。

byName:它依据 bean 的名称注入对象依赖项。

byType:它依据类型注入对象依赖项。构造函数:通过构造函数来注入依赖项,须要设置大量的参数。

autodetect:容器首先通过构造函数应用 autowire 拆卸,如果不能,则通过 byType 主动拆卸。

十二,spring 反对几种 bean 的作用域?

spring 反对 5 种作用域,如下:

singleton:spring ioc 容器中只存在一个 bean 实例,bean 以单例模式存在,是零碎默认值;

prototype:每次从容器调用 bean 时都会创立一个新的示例,既每次 getBean() 相当于执行 new Bean() 操作;

request:每次 http 申请都会创立一个 bean;session:同一个 http session 共享一个 bean 实例;

global-session:用于 portlet 容器,因为每个 portlet 有独自的 session,globalsession 提供一个全局性的 http session。

留神:应用 prototype 作用域须要谨慎的思考,因为频繁创立和销毁 bean 会带来很大的性能开销。

十三,spring 中的 bean 是线程平安的吗?

spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装解决。实际上大部分时候 spring bean 无状态的(比方 dao 类),所有某种程度上来说 bean 也是平安的,但如果 bean 有状态的话(比方 view model 对象),那就要开发者本人去保障线程平安了,最简略的就是扭转 bean 的作用域,把“singleton”变更为“prototype”,这样申请 bean 相当于 new Bean() 了,所以就能够保障线程平安了。

有状态就是有数据存储性能。

无状态就是不会保留数据。

十四,spring 罕用的注入形式有哪些?

  1. setter 属性注入
  2. 构造方法注入
  3. 注解形式注入

十五,spring 有哪些次要模块?
spring core:框架的最根底局部,提供 ioc 和依赖注入个性。

spring context:构建于 core 封装包根底上的 context 封装包,提供了一种框架式的对象拜访办法。

spring dao:Data Access Object 提供了 JDBC 的形象层。

spring aop:提供了面向切面的编程实现,让你能够自定义拦截器、切点等。

spring Web:提供了针对 Web 开发的集成个性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。

spring Web mvc:spring 中的 mvc 封装包提供了 Web 利用的 Model-View-Controller(MVC)的实现。

十六,解释一下什么是 aop?

aop 是面向切面编程,通过预编译形式和运行期动静代理实现程序性能的对立保护的一种技术。简略来说就是对立解决某一“切面”(类)的问题的编程思维,比方对立解决日志、异样等。

十七,解释一下什么是 ioc?

ioc:Inversionof Control(中文:管制反转)是 spring 的外围,对于 spring 框架来说,就是由 spring 来负责管制对象的生命周期和对象间的关系。简略来说,管制指的是以后对象对外部成员的控制权;管制反转指的是,这种控制权不禁以后对象治理了,由其余(类, 第三方容器)来治理。

十八,为什么要应用 spring?

spring 提供 ioc 技术,容器会帮你治理依赖的对象,从而不须要本人创立和治理依赖对象了,更轻松的实现了程序的解耦。

spring 提供了事务反对,使得事务操作变的更加不便。

spring 提供了面向切片编程,这样能够更不便的解决某一类的问题。

更不便的框架集成,spring 能够很不便的集成其余框架,比方 MyBatis、hibernate 等。

十九,Java Web 如何防止 SQL 注入?

应用预处理 PreparedStatement。

应用正则表达式过滤掉字符中的特殊字符。

二十,spring mvc 和 struts 的区别是什么?

拦挡级别:struts2 是类级别的拦挡;spring mvc 是办法级别的拦挡。

数据独立性:spring mvc 的办法之间基本上独立的,独享 request 和 response 数据,申请数据通过参数获取,处理结果通过 ModelMap 交回给框架,办法之间不共享变量;而 struts2 尽管办法之间也是独立的,但其所有 action 变量是共享的,这不会影响程序运行,却给咱们编码和读程序时带来了肯定的麻烦。

拦挡机制:struts2 有以本人的 interceptor 机制,spring mvc 用的是独立的 aop 形式,这样导致 struts2 的配置文件量比 spring mvc 大。

对 ajax 的反对:spring mvc 集成了 ajax,所有 ajax 应用很不便,只须要一个注解 @ResponseBody 就能够实现了;而 struts2 个别须要装置插件或者本人写代码才行。


二十一,说一下 JSP 的 4 种作用域?

page:代表与一个页面相干的对象和属性。

request:代表与客户端收回的一个申请相干的对象和属性。一个申请可能逾越多个页面,波及多个 Web 组件;须要在页面显示的长期数据能够置于此作用域。

session:代表与某个用户与服务器建设的一次会话相干的对象和属性。跟某个用户相干的数据应该放在用户本人的 session 中。

application:代表与整个 Web 应用程序相干的对象和属性,它本质上是逾越整个 Web 应用程序,包含多个页面、申请和会话的一个全局作用域。

二十二,JSP 有哪些内置对象?作用别离是什么?
JSP 有 9 大内置对象:

request:封装客户端的申请,其中蕴含来自 get 或 post 申请的参数;

response:封装服务器对客户端的响应;

pageContext:通过该对象能够获取其余对象;

session:封装用户会话的对象;

application:封装服务器运行环境的对象;

out:输入服务器响应的输入流对象;

config:Web 利用的配置对象;

page:JSP 页面自身(相当于 Java 程序中的 this);

exception:封装页面抛出异样的对象。

二十三,说一下 session 的工作原理?

session 的工作原理是客户端登录实现之后,服务器会创立对应的 session,session 创立完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次拜访服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就能够失常工作了。

二十四,如果客户端禁止 cookie 能实现 session 还能用吗?
能够用,session 只是依赖 cookie 存储 sessionid,如果 cookie 被禁用了,能够应用 url 中增加 sessionid 的形式保障 session 能失常应用。

二十五,什么是 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,不须要任何强制转换或基于字符串的查找。

二十六,Spring Boot 主动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是主动配置的外围,

@EnableAutoConfiguration 给容器导入 META-INF/spring.factories 里定义的主动配置类。

筛选无效的主动配置类。

每一个主动配置类联合对应的 xxxProperties.java 读取配置文件进行主动配置性能

你如何了解 Spring Boot 配置加载程序?在 Spring Boot 外面,能够应用以下几种形式来加载配置。

1)properties 文件;

2)YAML 文件;

3)零碎环境变量;

4)命令行参数;

等等……

二十七,什么是 YAML?
YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果咱们想要在配置文件中增加简单的属性,YAML 文件就更加结构化,而且更少混同。能够看出 YAML 具备分层配置数据。

二十八,YAML 配置的劣势在哪里 ?
YAML 当初能够算是十分风行的一种配置文件格式了,无论是前端还是后端,都能够见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些劣势呢?

配置有序,在一些非凡的场景下,配置有序很要害 反对数组,数组中的元素能够是根本数据类型也能够是对象 简洁 相比 properties 配置文件,YAML 还有一个毛病,就是不反对 @PropertySource 注解导入自定义的 YAML 配置。

二十九,什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,次要是简化了应用 Spring 的难度,简省了沉重的配置,提供了各种启动器,开发者能疾速上手。

多年来,随着新性能的减少,spring 变得越来越简单。只需拜访 https://spring.io/projects 页面,咱们就会看到能够在咱们的应用程序中应用的所有 Spring 我的项目的不同性能。

如果必须启动一个新的 Spring 我的项目,咱们必须增加构建门路或增加 Maven 依赖关系,配置应用程序服务器,增加 spring 配置。

因而,开始一个新的 spring 我的项目须要很多致力,因为咱们当初必须从头开始做所有事件。

Spring Boot 是解决这个问题的办法。Spring Boot 曾经建设在现有 spring 框架之上。应用 spring 启动,咱们防止了之前咱们必须做的所有样板代码和配置。

因而,Spring Boot 能够帮忙咱们以起码的工作量,更加强壮地应用现有的 Spring 性能。

                         好了,第一篇完结!(求关注,别白嫖我)三连反对一下 谢谢!

正文完
 0