Time of Update: 2018-12-05
在前幾天的文章“Java效能最佳化[1]:基本類型 vs
Time of Update: 2018-12-05
上次的文章講到參考型別和基本類型由於記憶體配置上的差異導致的效能問題。那麼今天就來聊一下和記憶體釋放(主要是GC)有關的話題。 事先聲明一下:雖說SUN公司已經被Oracle吞併了,但是出於習慣,同時也為了偷懶節省打字,以下仍然稱之為SUN公司。 ★JVM的記憶體 在Java虛擬機器規範中(具體章節請看“這裡”),提及了如下幾種類型的記憶體空間: ◇棧記憶體(Stack):每個線程私人的。 ◇堆記憶體(Heap):所有線程公用的。 ◇方法區(Method
Time of Update: 2018-12-05
上一個文章討論了“編程習慣的問題”,今天來聊聊關於異常處理的話題。 ★空catch語句塊 犯這種錯誤的人比較少,一般發生在剛學會Java或者剛參加工作不久的人身上。 所謂"空catch語句塊"就是在catch語句塊中沒有對異常作任何log處理,導致異常資訊被丟棄掉。一旦程式不能正確運行,由於查不到任何log資訊,只好從頭看代碼,靠肉眼找bug。 ★沒有使用finally 很多人在catch語句之後不使用finally語句。由於在try語句中可能會涉及資源的申請和釋放。如果在資源申請
Time of Update: 2018-12-05
上次的文章聊了記憶體回收行程的調優,當時囉嗦了比較長的篇幅,就沒再繼續提finalize的事兒(其實這玩意兒和GC是沾點兒邊的)。今天咱就把finalize函數相關的效能話題拿來說一下。 ★finalize函數的調用機制 俺經常囉嗦瞭解本質機制的重要性。所以今天也得先談談finalize函數的調用機制。在聊之前,先聲明一下:Java虛擬機器規範(見“這裡”),並沒有硬性規定記憶體回收該不該搞,以及該如何搞。所以俺這裡提到的finalize函數的調用機制,或許適用於大多數JVM,但不保證能
Time of Update: 2018-12-05
上次聊了“缺乏物件導向基本功”,今天來說說編程習慣的問題。今天說的這些壞習慣大部分都是跨語言的(C++、Python新手也有),而且大部分都需要靠平時不斷地努力才能慢慢改掉。 ★隨意地命名
Time of Update: 2018-12-05
考慮寫效能最佳化系列,主要是因為之前看到了太多效能其爛無比的Java代碼(有些代碼看得我口瞪目呆)。很多Java程式員在寫程式時,由於不太瞭解JVM及語言本身的一些運作機制,從而導致了代碼的效能出現嚴重問題(效能差一個數量級以上,我才稱為“嚴重”)。 雖然網上也有針對Java效能的介紹,但是很多內容都僅僅告訴讀者“該這麼做”,而沒有講“為什麼該這麼做”。典型的例子就是關於String和StringBuffer(StringBuilder),光介紹如何用,卻沒有說為什麼這樣用。這種現象導致了
Time of Update: 2018-12-05
其實很早以前就想寫這樣一個短文,可惜當時我沒有Blog,所以到現在才寫下來。 最近幾年,隨著Java在Web應用和公司專屬應用程式兩個方面的普及,對Java程式員的需求量大增。因此Java程式員的數量也突然猛增(從TIOBE的熱門排行榜可以看出來)。這雖然對Java社區來說是好事,但也暴露出一些問題。一方面由於大量的開發人員進入Java這個領域,相應的教學、培訓跟不上;另一方面,很多進入Java領域的開發人員都比較浮躁,寄希望於"速成",沒有耐心練好基本功。 根據最近幾年我面試Java程
Time of Update: 2018-12-05
為什麼我先拿"資料結構和演算法"說事捏?這玩意是寫程式最最基本的東東。不管你使用Java還是其它的什麼語言,都離不開它。而且這玩意是跨語言的,學好之後不管在哪門語言中都能用得上。 既然"資料結構和演算法"這麼重要,為什麼很多Java新手卻很不熟悉捏?我琢磨了一下,估計有兩種可能。有些人雖然是電腦系畢業的,但是當初壓根沒好好學過這門課程,到工作時早都還給老師了;還有一些人是中途轉行幹編程,轉行後又沒有好好地打基礎(都指望速成)。 下面我列出幾個很基本的問題,如果你每一個問題都搞得很清楚,那
Time of Update: 2018-12-05
在J2EE應用開發中,由於各種各樣的原因,經常會需要處理一些舊的Excel格式試算表資料,或者是產生試算表。 處理Excel試算表的方法比如多,比如可以使用jdbc來像讀資料庫中的資料一樣來讀取試算表的內容。這裡示範的是使用開源的試算表處理工具jxl,即Java Excel API來進行處理。關於jxl及相關使用,可以在網上搜尋到很多資料。這裡只是簡單示範在EasyJWeb中的使用方法,這是前段時間公司一個項目中的應用,需要產生一特定的Excel表格,供用戶端下載。 WEB
Time of Update: 2018-12-05
按理說Java是一個很OO的語言,Java社區也一向是充滿了“對象”的氛圍。但我在面試Java程式員時,卻屢屢碰到讓我大跌眼鏡的事情。我碰到不止一個求職者,連什麼是“多態”都講不清楚。很多人號稱用過設計模式,但一半以上都僅限於單鍵模式和抽象原廠模式。當我深入問他/她抽象原廠模式到底有什麼好處時,很多人語焉不詳。 為什麼很多Java程式員會缺乏物件導向基本功?這得怪那些Java架構。現在Java的各種架構太發達、太傻瓜化了,導致很多程式員只需要按部就班、照著架構進行代碼填空,基本已經喪失了O
Time of Update: 2018-12-05
上次的文章討論了Java異常機制的幾種誤用,今天咱們來說說JVM(以及Java編譯器)相關的話題。為啥要聊JVM捏?因為有很多Java程式員,由於對JVM缺乏瞭解,在碰到某些技術問題時無從下手;另外,由於缺乏對JVM的瞭解,可能導致寫出來的代碼效能巨差或者有嚴重的Bug。所以俺在之前的文章“學習技術的三部曲:WHAT、HOW、WHY”中,強調了掌握內部機制的重要性。對於一個Java程式員來說,你不一定要非常清楚JVM的細節,但是對於一些關鍵的運作機制,還是要掌握大致的概念。 按照本系列的慣
Time of Update: 2018-12-05
在stef_wu、大峽、williamRaym、天意等成員的努力下,在中秋國慶國際來臨之際,EasyJF對開源論壇系統作了比較大的調整,並推出了一個專用於測試該論壇系統的網站“中國程式員八卦娛樂”,歡迎廣大的開源愛好者下載交流。本次論壇調整的內容如下: 1、增加自動產生靜態html檔案的功能; 2、增加使用者積分系統功能; 3、增加了動態ajax串聯功能表功能; 4、增加了許可權判斷功能,論壇功能借鑒了百度帖吧的功能,支援驗證碼發帖,支援匿名發帖; 5、圖片上傳功能; 6、系統基
Time of Update: 2018-12-05
String[] to = new String[]{"376068867@qq.com"}; //可以添加多個收件者MailSend ms = new MailSend();String html ="<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\"></head><body>測試發送HTML郵件<img
Time of Update: 2018-12-05
1、枚舉*建立枚舉類public enum Grade { A,B,C,D,E;}*使用匿名內部類enum Grade { A("100-90"){ public String toLocalString(){ return "優"; } }}*私人構造方法A("100-90")private String value; private Grade(String value){ System.out.println("value "+value);
Time of Update: 2018-12-05
Java源碼分析執行器(2009-5-1)(english version) 一、功能及模組://抱歉,此項目雖然有意思,但未經整理,可讀性差,且處於停滯狀態。 1. 識別java源碼的文法結構,產生結點類型為具體源碼成份的結點樹。 2. 解析Java源碼並從指定的方法入口處開始運行,在啟動並執行過程中可以執行外部插入的代碼邏輯。類似於AOP,但所截獲的目標可以是方法也可以是任意細粒度的代碼。 3.
Time of Update: 2018-12-05
1.包 字母一律小寫。層次狀,用句號分隔每一部分。 com.sun.medialib com.sun.jdi.event2.類、介面 每個單詞的首字母大寫。使用名詞或名詞短語,Timer BufferedWriter 介面還可以用一個以“-able”或“-ible”結尾的形容詞來命名。Runnable Accessible3.方法、域
Time of Update: 2018-12-05
泛型約束只在編譯期有效。1. JDK5.0 存在不應該有的泛型相關異常。異常:List<JElement0> sons;public List<JExpr0> sonsA() {return (List<JExpr0>) sons;//編譯期錯誤。}解決方案:public List<JExpr0> sonsB() {return (List<JExpr0>) (Object) sons;//編譯期無錯。}2.
Time of Update: 2018-12-05
一位前同事提到了將PHP轉換成Java的設想。//2009-7-18 我對PHP不瞭解。至於“如何將script 轉換成Java”,下面是我的一孔之見。 目標:將script 語言轉換成Java(script泛指Ruby或JavaScript等“輕量級語言”, 暫不考慮其運行環境). 步驟: 1. 編寫script的文法描述(產生式集). 2. 將文法描述解析成文法圖(即所謂的抽象文法樹),樹的結點類型同源碼中的結構成份一一對應,如:Function,
Time of Update: 2018-12-05
兩種實現線程的方法1.使用Runnable介面 可以將CPU、代碼和資料分開,形成清晰的模型,還可以從其他類繼承;保持程式風格的一致性。2.直接從Thread類繼承 不能從其他類繼承;編寫簡單,可以直接操縱線程,無需使用Thread.currentThread()。 利用方法參數的幾種情況1.方法不能修改基本類型的參數(數字或布爾值)2.方法可以改變對象參數的狀態3.方法不能使一個對象參數指向一個新的對象
Time of Update: 2018-12-05
原始碼(Java工程)下載:http://code.google.com/p/java-parser-executor/downloads/list(deprecated!) 本文章已淘汰,不推薦閱讀。很多小病交織在一起就成了大病。——代碼也會生病。 日常編碼中會出現很多的簡單錯誤,我嘗試儘可能地對這些錯誤進行自動化檢測(程式員不應該是體力勞動者)。Java原始碼檢錯的應用範圍: 1. 排除代碼在邏輯上的錯誤。 比如:使用尚未與數組產生“關係”的變數做為數組的成員下標,