自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Java集合类框架学习 5.3—— ConcurrentHashMap(JDK1.8)

以下内容,如有问题,烦请指出,谢谢!现在看下1.8版本的ConcurrentHashMap,改动很大。目前本人也有些地方没有弄懂,具体来说就是扩容有关的那一块,有几个地方还不太对得上,单独理解是没问题的,联合起来发现存在些矛盾的地方。所以下面的扩容有关的,各位看官还是细看,自己也要想下。零、主要改动参照对象为jdk1.7的ConcurrentHashMap,当然,熟悉jdk1.

2017-03-05 22:41:40 7371 15

原创 Java集合类框架学习 4.3 —— HashMap(JDK1.8)

以下内容,如有问题,烦请指出,谢谢!这里看下1.8的HashMap,jdk1.8是个大改版,对于HashMap以及ConcurrentHashMap来说也是个很大的改版。零、主要改动相对于1.7:1、处理hash冲突的方式变化,当一条链表太长时,转化为红黑树保存,提高hash冲突时的查找速度,也就提升了几个主要的方法的速度。2、hashseed相关的都去

2017-03-03 21:56:33 1124

原创 jdk1.8 LongAdder源码学习

LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情况下,代替AtomicLong/AtomicInt,成为一个用于高并发情况下的高效的通用计数器。高并发下计数,一般最先想到的应该是AtomicLong/AtomicInt,AtmoicXXX使用硬件级别的指令 CAS 来更新计数器的值,这样可以避免加锁,机器直接支持的指令,效率也很高。但是AtomicXXX中的 CAS

2017-03-05 22:46:49 5931 2

原创 Java集合类框架学习 5.2 —— ConcurrentHashMap(JDK1.7)

以下内容,如有问题,烦请指出,谢谢!jdk1.7的ConcurrentHashMap整体设计、存储结构、思路,和1.6的基本一样,都是用代理给相应的Segment进行对应的操作。设计实现上一个比较大的改变就HashEntry的next指针不再是final的,改为volatile,并且用Unsafe提供的操作进行有序的延迟写入(lazySet)。理解1.7的代码,需要对sun.m

2017-03-05 17:22:40 643

原创 Java集合类框架学习 5.1 —— ConcurrentHashMap(JDK1.6)

以下内容,如有问题,烦请指出,谢谢!这一篇讲1.6的ConcurrentHashMapConcurrentHashMap是Java程序员接触得最多的有关并发和线程安全的类,它兼顾了并发的两个基本点——安全,高效,在很多地方都有用到,每一个Java程序员都应该真正掌握这个类。虽然1.6版本过了10年多了,现有的1.8跟1.6的差异很大。不过1.6的最适合用来学习,它实现得简单直接

2017-03-05 13:45:14 1249 2

原创 简单了解sun.misc.Unsafe

这里简单了解下sun.misc.Unsafe,jdk中的类很多地方都有用到它,它是许多类的实现的关键,知道这个类干嘛的,对一些源码的阅读很有帮助。sun.misc.Unsafe算是Java留下的后门,能提供相当强大的操作,但是又不提供专业的文档。看名字就知道,sun本身就不推荐使用这个类。一般应用级的代码都不应该使用它,框架级别的,用这个的很多,比如jdk自身,一些框架netty,最常见的框架

2017-03-04 23:08:31 3035 1

原创 Java集合类框架学习 4.2 —— HashMap(JDK1.7)

看完1.6的,接下来看下1.7的,改动并不多,稍微过下就行零、主要改动相对于1.6:1、懒初始化 lazy init,默认构造的HashMap底层数组并不会直接初始化,而是先使用空数组,等到实际要添加数据时再真正初始化。2、引入hashSeed,用于得到更好的hash值,以及在扩容时判断是否需要重新计算每个Entry的hash值(Entry的hash不再是final的,可以

2017-03-03 21:05:45 864 1

原创 Java集合类框架学习 4.1 —— HashMap(JDK1.6)

这篇开始看HashMap,先从1.6的开始,它是基础。理解了1.6的之后,再看下1.7以及1.8的改进。public class HashMap extends AbstractMap implements Map, Cloneable, Serializable一、基本性质1、基于哈希表的Map接口实现,使用链地址法处理hash冲突。如果hash函数绝对随机均匀,那么基本操作

2017-03-03 16:16:06 676 1

原创 为什么HashMap继承了AbstractMap还要实现Map接口

jdk中HashMap的声明如下     public class HashMap extends AbstractMap implements Map, Cloneable, SerializableAbstractMap的声明如下     public abstract class AbstractMap implements Map这就让人很奇怪了,AbstractMap是实

2017-03-03 16:13:31 5294 2

原创 Java集合类框架学习 3 —— LinkedList(JDK1.8/JDK1.7/JDK1.6)

这篇简单看下LinkedList。代码基于jdk1.6_45 jdk1.7_80 jdk1.8_111,三个版本之间并没有什么特别大的改动或者改进。public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable一、

2017-02-25 20:29:55 2905 1

原创 Java集合类框架学习 2 —— ArrayList(JDK1.8/JDK1.7/JDK1.6)

这一篇开始说ArrayList参考代码为jdk1.6_45 jdk1.7_80 jdk1.8_111中的源码,对比阅读,发现修改的问题以及改进点public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable一、基本性质

2017-02-25 19:58:56 3586 1

原创 Java集合类框架学习 1 —— 概述与基础

Java集合类是Java基础中的重中之重,是每个合格的Java程序员都应该真正掌握的重要知识。关于这个本人准备根据之前的学习笔记,整理个几篇。至于网上有很多相关的文章,为什么还要自己写,主要有一下几个原因。1、认真学习:以前都是博客学习,自己看得不专业系统,这次认真地学习一个。2、跟上时代:网上各类博客资料很多都过时,通常是写的是jdk1.6的源码,经过这么多年了,jdk9都快出来了,集合

2017-02-11 14:29:20 559

原创 从字节码看Java中for-each循环(增强for循环)实现原理

for-each循环是jdk1.5引入的新的语法功能。并不是所有东西都可以使用这个循环的。可以看下Iterable接口的注释,它说明了除了数组外,其他类想要使用for-each循环必须实现这个接口。这一点表明除了数组外的for-each可能底层是由迭代器实现的。Iterable接口在1.8之前只有一个方法,Iterator iterator(),此方法返回一个迭代器。由于更早出现的Collec

2017-01-15 16:11:47 3667 1

原创 HTTP协议基础(HTTP 1.1)

http协议(目前主要是HTTP 1.1)是目前世界上使用最多的应用层协议,是互联网的基础,同时它也是程序开发中最基础的协议,所有程序员都应该知道http协议。这里根据本人目前的工作学习情况,参考一些规范,简单总结一下HTTP协议的一些基础知识。 主要参考规范: rfc2616 - Hypertext Transfer Protocol – HTTP/1.1 rfc3986 - Uniform

2017-01-14 22:02:05 1195

原创 Java浅拷贝和深拷贝

浅拷贝和深拷贝是在编程中很通用的概念。一般来说,对于    B = A.copy如果除了程序中的全局共享内存、不变对象,A和B表示的对象还存在内存共享,那么这就是浅拷贝;如果除了程序中的全局共享内存、不变对象,A和B表示的对象占用的内存是完全分开,那么这就是深拷贝。因为浅拷贝存在对象(内存)共享,其中的一个修改了共享对象,另一个也是能看到这种修改的。深拷贝不存在这种对象(内存)共享,双方都

2017-01-14 15:18:33 323

原创 Java虚拟机学习笔记(一)——JVM运行时数据区和常见内存错误

本人的“Java虚拟机学习笔记”系列,主要是参考《深入理解Java虚拟机》和《Java虚拟机规范(Java SE 8)》两本书,算是本人的学习笔记,供大家参考,如有问题,烦请指出谢谢!一、运行时数据区关于什么是“运行时数据区”,两本书上说得差不多,都很模糊,个人觉得大概就是Java虚拟机中用户线程能够接触的、控制的、动态更改的内存区域。根据《Java虚拟机规范(Java SE 8)

2017-01-02 14:44:21 1215

原创 谈"http get和post的区别"

——以下内容如有各种问题,烦请指出,谢谢各位^_^——最基本的Java程序员面试题都有这个题 ——http get和post的区别? 不少人大学还没毕业就知道,就算不知道也会去搜,我记得我快毕业那会,简单搜出来,排在前面的大概就这么几个区别: 1、get用于获取数据,post用于提交数据 2、get提交参数追加在url后面,post参数可以通过http body提交

2016-12-11 23:17:37 440

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