| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring相关面试题 -> 正文阅读 |
|
[Java知识库]Spring相关面试题 |
一.IOC面试整理 1.1什么是Spring SpringFramework 是一个开源的、松耦合的、分层的、可配置的一站式企业级 Java 开发框架,它的核心是 IOC 与 AOP ,它可以更容易的构建出企业级 Java 应用,并且它可以根据应用开发的组件需要,整合对应的技术。 1.2为什么使用Spring
2.1 IOC是什么 IOC 控制反转是一种思想,它的核心是将控制权转交出去。利用 IOC 思想,可以实现组件之间的解耦。IOC 的实现方式通常有依赖注入和依赖查找。 2.2 为什么使用IOC 解耦 2.3 Spring中的自动注入模式 byType :根据类型注入 2.4 beanFactory与ApplicationContext区别 ApplicationContext是BeanFactory的字接口,扩张了以下功能: AOP 的支持( AnnotationAwareAspectJAutoProxyCreator 作用于 bean 的初始化之后 ) 2.5 BeanFactory 与 FactoryBean的区别 BeanFactory : 2.6 后置处理器对比 1.BeanDefinitionRegistryPostProcessor:处理BeanDefinition 、.class 文件等,配置文件、配置类已解析完毕并注册进 BeanFactory ,但还没有被 BeanFactoryPostProcessor 处理,向 BeanFactory 中注册新的BeanDefinition; 2.BeanFactoryPostProcessor:处理BeanDefinition,BeanDefinition 解析完毕并注册进 BeanFactory 之后执行,给 BeanDefinition 中增删属性、移除 BeanDefinition 等; 3.BeanPostProcessor:处理bean 实例,bean 的初始化阶段前后执行,给 bean 的属性赋值、创建代理对象等; 2.7 bean的类型(6种) singleton 一个 IOC 容器中只有一个【默认值】 2.8 bean的实例化方式(5种) 1.直接通过 / @Bean / @Component 的方式注册 Bean 后实例化 3.Bean的生命周期 3.1.构建BeanDefinition 3.2Bean的实例化 4.SPI机制 是通过一种“服务寻找”的机制,动态的加载接口 / 抽象类对应的具体实现类,它把接口具体实现类的定义和声明权交给了外部化的配置文件中。 jdk 的 SPI 是需要遵循规范的:所有定义的 SPI 文件都必须放在工程的 META-INF/services 目录下,且文件名必须命名为接口 / 抽象类的全限定名,文件内容为接口 / 抽象类的具体实现类的全限定名,如果出现多个具体实现类,则每行声明一个类的全限定名,没有分隔符。 二 AOP面试整理 1.1什么是AOP AOP 面向切面编程,全称 Aspect Oriented Programming ,它是 OOP 的补充。OOP 关注的核心是对象,AOP 的核心是切面(Aspect)。AOP 可以在不修改功能代码本身的前提下,使用运行时动态代理的技术对已有代码逻辑增强。AOP 可以实现组件化、可插拔式的功能扩展,通过简单配置即可将功能增强到指定的切入点。 1.2AOP术语 Target 目标对象:被代理的原始对象 1.3 通知类型 1 AspectJ定义的通知类型 Before 前置通知:目标对象的方法调用之前触发 2 AOP联盟定义的通知类型 前置通知 MethodBeforeAdvice 1.4AOP使用场景 业务日志切面:可以记录业务方法调用的痕迹 1.5 AOP原理 1.AOP的底层设计是由运行时动态代理支撑,在 bean 的初始化流程中,借助 BeanPostProcessor 将原始的目标对象织入通知,生成代理对象。 2.AOP 在底层,借助 AnnotationAwareAspectJAutoProxyCreator 在 bean 的初始化流程,postProcessAfterInitialization 方法中将目标对象包装为代理对象。这里面涉及到几个核心步骤: 2.1检查当前初始化的 bean 是否可以被 AOP 代理(检查是否有匹配的增强器) 4.代理对象被构造后,执行方法会进入 JdkDynamicAopProxy / CglibAopProxy 中,并构造 ReflectiveMethodInvocation 并依次执行这些织入的通知。执行通知的逻辑是靠一个 currentInterceptorIndex 下标控制,并以此下标为依据顺序执行增强器的通知逻辑。 三.Spring 事务 1.事务四大特性 原子性:一个事务就是一个不可再分解的单位,事务中的操作要么全部做,要么全部不做。原子性强调的是事务的整体 2.事务隔离级别 针对数据库的并发操作,可能会出现一些事务的并发问题。事务并发操作中会出现三种问题: 脏读:一个事务读到了另一个事务没有提交的数据 read uncommitted 读未提交 —— 不解决任何问题 3.事务分传播行为 PROPAGATION_REQUIRED:必需的 如果当前没有事务运行,则会开启一个新的事务;如果当前已经有事务运行,则方法会运行在当前事务中 4.事务监听器 @TransactionalEventListener : BEFORE_COMMIT :事务提交之前触发监听 四.SpringMVC面试整理 1.SpringWebMvc 核心组件 DispatcherServlet :核心的中央处理器,负责接收请求、分发,并给予客户端响应 2.工作流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、 DispatcherServlet调用HandlerAdapter处理器适配器。 5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 6、 Controller执行完成返回ModelAndView。 7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 9、 ViewReslover解析后返回具体View。 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 11、 DispatcherServlet响应用户。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:15:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |