摘要:Java集合框架 JDK7集合框架源码阅读(一) ArrayList JDK7集合框架源码阅读(二) LinkedList JDK7集合框架源码阅读(三) HashMap JDK7集合框架源码阅读(四) LinkedHashMap JDK7集合框架源码阅读(五) Hashtable JDK7集合框架 阅读全文
posted @ 2017-07-07 17:01 stevenczp 阅读 (286) 评论 (0) 编辑
摘要:完结对<Cryptography I>的学习。预计时间:3月底。 实际完成时间:3月23日 读完<垃圾回收的算法与实现>。预计时间:4月底 勉强读完一半,发现功力不够,暂时封存 读完 《图解TCP/IP》 完成时间:5月16日 读完<TCP/IP详解 卷1:协议> 完成时间:5月17日(读完关键章节 阅读全文
posted @ 2017-03-13 14:54 stevenczp 阅读 (193) 评论 (0) 编辑
摘要:Redis设计了多种数据结构,并以此为基础构建了多种对象,每种对象(除了新出的 stream 以外)都有超过一种的实现。 redisObject 这个结构体反应了 Redis 对象的内存布局 可以看出,robj 用4个 bit 存储对象类型,4个 bit 存储对象的底层数据结构 以及 robj 的固 阅读全文
posted @ 2018-08-13 23:42 stevenczp 阅读 (110) 评论 (0) 编辑
摘要:eventloop 从 server.c 的 main 方法看起 aeMain.c 标准的事件驱动框架,在死循环中调用aeProcessEvents方法 aeProcessEvents 方法比较长,里面会处理两种事件TimeEvent 与 FileEvent,本文关注的重点是 FileEvent a 阅读全文
posted @ 2018-07-28 21:30 stevenczp 阅读 (525) 评论 (0) 编辑
摘要:basic paxos是我见过最难懂的算法,我最近一个月都在研究这个东西,自认有一些粗浅的心得,在这里写一下我对它的理解 为了降低理解难度,本文使用了大量的比喻,可能词不达意,见谅 basic paxos只为了解决一个问题:一个分布式系统如何就某个值(决议)达成一致。 先给出Wiki上对paxos的 阅读全文
posted @ 2018-03-21 18:06 stevenczp 阅读 (105) 评论 (0) 编辑
摘要:本文基于jdk1.8.0_66写成 0. ThreadLocal简介 ThreadLocal可以提供线程内的局部对象,合理的使用可以避免线程冲突的问题比方说SimpleDateFormat是线程不安全的,但是如果用ThreadLocal给每个线程分配一个SimpleDateFormat对象,我们就可 阅读全文
posted @ 2018-03-01 11:30 stevenczp 阅读 (177) 评论 (0) 编辑
摘要:关于MySQL的InnoDB的MVCC原理,很多朋友都能说个大概: 每行记录都含有两个隐藏列,分别是记录的创建时间与删除时间 每次开启事务都会产生一个全局自增ID 在RR隔离级别下 INSERT -> 记录的创建时间 = 当前事务ID,删除时间 = NULL DELETE -> 记录的创建时间不动, 阅读全文
posted @ 2017-12-11 00:30 stevenczp 阅读 (1601) 评论 (1) 编辑
摘要:1. extends与super extends关键字限制了泛型类可以使用的泛型参数类型的上限(Upper Bound) super关键字限制了泛型类可以使用的泛型参数类型的下限(Lower Bound) 先定义几个简单的Class extends解析 直接赋值的限制 以泛型类List为例,如果我们 阅读全文
posted @ 2017-12-06 00:39 stevenczp 阅读 (122) 评论 (0) 编辑
摘要:在知乎上看到一个问题《java中volatile关键字的疑惑?》,引起了我的兴趣 问题是这样的: 这段代码的主要目的是:主线程修改非volatile类型的全局变量stop,子线程轮询stop,如果stop发生变动,则程序退出。 但是如果实际运行这段代码会造成死循环,程序无法正常退出。 如果对Java 阅读全文
posted @ 2017-12-04 18:57 stevenczp 阅读 (813) 评论 (0) 编辑
摘要:1. 安装hsids 这一步比较麻烦,需要提前安装cygwin,以及下载openjdk的源码 具体步骤请参考下面的两篇文章 How to build hsdis-amd64.dll and hsdis-i386.dll on Windows 在64位Windows上编译hsdis 编译时还遇到两个小 阅读全文
posted @ 2017-12-04 10:11 stevenczp 阅读 (2834) 评论 (0) 编辑
摘要:Java使用的是系统级线程,也就是说,每次调用new Thread(....).run(),都会在系统层面建立一个新的线程,然鹅新建线程的开销是很大的(每个线程默认情况下会占用1MB的内存空间,当然你愿意的话可以用-Xss来调小点),更不要说线程切换带来的开销了 为了节省开销,程序员玩出了很多花样。 阅读全文
posted @ 2017-11-11 14:33 stevenczp 阅读 (1250) 评论 (0) 编辑
摘要:本文将介绍Disruptor的工作机制,并分析Disruptor的主要源码 基于的版本是3.3.7(发布于2017.09.28) 水平有限,如有谬误请留言指正 0. 什么是Disruptor? Disruptor是一个开源的并发框架,提供了类似于Java中有界队列的功能,主要用于生产消费者场景。 与 阅读全文
posted @ 2017-11-05 16:20 stevenczp 阅读 (899) 评论 (0) 编辑