主流框架面试题

1.Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?
答:@Scope(“singleton”)
@Scope(“prototype”)
@Lazy(value=true)

2.Mybatis 中#和$的区别?

1.#{}是预编译处理,${}是字符串替换。
2.Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
3.Mybatis在处理${}时,就是把${}替换成变量的值,相当于字符串拼接
4.使用#{}可以有效的防止SQL注入,提高系统安全性。

3.描述Spring MVC处理流程及应用优势
1.控制器接受用户的请求,调用模型处理业务,并返回数据给控制器。
2.控制器调用视图显示处理结果。并通过视图呈现给用户。
3.视图层发送请求到控制层进行数据校验,类型转换,异常处理等,然后在控制层调用模型处理业务,进行数据的持久化,最后跳转页面并展示数据。

4.Shiro框架权限管理时的认证和授权流程描述.
答:Shiro权限控制流程的原理:
应用代码 —- 调用Subject (shiro的Subject 就代表当前登陆用户) 控制权限 —- Subject 在shiro框架内部 调用 Shiro SecurityManager 安全管理器 —– 安全管理器调用 Realm (程序和安全数据连接器 )。
Subject要进行任何操作,都必须要调用安全管理器(对我们来说是自动的)。 
而安全管理器会调用指定的Realms对象,来连接安全数据。
Realms用来编写安全代码逻辑和访问安全数据,是连接程序和安全数据的桥梁。

5.使用Spring框架的好处是什么?
轻量:spring是轻量的。
控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器:Spring 包含并管理应用中对象的生命周期和配置。
MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

6.Spring 中用到了那些设计模式?
Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的:
代理模式—在AOP和remoting中被用的比较多。
单例模式—在spring配置文件中定义的bean默认为单例模式。
模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
工厂模式—BeanFactory用来创建对象的实例。
适配器–spring aop
装饰器–spring data hashmapper
观察者– spring 时间驱动模型
回调–Spring ResourceLoaderAware回调接口

7.SpringMvc怎么和AJAX相互调用的?
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
(1)加入Jackson.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上

8.mybatis的缓存机制,一级,二级介绍一下
一级缓存
默认开启
SqlSession级别的缓存,实现在同一个会话中数据的共享
一级缓存的生命周期和SqlSession一致
当有多个SqlSession或者分布式环境下,数据库写操作会引起脏数据。
二级缓存
默认不开启,需手动开启
SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量
可自定义存储源,如Ehcache
当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库
不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率实现
实体类实现序列化,在mapper文件中开启
在配置文件中设置cacheEnabled为true

9.Mybatis都有哪些Executor执行器?它们之间的区别是什么?
答:Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。
SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。
ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map<String, Statement>内,供下一次使用。简言之,就是重复使用Statement对象。
BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。
作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。

10.MyBatis的好处是什么
Mybatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便利。 
Mybatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java数据库编程的重复工作。 
因为Mybatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句

11.解释Spring支持的几种bean的作用域
Spring框架支持以下五种bean的作用域:
singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean的作用域是Singleton。

12.AOP作用是什么,底层如何实现在哪些地方会用到,分别简述切面,切入点和通知。
AOP:面向切面编程:将一个系统中共同的业务逻辑提取出来,进行单独的封装成一个组件(切面),然后以配置的方式作用于系统中,实现程序的可插拔性,提高代码的复用性,提升系统的灵活性和性能
底层实现:JDK动态代理,只支持接口注入CGLIB:可以支持普通类的注入
那些地方会用到:事务开启,日志记录,安全验证,权限验证
切面:系统中共通的业务提取出来,在某个时刻或者某个阶段共同调用
切入点:找到目标方法,给它追加共通的业务逻辑,在spring中提供了切入点表达式帮助我们找到目标方法execution
通知:什么时候调用这个共通的业务逻辑,用于指定切面方法作用到系统中的时机.前置通知,后置通知,环绕通知,异常通知,最终通知。

13.Spring中AutoWired和,Resource之间区别是什么
AutoWried:按照类型进行匹配—spring框架自带的,查看当前Spring容器中那个bean类型和引用类型一致,就进行注入,如果有多个匹配类型就会报错.
Resource:默认按照名称进行注入,如果找不到对应的名称按照bean类型进行注入

14.请解释Spring Bean的生命周期?
Spring Bean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。

15.SpringBoot全新开发方式特点
创建独立的Spring应用程序
嵌入的Tomcat,无需部署WAR文件
简化Maven配置
自动配置Spring
提供生产就绪型功能,如指标,健康检查和外部配置

16、Spring中的@RestController和@Controller有什么区别

  • @Controller:标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象
  • @RestController:原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。

17.为什么Mybatis需要将参数封装为Map
答案:Mybatis规定一般的参数只能进行单值传参,不能多值传参.但是有时业务需要必须进行多值传递.那么这时需要将多值,封装为单值.为了解决多值传参的问题,Mybatis提供了@Param注解,其作用将参数封装为Map集合.

18、MyBatis有几种分页方式?
分页方式:逻辑分页和物理分页
逻辑分页:使用 MyBatis 自带的RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。
物理分页:自己手写limit,SQL分页或使用分页插件,去数据库查询指定条数的分页数据的形式。

原文地址:https://www.cnblogs.com/liangxr/p/13870287.html