十亿行文本挑战赛(The One Billion Row Challenge,1BRC),是今年火遍外网的一项比赛,旨在测试利用Java从文本文件中聚合十亿行数据时的性能极限。参赛者可以使用并行处理、SIMD、优化GC或者其它方式,实现快速计算。

阅读全文 »

开发者大会之于工程师,就像拉萨之于朝圣者。今年的Google开发者大会刚好在北京举办,我有幸前往参加,见到了来自世界各地的个人开发者和爱好者。参加开发者大会不仅能扩展视野,也能让自己显得比较Geek~。

阅读全文 »

很久没有更新博客了,曾经规划了很多plan都没有执行,前段时间看到的一个有趣的项目:UCB的CS61b课程,实现一个Gitlet。从今天开始,持续更新。

背景

Gitlet是一个类似于Git的版本控制系统,而版本控制系统本质上是计算机上文件的备份系统,Gitlet支持的功能主要包括:

  • 保存文件目录的备份。在Gitlet中,这被称为提交(committing),而备份本身被称为commits
  • 还原一个或多个文件版本或整个提交。在Gitlet中,这被称为check out
  • 查看备份历史记录。在Gitlet中,使用log来查看历史
  • 维护分支。维护相关的提交序列,称为branch
  • 合并。将一个分支的更改合并到另一个分支中
阅读全文 »

以Arrays.sort()为例进行分析。

快排基本原理

简介

快速排序,是一种比较/交换排序算法,最早由英国的东尼·霍尔提出(另外一个知名贡献是提出了和操作系统相关的哲学家进餐问题,首次提出了管程的概念,实现共享资源的互斥访问)。

时间复杂度:快排的平均时间复杂度是O(nlogn),最坏时间复杂度是O(n^2)

基本思想:使用分治法将一个序列分为两个子序列,然后递归地排序两个子序列。

阅读全文 »

简介

  在Linux系统中,内存的分配与回收速率直接影响系统的存取效率。当内核频繁请求和释放不同大小的一组连续页框时,会导致许多外部空闲碎片,造成空间的浪费。使用伙伴算法可以有效地缓解该问题。伙伴关系机制是操作系统中的一种动态存储管理算法。在进行内存分配时,该算法通过不断平分较大的空闲内存块来获得较小的空闲内存块,直到获得所需要的内存块;在进行内存回收时,该算法尽可能地合并空闲块。

阅读全文 »