Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2014年2月20日 星期四
Vector vs ArrayList vs HashSet
記錄一下在 Java Code Geeks 上看到的文章 [1],主題是做 Vector、ArrayList 跟 HashSet 的比較。
2014年2月19日 星期三
2014年2月14日 星期五
Java 的記憶體配置(Global、Stack、Heap)
在 JVM 中,記憶體區分為 Global、Stack 和 Heap 兩種,各自存放不同的東西
大致來說,Global 存放靜態的變數、Stack 存放 method 以及非 class member 的 primitive type,Heap 則存放所有的物件以及相依於物件的 class member。
大致來說,Global 存放靜態的變數、Stack 存放 method 以及非 class member 的 primitive type,Heap 則存放所有的物件以及相依於物件的 class member。
2014年2月12日 星期三
設定 MongoDB 中資料的存活時間(TTL)
自從 MongoDB 2.2 以後,開始支援一個算是常用的功能,可以直接在 collection 上設定資料的存活時間
例如假設插入一筆資料後,希望它在兩小時後自動消失,過去的作法是要自己實作 daemon 去檢查
不過在 MongoDB 2.2 開始,MongoDB 會幫忙做這件事,只要在 collection 上做好設定即可。
例如假設插入一筆資料後,希望它在兩小時後自動消失,過去的作法是要自己實作 daemon 去檢查
不過在 MongoDB 2.2 開始,MongoDB 會幫忙做這件事,只要在 collection 上做好設定即可。
2014年1月22日 星期三
java.lang.NoClassDefFoundError: Could not initialize class
今天遇到的一個奇怪的問題,把某些類別包裝後原本都用得好好的,但移植到另一個專案時就出現無法初始化類別的問題
後來確認了原因是因為程式碼裡在 static 的區塊中做了某個類別的初始化,於是造成執行時無法正確初始化的問題。
真實的原因跟對應的理由還不太了解,因此暫時先做個記錄,也許未來哪天會懂背後的問題...。
參考資料:
1、java.lang.NoClassDefFoundError: Could not initialize class XXX
後來確認了原因是因為程式碼裡在 static 的區塊中做了某個類別的初始化,於是造成執行時無法正確初始化的問題。
static {
QueryBuilder db = new QueryBuilder(.....);
db.execute("key", 1).ensureIndex();
}
真實的原因跟對應的理由還不太了解,因此暫時先做個記錄,也許未來哪天會懂背後的問題...。
參考資料:
1、java.lang.NoClassDefFoundError: Could not initialize class XXX
2014年1月16日 星期四
String 和 StringBuilder 之間的差別
這個議題其實在 Java 當中盛行以久,應該大家都知道使用 String 相加是罪大惡極的行為
不過自從 Java 6 開始,基於各種 JVM 的調整,這個概念似乎有稍微修改的需要。
不過自從 Java 6 開始,基於各種 JVM 的調整,這個概念似乎有稍微修改的需要。
2014年1月15日 星期三
透過 Java driver 做 MongoDB sharding
在 MongoDB cluster 的環境中,即使 MongoDB 已經做成 Mongos 了,預設資料都還是會全部集中在同一台資料庫上
持續對資料庫做資料寫入時,資料越多速度會越慢,而且也可以發現都是同一台伺服器很忙
主因就是因為沒有做 DB 和 collection 的 sharding。
持續對資料庫做資料寫入時,資料越多速度會越慢,而且也可以發現都是同一台伺服器很忙
主因就是因為沒有做 DB 和 collection 的 sharding。
2014年1月9日 星期四
檢查 Collection 中是否有某個自定義的 Object
一般如果使用 Collection 類別去儲存一系列的某種 Object 時,可以直接利用 Collection.contains(obj) 的方法檢查某個 Object 是否在 Collection 內
不過 Java 預設的 Object 的檢查方式是檢查兩個 Object 是否相等,是依據 Object 所在的記憶體位置判斷的
但有時我們想要的是 Object 內的某些屬性相等,就視這兩個 Object 相等
也就是當使用 Collection.contains(obj) 時,想要的結果其實是當 Collection 內的某個項目特定屬性跟 obj 的特定屬性一樣,就預期要回應 true。
不過 Java 預設的 Object 的檢查方式是檢查兩個 Object 是否相等,是依據 Object 所在的記憶體位置判斷的
但有時我們想要的是 Object 內的某些屬性相等,就視這兩個 Object 相等
也就是當使用 Collection.contains(obj) 時,想要的結果其實是當 Collection 內的某個項目特定屬性跟 obj 的特定屬性一樣,就預期要回應 true。
2014年1月1日 星期三
訂閱:
文章 (Atom)