底层知识三

set ,map,list的区别

map:

hashmap:连地址法,大概思路:通过取key的hashCode值,高位运算,取模运算计算位置,插入位置是通过hashcode 和 equals方法判断key是否一致

  1. 判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容
  2. 根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向6,如果table[i]不为kong,转向3
  3. 判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向4,这里的相同指的是hashCode以及equals;
  4. 判断table[i]是否为treeNode,即table[i]是否是红黑树,如果是红黑树,则直接在树种插入键值对,否则转向5
  5. 遍历table[i],判断链表长度是否大于8,大于8的化把链表转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作。遍历过程中若发现key已经存在直接覆盖value即可;
  6. 插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容
  7. treemap:TreeMap 实现SortedMap接口,能够把它保存的记录根据建排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Itertor遍历TreeMap时,得到的记录时排过序的。如果使排序的映射,建议使用TreeMap。在使用TreeMap时,key必须实现Comparable接口或者构造TreeMap传入自定义Comparator,否则会在运行时抛出ClassCastException类型的异常。linkedHashMap:保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时代参数,按照访问次序排序
  8. HashTable 因为内部时采用Synchronized来保证线程安全的
  9. CocurrentHashMap:利用锁分段技术增加了锁的数目,从而使争夺同一把锁的线程的数目的到控制

Hashmap 和ConcurrentHashMap的区别:

​ HashMap是线程不安全的,put时在多线程情况下,会形成环,从而导致死循环

HashMap线程不安全的原因: 当两个人同时对同一个HashMap操作,当其中一个人对这个HashMap进行扩容操作,那么里面的元素就会重新去计算下标,也会去散列到其他位置,当第二个人去get元素的时候,的到的元素可能就不是它想要的元素。

解决方法:可以是可以限制put元素不能超过1000,那么当超过时,重新new一个HashMap的时候,给与初始值1000,从而避免了哈希冲撞

​ CoucurrentHashMap 时线程安全的,采用分段锁机制,减少锁的粒度

mybatis 的运行原理

  1. 读取mybatis的mybatis-config.xml配置文件
  2. 加载映射文件
  3. 构建SQLSessionFactory会话工厂
  4. 构建SqlSession会话对象
  5. Executor执行器根据SqlSession传递的参数动态的生成需要执行的SQL语句执行操作数据库。

Spring 的 必备知识

Spring 核心组件

Spring 是一个轻量级、非入侵式的控制反转Ioc和面共享切面AOP的框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8JbnJANs-1634705786413)(https://i.loli.net/2021/10/20/Yb2EdypHmXBo1gA.png)]

为什么使用 Spring Spring的优点:

Spring 不仅提供了各种优秀的组件,还提供了良好的代码组织逻辑跟业务开发流程规范框架

  • Ioc 和 DI 支持

    Spring 就是一个大工厂容器,可以将所有对象创建和依赖关系维护,交给Spring管理,Spring 工厂用于生成Bean,并且管理Bean的生命周期,实现高内聚低偶合的设计理念

  • AOP 编程的支持

    Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。。

  • 声明式事务的支持

    只需要通过配置姐可以完成对事务的管理

  • 方便程序测试

    对Junit4提供支持,可以通过注解方便的测试Spring程序

  • 粘合剂功能

    不排斥各种优秀的框架

Spring 组件

Spring框架是分模块存在,撤了最核心的Spring Core Container是必要模块之外,,其他模块都是可选,大约有20多个模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mT8wX87p-1634705786418)(https://i.loli.net/2021/10/20/i2pQg8kfIVLvM6b.png)]

  1. Spring Core :Spring核心,它是框架最基础的部分,提供IOC和依赖注入DI
  2. Spring Context:Spring 上下文容器,它是BeanFactory 功能加强的一个子接口
  3. Spring WEB: 提供Web 应用开发的支持
  4. Spring MVC:针对Web应用中MVC 思想的实现
  5. Spring AOP : 面向切面编程

IOC 的理解

Spring来负责控制对象的生命周期和对象间的关系,所有的类都会在Spring容器中登记,告诉Spring 这个类是什么,需要什么,然后Spring 会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的Bean

所有类的创建 和 销毁 都有 SPring控制。

IOC 的核心就是 反射+xml解析/注解解析

  1. 读取XML 获取的bean相关信息

  2. 通过反射机制获取目标类的构造函数,调用函数,再给对象赋值

Context

IOC容器知识提供了一个管理对象的空间而已,如何向容器中放入我们需要的容器作为管理的对象?需要 Spring 的应用上下文Context

应用上下文 Context

基于 Core和Beans,提供了大量的拓展,包括国际化操作(基于JDK)、资源加载(基于 JDK properties)、数据校验(Spring 自己封装的数据校验机制)、数据绑定(Spring 特有的HTTP请求中的参数直接映射称为POJO )、类型转换、ApplicationContext接口 Context的核心

两种类型

  • 一种是不常用的BeanFactory,这是最简单的容器,指能提供基本的DI 功能
  • 另一种就是 继承了 BeanFactory 后派生而来的应用上下文,其中抽象接口也就是我们上面提到的ApplicationContext,它能提供更多企业级服务,例如解析配置文本信息等。
  1. AnnotationConfigAppliacationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式
  2. ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,使用与xml配置的方式
  3. FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是系统盘符中加载xml配置文件
  4. AnnotationConfigWebxxx:专门为web应用准备的,适用于注解方式
  5. XmlWebxxx:从web应用下的一个或多个xml配置文件加载上下文定义,使用与xml配置方式

追踪下的ClassPathApplicationContext的底层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57Awwcxk-1634705786420)(https://i.loli.net/2021/10/20/U4jzGu3A6Ext9XT.png)]

Spring 为实现ioc 进行了全面的考虑

使用与xml配置方式

追踪下的ClassPathApplicationContext的底层

[外链图片转存中…(img-57Awwcxk-1634705786420)]

Spring 为实现ioc 进行了全面的考虑

Spring 的详细知识:https://m.zhipin.com/mpa/html/get/column?contentId=b536b7dec1b378feqxB72N6-&identity=0&userId=506048789

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值