2013年9月26日 星期四

動態載入 Class 並呼叫 Class 的 Method

有關 Java 的 ClassLoader 的描述,可以參考 [1]。
大略來說,JVM 內建有一個 BootStrapClassLoader,用來作為所有 Java 類別的 ClassLoader
BootStrapClassLoader 會載入 JVM 必要的類別(像是 rt.jar)。
根據 [1] 的描述,可以利用以下的程式碼查看 BootStrapClassLoader 載入了哪些 jar。

URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();  
for (int i = 0; i < urls.length; i++) {  
  System.out.println(urls[i].toExternalForm());  
}

BootStrapClassLoader 在載入時,同時會載入第二個 ClassLoader:Extension ClassLoader
Extension ClassLoader 主要職責是載入 JAVA_HOME 裡面額外放的函式庫,即預設是載入 /lib/ext 資料夾內的東西。
Extension ClassLoader 最後會載入 App ClassLoader,就是載入使用者執行的應用程式的 class 了。

2013年9月25日 星期三

Java 6 和 Java 7 的 substring() 的差別

其實這應該算是 BUG 修正吧~
在 Java 6 時,稍微有注意效率的人可能會知道
因為 Java 的字串是不可變動的,因此呼叫 substring() 時,它做的是把指標指向原字串的其中一小段
因此假設原字串有 1000 個字元,而 substring() 後只需要 3 個字元
實際上在使用這 3 個字元時,還是隨時把那 1000 個字元帶著跑,即使裡面有 997 個字元是不需要的。

2013年9月24日 星期二

使用 JavaMail 發送帶有附件的郵件

真正需要額外加上資訊的只有在產生 Multipart 的資訊時,要額外放入附件的資訊。

2013年9月21日 星期六

偵測瀏覽器的 scrollbar 位置

有些網頁太長或太寬時,會想把某些東西固定在某個位置
在 jQuery 中已經有包裝好的函式 scrollTop() 和 scrollLeft(),可以簡單地做到偵測的動作。

檢查元件是否顯示

想要檢查某個元件是否能夠被看見,可以透過檢查它有沒有帶有 ":visible" 屬性來做到。
$(element).is(":visible")
不過因為隱藏的方法好像有好幾種,印象中不是每種方法都有 ":visible"
所以可能有些狀況要用別的方法檢查。

參考資料:
1、Testing if something is hidden with jQuery

2013年9月13日 星期五

使用 MongoDB 的 Java Driver 搜尋帶有斜線 (/) (slash) 的 Regex

由於 MongoDB 的 Java driver 在某個版本以後開始支援 Pattern 物件
因此要在 Java 上使用 Java driver 做 regular expression 時就簡單多了
只要自己先編譯好 Pattern 的物件,直接把 Pattern 丟到 DBObject 的 value 欄位就好了。

2013年9月12日 星期四

實作流量限制:Token bucket algorithm

流量限制是蠻平常的網路傳輸的功能~不過實作上其實也不是那麼單純
像是雖然可以靠暫停執行緒的方式去控制平均流量,但一般來說除非是一個 byte 一個 byte 接收或傳送
否則通常很難剛好跑到指定的流量時就讓它暫時停止。
然後這時就會有一些相關的衍生問題,例如這一秒多傳的 byte 數目,下一秒是不是要扣回來?是不是需要控制瞬間最大流量?

2013年9月6日 星期五

eclipse 在專案上標明有錯誤,但找不到錯誤

有時會出現 eclipse 顯示專案有錯誤,但是打開專案內容時,卻怎麼也找不到哪裡有錯
這時通常錯誤的問題可能是發生在環境上~