set ,map,list的区别
map:
hashmap:连地址法,大概思路:通过取key的hashCode值,高位运算,取模运算计算位置,插入位置是通过hashcode 和 equals方法判断key是否一致
- 判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容
- 根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向6,如果table[i]不为kong,转向3
- 判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向4,这里的相同指的是hashCode以及equals;
- 判断table[i]是否为treeNode,即table[i]是否是红黑树,如果是红黑树,则直接在树种插入键值对,否则转向5
- 遍历table[i],判断链表长度是否大于8,大于8的化把链表转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作。遍历过程中若发现key已经存在直接覆盖value即可;
- 插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容
- treemap:TreeMap 实现SortedMap接口,能够把它保存的记录根据建排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Itertor遍历TreeMap时,得到的记录时排过序的。如果使排序的映射,建议使用TreeMap。在使用TreeMap时,key必须实现Comparable接口或者构造TreeMap传入自定义Comparator,否则会在运行时抛出ClassCastException类型的异常。linkedHashMap:保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时代参数,按照访问次序排序
- HashTable 因为内部时采用Synchronized来保证线程安全的
- CocurrentHashMap:利用锁分段技术增加了锁的数目,从而使争夺同一把锁的线程的数目的到控制
Hashmap 和ConcurrentHashMap的区别:
HashMap是线程不安全的,put时在多线程情况下,会形成环,从而导致死循环
HashMap线程不安全的原因: 当两个人同时对同一个HashMap操作,当其中一个人对这个HashMap进行扩容操作,那么里面的元素就会重新去计算下标,也会去散列到其他位置,当第二个人去get元素的时候,的到的元素可能就不是它想要的元素。
解决方法:可以是可以限制put元素不能超过1000,那么当超过时,重新new一个HashMap的时候,给与初始值1000,从而避免了哈希冲撞
CoucurrentHashMap 时线程安全的,采用分段锁机制,减少锁的粒度
mybatis 的运行原理
- 读取mybatis的mybatis-config.xml配置文件
- 加载映射文件
- 构建SQLSessionFactory会话工厂
- 构建SqlSession会话对象
- 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)]
- Spring Core :Spring核心,它是框架最基础的部分,提供IOC和依赖注入DI
- Spring Context:Spring 上下文容器,它是BeanFactory 功能加强的一个子接口
- Spring WEB: 提供Web 应用开发的支持
- Spring MVC:针对Web应用中MVC 思想的实现
- Spring AOP : 面向切面编程
IOC 的理解
Spring来负责控制对象的生命周期和对象间的关系,所有的类都会在Spring容器中登记,告诉Spring 这个类是什么,需要什么,然后Spring 会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的Bean
所有类的创建 和 销毁 都有 SPring控制。
IOC 的核心就是 反射+xml解析/注解解析
-
读取XML 获取的bean相关信息
-
通过反射机制获取目标类的构造函数,调用函数,再给对象赋值
Context
IOC容器知识提供了一个管理对象的空间而已,如何向容器中放入我们需要的容器作为管理的对象?需要 Spring 的应用上下文Context
应用上下文 Context
基于 Core和Beans,提供了大量的拓展,包括国际化操作(基于JDK)、资源加载(基于 JDK properties)、数据校验(Spring 自己封装的数据校验机制)、数据绑定(Spring 特有的HTTP请求中的参数直接映射称为POJO )、类型转换、ApplicationContext接口 Context的核心
两种类型
- 一种是不常用的BeanFactory,这是最简单的容器,指能提供基本的DI 功能
- 另一种就是 继承了 BeanFactory 后派生而来的应用上下文,其中抽象接口也就是我们上面提到的ApplicationContext,它能提供更多企业级服务,例如解析配置文本信息等。
- AnnotationConfigAppliacationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式
- ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,使用与xml配置的方式
- FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是系统盘符中加载xml配置文件
- AnnotationConfigWebxxx:专门为web应用准备的,适用于注解方式
- 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