最近公司引入了一個原始碼掃描的系統 Fortify,在掃描的結果中回報了我們的專案使用了一些 java.util.Random 這個亂數產生器
而這個亂數產生器在亟需安全的環境中並不安全,因為它並不是屬於加密安全(cryptographically secure)的亂數產生器
因此產生的結果很容易被預測。
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification.
- Bertrand Meyer
Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems.
- Charles Connell
註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
註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 時出現錯誤,然後就持續錯誤無法安裝也無法移除。
錯誤訊息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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)
因此就不重複貼範例程式碼了,內容也僅僅簡要地寫下差異。
訂閱:
文章 (Atom)