自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

转载 理解Java Integer的缓存策略

本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出结果。很明显,这里有一些小陷阱,这也是我们写这篇文章的原因。 本文将介绍 Java 中 Integer 缓存的相关...

2018-08-31 10:05:38 84

转载 深入剖析Java中的装箱和拆箱

   自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  一.什么是装箱?什么是拆箱?  在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料...

2018-08-30 18:45:20 82

原创 字符串的不可变性

String是Java中一个不可变的类,所以他一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。不可变类有很多优势。本文总结了为什么字符串被设计成不可变的。将涉及到内存、同步和数据结构相关的知识。字符串池字符串池是方法区中的一部分特殊存储。当一个字符串被被创建的时候,首先会去这个字符串池中查找,如果找到,直接返回对该字符串的引用。下面的代码只会在堆中创建一个...

2018-08-28 18:29:19 982

原创 String 重载 "+" 原理分析

1、问题分析不知道你们有没有想过这段代码是如何工作的,可能我们会想:String 类有一个 append() 的方法,它会生成一个新的 String 对象,以包含连接的字符串。首先它会先连接 apple 与 Pear 生成一个对象,然后该对象再与 Orange 相连,生成另一个新的对象,以此类推,得到最终的 String 对象。这种方式看似行得通,但是为了得到最终的 String 对象...

2018-08-28 18:23:16 141

原创 replace()、replaceFirst()和replaceAll()的区别

replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是:1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串...

2018-08-28 18:16:31 1691

原创 JDK 6和JDK 7中substring的原理及区别

String是Java中一个比较基础的类,每一个开发人员都会经常接触到。而且,String也是面试中经常会考的知识点。String有很多方法,有些方法比较常用,有些方法不太常用。今天要介绍的subString就是一个比较常用的方法,而且围绕subString也有很多面试题。substring(int beginIndex, int endIndex)方法在不同版本的JDK中的实现是不同的。了解...

2018-08-23 19:05:18 107

原创 HashSet,TreeSet和LinkedHashSet的区别

 Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象。HashSetHashSet有以下特点 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是n...

2018-08-23 17:25:16 96

转载 HashSet源码解析

1.    HashSet概述:   HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2.    HashSet的实现:   对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,...

2018-08-23 17:09:15 124

原创 快速失败fail—fast 和 安全失败fail—safe 区别

 一:快速失败(fail—fast)          在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。          原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCo...

2018-08-23 14:02:34 164

原创 HashMap和HashTable的区别

 概述关于HashMap 和 HashTable 的区别, 在这里进行一次总结. 1. 存储结构HashMap HashTable 数组 + 链表/红黑树 数组 + 链表     HashMap的存储规则:优先使用数组存储, 如果出现Hash冲突, 将在数组的该位置拉伸出链表进行存储(在链表的尾部进行添加)...

2018-08-21 18:55:39 81

原创 JAVA中循环删除list中元素的方法总结

   印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。  JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。 1、for循环遍历listfor(...

2018-08-21 12:02:39 97

原创 TreeMap源码

一、TreeMap剖析按照惯例,我简单翻译了一下顶部的注释(我英文水平渣,如果有错的地方请多多包涵~欢迎在评论区下指正)   接着我们来看看类继承图:   在注释中提到的要点,我来总结一下:TreeMap实现了NavigableMap接口,而NavigableMap接口继承着SortedMap接口,致使我们的TreeMap是有序的! TreeMap...

2018-08-20 20:11:07 112

转载 synchronized 关键字

在再有人问你Java内存模型是什么,就把这篇文章发给他。中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在《深入理解Java虚拟机》中,有这样一段话:synchronized关键字在需要原子性、可见性和有序性这三种特性的时候都可以作为其...

2018-08-20 19:20:43 109

原创 LinkedHashMap 源码分析

LinkedHashMap 底层分析众所周知 HashMap 是一个无序的 Map,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序。因此 JDK 推出一个基于 HashMap 但具有顺序的 LinkedHashMap 来解决有排序需求的场景。它的底层是继承于 HashMap 实现的,由一个双向链表所构成。LinkedHas...

2018-08-17 13:47:17 98

转载 HashMap 源码分析(JDK1.8)

HashMap简介JangGwa从源码角度带你熟悉一下JDK1.8的HashMap,首先简单介绍下HashMap。1.HashMap有三种数据结构,数组,链表,红黑树。2.HashMap是非线程安全的3.HashMap存储的内容是键值对(key-value)映射,key、value都可以为null。4.HashMap中的映射不是有序的。5.实现了Cloneable接口,能被...

2018-08-16 11:59:31 127

原创 HashMap什么时候重写hashcode和equals方法,为什么需要重写

HashSet内部是通过HashMap实现。只有使用排序的时候才使用TreeMap。否知使用HashMap。HashSet  set = new HashSetset.put(new Student(1,"aa") );set.put(new Student(1,"aa") );set.put(new Student(2,"aa") );结果set内的元素为3个,没有去处重复的new Studen...

2018-08-16 11:16:50 735

转载 LinkList源码解析

LinkedList是一个实现了List接口和Deque接口的双端链表。 有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端。 LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以使用如下方式:List list=Collections.synchronizedList(new LinkedList(......

2018-08-15 21:36:49 178

转载 Java中List和ArrayList的区别

 转载自:http://www.cnblogs.com/aisiteru/articles/1151874.html       第一次看这篇文章时,是在CSDN博客中看到的,作者写的初衷还是蛮好的,但是确实有错误的地方和不是很明白的地方。于是就很想去看看原文,废了半天的功夫终于找到了,原文还是一样有出错和我不理解的地方,我也把原文的地址贴在上面了。三月份学习的Java集合框架这部分,...

2018-08-15 20:44:27 109

转载 ArrayList 源码解析

 概括的说,ArrayList 是一个动态数组,它是线程不安全的,允许元素为null。其底层数据结构依然是数组,它实现了List<E>, RandomAccess, Cloneable, java.io.Serializable接口,其中RandomAccess代表了其拥有随机快速访问的能力,ArrayList可以以O(1)的时间复杂度去根据下标访问元素。因其底层数据结构是数...

2018-08-15 12:12:37 246

转载 Java并发编程:volatile关键字解析

    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之...

2018-08-13 15:13:32 89

转载 JVM内存结构 VS Java内存模型 VS Java对象模型

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及其间的区别。甚至我见过有些面试官自己也搞...

2018-08-13 14:20:32 113

转载 Java内存模型(JMM)

网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要有Java内存模型,Java内存模型解决了什么问题等。为什么要有内存模型在介绍Java内...

2018-08-13 14:19:24 133

转载 Java中的static关键字解析

   static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的目录大纲:  一.static关键字的用途  二.static关键字的误区  三.常见的笔试面试题  若有不正之处...

2018-08-13 10:33:27 120

转载 URLClassLoader 加载类

URLClassLoader是ClassLoader的子类,它用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。也就是说,通过URLClassLoader就可以加载指定jar中的class到内存中。 Java代码  package hb.classloader;      import java.io.File;   import java.lang.refl...

2018-08-13 10:03:49 2507

转载 ClassLoader源码解析

写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoader的loadClass()方法来加载class的,loadClass使用双亲委派模式。 为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()...

2018-08-09 17:07:40 171

原创 ThreadLocal 源码解析

了解 ThreadLocal实现独立计数器 ThreadLocalMap ThreadLocal API在多线程中,对于同一个对象的访问和修改会造成冲突,而使用 ThreadLocal 创建的变量只能被当前线程使用,不会受到其他线程的干扰。例如我们有个计数器,一共有三个线程,我们想让每个线程都从 1 开始计数,然后按顺序 1、2、3、4 递增,这时候用线程同步的话,一种可能的...

2018-08-02 10:24:17 160

原创 BigDecimal 解析

1.引言        借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 2.BigD...

2018-08-02 09:50:42 159

转载 Enum源码解析

EnumEnum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类。一、定义public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable1.抽象类。首先,抽象类不能被实例化,所以我们在java程序中不能使用...

2018-08-01 10:41:56 145

转载 fianl关键字

1. final的简介final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容易忽略,希望能够一起做下探讨。2. final的具体使用场景final能够修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,下面就...

2018-08-01 10:02:06 146

尚硅谷Java视频教程_SpringCloud视频教程

本套视频从面试题,到SpringCloud各种核心组件,到最终的微服务架构总结,帮助大家快速入门、上手并精通微服务框架SpringCloud。 课程中对比了 Dubbo 和 SpringCloud,并深入讲授SpringCloud核心组件Eureka、Ribbon、Feign、Hystrix、HystrixDashboard、Zuul、Config。除此之外,还通过整合SpringMVC+SpringBoot+Mybatis构建一个可用的基于SpringCloud的微服务工程将上述技术组件逐步落地,让大家看得懂做得出学得会。

2018-05-29

空空如也

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

TA关注的人

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