自定义博客皮肤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 395

原创 【jvm】类加载器

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

2021-08-18 21:26:03 239

原创 【jvm】类的加载过程

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

2021-08-18 14:45:22 378

原创 【集合】TreeSet

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

2021-05-13 14:06:32 181

原创 【集合】HashSet

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

2021-05-13 14:04:26 98

原创 【集合】TreeMap

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

2021-05-13 11:10:06 516

原创 【集合】LinkedHashMap

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

2021-05-13 10:33:27 383

原创 【集合】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 137

原创 【集合】LinkedList

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

2021-05-11 23:54:12 140

原创 【集合】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 132

原创 【算法】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 622 2

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

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

2021-04-04 16:46:07 233

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

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

2021-04-04 16:32:32 167

原创 【Mybatis】Mybatis缓存简述

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

2021-03-20 16:09:50 146

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

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

2021-03-20 11:37:34 305 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 1238

空空如也

空空如也

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

TA关注的人

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