Java面试题-各种流程问题

Mybatis的执行流程

原文链接:https://blog.csdn.net/u014745069/article/details/80788127

  1. 首先加载Mybatis的核心配置文件,如果根据核心配置文件生成Configuration对象和一个个MapperStatement对象;
  2. SqlSessionFactoryBuilder通过Configuration对象生成SqlsessionFactory,用来开启Sqlsession
  3. Sqlsession完成和数据库的交互
  4. 当用户调用Mapper中的方法时,Sqlsession通过被调用方法的Statement ID 找到对应的MapperStatement
  5. Executoru执行器将mapperStatement对象进行解析,sql参数转换,动态sql生成,生成了jdbc statement对象
  6. jdbc执行sql语句
  7. 借助MapperStatement的结果映射关系,将返回结果转换成HashMap ,JavaBean等存储结构

基础jdbc的流程

原文链接:https://juejin.cn/post/6847902217006448653

  1. 注册驱动
  2. 获取数据库连接
  3. 创建向数据库发送SQL语句的Statement对象
  4. 向数据库发送sql
  5. 处理数据集
  6. 关闭连接

SpringMVC 工作原理

  1. 用户发送请求,直接请求到DispatcherServlet
  2. DispatcherServlet 根据请求调用HandlerMappering,解析到对应的Handler
  3. DispatcherServlet请求适配器去执行Handler,并处理相应的业务逻辑
  4. Handler处理完之后,会返回一个ModelAndView 对象,Model是返回的数据对象,View是逻辑上的View
  5. ViewResolver会根据逻辑view查找实际的view,DispatcherServlet将model传递给view进行视图渲染
  6. 把view返回给请求者

SpringBoot的自动装配原理和启动流程

main方法中SpringApplication.run(.class,args)的执行流程中有一个refreshContext(context)方法,而这个方法内部会解析配置类上的@EnableAutoConfiguration注解,这个注解内部会AutoConfigurationImportSelector类,这个类中有一个方法会读取spring.factories文件,而这个文件就配置了自动装配的类,最后配置类的条件,自动装配类。

Spring Bean的生命周期

Bean容器找到配置的Spring bean定义,进行实例化,如果涉及属性设置,就通过依赖注入来设置对象属性,Spring会检测bean是否实现了一下aware接口,并设置相关依赖,然后再看是否存在与该bean相关的BeanPostProcessor,如果有就执行前置方法,如果bean实现了InitializingBean接口,执行afterProperties方法,如果bean在配置文件中定义了init-method属性,执行指定的方法,此时bean就初始化完成了,是否存在与该bean相关的BeanPostProcessor,如果有就执行后置方法;当bean要销毁时,如果bean实现了DisposableBean接口,执行destroy()方法,如果在配置文件中定义了destory-method,就执行指定的方法
在这里插入图片描述

类加载流程

https://segmentfault.com/a/1190000038322626

加载 将class文件通过类加载器加载到内存
验证 确保class文件不会危害虚拟机的安全,符合当前虚拟机的要求
准备 为类变量分配内存空间,并且设置类变量的初始值
解析 将符号引用变成直接引用
初始化 对类变量进行赋值和执行静态代码块

类加载器和双亲委派机制

启动类加载器 jvm启动的时候,会优先加载<Java_Home>\lib这个目录下的核心类库
扩展类加载器 负责加载<Java_Home>\lib\ext这个目录的类
应用程序类加载器 负责加载我们写的代码
用户自定义类加载器 根据我们的需要,加载特定的类

双亲委派机制
在这里插入图片描述

生成对象流程

类加载检查
分配内存 (指针碰撞和空闲列表)
初始化零值 虚拟机把分配到的内存空间全部初始化为零值(不包括对象头)
设置对象头 虚拟机要对对象进行必要的设计,例如这个对象是那个类的实 例、如何才能找到类的元数据信息、对象的哈希吗、对象的 GC 分代年龄等信息。这些信息存放在对 象头中
执行init() 方法 把对象按照程序员的意愿进行初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值