Java
文章平均质量分 85
∝ 1 颗心╮
Java
展开
-
JWT验证原理
1.概述什么是JWT?JSON Web Token(JWT),是一个开放安全的行业标准,用于多个系统之间传递安全可靠的信息。2.JWT的结构JSON Web Token说到底也是一个token字符串,它由三部分组成,头部、载荷与签名。 如下图 红色的为Header,指定token类型与签名类型,紫色的为载荷(playload),存储用户id等关键信息,最后蓝色的为签名,保证整个信息的完整性,可靠性。2.1 头部(Header)JWT的头部用于描述关于该JWT的最基本的信息,例如.原创 2020-07-16 14:19:02 · 645 阅读 · 0 评论 -
Java Object的详解
构造方法摘要Object()方法摘要protected Object clone() 创建并返回此对象的一个副本。boolean equals(Object obj) 指示某个其他对象是否与此对象“相等”。protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,...原创 2019-12-30 09:28:22 · 123 阅读 · 0 评论 -
Java集合框架11-WeakHashMap详解
WeakHashMap和HashMap相似,也是哈希表的实现,以键值对的形式存储数据,key和value都可以为null。不同的是WeakHashMap的键为“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,...原创 2019-04-19 09:32:58 · 268 阅读 · 0 评论 -
Java集合框架10-LinkedHashMap详解
LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现。哈希表的功能通过继承HashMap实现了。LinkedHashMap还维护着一个双重链接链表。此链表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。数据结构说明:LinkedHashMap会将元素串起来,形成一个双链表结构。可以看到,其结构在HashMap结构上增加了链表结构。数据结构为(数组 ...原创 2019-04-18 11:04:13 · 380 阅读 · 0 评论 -
Java中的CAS
无锁的概念在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小,可以无所顾忌地做事,但对于悲观派而已,他们总会认为发展事态如果不及时控制,以后就无法挽回了,即使无法挽回的局面几乎不可能发生。这两种派系映射到并发编程中就如同加锁与无锁的策略,即加锁是一种悲观策略,无锁是一种乐观策略,因为对于加锁的并发程序来说,它...转载 2019-04-26 23:12:58 · 105 阅读 · 0 评论 -
Java集合框架-基础框架
一、集合框架概览图可以看到集合的基础接口是Map,Collection以及Iterator。其余的类都实现自这3个类。蓝色为接口,红色为类,绿色为抽象类。 空心三角形虚线:实现接口(implements),好像也不太准确,列如list和collection的关系是extends。因为list是接口 空心三角形实线:继承(extends)二、基础接口的源码解析3.1 Ite...原创 2019-04-18 10:06:09 · 249 阅读 · 0 评论 -
红黑树(一)-原理和算法详细介绍
红黑树(RBT)的定义:它或者是一颗空树,或者是具有一下性质的二叉查找树:1.节点非红即黑。2.根节点是黑色。3.所有NULL结点称为叶子节点,且认为颜色为黑。4.所有红节点的子节点都为黑色。5.从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。我来简单说说呵:第3条,显然这里的叶子节点不是平常我们所说的叶子节点,如图标有NIL的为叶子节点,为什么不按常规出牌,...原创 2019-04-15 15:00:45 · 347 阅读 · 0 评论 -
Java集合框架09-Hashtable详解
相信大家对Hashtable已经有所了解了,Hashtable和HashMap,从存储结构和实现来讲基本上都是相同的。它和HashMap的最大的不同是它是线程安全的,另外它不允许key和value为null。Hashtable是个过时的集合类,不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换顶部注释This...原创 2019-04-17 21:04:39 · 210 阅读 · 0 评论 -
HashCode详解
一、hashcode是什么 1、hash和hash表是什么hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值,这个时候,我们就需要知道另一个东西,hash表,通过hash算法得到的hash值就在这张hash表中,也就是说,hash表就是所有的hash值组成的,有很多种hash函数,也就代表着有很多种算法得到hash值。 2、ha...原创 2019-04-15 09:14:19 · 159 阅读 · 0 评论 -
Java集合框架07-Map整体架构
1、Map的整体结构Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承Collection接口。AbstractMap:实现了Map接口的抽象类。Map的基本实现,其他Map的实现类可以通过继承AbstractMap来减少编码量。 SortedMap:继承Map。保证按照键的升序排列的映射,对entrySet、keySet和values方...原创 2019-04-15 08:41:53 · 170 阅读 · 0 评论 -
Java集合框架-List总结
第1部分 List概括(01)List 是一个接口,它继承于Collection的接口。它代表着有序的队列。(02) AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。(03) AbstractSequentialList 是一个抽象类,它...原创 2019-04-14 21:39:08 · 89 阅读 · 0 评论 -
Java集合框架06-Stack
第1部分 Stack介绍Stack简介Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用!Stack的继承关系java.lang.Objec...原创 2019-04-14 21:26:13 · 96 阅读 · 0 评论 -
HashMap的扩容机制 为什么是2幂
假设length为Hash表数组的大小,方法indexFor(int hash, int length)为indexFor(int hash, int length) { return hash % length;}在旧数组中同一条Entry链上的元素,在resize过程中,通过重新计算索引位置后,有可能被放到了新数组的不同位置上。JDK8做了一些优化,resize过程中对H...转载 2019-04-23 21:02:30 · 802 阅读 · 0 评论 -
Java集合框架13-Map总结
Map的整体结构先来回顾下Map的整体结构。层次结构图Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承Collection接口。AbstractMap:实现了Map接口的抽象类。Map的基本实现,其他Map的实现类可以通过继承AbstractMap来减少编码量。 SortedMap:继承Map。保证按照键的升序排列的映射,对en...原创 2019-04-23 22:46:48 · 111 阅读 · 0 评论 -
Java的值传递
1. 形参与实参我们先来重温一组语法: 形参:方法被调用时需要传递进来的参数,如:func(int a)中的a,它只有在func被调用期间a才有意义,也就是会被分配内存空间,在方法func执行完成后,a就会被销毁释放空间,也就是不存在了 实参:方法被调用时是传入的实际值,它在方法被调用前就已经被初始化并且在方法被调用时传入。 举个栗子:1publicstati...转载 2019-09-22 09:43:56 · 127 阅读 · 0 评论 -
ConcurrentHashMap源码分析(JDK8版本)
ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添加了synchronized锁,这样的锁无疑会影响到性能。...转载 2019-06-02 15:27:27 · 158 阅读 · 0 评论 -
Class文件结构
Class类文件结构Class文件是一组以8字节为基础单位的二进制流, 各个数据项目严格按照顺序紧凑排列在class文件中, 中间没有任何分隔符,这使得class文件中存储的内容几乎是全部程序运行的程序。Java虚拟机规范规定,Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表。无符号数属于基本数据类型,主要可以用来描述数字、索引符号...转载 2019-05-23 10:43:33 · 135 阅读 · 0 评论 -
Java编译过程(字节码编译和即时编译)
编译包括两种情况:1,源码编译成字节码2,字节码编译成本地机器码(符合本地系统专属的指令)解释执行也包括两种情况:1,源码解释执行2,字节码解释执行解释和编译执行的区别是:是否产生中间本地机器码。一、编译过程:大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:其中绿色的模块可以选择性实现。上图中间的...转载 2019-05-23 09:59:13 · 1841 阅读 · 0 评论 -
Java集合框架16-TreeSet
第1部分 TreeSet介绍基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。此实现为基本操作(add、remove和contains)提供受保证的log(n)时间开销。注意,如果要正确实现Set接口,则set维护的顺序(无论是否提供了显式比较器)必须与equals一致...原创 2019-05-26 19:43:45 · 123 阅读 · 0 评论 -
Java集合框架15-HashSet详解
第1部分 HashSet介绍HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collec...原创 2019-05-26 19:22:25 · 136 阅读 · 0 评论 -
Java BIO/NIO/AIO 学习
了解Unix网络编程5种I/O模型1、阻塞式I/O模型阻塞式I/O是最流行的I/O模型。默认情况下所有的套接字都是阻塞的。如图,进程调用recvfrom,其系统调用直到数据报到达且被复制到相应的应用进程的缓冲区中或者发生错误才返回,最常见的错误是系统调用被信号中断。在图中,进程在从调用recvfrom开始到它返回的这段时间内是阻塞的。2、非阻塞式I/O模型当套接字被设置成非...转载 2019-05-21 10:40:03 · 119 阅读 · 0 评论 -
Java集合框架12-TreeMap详解
TreeMap介绍TreeMap 简介TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。TreeMap继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。TreeMap 实现了Cloneable接口,意味着它能被克隆。Tr...原创 2019-04-19 19:51:47 · 186 阅读 · 0 评论 -
Java集合框架14-Set整体架构
Set的整体结构Set接口继承了Collection接口。特点是不保存重复的元素。AbstractSet是一个抽象类,它继承于AbstractCollection,实现了Set。AbstractCollection提供了Set接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。SortedSet进一步提供关于元素的总体排序的Set。这些元素使用其自然顺序进行排序,或者...原创 2019-04-23 22:51:38 · 138 阅读 · 0 评论 -
Java集合框架08-HashMap详解
1、HashMap概述在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。下图中代表jdk1.8之前的ha...原创 2019-04-16 20:09:25 · 240 阅读 · 0 评论 -
Java集合框架05-LinkedList详解
1、LinkedList介绍Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).第一段大意为LinkedList是List接口和Dequ...原创 2019-04-13 17:39:21 · 163 阅读 · 0 评论 -
Java集合系列02-Collection架构
Collection是一个接口,它主要的两个分支是:List和Set。List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素!List和Set都有它们各自的实现类。为了方便,我们抽象出了AbstractCollection抽象类,它实现了Collection中的绝大部分函...原创 2019-04-09 23:41:28 · 98 阅读 · 0 评论 -
Comparable和Comparator的区别
ComparableComparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么...原创 2019-03-14 08:33:14 · 94 阅读 · 0 评论 -
lambda表达式的使用
简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.)Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一...原创 2019-03-13 22:50:15 · 172 阅读 · 0 评论 -
Java的浅拷贝与深拷贝
Java中的对象拷贝主要分为:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。浅拷贝(Shallow Copy):①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、...原创 2019-03-13 22:18:45 · 88 阅读 · 0 评论 -
Java中的final关键字
一.final关键字的基本用法在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。1.修饰类当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方...原创 2019-03-08 23:06:32 · 174 阅读 · 0 评论 -
对象导论
抽象过程(1)万物皆对象(2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。(3)每个对象都有自己的由其他对象所构成的存储。(4)每个对象都拥有其类型。(5)某一特定类型的所有对象都可以接受同样的消息。 后期绑定:当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为是弱类型...原创 2018-11-28 17:03:57 · 129 阅读 · 0 评论 -
网络中基本概念
网络(network):几乎可以实时相互发送和接收数据的计算机和其他设备的集合。节点(node):网络中的每台机器称为一个节点。主机(host):具有完备功能的计算机节点。地址(address):用于唯一标识节点的一个字节序列。所有现代计算机网络都是包交换(分组交换)网络:流经网络的数据分割成小块,成为包(packet,也称分组),每个包都单独加以处理。每个包都包含了有谁发送和将发...原创 2018-11-03 13:20:49 · 198 阅读 · 0 评论 -
抽象类的作用
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。抽象的特点:1、抽象方法一定在抽象类中。2、抽象方法和抽象类都必须被abstract关键字修饰。3、抽象类不可以用new创建和实例化对象。因为抽象类本身就是不完整的。4、抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象...原创 2018-09-25 22:23:56 · 2248 阅读 · 0 评论 -
Java中权限修饰符
Java中访问修饰符public、private、protect、default范围 同一个类 同一个包 不同包的子类 不同包的非子类 Private √ D...原创 2019-03-14 09:50:36 · 722 阅读 · 0 评论 -
Java内部类
一.内部类基础在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。1.成员内部类成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:class Circle { double radius = 0;...原创 2019-03-14 17:29:50 · 86 阅读 · 0 评论 -
Java的静态绑定与动态绑定
一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定。绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。 二:静态绑定 静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的,在编译的时候就可以连接到类的中,定位到这个方法。 在Java中,final、private、static修饰的方法以及构造函数都是...原创 2019-03-10 22:35:31 · 75 阅读 · 0 评论 -
Java集合框架01-整体架构
JCF(Java collections framework),也就是java集合框架包括:集合(Collection) 列表(List) ArrayList LinkedList Vector Stack CopyOnWriteArrayList 队列(Queue) ArrayBlockingQueue LinkedBlockingQue...原创 2019-04-09 23:11:36 · 175 阅读 · 0 评论 -
Iterator与Enumeration
Enumeration的存在有什么意义?Iterator已经实现了对容器的遍历了,Enumeration的存在有什么意义呢?原因可能有很多种,个人了解有限,欢迎大家补充。Enumeration在JDK 1.0就已经存在了,而Iterator是JDK 2.0新加的接口。为了依赖JDK1.0写的代码能够正常运行,Enumeration是不能删的。相同点Iterator和Enumerat...原创 2019-04-13 08:19:57 · 144 阅读 · 0 评论 -
Java-详解fail-fast
在Java容器源码的注释中有这样一句话The iterators returned by this class’s iterator and listIterator methods are fail-fast.什么是fail-fast? <p><a name="fail-fast"> * The iterators returned by this ...原创 2019-04-11 18:43:03 · 138 阅读 · 0 评论 -
Java异常处理
软件开发中一个古老的说法是:80%的工作使用20%的时间。80%是指检查和处理错误所付出的努力。在许多语言中,编写检查和处理错误的程序代码很乏味,并使应用程序代码变得冗长。原因之一就是它们的错误处理方式不是语言的一部分。尽管如此,错误检测和处理仍然是任何健壮应用程序最重要的组成部分。Java 提供了一种很好的机制,用强制规定的形式来消除错误处理过程中随心所欲的因素:异常处理。它的优秀之处在于不...原创 2019-03-28 18:32:27 · 71 阅读 · 0 评论