原创 OpenJDK 源代碼閱讀之 Arrays

概要 類繼承關係 java.lang.Object java.util.Arrays 定義 public class Arrays extends Object 要點 此類主要是提供了一些操作數組的方法,比如排序啊,搜索啊。也提

原创 OpenJDK 源代碼閱讀之 LinkedList

概要 類繼承關係java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.A

原创 控制檯,終端,虛擬終端,tty,shell等概念的區別

控制檯,終端,tty,shell等概念的區別 使用linux已經有一段時間,卻一直弄不明白這幾個概念之間的區別。雖然一直在用,但是很多概念都感覺模糊不清,這樣不上不下的狀態實在令人不爽。下面就澄清一下這些概念。 這些概念本身有着非常

原创 Jinja2 源代碼分析

學習方式 從 Jinja 2.0 版本開始學習,之前的版本里有不少編譯錯誤,測試用例也不全,可以先看比較完整的 2.0 版本, 弄清楚主要思路,再看之前的提交過程。 Jinja 2.0 概要 Jinja2 簡介 Jinja2

原创 在Ubuntu 12.04 上編譯調試 OpenJDK8

前言 現在看的資料都是編譯 openjdk7 的,openjdk8好像已經 openjdk7 編譯方式大一樣,按照前輩的文章使用 make sanity 會提示找不到 sanity 規則,然後編譯過程其實基本就直接 ./con

原创 JDK8 中的類型推斷與重載解析

首先從一個例子開始: 下面這段代碼,在 JDK6u30 中可以正常工作,但是在 JDK8u65 中會運行失敗,提示類型轉換錯誤,ClassCastException。 Exception in thread "main" java.lan

原创 架構風格與基於網絡的軟件架構設計

架構風格與基於網絡的軟件架構設計 如今許多服務都採用了 RESTful API, 而 REST 這一架構風格,最早即來源於 Roy Thomas Fielding 的博士論文 Architectural Styles and the D

原创 對遞歸的新認識

今天看了 SICP 上關於遞歸的一個討論。明白了一個道理: 形式上是遞歸的不等於本質上也是遞歸的。 如果一個函數形式上是遞歸的,即他調用了自己。不等於這個函數在本質上是遞歸的,有可能這個函數在本質上是迭代的。 對於一個本質上是遞歸

原创 生產環境 JDK6 升級 JDK8

由於 Oracle 已經不對 JDK6 和 JDK7 進行支持,同時爲了利用 G1 收集器。所以我們在生產環境中,將項目從 JDK6 升級至 JDK8,並將垃圾收集器由 CMS 換成了 G1。下面對這次升級作一個總結,並且給出一些大家可

原创 程序設計中的抽象

SICP 的第一章初步介紹了與函數(procedure)相關的抽象。 什麼是抽象 抽象就是站在一個更高層次上看待問題。在較高的層次上的抽象,可以表達較低層次上一些相同的模式。 我們上小學的時候,剛開始學一些算術,都是一些具體的問題

原创 程序員都需要學習什麼

程序設計語言 程序員至少要學一門程序設計語言,這樣才能開始做點什麼。主流的程序設計語言一般都有一本聖經級別的書,例如 C 語言中, K&R 的 The C Programmer Lanugage,C++ 中的 C++ Primer,

原创 Data Race Free 的前世今生

Data Race Free 是多線程程序是非常重要的概念,因爲Java 和 C++的內存模型都是基於 Data Race Free 的,這篇文章將介紹這個概念的由來,另一篇文章《對Data Race Free的理解》介紹它的主要思想。

原创 對 Java 內存模型的理解

Java 內存模型 Java內存模型規定了在多線程程序中,什麼樣的行爲是允許出現的,什麼樣的行爲是禁止出現的。這樣說可能有點抽象,我們換一個角度。將程序行爲抽象成讀操作和寫操作,每個線程有自己的局部變量,同時線程之間還存在共享變量。那

原创 Java 虛擬機內部類靜態字段的初始化與訪問

要明白 Java 虛擬機如何訪問類的靜態變量,首先要明白下面幾個問題: 虛擬機內部是如何表示一個 Java 類的靜態變量存儲在哪裏虛擬機如何訪問到這些靜態變量 這篇文章也從這圍繞這三個問題展開,並結合 OpenJDK 中 HotSpot

原创 程序設計語言中的語法糖

語法糖是什麼呢?按我現在的理解,如果一門語言沒有某個語法,照樣可以通過其它更通用的方式來表達某種語義。這種語法的引入,只不過是 讓表達語義更方便了。那麼這個語法,就叫語法糖。 Scheme 中有兩個關鍵字 lambda, let ,我