
Java
文章平均质量分 79
Z小繁
这个作者很懒,什么都没留下…
展开
-
JAVA-string类之compareTo用法
JAVA-string类之compareTo用法,1、首字符不同,则该方法返回首字符的asc码的差值;2、首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值;3、首字符相同,且有一个字符串被包含,则返回两个字符串的长度差值;4、str1.compareTo(str2),差值均为str1-str2(前减后)。原创 2015-09-05 17:26:59 · 5814 阅读 · 0 评论 -
Boolean.getBoolean()那些坑
今天使用自定义注解时,用到了Boolean.getBoolean(),原以为Boolean.getBoolean("true"),会返回true,结果是false。 细看源码发现:/** * Returns {@code true} if and only if the system property * named by the argument exists and is原创 2016-09-02 08:45:37 · 9432 阅读 · 0 评论 -
利用反射打造自定义注解,自动校验或处理数据
开发过程中,难免会对数据进行校验或处理,难道每次都对不同的实体类的属性挨个判断是否符合规范或者对其进行特殊处理,程序员不应该这么做。在这个时候,自定义注解就派上大用场了。比如自定义一个 @Email 注解,将其标注在只能存放email格式的属性(private String guestEmail)上,再在程序入口上加一个判断工具类。那么程序将利用你事先写好的方法进行校验该属性值是否符合邮件的格式,原创 2016-10-29 17:46:46 · 11678 阅读 · 0 评论 -
玩转Redis-Redis安装、后台启动、卸载
【PS】微信订阅号(zxiaofan)已开通,欢迎关注。Redis官网:https://redis.io/Redis中文官方网站:http://www.redis.cn/Redis_GitHub:https://github.com/antirez/redisRedis互动教程:http://try.redis.io/Redis 是一个开源(BSD许可)的,内存中的数据结构存储...原创 2017-02-11 19:03:28 · 15804 阅读 · 1 评论 -
ThreadLocal源码分析(JDK8)
ThreadLocal特性及使用场景:1、方便同一个线程使用某一对象,避免不必要的参数传递;2、线程间数据隔离(每个线程在自己线程里使用自己的局部变量,各线程间的ThreadLocal对象互不影响);3、获取数据库连接、Session、关联ID(比如日志的uniqueID,方便串起多个日志);ThreadLocal应注意:1、ThreadLocal并未解原创 2017-01-25 18:13:54 · 17586 阅读 · 5 评论 -
java反射必知必会
java反射在学习工作中时常使用,自己也利用反射做了一些工具(比如《利用反射打造自定义注解,自动校验或处理数据》),但一直对反射缺乏较为系统的了解。以下内容是慕课网教程《反射——Java高级开发必须懂的》的学习笔记,相关代码见github工程github.com/zxiaofan/JDK-Study,该项目主要用于学习JDK相关源码以及基础知识。当然,想要更为系统地直接地了解反射,还需要去研究源码原创 2017-02-26 19:36:36 · 5097 阅读 · 0 评论 -
ConcurrentHashMap源码分析--Java8
如果还停留在锁分离、Segment,那已经out了。Segment虽保留,但已经简化属性,仅仅是为了兼容旧版本。CAS算法;unsafe.compareAndSwapInt(this, valueOffset, expect, update); CAS(Compare And Swap),意思是如果valueOffset位置包含的值与expect值相同,则更新valueOffset位置的值为update,并返回true,否则不更新,返回false。与Java8的HashMap有相通之处,底层依然由原创 2016-02-05 09:42:30 · 18052 阅读 · 10 评论 -
java学习资料免费下载(持续更新ing)
1、资源来源于网络,如有侵权,请联系我删除;2、个别pdf较大,将在不影响阅读的情况下,优化PDF大小,方便传输及下载阅读;3、若单个文件较大,将使用分卷压缩将文件压缩成多个压缩包,使用时下载所有文件直接解压即可,或前往CSDN下载(资源说明:https://blog.csdn.net/u010887744/article/details/54730763;java开发书籍整理(http://...原创 2017-01-25 19:41:41 · 26533 阅读 · 9 评论 -
阻塞队列BlockingQueue(JDK8)
BlockingQueue(阻塞队列)是JDK5新增的线程安全的高效队列类,基于生产者-消费者模式。队列为空时,获取元素的操作等待队列变为非空;队列已满时插入操作等待队列空间可用。BlockingQueue不接受null元素,会throw NullPointerException,null用于标记poll操作的失败。BlockingQueue默认容量大小为Integer.MAX_V原创 2017-04-16 14:06:36 · 8430 阅读 · 0 评论 -
LinkedBlockingQueue源码分析(JDK8)
本文分析LinkedBlockingQueue的源码,学习其底层实现。LinkedBlockingQueue特性及使用场景:1、基于链表实现,线程安全的阻塞队列。2、“two lock queue”算法变体,双锁(ReentrantLock):takeLock、putLock,允许读写并行,remove(e)和迭代器iterators需要获取2个锁。3、FIFO先进先出模式。4、在大部分并发场景下,LinkedBlockingQueue的吞吐量比ArrayBlockingQueue更好。LinkedBlo原创 2017-06-10 23:41:03 · 10501 阅读 · 3 评论 -
HashMap迭代时Remove不抛出ConcurrentModificationException的特例
众所周知,HashMap在迭代时remove会抛出异常,ConcurrentModificationException,但事实真的是这样的吗?的确会抛异常,但也有特例。废话少说,上代码:public class ConcurrentModificationException { public static void main(String[] args) { HashM原创 2016-03-09 22:22:18 · 13270 阅读 · 0 评论 -
Gson将json转Map的那些坑
利用Gson将一串json数据转为Map格式,再get数据,相比很多人都做过。今天遇到一个“坑”,mark一下。首先明确一点:Gson是可以将json转为Map的,并且Map的key是允许为Integer的。 public void test() {<span style="white-space:pre"> </span>String json1 ...原创 2016-07-22 18:46:18 · 46226 阅读 · 3 评论 -
原子操作
定义:一个操作是原子的(atomic),如果这个操作所处的层(layer)的更高层不能发现其内部实现与结构。 1、原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。 视作整体式原子性的核心。 2、在多进程(线程)访问资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。原子操作(atomic operat原创 2015-12-12 15:57:37 · 7306 阅读 · 0 评论 -
javac不是内部或外部命令,但是java、java-version指令正常
javac不是内部或外部命令,但是java、java-version指令正常今天遇到这个问题,云笔记博客同时Mark一下。解决方案:CLASSPATH:.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar;【注意前面的点】JAVA_HOME:C:\Program Files\Java\jdk1.8.0_66原创 2016-01-03 14:21:57 · 12486 阅读 · 1 评论 -
史上最全Java集合关系图
说是史上最全,或许有点吸引眼球的嫌疑了,但我在网上确实也没有找到更全的,这图也是我对照Java源码挨个分析,画出了较为常见的关系图,及其重要特性。 图中部分集合的使用事例可以参见我的github(点击访问),部分集合的源码分析可以参见我的CSDN的其他文章。如果需要下图的vsdx原图,请点击此处下载,Java集合关系图。欢迎个人转载,但须在文章页面明显位置给出原文连接;未经作者同意必须原创 2016-01-24 22:46:51 · 31203 阅读 · 4 评论 -
volatile关键字
个人相关源码:https://github.com/zengfanjun/JDK-Study/blob/master/src/keyWord/KW_volatile.javahttp://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html#!comments【评论很有意思】下文为海子的文章,个人很欣赏他的博客,与自己的见原创 2015-12-12 16:05:06 · 4931 阅读 · 0 评论 -
HashMap源码分析(jdk1.8)
HashMap源码前前后后看了好几次,也和同事分享过好几次,每次都有新的收获。分享也是一种提高!本文首写于个人云笔记(点击访问),经多次修改,短期内不会有重大修改了,现发于此,有任何问题欢迎交流指正。JDK1.8中采用的是位桶+链表/红黑树的方式,也是非线程安全的。当某个位桶的链表的长度达到某个阀值的时候,这个链表就将转换成红黑树。原创 2015-12-17 20:24:26 · 13112 阅读 · 1 评论 -
ArrayList源码分析(jdk1.8)
前几天自我学习了ArrayList的源码,写了篇云笔记,现将其发布到博客,供大家学习交流,本人并非大神,如有任何问题,欢迎批评指正。最初是看了这篇文章http://www.cnblogs.com/hzmark/archive/2012/12/20/ArrayList.html,不过是基于jdk1.6的,遂自己分析源码并写下此文,在此表示感谢。接口特性原创 2015-10-29 20:08:01 · 11909 阅读 · 0 评论 -
EnumSet源码分析
核心:long(long数组) 和 位运算 其存储结构elements并未直接存枚举本身,而是位标识,枚举存于elementType中的enumConstants中.1、内部元素为枚举;2、内部表示为位向量,使用“位标志”的替换形式。(类似0x1000000,按bit存储,用位运算进行相关操作);3、全部是静态方法static;4、根据传入的枚举类型判断组成长原创 2016-03-09 13:48:12 · 13262 阅读 · 0 评论 -
EnumMap源码分析
自Java8以来,HashMap是高效的。应用HashMap完成枚举类型到值的映射也是我们常用的方式,但是EnumMap将更加高效。EnumMap顾名思义,是为枚举类服务的。key必须为枚举类(Enum),且创建EnumMap时必须指定key的类型。key不能为null,NullPointerException,但value允许null。底层结构均为数组,大小为Enum成员数量,创建E原创 2016-03-10 08:39:39 · 12826 阅读 · 0 评论 -
Java的string类常量池及不可变性
1、String常量池 当使用new String(“hello”)时,JVM会先使用常量池来管理“hello”直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中。即new String(“hello”)一共产生了两个字符串对象。【常量池constant pool】管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类原创 2016-03-10 10:48:49 · 13791 阅读 · 12 评论 -
Java集合大整理
HashSet允许,just 1个noHashMap同HashMap【add】:调用HashMap的put方法,put的value传入伪值static final Object PRESENT = new Object(),仅仅为了保持映射关系;(所有value都是同一个对象)【remove】:调map的remove有contains,无getHashMap中的Key是根据对象的hashCode() 和 euqals()来判断是否唯一的。So:为了保证HashSet中的对象不会出现重复值原创 2016-03-28 23:48:09 · 13520 阅读 · 0 评论