- 博客(51)
- 资源 (4)
- 收藏
- 关注
原创 【无标题】
我的CSDN文章是研三准备秋招时写的,但是入行敲代码一年有余后就萌生了考编的想法,从那时起便在职考编,又经过一年上岸编制,往后大概率是不会再更新了。有始有终,这就是我在CSDN的终。
2023-11-11 16:33:45 72
原创 Java中Comparable接口与Comparator接口的区别
一、Java的命名规则讲究“见名知意”,compare(比较、对比)这个词我们非常熟悉,那么也基本知道Comparable接口与Comparator接口是干嘛的啦,其作用就是比较,这样可以方便对数组、集合类进行排序。因为可以直接调用Arrays.sort(数组)方法或Collections.sort(集合类)方法,而且通过翻看源码,我们发现这两个方法的底层实现确实是基于Comparable接口与Comparator接口的。不同点:1.接口中规定的方法不同Comparable接口中是:public i
2020-05-28 11:51:13 400
原创 辟谣!!HashMap中变量modCount的真实作用
一些结论在网上搜索HashMap中变量modCount的作用时,大部分的解释都是这样:Fail-Fast 机制我们知道 java.util.HashMap 不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。这一策略在源码中的实现是通过 modCount 域,modC...
2020-04-13 10:43:53 2259
原创 大多数人不清楚的:for循环与foreach循环的性能差距
目录一、ArrayList中,for循环 VS 增强for二、LinkedList中,for循环 VS 增强for三、剖析ArrayList中两者性能的原理1.ArrayList的底层数据结构2.ArrayList中get方法的实现3.ArrayList中iterator方法的实现4.小结四、剖析LinkedList中两者性能的原理1.LinkedList的底层数据结构2.LinkedList中g...
2020-04-09 10:29:29 1505
原创 阿里巴巴建议的线程池创建方式,你用上了吗?
Executor是不建议的Executors类为我们提供了各种类型的线程池,经常使用的工厂方法有:public static ExecutorService newSingleThreadExecutor()public static ExecutorService newFixedThreadPool(int nThreads)public static ExecutorService ...
2020-04-05 15:44:01 1821
原创 大多数人不知道的:线程池CallerRunsPolicy()拒绝策略
首先要吐槽一下我这个理解能力,在学习CallerRunsPolicy拒绝策略的时候,搜索了相关的知识,大家都是这么描述的:第1种:第2种:第3种:第4种:汉化版JDK文档他们的描述让我看的很懵逼,特别是第3种,仔细看他的测试代码,并没有用CallerRunsPolicy,而是用的AbortPolicy拒绝策略。。。。这是一篇高浏览量的博文,而且多人转载。其中上面几种情况中写到...
2020-04-05 11:10:33 44251 25
原创 发生java.lang.StackOverflowError的所有情况
根本原因总结就是一句话请求的栈深度大于虚拟机所允许的最大深度。具体情况目前我一共遇到过四种情况下的StackOverFlowError异常,全部列举如下:不恰当的递归方法;两个方法循环调用;循环调用构造方法;程序自动循环调用toString()方法;1.不恰当的递归方法写过递归方法的我们都知道,对于递归方法来说,为防止其无休止地进行,必须在方法内有终止条件。比如就用递归方法实...
2020-03-25 18:38:36 3887
原创 多线程线程安全与synchronized关键字
线程安全问题对于上次的小实例,是强调过不考虑线程安全问题的。如果我们通过调用线程类的sleep()方法,模拟CUP突然暂停对程序A的执行转而执行线程B。这在实际中是有可能发生的。class Shopping implements Runnable { private int num = 10; public void run() { while (true) { if ...
2020-03-24 16:45:01 239
原创 Java创建线程的两种方式
1.Thread类新建一个线程很简单,只需要new一个Java为我们封装好的Thread类,并且调用它的start()方法即可。Thread thread = new Thread();thread.start();这里的start()方法会新建一个线程并让这个线程执行run()方法,但是在默认情况下,Thread类中的run()方法“什么都没干”,因此,这个线程一启动就马上结束啦,如果...
2020-03-23 18:43:58 517
原创 从虚拟机角度谈谈Java多态与重载、重写
我们先来看三个例题,如果都能答对的话,那么恭喜你,说明已经彻底理解了Java多态与重载、重写的本质。例一: Java多态与重载class Human {}class Man extends Human {}class Woman extends Human {}public class OverloadDemo { public void say(Human human)...
2020-03-08 16:48:40 179
原创 Java字节码new之后为什么会有dup
在看《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》这本书时,有几处的字节码在new之后会紧接着出现dup指令,我么以书中253页的字节码为例,说明dup指令的作用。其中Java代码为:public class DynamicDispatch { static abstract class Human { protected abstract void sayHello(...
2020-03-06 18:12:18 1045 2
原创 关于红黑树,这篇文章你要看啊
目录前言一、二叉排序树已经够用了?二、红黑树的定义三、怎么保持平衡1.左旋2.右旋四、查找五、增加插入的所有情况1.空树2.父节点是黑色3.父节点是红色3.1父节点是祖父节点的左儿子3.1.1叔叔节点是红色3.1.2叔叔节点不存在3.1.2.1插入节点是父节点左儿子3.1.2.2插入节点是父节点右儿子3.2父节点是祖父节点的右儿子3.2.1叔叔节点是红色3.2.2叔叔节点不存在3.2.2.1插入节...
2020-03-01 15:40:54 692
原创 干了这篇博文,LinkedList源码任你分析
目录1.数据结构2.属性3.Node类结构图源码有参构造图解4.辅助方法(1)void linkFirst(E e)源码图解(2)void linkLast(E e)源码图解(3)void linkBefore(E e, Node< E> succ)源码图解(4)E unlinkFirst(Node< E> f)源码图解(5)E unlinkLast(Node< E&...
2020-01-02 14:09:42 2971
原创 大话Minor GC与Full GC分别在什么时候发生?
Java堆分区要理解Minor GC和Full GC之前要先了解Java堆的分区。如果对Java堆进行细分地话,又可以分为新生代(包含Eden空间、From Survivor空间、ToSurvivor空间)和老年代。注意:这样要补充一点。在HotSpot虚拟机中默认Eden和From Survivor、ToSurvivor的大小比例是8:1:1。所以上图为了展示清楚,画的不是很准确。垃圾收...
2020-01-02 09:14:04 517
原创 大话Java堆的分区Eden、From Survivor、To Survivor、老年代
Java虚拟机运行时数据区一般分为:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。如果对Java堆进行细分地话,又可以分为新生代(包含Eden空间、From Survivor空间、ToSurvivor空间)和老年代。由来不喜欢看历史的可以先看后面内容。之所以将Java堆又细分为新生代和老年代的原因不是因为《Java虚拟机规范》对这一块数据区域有进一步地划分。而是Sun/...
2020-01-02 08:35:47 2697 5
原创 Eclipse自动生成get、set、equals、toString方法的快捷方式
目录1. Generate Element Comment2. Override/Implement methods3. Generate Getters and Setters4. Generate hashCode() and equals()5. Generate toString()6. Generate Constructor using Fields7. Generate Constr...
2020-01-02 08:18:07 2151 4
原创 HashMap源码分析JDK8:tieBreakOrder方法
分析新增节点key的类在定义时没有实现Comparable接口或者新增节点key实现了Comparable接口但是与当前节点还是compareTo不出结果,那么就动用这个方法来最终决定dir是正是负。源码分析 /** * 为什么说这个方法能最终决定dir的正、负, * 因为它只有-1、1两种输出结果 * * 参数a:新增节点的key * 参数b:当前节点的key */ ...
2019-12-25 16:31:31 385
原创 HashMap源码分析JDK8:compareComparables方法
源码分析 /** * 参数kc:新增节点key的类型 * 参数k:新增节点的key * 参数x:当前节点的key */ @SuppressWarnings({"rawtypes","unchecked"}) static int compareComparables(Class<?> kc, Object k, Object x...
2019-12-25 16:28:17 426
原创 HashMap源码分析JDK8:comparableClassFor方法
源码分析 /** * Returns x's Class if it is of the form "class C implements * Comparable<C>", else null. * * 如果x的类的形式为“Class C implements Comparable<C>”,则返回x的类型 * 否则返回null ...
2019-12-25 16:27:44 219
原创 HashMap源码分析JDK8:getNode方法
源码分析 /** * Implements Map.get and related methods * * @param hash hash for key * @param key the key * @return the node, or null if none */ final Node<K,V> getN...
2019-12-24 10:24:22 376
原创 HashMap源码分析JDK8:putVal方法
HashMap底层数据结构插入的所有情况源码分析 /** * 实现Map接口的put方法和相关功能 * * 参数hash:新增键值对中key的哈希值 * 参数key:新增键值对的键key * 参数value:新增键值对的值value * 参数onlyIfAbsent: 如果是true,不改变键值对中的旧值 * 参数ev...
2019-12-24 10:20:38 228
原创 HashMap源码分析JDK8:treeifyBin方法
HashMap底层数据结构源码分析 /** * 在满足一定条件的情况下,将链表转换成红黑树 * * 形参tab:成员变量table * 形参hash:新增键值对中key的hash值 */ final void treeifyBin(Node<K,V>[] tab, int hash) { int n, index; ...
2019-12-24 10:20:23 555
原创 数组、链表、二叉树、二叉排序树、红黑树时间复杂度
查找时间复杂度不论是数组、链表还是二叉树、二叉排序树(搜索树)、红黑树,我们要找到其中特定的一个元素,方法只有一个那就是挨个比较直到找到为止,这就造成了查找的时间复杂度总是与N有关系。数组链表二叉树二叉排序树红黑树查找O(N)O(N)O(N)O(log N)~O(N)O(log N)数组:特指无序数组。假设数组中有N个元素,我们要找到其中一个特定的元...
2019-12-24 09:10:36 5671
原创 哈希(hashtable)表,查找方式的颠覆者!
目录前言 前言这是这个系列的最后一篇文章,从最开始的二叉树,到二叉排序树(搜索树),再到红黑树。与哈希表(Hash table)结缘也是在分析JDK1.8以后HashMap源码的时候,之后为了学习红黑树,又把而二叉树、二叉排序树(搜索树)复习了一遍,并促成了这个系列的文章。关于红黑树,在经典的数据结构与算法书籍《Java数据结构和算法(第二版)》、《算法导论(第三版)》都有详细介绍。原书...
2019-12-23 10:24:06 311
原创 HashMap源码分析JDK8:balanceInsertion方法
一、插入的所有情况二、源码static <K,V> TreeNode<K,V> balanceInsertion(TreeNode<K,V> root,TreeNode<K,V> x) { //新插入树节点默认红色 x...
2019-12-20 17:13:56 334
原创 言简意赅,url干嘛的?
目录一、url干嘛的二、url怎么看三、url的语法1.方案2.主机3.路径4.查询四、url快捷方式1.绝对url2.相对url3.自动扩展url五、url字符集 一、url干嘛的我们把互联网比作一个巨大的城市,那么互联网资源就是其中的电影院、便利店、火车站,为我们提供各种各样的服务。那我们怎样才能找到这座城市中的某个电影院呢?当然是要有地址,类比一下,url在互联网中也是起到这个作用,方...
2019-12-15 13:22:22 591
原创 SqlServer左连接、右连接、全连接、外连接、内连接
目录一、外连接1.左连接2.右连接3.全连接三、内连接写法一写法二 Student表:Score表:一、外连接外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN),右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN),全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们简称:左连接、右连接和全连接。1....
2019-12-06 10:51:46 16297 1
原创 SQL,什么时候用自身连接????
目录 以前在学数据库的各种连接时,觉得这个自连接是最没有使用价值的,但是最近在用SpingBoot写接口的时候,有接触到一个表的自连接。这个表是一个签约人表(实际上有很多字段,这个我省略一部分)...
2019-12-05 17:14:56 1298
原创 轻松理解脏读、不可重复读、幻读
目录一、脏读 一、脏读事务1事务2beginselect * from studentbegin…update student set age = age +1…commitselect * from studentcommit
2019-11-27 16:21:34 220
原创 二叉排序树(搜索树)查找、增加、删除快速入门
目录前言一、定义二、查找三、增加节点四、删除节点1.单身狗2.独生子3.多子多孙(1)25继承(2)35继承 前言二叉排序树也叫二叉搜索树、二叉查找树,是二叉树的一种,但是二叉树的入门很简单,即使没有二叉树的基本,自己手写一个二叉排序树也可以做到,下面我们详细介绍以下二叉排序树的定义和三种最基本的操作——增、删、查。在这里我们只谈思路、就不附上代码了。一、定义满是学究气息的文字定义我们...
2019-11-27 14:59:16 434
原创 一眼看出二叉树中序遍历结果的诀窍
目录1.二叉树1.中序遍历 1.二叉树1.中序遍历不论是二叉树、二叉排序树(搜索树),遍历是基础。至于什么是中序遍历,中规中矩的理论,可以参考这篇文章,二叉树中序遍历(递归+非递归)Java.,其中详细介绍了中序遍历实现的方法和结果,包括递归和非递归两种方式。...
2019-11-24 15:44:28 4565
原创 剑指offer第二版54题:二叉搜索树的第K大节点Java
目录题目 题目题目:给定一棵二叉搜索树,请找出其中第K大的节点。例如,在图1中的二叉搜索树里,按节点数值大小顺序,第三大节点的值是4。图1...
2019-11-21 09:44:24 311
原创 来来来!热乎的二叉排序树(搜索树)查找、增加、删除操作
目录前言一、定义二、查找代码图解三、增加节点代码四、删除节点1.单身狗2.独生子3.多子多孙(1)25继承(2)35继承五、完整代码六、写在最后 前言这是这个系列上的第二篇文章,如果你还没有了解二叉树的话,可以先看我的文章中阅读量最高的二叉树(从建树、遍历到存储)Java.一、定义满是学究气息的文字定义我们先不看,还是沿用看图说话的惯例。“数无形时少直觉,形少数时难入微”,所以文字上...
2019-11-18 14:07:19 735 2
原创 二叉树(从建树、遍历到存储)Java
目录一、结构二、二叉树的遍历1.前序遍历(递归+非递归)2.中序遍历(递归+非递归)3.后序遍历(递归+非递归)4.层次遍历代码功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文......
2019-11-06 10:50:19 12107 2
原创 二叉树后序遍历(递归+非递归)Java
目录一、结构二、遍历二叉树1.后序遍历(递归)代码图解功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一、结构...
2019-10-28 17:43:30 5629 5
原创 二叉树中序遍历(递归+非递归)Java
目录一、结构二、遍历二叉树1.中序遍历(递归)代码图解2.中序遍历(非递归)代码图解新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程...
2019-10-25 08:35:21 7600 3
JDK5HashMap源码
2020-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人