最近公司引入了一個原始碼掃描的系統 Fortify,在掃描的結果中回報了我們的專案使用了一些 java.util.Random 這個亂數產生器
而這個亂數產生器在亟需安全的環境中並不安全,因為它並不是屬於加密安全(cryptographically secure)的亂數產生器
因此產生的結果很容易被預測。
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年5月30日 星期五
2014年5月26日 星期一
讓 Javadoc 繼承父類別的文件
一般狀況下,當子類別某個 method 有覆寫 parent 的對應 method(即有寫 @override)時
可以利用 {@inheritDoc} 讓子類別可以繼承父類別的文件,可以參閱 [1]。
不過如果遇到要覆寫的對象是 constructor 時
因為 constructor 不需要也不允許寫 @override,會導致無法利用 {@inheritDoc} 來繼承父類別的文件
這時的作法可以利用 @see 來加上間接的註解 [2]
雖然沒辦法像 {@inheritDoc} 那樣直接連結到父類別,但總算是點一下連結還是看得到。
可以利用 {@inheritDoc} 讓子類別可以繼承父類別的文件,可以參閱 [1]。
不過如果遇到要覆寫的對象是 constructor 時
因為 constructor 不需要也不允許寫 @override,會導致無法利用 {@inheritDoc} 來繼承父類別的文件
這時的作法可以利用 @see 來加上間接的註解 [2]
雖然沒辦法像 {@inheritDoc} 那樣直接連結到父類別,但總算是點一下連結還是看得到。
2014年5月22日 星期四
Sub-process /usr/bin/dpkg returned an error code (1)
遇到一個無聊的小問題~
在我的 ubuntu 機器上,嘗試安裝 openntpd 時出現錯誤,然後就持續錯誤無法安裝也無法移除。
錯誤訊息如下:
在我的 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)
因此就不重複貼範例程式碼了,內容也僅僅簡要地寫下差異。
常利用上鎖機制去鎖定資源,藉此來控制只能有單一執行緒操作特定資源。
而 Java 7 當中,常用的上鎖的方法大概是 synchronized、ReentrantLock 與 ReentrantReadWriteLock。
以下的內容主要是 [1] 的大綱(雖然 [1] 主要要講的是 Java 8 提供的樂觀鎖 XD)
因此就不重複貼範例程式碼了,內容也僅僅簡要地寫下差異。