Gs Chen's blog


  • Home

  • Archives

  • Tags

  • Recommend

  • About

Java8集合系列之HashMap(四)

Posted on 2017-01-05   |   In Java Collection   |     |   visitors

Map数据结构相比较List而言无疑在底层实现变的更复杂了一些,Map系列的源码学习尝试从最基本最常用的HashMap成员开始。其中设计思路部分取自于JDK1.8HashMap源码中英文的翻译,这部分内容感觉对HashMap的源码整体实现的学习和理解还是有一定帮助,值得一看。

HashMap 设计思路

初试容量和负载因子

HashMap基于哈希表的Map接口实现,并允许null键和null值。 (HashMap类大致相当于Hashtable,除了它是不同步的并允许null)。这个类不保证映射的顺序。这个实现提供了基本操作(get和put)的恒定时间性能,假设散列函数在桶中正确地分散条目。 对集合视图的迭代时间与HashMap实例的容量和键值映射的数量相关。 因此,如果要求迭代性能较好,不要将初始容量设置得太高(或负载系数太低),这一点非常重要。

Read more »

Java8集合系列之CopyOnWriteArrayList(三)

Posted on 2017-01-03   |   In Java Collection   |     |   visitors

CopyOnWriteArrayList

CopyOnWriteArrayList implements List, RandomAccess, Cloneable, java.io.Serializable,实现了随机访问,另外ArrayList和LinkedList是属于java.util.*包中,而CopyOnWriteArrayList是属于java.util.concurrent包中的,显然可知,后者是并发安全的集合。

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。

Read more »

Java8集合系列之LinkedList(二)

Posted on 2017-01-02   |   In Java Collection   |     |   visitors

LinkedList

LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable,实现了List、Deque(双端队列)等接口。所以LinkedList不仅可以作为一般的list集合使用,也可以作为普通的队列使用。

Read more »

Java8集合系列之ArrayList(一)

Posted on 2017-01-01   |   In Java Collection   |     |   visitors

阅读Java SDK的几个核心包源码计划的flag已经立下很久了,一直没有行动。一个是因为集合框架是Java中比较常用的数据结构,从List、Set、Map到Queue等等,另外这部分会涉及到线程并发安全性的问题,所以想进一步学习弄清楚实现原理。于是,决定从List开始梳理java集合包中这部分源码的实现,方便自己日后回顾。

Read more »

LevelDB之源码探析小结

Posted on 2016-12-06   |   In Database   |     |   visitors

现在开始觉得看过的东西如果记下来总觉得像没看一样,网上源码分析贴很多,文章质量各有所长。本文并不打算如对代码进行一一分析,决定只做资料的搬运工,完成对所看过的一些比较好的资源的一些索引,方便日后回头查看,就酱。

Read more »

LevelDB之源码调试环境搭建

Posted on 2016-11-26   |   In Database   |     |   visitors

趁着前一篇LevelDB之LSM-Tree的文章中对LevelDB的技术好奇的热情尚未退却,决定一览LevelDB内部的实现,好歹对此类K-V键值存储系统有个代码级别的初步认识,果然还是有所收获的,比如对C++的学习、对数据结构的认识、Skiplist(跳表)、变长整数编码、memtable中的内存管理等等。

Read more »

通往C++之路

Posted on 2016-11-25   |   In Other   |     |   visitors

最近在准备看看LevelDB的源码,因为它是一个写入性能高效的基于硬盘的K-V键值存储,区别于Redis这种基于内存的键值对存储数据库,仅仅知道它是以LSM-Tree数据结构实现而成并不能满足我的好奇心,果断还是想一窥LevelDB的庐山真面目,但是它毕竟又是以CPP写的,这给我这种之前长期驻扎Java为阵营的成员还是带来了不少的学习成本,但是个人觉得语言永远应该不能成为阻挡你理解计算机世界的拦路虎。

Read more »

LevelDB之LSM-Tree

Posted on 2016-11-23   |   In Database   |     |   visitors

一直觉得数据库内部的实现是个黑匣子,总感觉很神秘,借着前段时间「海量存储」这门课程课堂报告的机会,读了一些Paper,虽然没能全部仔细读完,但是从每篇Paper的Abstract里面还是能窥见当前领域的近来的一些学术动态,很多东西没能记住,但是,印象唯独深刻的是,几乎大部分paper都在讨论:如何使得存储系统的I/O性能更快更有效率,如何使得同样的物理存储能够存储更多的数据内容?

Read more »

Git常用命令小结

Posted on 2016-11-17   |   In Other   |     |   visitors

因为最近项目用到git较多,一些常用的命令经常忘记,好记性不如烂笔头,索性总结一下。这篇文章会系统的逐渐更新所有在git中用到的命令操作或者git基础知识,仅仅起到一个索引的作用,如果你有一定的git基础,但是想知道或者了解git在一个小团队的分支管理工作流程,可以参考这篇文章。
在git的版本管理中心有这样的一层关系,用流程图画出来会比较好。

该图借用了阮一峰老师blog的图。

  • Workspace:工作区
  • Index:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

Workspace就是项目的工作目录,index是在你git add .之后,文件修改会放入index暂存区,Repository是每个开发者自己的机子上维护的一个仓库,remote就是公司的Gitlab或者GitHub上存放的远程仓库。

Read more »

Google Spanner

Posted on 2016-10-18   |   In Database   |     |   visitors

这篇文章是由之前海量存储的论文课程报告整理而成,Google Spanner这篇2012年发表在OSDI上面的论文确实艰涩难懂,中间查阅了不少资料才稍微理解里面的关键词或者是专业术语,本文一部分内容是论文的中文翻译,作了删减,想看原文可以绕过。之所以放在blog上,为了方便日后检索该部分相关内容,同时也希望能达到一起交流的目的。

Read more »
1…3456
Gs Chen

Gs Chen

Widen grain , Highten wall

58 posts
13 categories
38 tags
RSS
GitHub Weibo douban zhihu
Links
  • 江南白衣
© 2016 - 2018 Gs Chen
Powered by Hexo
Theme - NexT.Mist     |    您是本站第 位访客