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

image.png

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

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

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

二,Spring boot 核心配置文件是什么?面试

  1. 配置文件有 . properties 格式和 . yml 格式,它们主要的区别是书法风格不一样。
  2. properties 配置以下: spring. RabbitMQ. port=5672
  3. yml 配置以下: spring: RabbitMQ: port: 5672
  4. yml 格式不支持 @PropertySource 注解导入。

三,为何要用 spring boot?ajax

  1. 配置简单
  2. 独立运行
  3. 自动装配
  4. 无代码生成和 xml 配置
  5. 提供应用监控
  6. 易上手
  7. 提高开发效率

四,什么是 spring boot?正则表达式

spring boot 是为 spring 服务的,是用来简化新 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 注解)。

编码方式:提供编码的形image.png

十一,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 通常须要安装插件或者本身写代码才行。

image.png
二十一,说一下 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功能。

好了,第一篇完结!

                  (求关注,别白嫖我)三连支持一下 谢谢!

image.png

相关文章
相关标签/搜索