邊城愚人

          如果我不在邊城,我一定是在前往邊城的路上。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            31 隨筆 :: 0 文章 :: 96 評(píng)論 :: 0 Trackbacks

          06 2007 檔案

               摘要: 經(jīng)常地,你必須遍歷一個(gè)對(duì)象集合并基于一些條件(criteria)來(lái)過(guò)濾它們。JDK提供了有用的機(jī)制來(lái)排序集合,即Comparator接口。然而,JDK缺少過(guò)濾集合的機(jī)制。

          這篇文章描述了一個(gè)僅由一個(gè)類和一個(gè)接口組成的簡(jiǎn)單機(jī)制,它允許你快速和靈活地過(guò)濾集合。當(dāng)搜索一個(gè)集合時(shí),該機(jī)制提供了與SQL中的select語(yǔ)句相同的功能。它的隱含的概念是,在遍歷集合和過(guò)濾集合中的對(duì)象時(shí),達(dá)到職責(zé)的分離。
          這里提出的方法有下面的優(yōu)點(diǎn):
          1、一個(gè)核心的過(guò)濾器組件的復(fù)用產(chǎn)生更清晰的代碼。
          2、通用過(guò)濾組件的復(fù)用產(chǎn)生更免于錯(cuò)誤的代碼。
          3、從過(guò)濾邏輯中分離出迭代邏輯使你任意地增加和刪除過(guò)濾器而不影響到其他代碼。
          4、對(duì)于大集合和多個(gè)criteria能夠獲得性能提高。  閱讀全文
          posted @ 2007-06-30 22:22 kafka0102 閱讀(1356) | 評(píng)論 (1)  編輯

               摘要: 對(duì)于沒(méi)有使用過(guò)Calendar的程序員來(lái)說(shuō),再次處理日期時(shí)不妨使用Calendar而不僅僅是Date和SimpleDateFormat等類。這篇文章根據(jù)幾個(gè)使用日期的場(chǎng)景來(lái)說(shuō)明如何使用Calendar等類。
          在數(shù)據(jù)庫(kù)編程時(shí),我們通常將java日期字段選作Date型的(一般是java.sql.Date,繼承于java.util.Date,使用方法是類似的),當(dāng)然也可以存儲(chǔ)為字符串甚至是long型的time,但我們這里只討論date型的。如果存儲(chǔ)的時(shí)間是系統(tǒng)當(dāng)前時(shí)間,我們可以使用Date d = new Date();就得到想要的時(shí)間;以前我編程時(shí)也指定存儲(chǔ)日期的格式,但現(xiàn)在想來(lái)不是很有必要,完全可以在讀出數(shù)據(jù)時(shí)指定格式。另一種可選的方法是使用 Calendar類,方法如下:  閱讀全文
          posted @ 2007-06-22 08:40 kafka0102 閱讀(4086) | 評(píng)論 (0)  編輯

               摘要: 最近在看一個(gè)程序,該程序的圖形界面采用SWT編寫。想要將程序運(yùn)行起來(lái)首先需要做的就是將swt(jface)包放到類路徑上,swt包可以從http://www.eclipse.org/swt下載(其中除了swt包還有和操作系統(tǒng)相關(guān)的文件),和swt開發(fā)相關(guān)的插件為VE。一切就緒,運(yùn)行程序發(fā)現(xiàn)了“Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3232 in java.library.path ”的錯(cuò)誤(我的操作系統(tǒng)為Ubuntu7.04)。解決方案有多種,這里只介紹我使用的一種方法。  閱讀全文
          posted @ 2007-06-21 09:11 kafka0102 閱讀(13711) | 評(píng)論 (1)  編輯

               摘要: 哈夫曼樹又稱最優(yōu)二叉樹,是一種帶權(quán)路徑長(zhǎng)度最短的二叉樹。所謂樹的帶權(quán)路徑長(zhǎng)度,就是樹中所有的葉結(jié)點(diǎn)的權(quán)值乘上其到根結(jié)點(diǎn)的路徑長(zhǎng)度(若根結(jié)點(diǎn)為0層,葉結(jié)點(diǎn)到根結(jié)點(diǎn)的路徑長(zhǎng)度為葉結(jié)點(diǎn)的層數(shù))。樹的帶權(quán)路徑長(zhǎng)度記為WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln),N個(gè)權(quán)值Wi(i=1,2,...n)構(gòu)成一棵有N個(gè)葉結(jié)點(diǎn)的二叉樹,相應(yīng)的葉結(jié)點(diǎn)的路徑長(zhǎng)度為L(zhǎng)i(i=1,2,...n)。可以證明哈夫曼樹的WPL是最小的。
          構(gòu)造哈夫曼樹的算法如下:
          1)對(duì)給定的n個(gè)權(quán)值{W1,W2,W3,...,Wi,...,Wn}構(gòu)成n棵二叉樹的初始集合F={T1,T2,T3,...,Ti,..., Tn},其中每棵二叉樹Ti中只有一個(gè)權(quán)值為Wi的根結(jié)點(diǎn),它的左右子樹均為空。
          2)在F中選取兩棵根結(jié)點(diǎn)權(quán)值最小的樹作為新構(gòu)造的二叉樹的左右子樹,新二叉樹的根結(jié)點(diǎn)的權(quán)值為其左右子樹的根結(jié)點(diǎn)的權(quán)值之和。
          3)從F中刪除這兩棵樹,并把這棵新的二叉樹同樣以升序排列加入到集合F中。
          4)重  閱讀全文
          posted @ 2007-06-21 08:23 kafka0102 閱讀(12260) | 評(píng)論 (7)  編輯

               摘要: 設(shè)有主串s和子串t,子串t定位是指在主串s中找到一個(gè)與子串t相等的子串。通常把主串s稱為目標(biāo)串,把子串t稱為模式串,因此定位也稱作模式匹配。模式匹配成功是指在目標(biāo)串s中找到一個(gè)模式串t。

          傳統(tǒng)的字符串模式匹配算法(也就是BF算法)就是對(duì)于主串和模式串雙雙自左向右,一個(gè)一個(gè)字符比較,如果不匹配,主串和模式串的位置指針都要回溯。這樣的算法時(shí)間復(fù)雜度為O(n*m),其中n和m分別為串s和串t的長(zhǎng)度。

          KMP算法是由Knuth,Morris和Pratt等人共同提出的,所以成為Knuth-Morris-Pratt算法,簡(jiǎn)稱KMP算法。KMP算法是字符串模式匹配中的經(jīng)典算法。和BF算法相比,KMP算法的不同點(diǎn)是匹配過(guò)程中,主串的位置指針不會(huì)回溯,這樣的結(jié)果使得算法時(shí)間復(fù)雜度只為O(n+m)。下面說(shuō)說(shuō)KMP算法的原理。  閱讀全文
          posted @ 2007-06-17 22:14 kafka0102 閱讀(9700) | 評(píng)論 (6)  編輯

               摘要: 做java企業(yè)級(jí)開發(fā)時(shí),我們通常采用三層架構(gòu)。特別地,如果我們要做的系統(tǒng)的業(yè)務(wù)邏輯不是很復(fù)雜時(shí),我們要處理的不過(guò)是CRUD操作,這時(shí)我們可能將dao層與service層合并為一層,盡管很多人會(huì)這樣做,但我仍傾向于將兩層分開;因?yàn)閟ervice與dao不是一一對(duì)應(yīng)的,從復(fù)用及邏輯清晰的角度考慮,應(yīng)該將它們分開。在三層架構(gòu)下,對(duì)于web層,service層,dao層我們都該怎么測(cè)試?這里我將介紹基于Spring,Hibernate和DbUnit的情況下我的測(cè)試方法。由于使用了Spring,事務(wù)管理就不在dao,因此要單獨(dú)地測(cè)試dao可能要麻煩一些;另一方面,dao中的操作大多是簡(jiǎn)單的,也不是很值得測(cè)試。在使用了Hibernate和Spring的情況下,我們要測(cè)試的除了HQL,還有其配置文件,我覺得對(duì)數(shù)據(jù)持久化的測(cè)試最好定在service上。如果service業(yè)務(wù)邏輯復(fù)雜的話,與數(shù)據(jù)持久化無(wú)關(guān)的業(yè)務(wù)邏輯(應(yīng)該寫在領(lǐng)域?qū)ο笾校┛梢詥为?dú)測(cè)試,在保證與數(shù)據(jù)持久化無(wú)關(guān)的業(yè)務(wù)邏輯的正確性下,帶上dao操作做集成(單元)測(cè)試。  閱讀全文
          posted @ 2007-06-14 09:18 kafka0102 閱讀(1480) | 評(píng)論 (0)  編輯

               摘要: 在做Java企業(yè)程序的時(shí)候,不可避免地要和外部資源打交道,比如數(shù)據(jù)庫(kù),Http請(qǐng)求等。對(duì)于這些外部資源的處理,我們可采取的操作或者是直接處理或者是模擬處理。當(dāng)我們使用Webwork,Spring,Hibernate等框架時(shí),我們要測(cè)試的并不僅僅是Java代碼,我們還要測(cè)試依賴于這些框架的配置文件等等。因此,對(duì)于數(shù)據(jù)持久化的測(cè)試,Mock方法是行不通的,我們需要真實(shí)地測(cè)試數(shù)據(jù)庫(kù)操作。對(duì)于持久化測(cè)試來(lái)說(shuō),重要的是創(chuàng)造出已知的“干凈的”的準(zhǔn)備數(shù)據(jù)。如果我們?cè)跍y(cè)試一個(gè)持久化方法前不能確定數(shù)據(jù)庫(kù)到底存著什么數(shù)據(jù),我們只能通過(guò)反復(fù)地查看數(shù)據(jù)庫(kù)數(shù)據(jù)來(lái)驗(yàn)證測(cè)試方法的正確性了(這就是我和大多數(shù)人以前使用的最“直接”的方法)。現(xiàn)在就讓我們使用DbUnit,來(lái)更好的更自動(dòng)化的測(cè)試持久化操作吧!

          先介紹一下DbUnit。DbUnit是一個(gè) JUnit擴(kuò)展,適用于數(shù)據(jù)驅(qū)動(dòng)的程序。使用DbUnit,可以在測(cè)試運(yùn)行期間將數(shù)據(jù)庫(kù)的數(shù)據(jù)處于已知狀態(tài),這樣在測(cè)試時(shí)可以方便地寫出測(cè)試斷言,也能自動(dòng)地完成對(duì)數(shù)據(jù)持久化方法的測(cè)試。在使用上,DbUnit也很簡(jiǎn)單, 它提供了大量的  閱讀全文
          posted @ 2007-06-14 09:03 kafka0102 閱讀(2779) | 評(píng)論 (2)  編輯

               摘要: 很早就知道Jetty,但直到最近才使用它作為Web服務(wù)器。Jetty是一個(gè)開放源碼的HTTP服務(wù)器和Java serverlet容器,是完全使用Java語(yǔ)言實(shí)現(xiàn)的。作為嵌入的Web服務(wù)器,Jetty被廣泛應(yīng)用,比如DWR,JBoss,Geronimo,Tapestry中都使用了Jetty。相比于其他Web服務(wù)器,Jetty最大的有點(diǎn)就是小巧且啟動(dòng)速度快。當(dāng)前的Jetty最新版本為6,相比以前的版本“重”了不少,“重”的原因自然是功能的增強(qiáng)。我使用myeclipse插件開發(fā)Web程序,Web服務(wù)器從Tomcat轉(zhuǎn)換成Jetty只需改變一下程序部署的位置而已。  閱讀全文
          posted @ 2007-06-11 15:48 kafka0102 閱讀(1884) | 評(píng)論 (1)  編輯

          主站蜘蛛池模板: 贵港市| 盘山县| 柘荣县| 古浪县| 广平县| 财经| 武宣县| 丰镇市| 永城市| 石林| 哈尔滨市| 安乡县| 乌鲁木齐县| 浦县| 屯昌县| 四川省| 扶沟县| 福建省| 龙口市| 霍林郭勒市| 鹤岗市| 瑞丽市| 吉首市| 佳木斯市| 科尔| 沧源| 宁阳县| 中西区| 吉首市| 金秀| 寻乌县| 普安县| 孝感市| 西畴县| 桦甸市| 治县。| 莫力| 台北市| 栾城县| 磴口县| 汾阳市|