Recent Posts

Java Nio(一) - Unix IO模型

本系列介绍JAVA的NIO(New IO)系列接口。NIO通过几个部件(主要是:selector、channel、buffer),提供和传统IO不同的读写方式。它 同步非阻塞 IO。由NIO提供的接口看,它的设计思路和Unix的五个IO模型的其中一个:多路转接IO是一样的。所以,在学习具体的NIO代码实现之前,我...

从JMM层面说说Java并发(三) - ConcurrentHashmap(JDK1.6)

ConcurrentHashMap是JDK提供的一个线程安全的Map实现。在JDK1.6中,它使用锁分离和Segment的方法实现更小粒度的锁。而在JDK1.8版本中,ConcurrentHashMap基本放弃了这一做法,而是使用CAS算法实现。本文分析的是JDK1.6版本中的实现。

从JMM层面说说Java并发(二) - volatile

volatile关键字是用于线程间通讯的特殊字段。它保证一个线程对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。也就是保证变量的可见性。另一点更重要的是,volatile读和volatile写之间有 happens-before关系。

从JMM层面说说Java并发(一) - 基础概念

为什么要理解JMM(Java Memory Model)模型?在了解JMM之前,我们谈论Java并发的一些问题,如synchronized关键词、volatile关键词等问题时,总是在很高层的抽象解释它们的机制,却无法解释其中的原理,甚至有一些谬误。特别是可见性的部分,如果不了解JMM,是根本无法解释的。JMM是...

Java集合框架源码解析(四) - HashMap(jdk 1.8)

HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。和HashTable一样,HashMap也实现了Map接口,这意味着两个类的接口、用法是几乎一样的。以至于一些面试题很喜欢提问HashMap和HashTable的区别。对于这类问题,与其死记硬背一些答案,不如深入到两者的实现层面里,看看...

Java集合框架源码解析(二) - LinkedList

LinkedList是非线程安全的List实现,只在单线程下适合使用。LinkedList是一个用双向链表实现的一个List(通过源码很容易看出),它除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。

深入Java Classloader(二) - Classloader工作机制

在上一节中,已经说明了Java的类加载机制和Classloader的职责。实际上,类加载器虽然只用于实现类的加载动作,但它在Java程序里起到的作用远远不限于类加载阶段。每个Classloader,都有独立的类名称空间。所以,一个class文件被不同的classloader加载,这两个类是不相等的。JVM在判定两...

Ruby并发与线程

在计算机的世界里,并发的概念是:把多个任务同时进行,以节省时间/空间资源。并发是操作系统级别的概念,本文会在更高的层次讨论,所以会省略一些底层实现细节,如果你对多进程模型,多线程等相关概念不了解,先去看看Linux进程模型吧。:)

一致性哈希(Consistent Hashing)原理

看一些分布式相关的技术文章或书籍时,经常看到一个词,一致性哈希。对于这个技术一直似懂非懂。今天花了半天的时间好好研究了它的原理和实现,发现一点都不复杂。于是写篇文章分享一下。

ActiveRecord如何拼出一句Sql?—— (一)ActiveRecord、Relation与Arel

在上一篇中我们学习了基本的关系代数知识,以及Arel和关系代数的关系。上集讲到,ActiveRecord在幕后使用Arel拼出SQL语句。现在,我们先跳过Arel,说说幕前:从ActiveRecord讲起,说说AR的query接口(如:where,select,order)的设计思路和实现,这部分会主要涉及Act...