Java
文章平均质量分 96
bugcode.online
路漫漫其修远兮,吾将上下而求索!
展开
-
ConcurrentHashMap源码解析
1. ConcurrentHashMap 1.7不使用HashMap是因为在多线程情况下会形成环形数据结构,不使用HashTable是因为使用的是重量级锁,效率比较低。segment在jdk1.7中是分段锁,在jdk1.8中没有segment对象1. 存储结构Java 7 中 ConcurrentHashMap 的存储结构如上图,ConcurrnetHashMap 由很多个 Segment 组合,而每一个 Segment 是一个类似于 HashMap 的结构,所以每一个 HashMap 的内部可转载 2021-09-01 14:25:46 · 515 阅读 · 0 评论 -
Java多线程
`多线程文章目录程序,进程,线程的理解**进程****线程****程序****进程和程序的对比**并行与并发单`cpu`与多`cpu`的理解并发并行小结同步和异步思维导图总结Java线程创建线程的方法方式一:继承于`Thread`类方式二:使用 Runnable 配合 Thread原理之 Thread 与 Runnable 的关系方法三,FutureTask 配合 Thread查看进程的方法windowslinuxJava查看进程和线程的工具线程运行的原理jvm的栈与栈帧线程的运行原理线程的运行原理(多线原创 2021-05-05 21:19:39 · 941 阅读 · 0 评论 -
面试高频-吃透单例设计模式
文章目录单例设计模式单例设计模式的介绍单例模式的实现饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全1)懒汉式(线程安全2)双重检查静态内部类枚举单例模式在jdk源码中的分析单例模式注意事项**单例模式的应用场景**单例模式优缺点分析单例设计模式单例设计模式的介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的SessionFactory,它充当数原创 2020-12-28 19:56:45 · 575 阅读 · 0 评论 -
设计模式的七大原则
文章目录设计模式的目的设计模式的七大原则单一职责原则基本介绍案例说明单一职责原则注意事项接口隔离原则(Interface Segregation Principle)基本介绍案例说明依赖倒转原则基本介绍案例说明依赖关系传递的三种方式和应用案例依赖倒转原则细节里式替换原则oo中继承性的思考基本介绍案例演示开闭原则基本介绍案例说明改进思路迪米特法则基本介绍应用案例迪米特法则细节合成复用原则(Composite Reuse Principle)基本介绍设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚原创 2020-12-23 21:20:10 · 671 阅读 · 0 评论 -
JVM系列-String-Table的理解
1,String的基本特性String:字符串,使用一对 “” 引起来表示String s1 = "hello" ; //字面量的定义方式String s2 = new String("hello"); // new 对象的方式String被声明为final的,不可被继承,如果字符串需要跨进程传输,是可以的,应为String实现了序列化接口。String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示Strin原创 2020-12-14 17:43:16 · 1346 阅读 · 2 评论 -
Java参数传递(值传递还是引用传递)
文章目录基本类型和引用类型的区别下面我们再来看看==的作用值传递和引用传递的区别基本类型作为参数传递对象作为参数传递关于`String`参考资料基本类型和引用类型的区别int num = 10;String str = "hello";也就是说,对于基本类型的数据变量,他的值是直接存储在变量中,而str是一个引用类型的变量,变量中保存的是我们实际的对象在堆内存中的地址,而我们真实的对象,其实是存储在堆空间中的。下面我们再来看看==的作用num=20str="java"经过这样的操作,内原创 2020-12-11 14:14:28 · 1343 阅读 · 4 评论 -
数据结构-选择排序(简单选择排序,堆排序)
目录1,简单选择排序1.1,简单选择排序思想1.2,选择排序的时间复杂度分析1.3,简单选择排序代码实现2,堆排序2.1,什么是堆排序2.2,堆排序的思想2.3,堆排序时间复杂度分析2.4,代码实现1,简单选择排序1.1,简单选择排序思想选择排序(Selection sort)是一种简单直观的排序算法。 简单选择排序算法的比较次数和初始的序列排列顺序无关。 它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,.原创 2020-12-09 09:24:18 · 2111 阅读 · 0 评论 -
剑指Offer算法索引
数组元素去重原创 2020-12-05 20:30:02 · 202 阅读 · 0 评论 -
剑指Offer-数组去重
1,查找数组中的重复数字题目描述:1.1,思路一这个题目是一道简单题目,最容易想到的是对数组中的元素一趟排序操作,然后在扫描一趟数组,就可以查找出重复的元素。但是这样的话排序是这里面最耗时间的地方,排序一个长度为n的数组的时间复杂度是o(nlogn)。代码实现:/** * 排序方法查找数组中的重复元素 * @param arr 待排序数组 * @return 查找到重复元素就返回,否则返回-1 */ public static int dupli原创 2020-12-05 20:28:22 · 548 阅读 · 0 评论 -
JVM系列-运行时数据区(一)
1,概述我们的字节码文件,经过类加载器的加载(加载,链接,初始化)后,在内存的方法区中,就保存我们的运行实例的本身,也就是类的各种信息。然后执行引擎使用我们的运行时数据区去执行程序。1.1,数据区的结构本地方法栈区域没有垃圾回收机制,堆和方法区有垃圾回收机制,pc寄存器也没有垃圾回收机制。 Oom:内存溢出异常,pc寄存器没有内存溢出情况,但是虚拟机栈区域和本地方法栈区域可能有内存溢出情况,heap area,method area也可能发生内存的溢出情况。 Pc寄存器既没有GC也没原创 2020-11-25 16:33:32 · 597 阅读 · 0 评论 -
ArrayList源码解读
目录1,ArrayList的简介2,ArrayList的源码分析2.1,ArrayList的数据结构2.2,类中的属性2.2,ArrayList的构造函数2.3,核心方法2.3.1,add()方法2.3.2,add(int index, E element),在特定位置添加元素2.3.3,remove(int)方法2.3.4,remove(Object)2.3.5,clear()方法2.3.6,indexOf(Object o),查找某一个对象的下标索引2原创 2020-11-23 08:26:55 · 515 阅读 · 0 评论 -
HashTable1.8源码解读
目录1,哈希表的简介1.1,HashTable的构造函数1.2,HashTable的属性说明1.3,HashTable的PAI2,HashTable的数据结构2.1,HashTable的内部类2.2,HashTable中重要方法分析2.2.1,put()方法2.2.2,addEntry()方法2.2.3,rehash()方法2.2.4,get()方法2.2.5,remove()删除元素方法2.3,哈希别中其他方法说明2.3.1,clear()方法2原创 2020-11-20 13:40:31 · 586 阅读 · 2 评论 -
数据结构-插入排序(直接插入排序,二分插入排序,希尔排序)
1,插入排序思想插入排序是一种简单直观的排序方法,其基本思想是每次将一个待排序的记录按其关键字大小插入到前面己排好序的子序列中,直到全部记录插入完成。由插入排序的思想可以引申出三个重要的排序算法:直接插入排序、折半插入排序和希尔排序。2,直接插入排序2.1,直接插入排序根据上面的插入排序思想,不难得出一种最简单也最直观的直接插入排序算法。假设在排序过程中,待排序表L [1...n ] 在某次排序过程中的某一时刻状态如下:有序序列L[1,2.........i-1] L(i)原创 2020-11-16 09:28:35 · 1178 阅读 · 0 评论 -
数据结构-(2-3树,2-3-4树,B-树,B+树)
目录1,二叉树存在问题分析2,多叉树B树的介绍2.1,2-3树和2-3-4树的介绍2.2,B树的查找2.3,B树的创建和插入2.4,B树的删除3,B+树3.1,m 阶的B+树与m阶的B树的主要差异1,二叉树存在问题分析虽然我们说二叉排序树,平衡二叉树的查找操作效率较高,但是也存在问题, 请看下面的二叉树。二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题: 问题1:在构建二叉树时,需要多次进行i/原创 2020-11-16 09:26:35 · 2258 阅读 · 0 评论 -
数据结构-平衡二叉树(AVL树)
目录1,平衡二叉树的介绍1.1,二叉排序树存在的问题1.2,平衡二叉树1.3,平衡二叉树的创建1.4,平衡二叉树的查找2,代码实现2.1,平衡二叉树的节点类型2.2,LL旋转(单右旋转)2.3,RR旋转(单左旋转)2.4,向avl树中添加一个节点2.5,求左右子树的高度2.6,求平衡二叉树的高度2.7,中序遍历二叉树2.8,创建一颗平衡二叉树3,测试代码1,平衡二叉树的介绍1.1,二叉排序树存在的问题在介绍平衡二叉树之前,我们先来看看.原创 2020-11-15 15:13:00 · 2800 阅读 · 1 评论 -
数据结构-二叉排序树(BST树)
1,二叉排序树介绍二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有如下性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树又分别为二叉排序树。显然二叉排序树的定义是一个递归形式的定义,所以后面景禹要讲的插入、查找和删除都是基于递归的形式。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点1.1,二叉排序树的构建假设我们有初始的无序...原创 2020-11-15 11:44:50 · 10067 阅读 · 2 评论 -
HashMap1.7源码解读分析(一)
1,HashMap的使用声明一个HashMap集合。 向结合中添加元素,以键值对的形式。 获取集合中的某一个元素。 遍历结合元素(三种方式)。public class TestHashMap { public static void main(String[] args) {// 1 声明一个HashMap对象 Map<String,Integer> hashMap=new HashMap<String, Integer>();原创 2020-11-13 16:51:37 · 381 阅读 · 0 评论 -
赫夫曼编码(Java版)
目录1,赫夫曼树的介绍1.1,为什么会需要赫夫曼树1.2,赫夫曼树的构建1.3,字符传输案例2,创建赫夫曼编码2.1,赫夫曼树的节点类型2.1,将字节数组转换为赫夫曼树的节点类型2.2,创建一棵赫夫曼树2.3,构建赫夫曼编码表2.4,压缩数据2.5,压缩数据方法封装2.6,遍历操作2.7,解压缩2.7.1,将byte转换为字符串2.7.2,解压缩操作3,文件压缩3.1,文件压缩3.2,文件解压缩4,测试代码1,赫夫曼树的介绍原创 2020-11-11 12:14:27 · 1206 阅读 · 1 评论 -
Java集合系列-Collection&Map(一)
目录1,Java集合概要2,Collection接口的介绍3,List接口介绍4,Set集接口介绍5,AbstractCollection抽象类介绍6,AbstractList抽象类介绍7,AbstractSet抽象集介绍8,Iterator迭代器接口介绍9,ListIterator子接口介绍1,Java集合概要Collection是一个接口,Collection下面主要有三个接口分支,List,Set,Queue。 为了方便,我们抽象..原创 2020-11-10 11:56:39 · 396 阅读 · 0 评论 -
详解Java-equals(),hashcode(),==的区别
目录1,我们先来看一个问题:Java 中 String str= "hello world" 和 String str = new String ("hello world") 的区别1.1,常量池1.2,String str="hello world"操作语句:1.3,使用new String创建字符串1.4,String拼接字符串1.5,String.intern():1.6,小结2,“==”用作关系运算符时3,equals()方法4,小结5,hashCode原创 2020-11-08 21:34:41 · 113 阅读 · 0 评论 -
Jvm系列-类加载子系统(二)
目录1,jvm内存结构的布局2,类加载子系统的作用3,类加载器(class loader)4,类的加载过程4.1,类的加载阶段(狭义上的加载)4.2,类的链接4.2.1,验证阶段(Verify)4.2.2,准备阶段(prepare)4.2.3,解析阶段(Resolve)4.3,初始化阶段5,类的加载器5.1,加载器的分类5.2,加载器的介绍5.3,获取ClassLoader的途径6,双亲委派机制6.1,jdbc加载举例6.2,双亲委派机制.原创 2020-11-08 17:46:55 · 1181 阅读 · 0 评论 -
Jvm系列-Jvm概述(一)
目录1,什么是JVM?2,JVM跨平台及原理3,JVM的分类4,JVM的位置5,JVM的体系结构6,Java代码的执行流程7,JVM的架构模型8,JVM的生命周期9,三大商业虚拟机1,什么是JVM?JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机。 jvm是运行在操作系统之上的,与硬件没有任何关系。2,JVM跨平台及原理跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行。 原理:编译之后的字节码原创 2020-11-07 20:15:55 · 56023 阅读 · 6 评论