1.何为Spring Bean容器?Spring Bean容器与Spring IOC容器有什么不同吗?

用于创建bean对象,管理bean对象的那个容器Spring IOC容器本质上指的是Spring Bean容器,核心机制就是IOC机制(控制反转),所以有时候又将Spring Bean容器称为Spring IOC容器。

2.Spring IOC如何理解?

IOC是Spring中的一种控制反转机制,目的:将项中对象的依赖管理交给Spring管理,实现对象管理的解耦,提高程序的可扩展性。

3.Spring DI如何理解?

DI是spring的依赖注入机制,IOC的实现需要这种机制,IOC思想是一种目标,DI是实现目标的手段。

4.Spring中基于注解如何配置对象作用域?以及如何配置延迟加载机制?

1.配置作用域需要注解@Scope(“Singleton”)

  • 单例(Singleton):在整个应用中,只创建 Bean 的一个实例。
  • 原型(Prototype):每次注入或者通过 Spring 应用上下文获取的时候,都会创建一个新的 Bean 实例。
  • 会话(Session): 在 Web 应用中,为每个会话创建一个 Bean 实例。
  • 请求(Request):在 Web 应用中,为每个请求创建一个 Bean 实例。
    2.开启延迟加载:@Lazy(value=true)

5.Spring工厂底层构建Bean对象借助什么机制?当对象不使用要释放资源,目的是什么?何为内存泄漏?

1.借助反射机制,防止内存泄漏。
2.不使用释放资源防止内存泄漏。
3.对象不再使用但占着内部,为内存泄漏。

6.描述Spring MVC处理流程及应用优势

1.用户发送请求至前端控制器(DispatcherServlet);
提示:DispatcherServlet的作用:接收请求,调用其它组件处理请求,响应结果,相当于转发器、中央处理器,是整个流程控制的中心。
2.前端控制器(DispatcherServlet)收到请求后调用处理器映射器(HandlerMapping),处理器映射器(HandlerMapping)找到具体的Controller返回给前端控制器;
3.前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter);

4.前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析器(ViewReslover),
视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面;
5.前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据填充至视图中),
前端控制器(DispatcherServlet)将填充了数据的网页响应给用户;

7.Mybatis应用中#与$有什么异同点?

相同点:都是通过get来取值的;
不同点:$传过去的字符串不带引号,#号带引号;

8.Mybatis应用动态SQL解决了什么问题?

提供多种注解,可以提供动态查询语句,

9.Shiro框架权限管理时的认证和授权流程描述

应用代码->调用Subject(登录用户)控制权限->Subject在shiro内部调用SecurityManager(安全管理器)->安全管理器调用Realm(程序和安全数据连接器,连接后台数据库)

10.请解释Spring Bean的生命周期

第三阶段-Spring面试题

11.Spring Bean的作用域之间的区别

第三阶段-Spring面试题

12.在Spring AOP中,关注点和横切关注的区别是什么

**AOP:**这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。

13.使用Spring框架的好处

  • 轻量:Spring是轻量的,基本版本大约2MB
  • 控制反转:把创建对象全权交给Spring管理
  • 面向切面的编程(AOP):把应用业务逻辑和系统服务分开
  • 容器:管理应用中对象的生命周期和配置
  • MVC框架:是web框架的一个很好的替代品
  • 事务管理:被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行
  • 异常管理:提供方便的API把具体技术相关的异常

14.Spring 中用到了那些设计模式?

  • 代理模式—在AOP和remoting中被用的比较多。
  • 单例模式—在spring配置文件中定义的bean默认为单例模式。
  • 模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
  • 工厂模式—BeanFactory用来创建对象的实例。
  • 适配器–spring aop
  • 装饰器–spring data hashmapper
  • 观察者– spring 时间驱动模型
  • 回调–Spring ResourceLoaderAware回调接口

15.在Spring中如何注入一个java集合

  • list类型用于注入一列值,允许有相同的值。
  • set 类型用于注入一组值,不允许有相同的值。
  • map类型用于注入一组键值对,键和值都可以为任意类型。
  • props类型用于注入一组键值对,键和值都只能为String类型

16.Spring支持的事务管理类型

  • 编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。
  • 声明式事务管理:这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或者XML配置管理事务。

17.Spring MVC的主要组件?

1.前端控制器 DispatcherServlet
2.处理器映射器HandlerMapping
3.处理器适配器HandlerAdapter
4.处理器Handler
5.视图解析器 ViewResolver
6.视图View

18.Mybatis中#和$的区别

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

19.Mybatis的缓存机制,一级,二级介绍一下

1.一级缓存

  • 默认开启

  • SqlSession级别的缓存,实现在同一个会话中数据的共享

  • 一级缓存的生命周期和SqlSession一致

  • 当有多个SqlSession或者分布式环境下,数据库写操作会引起脏数据。
    2.二级缓存

  • 默认不开启,需手动开启

  • SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量;

  • 可自定义存储源,如Ehcache;

  • 当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库;

  • 不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率实现;

20.SpringMVC和Struts2的区别

  • Springmvc的入口是一个servlet即前端控制器,基于方法开发;
  • struts2入口是一个filter过虑器,基于类开发;

21.Mybatis的基本工作流程

1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。
2.有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡
3.SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭
4.当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。
5.将返回的结果通过映射,包装成java对象。
总结

  • 创建SqlSessionFactory
  • 通过SqlSessionFactory创建SqlSession
  • 通过SqlSession执行数据库操作
  • 调用session.commit()提交事务
  • 调用session.close()关闭事务

22.使用MyBatis的mapper接口调用时有哪些要求?

Mapper接口方法名和mapper.xml中定义的每个sql的id相同
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
Mapper.xml文件中的namespace即是mapper接口的类路径

23.

相关文章:

  • 2021-04-09
  • 2021-07-11
  • 2021-07-01
  • 2021-06-07
  • 2021-08-02
  • 2022-12-23
  • 2022-01-30
  • 2022-02-25
猜你喜欢
  • 2021-12-19
  • 2022-03-04
  • 2021-11-13
  • 2021-12-03
  • 2022-12-23
  • 2021-07-08
  • 2021-10-26
相关资源
相似解决方案