自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 【jvm】双亲委派机制 沙箱安全机制

双亲委派机制 工作原理 如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类加载器去执行; 如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器; 如果父类的加载器可以完成类的加载任务,就成功返回。倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。 ​ 由于父类委托机制,当用户加载器需要加载某些类时,会把请求转给父类加载器,委托帮忙加载。首先最顶层的类加载器加载,加载不到就转交给子类加载器,如果最终

2021-08-18 21:30:33 275

原创 【jvm】类加载器

类加载器 ClassLoader的作用 ​ ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个加载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的链接和初始化行为。至于它是否可以运行,则由Execution Eng

2021-08-18 21:26:03 129

原创 【jvm】类的加载过程

类加载过程 类加载步骤? ​ 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 加载(loading) 链接(linking):又包含有,验证、准备、解析 初始化(initialization) 使用(Using) 卸载(Unloading) 在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 ​ 当程序要使用某个类时,如果该类还未被加载到内存中,则系统

2021-08-18 14:45:22 273

原创 【集合】TreeSet

TreeSet NavigableSet 定义了一些有方向的操作 数据结构 private transient NavigableMap<E,Object> m; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); 构造方法 TreeSet(NavigableMap<E,Object> m) {

2021-05-13 14:06:32 102

原创 【集合】HashSet

HashSet HashSet ,基于 HashMap 的 Set 实现类。 数据结构 // HashSet 只有一个属性,那就是 map private transient HashMap<E, Object> map; // 因为 HashSet 没有 value 的需要,所以使用一个统一的 PRESENT 即可 private static final Object PRESENT = new Object(); 构造方法 public HashSet() { map =

2021-05-13 14:04:26 47

原创 【集合】TreeMap

TreeMap 小结 TreeMap 按照 key 的顺序的 Map 实现类,底层采用红黑树来实现存储。 TreeMap 因为采用树结构,所以无需初始考虑像 HashMap 考虑容量问题,也不存在扩容问题。 TreeMap 的 key 不允许为空( null ),可能是因为红黑树是一颗二叉查找树,需要对 key 进行排序。 TreeMap 的查找、添加、删除 key-value 键值对的平均时间复杂度为 O(logN) 。原因是,TreeMap 采用红黑树,操作都需要经过二分查找,而二分查找的时间复杂度是

2021-05-13 11:10:06 342

原创 【集合】LinkedHashMap

LinkedHashMap LinkedHashMap 继承自 HashMap 类,基本上没有重写 HashMap 的方法,只是把 HashMap 空实现的预留拓展点实现了。 数据结构 Map 拓展属性 /** * 头节点。 * * 越老的节点,放在越前面。所以头节点,指向链表的开头 */ transient LinkedHashMap.Entry<K,V> head; /** * 尾节点 * * 越新的节点,放在越后面。所以尾节点,指向链表的结尾 */ transi

2021-05-13 10:33:27 289

原创 【集合】HashMap

HashMap 概述 HashMap的底层实现原理?以jdk7为例说明: HashMap map = new HashMap( ): 在实例化以后,底层创建了长度是16的一维数组Entry[ ] table。 …可能已经执行过多次put. . . map.put( key1, vaLue1 ); 首先,调用key1所在类的hashCode()计算key1哈希值,此哈希值经过某种算法计算以后,得到在Entry数组中的存放位置。 如果此位置上的数据为空,此时的key1-value1添加成功。----情况1

2021-05-13 09:57:25 62

原创 【集合】LinkedList

LinkedList java.util.Deque 接口,提供双端队列的功能,LinkedList 支持快速的在头尾添加元素和读取元素,所以很容易实现该特性。 继承了 java.util.AbstractSequentialList 抽象类,它是 AbstractList 的子类,实现了只能连续访问“数据存储”,基于迭代器顺序遍历后,从而实现后续的操作。例如 #get(int index)、#add(int index, E element) 等等随机操作的方法。 数据结构 // 链表大小

2021-05-11 23:54:12 76

原创 【集合】ArrayList源码(jdk8)

ArrrayList(jdk8) java.util.RandomAccess 接口,表示 ArrayList 支持快速的随机访问 特点 容量不固定,想放多少放多少(有最大阈值,但一般达不到) 有序的(元素输出顺序与输入顺序一致) 元素可以为 null 效率高 size(), isEmpty(), get(), set() iterator(), ListIterator() 方法的时间复杂度都是 O(1) add() 添加操作的时间复杂度平均为 O(n) 其他所有操作的时间复杂度几乎都是 O(n)

2021-05-11 21:12:04 46

原创 【算法】Java-求单链表倒数第k个元素

【算法】Java-求单链表倒数第k个元素 问题 找出单链表的倒数第K个元素,例如给定链表 1–>2–>3–>4–>5–>6 ,则单链表的倒数第K=3个元素为4。 思路分析 方法一: 顺序遍历两遍法 1)首先遍历一遍链表,计算出链表中的节点数n; 2)把倒数第k个数,转成正数第n-k个元素; 3)遍历链表,找到第n-k个元素。 方法二:快慢指针法 1)可以定义两个快慢指针; 2)快慢指针步长为k,然后一起移动; 3)快指针到链表尾部时,慢指针就正好指向倒数第K个元素。 第二

2021-04-05 20:51:15 450 2

原创 【Redis】Redis三种特殊数据类型(geospatial,hyperloglog,Bitmaps)

三种特殊数据类型(geospatial,hyperloglog,Bitmaps) geospatial geoadd 添加地理位置信息 该命令以采用标准格式的参数x y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001规定如下: 有效的经度从-180度到180度。 有效的纬度从-85.05112878度到85.05112878度。 当坐标位置超出上述指定范围时,该命令将会

2021-04-04 16:46:07 148

原创 【Redis】 Redis五大基本数据类型(String,List,Set,Hash,Zset)

五大数据类型(String,List,Set,Hash,Zset) string set,get,append,strlen 127.0.0.1:6379> APPEND name ",hello,my friend" #拼接字符串 (integer) 22 127.0.0.1:6379> get name "wangwu,hello,my friend" 127.0.0.1:6379> STRLEN name #统计字符串长度 (integer) 22 getrange key x y

2021-04-04 16:32:32 104

原创 【Mybatis】Mybatis缓存简述

缓存 一级缓存 一级缓存默认开启 只在一次SqlSession中有效,也就是拿到连接到关闭连接这个区间段,生命周期和SqlSession一致。 二级缓存 只要开启二级缓存,在一个Mapper下就有效 所有的数据都会先放到一级缓存中 只有会话提交,或者关闭的时候,才会提交到二级缓存中 顺序示意简图 ...

2021-03-20 16:09:50 95

原创 【Mybatis】Mybatis中核心对象生命周期

【Mybatis】Mybatis生命周期 MyBatis 里面的几个核心对象: SqlSessionFactoryBuiler、SqlSessionFactory、SqlSession 和 Mapper对象。 SqlSessionFactoryBuiler SqlSessionFactoryBuiler。它是用来构建 SqlSessionFactory 的,而 SqlSessionFactory 只需要一个,所以只要构建了这一个 SqlSessionFactory,它的使命就完成了,也就没有存在的意义

2021-03-20 11:37:34 210 1

原创 【Mybatis】Mybatis执行流程简述

【Mybatis】Mybatis执行流程简述 第一步: 通过Resource获取加载全局配置文件,调用getResourceAsStream方法加载xml文件,并将之解析为一个流。 //1.读取配置文件; InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml"); 第二步: 创建SQLSessionFactoryBuilder构造器 //2.通过SqlSessionFactoryBuilder创建SqlSessionFa

2021-03-20 11:25:56 1125

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除