2014年5月30日 星期五

安全的 PRNG(亂數產生器)

最近公司引入了一個原始碼掃描的系統 Fortify,在掃描的結果中回報了我們的專案使用了一些 java.util.Random 這個亂數產生器
而這個亂數產生器在亟需安全的環境中並不安全,因為它並不是屬於加密安全(cryptographically secure)的亂數產生器
因此產生的結果很容易被預測。

2014年5月26日 星期一

讓 Javadoc 繼承父類別的文件

一般狀況下,當子類別某個 method 有覆寫 parent 的對應 method(即有寫 @override)時
可以利用 {@inheritDoc} 讓子類別可以繼承父類別的文件,可以參閱 [1]。
不過如果遇到要覆寫的對象是 constructor 時
因為 constructor 不需要也不允許寫 @override,會導致無法利用 {@inheritDoc} 來繼承父類別的文件
這時的作法可以利用 @see 來加上間接的註解 [2]
雖然沒辦法像 {@inheritDoc} 那樣直接連結到父類別,但總算是點一下連結還是看得到。

2014年5月22日 星期四

Sub-process /usr/bin/dpkg returned an error code (1)

遇到一個無聊的小問題~
在我的 ubuntu 機器上,嘗試安裝 openntpd 時出現錯誤,然後就持續錯誤無法安裝也無法移除。
錯誤訊息如下:
user@HTPC:/home$ sudo apt-get install -f
正在讀取套件清單... 完成
正在重建相依關係
正在讀取狀態資料... 完成
升級 0 個,新安裝 0 個,移除 0 個,有 59 個未被升級。
1 個沒有完整得安裝或移除。
此操作完成之後,會多佔用 0 B 的磁碟空間。
正在設定 openntpd (3.9p1+debian-9) ...
Starting openntpd: /etc/openntpd/ntpd.conf: Permission denied
invoke-rc.d: initscript openntpd, action "start" failed.
dpkg:在處理 openntpd (--configure) 時發生錯誤:
 子程序 已安裝的 post-installation script 傳回了錯誤退出狀態 1
在處理時有錯誤發生:
 openntpd
E: Sub-process /usr/bin/dpkg returned an error code (1)

2014年5月5日 星期一

synchronized、ReentrantLock 與 ReentrantReadWriteLock

在多執行緒的環境下,為了避免在多執行緒的狀況中產生資料不一致的結果
常利用上鎖機制去鎖定資源,藉此來控制只能有單一執行緒操作特定資源。
而 Java 7 當中,常用的上鎖的方法大概是 synchronized、ReentrantLock 與 ReentrantReadWriteLock。

以下的內容主要是 [1] 的大綱(雖然 [1] 主要要講的是 Java 8 提供的樂觀鎖 XD)
因此就不重複貼範例程式碼了,內容也僅僅簡要地寫下差異。