java面试重点知识总结01

一.SpringMVC执行流程和原理 SpringMVC流程:

在这里插入图片描述
1、用户发送出请求到前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器
(如果有),再一起返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter(处理器适配器)。
5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
6、Controller执行完成返回ModelAndView对象。
7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
9、ViewReslover解析后返回具体View(视图)。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。

二.讲讲Spring加载流程。

初始化环境—>加载配置文件—>实例化Bean—>调用Bean显示信息
首先从大的几个核心步骤来去说明,因为Spring中的具体加载过程和用到的类实在是太多了。
1、首先是先从AbstractBeanFactory中去调用doGetBean(name, requiredType, final Object[] args,
boolean typeCheckOnly【这个是判断进行创建bean还是仅仅用来做类型检查】)方法,然后第一步要
做的就是先去对传入的参数name进行做转换,因为有可能传进来的name=“&XXX”之类,需要去除&符 号2、然后接着是去调用getSingleton()方法,其实在上一个面试题中已经提到了这个方法,这个方法就
是利用“三级缓存” 来去避免循环依赖问题的出现的。【这里补充一下,只有在是单例的情况下才会去解
决循环依赖问题】
3、对从缓存中拿到的bean其实是最原始的bean,还未长大,所以这里还需要调用
getObjectForBeanInstance(Object beanInstance, String name, String beanName,
RootBeanDefinition mbd)方法去进行实例化。
4、然后会解决单例情况下尝试去解决循环依赖,如果isPrototypeCurrentlyInCreation(beanName)
返回为true的话,会继续下一步,否则throw new BeanCurrentlyInCreationException(beanName);
微信搜索公众号:Java专栏,获取最新面试手册
5、因为第三步中缓存中如果没有数据的话,就直接去parentBeanFactory中去获取bean,然后判断
containsBeanDefinition(beanName)中去检查已加载的XML文件中是否包含有这样的bean存在,不
存在的话递归去getBean()获取,如果没有继续下一步
6、这一步是吧存储在XML配置文件中的GernericBeanDifinition转换为RootBeanDifinition对象。这里
主要进行一个转换,如果父类的bean不为空的话,会一并合并父类的属性
7、这一步核心就是需要跟这个Bean有关的所有依赖的bean都要被加载进来,通过刚刚的那个
RootBeanDifinition对象去拿到所有的beanName,然后通过
registerDependentBean(dependsOnBean, beanName)注册bean的依赖
8、然后这一步就是会根据我们在定义bean的作用域的时候定义的作用域是什么,然后进行判断在进行
不同的策略进行创建(比如isSingleton、isPrototype) 9、这个是最后一步的类型装换,会去检查根据需要的类型是否符合bean的实际类型去做一个类型转
换。Spring中提供了许多的类型转换器

三.MyBatis编程步骤是什么样的?

1、 创建SqlSessionFactory
2、 通过SqlSessionFactory创建SqlSession
3、 通过sqlsession执行数据库操作
4、 调用session.commit()提交事务
5、 调用session.close()关闭会话

四.请说说MyBatis的工作原理

在这里插入图片描述
1、读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行
环境等信息,例如数据库连接信息。
2、加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在
MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个
文件对应数据库中的一张表。
3、构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。 4、创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。
5、Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传
递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
微信搜索公众号:Java专栏,获取最新面试手册
6、MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,
该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。
7、输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类
型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。
8、输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类
型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

五.说说Spring里用了哪些设计模式?

单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。

工厂模式:工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。

代理模式:最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。

模板方法模式:主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关闭连接几个过程,非常适用于模板方法。

六.谈谈对IOC和AOP的理解?实现原理是什么?

IOC 叫做控制反转,指的是通过Spring来管理对象的创建、配置和生命周期,这样相当于把控制权交给了Spring,不需要人工来管理对象之间复杂的依赖关系,这样做的好处就是解耦。在Spring里面,主要提供了 BeanFactory 和 ApplicationContext 两种 IOC 容器,通过他们来实现对 Bean 的管理。

AOP 叫做面向切面编程,他是一个编程范式,目的就是提高代码的模块性。Srping AOP 基于动态代理的方式实现,如果是实现了接口的话就会使用 JDK 动态代理,反之则使用 CGLIB 代理,Spring中 AOP 的应用主要体现在 事务、日志、异常处理等方面,通过在代码的前后做一些增强处理,可以实现对业务逻辑的隔离,提高代码的模块化能力,同时也是解耦。Spring主要提供了 Aspect 切面、JoinPoint 连接点、PointCut 切入点、Advice 增强等实现方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值