<nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

    <bdo id="rub96"></bdo>

      1. <track id="rub96"><div id="rub96"></div></track>
        <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

            <nobr id="rub96"><address id="rub96"><big id="rub96"></big></address></nobr>
          1. <menuitem id="rub96"><strong id="rub96"><menu id="rub96"></menu></strong></menuitem>
            <dl id="rub96"><source id="rub96"><tr id="rub96"></tr></source></dl>
            1. <tbody id="rub96"><div id="rub96"></div></tbody>
              1. <bdo id="rub96"><optgroup id="rub96"></optgroup></bdo>
              2. <bdo id="rub96"><dfn id="rub96"><dd id="rub96"></dd></dfn></bdo>
                1. <option id="rub96"><source id="rub96"></source></option>
                2. <bdo id="rub96"></bdo>

                    <p id="rub96"><tr id="rub96"></tr></p>
                  1. <tbody id="rub96"></tbody>

                    <bdo id="rub96"></bdo>

                  2. <option id="rub96"><source id="rub96"></source></option>

                    <bdo id="rub96"><optgroup id="rub96"><dd id="rub96"></dd></optgroup></bdo>
                      <track id="rub96"></track>

                        <bdo id="rub96"></bdo>
                      1. <option id="rub96"><p id="rub96"><tr id="rub96"></tr></p></option>

                          <bdo id="rub96"></bdo>
                          1. <track id="rub96"></track>
                            1. <track id="rub96"></track>
                                  <bdo id="rub96"></bdo>
                                  <option id="rub96"></option>

                                      1. <track id="rub96"><span id="rub96"></span></track>

                                          <option id="rub96"></option>

                                          1. 
                                            
                                              <option id="rub96"><span id="rub96"></span></option>
                                              <bdo id="rub96"><address id="rub96"></address></bdo>
                                              <option id="rub96"><source id="rub96"></source></option>
                                                <nobr id="rub96"><address id="rub96"></address></nobr>
                                              1. <nobr id="rub96"><optgroup id="rub96"><big id="rub96"></big></optgroup></nobr>
                                                <track id="rub96"></track>

                                                <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>
                                                1. Sky's blog

                                                  我和我追逐的夢

                                                  常用鏈接

                                                  統計

                                                  其他鏈接

                                                  友情鏈接

                                                  最新評論

                                                  置頂隨筆 #

                                                  [置頂]easymock教程-目錄

                                                       摘要: easymock是目前java mock 工具中比較流行的工具,這個教程將系統的介紹easymock的使用。

                                                  主要內容來自easymock的官網教程,針對日常使用進行了一些篩選和補充,另外增加一些個人的理解和認識。

                                                  另外考慮到網絡上已有不少分散的教程,我將適當的鏈接進來。

                                                  教程的內容將在隨后逐漸添加,目前計劃的目錄如下,相應內容完成之后我將逐個更新此文的鏈接。  閱讀全文

                                                  posted @ 2010-10-14 10:44 sky ao 閱讀(2593) | 評論 (3)編輯 收藏

                                                  2013年2月17日 #

                                                  使用javap命令查看編譯版本信息

                                                       摘要: 之前遇到幾次現場故障,都是和class文件有關,比如版本不兼容造成Bad Version錯誤之類,需要檢查class文件的編譯版本信息。 今天無意中發現, jdk自帶的javap 命令其實可以方便的搞定這個事情  閱讀全文

                                                  posted @ 2013-02-17 15:50 sky ao 閱讀(1285) | 評論 (0)編輯 收藏

                                                  2013年1月4日 #

                                                  編碼最佳實踐(6)--那些年,我們一起建的索引

                                                       摘要: 前幾次的編碼最佳實踐系列,我們都著眼于Java代碼,今天我們換個話題,看看另外一個領域,和Java代碼大相徑庭的SQL。   閱讀全文

                                                  posted @ 2013-01-04 12:08 sky ao 閱讀(1970) | 評論 (1)編輯 收藏

                                                  2012年9月6日 #

                                                  編碼最佳實踐(5)--小心!這只是冰山一角

                                                       摘要: 本期的案例依然是來自實際項目,很尋常的代碼,卻意外遭遇傳說中的Java"內存溢出"。   閱讀全文

                                                  posted @ 2012-09-06 15:09 sky ao 閱讀(2888) | 評論 (1)編輯 收藏

                                                  2012年7月11日 #

                                                  解決drupal的globalrediect模塊的重定向循環問題

                                                       摘要: 昨晚繼續折騰俺的小站http://www.javauniversity.net,準備給它加上SEO支持,安裝了SEO tools模塊和相應的依賴模塊。

                                                  結果安裝完成之后就陷入重定向循環了,每個頁面都被重定向到新地址,然后新地址再次被重定向。chrome瀏覽器會稍后報錯說太多重定向,而ie則傻傻的一直在死循環。   閱讀全文

                                                  posted @ 2012-07-11 07:28 sky ao 閱讀(1327) | 評論 (0)編輯 收藏

                                                  2012年6月24日 #

                                                  Java University 網站開通過程吐糟

                                                       摘要: 折騰了兩天,終于將Java University這個站點開通,過程真不容易的,決定寫下來吐吐 糟,以紀念TIANCHAO和諧之光普照下P民的美好生活  閱讀全文

                                                  posted @ 2012-06-24 10:34 sky ao 閱讀(1733) | 評論 (3)編輯 收藏

                                                  2012年6月18日 #

                                                  編碼最佳實踐(4)--小心LinkedHashMap的get()方法

                                                       摘要: 這是一個來自實際項目的例子,在這個案例中,有同事基于jdk中的LinkedHashMap設計了一個LRUCache,為了提高性能,使用了 ReentrantReadWriteLock 讀寫鎖:寫鎖對應put()方法,而讀鎖對應get()方法,期望通過讀寫鎖來實現并發get()。  閱讀全文

                                                  posted @ 2012-06-18 12:31 sky ao 閱讀(4272) | 評論 (1)編輯 收藏

                                                  2012年6月17日 #

                                                  編碼最佳實踐(3)--盡量重用昂貴的初始化對象

                                                       摘要: 這里將要講述的是一系列的類似案例,都是在各個產品進行performance tuning時被發現的,非常具有普適性。可以說在日常開發中,有非常大的概率遇到相同或者類似的情形,因此需要對其保持警惕以便避免陷入類似的性能問題。 我們從JAXBContext這個對象開始...  閱讀全文

                                                  posted @ 2012-06-17 23:02 sky ao 閱讀(2413) | 評論 (0)編輯 收藏

                                                  2012年6月16日 #

                                                  編碼最佳實踐(2)--推薦使用concurrent包中的Atomic類

                                                       摘要: 這是一個真實案例,曾經惹出碩大風波,故事的起因卻很簡單,就是需要實現一個簡單的計數器,每次取值然后加1......  閱讀全文

                                                  posted @ 2012-06-16 17:54 sky ao 閱讀(2561) | 評論 (5)編輯 收藏

                                                  2012年6月9日 #

                                                  編碼最佳實踐(1)--小心"數據溢出"

                                                       摘要: 最近在公司內部做了一些收集和整理的工作,關于trouble shooting和performace tuning 中遇到并解決的典型問題,做了一些內部分享。我整理了一下,準備陸續放上來分享給大家。

                                                  這些問題,單個看每個問題都不算復雜或高深,但是都是在實際項目開發中出現并一度造成困擾的,而且帶有一定的普適性,具體表現為不知道這些問題的同學很容易在日常開發中中招。因此我們開了一個專題,叫做編碼最佳實踐,似乎名字起的有點大......

                                                  先來看看第一個,如何做compare。  閱讀全文

                                                  posted @ 2012-06-09 23:27 sky ao 閱讀(2765) | 評論 (2)編輯 收藏

                                                  2012年5月25日 #

                                                  解決Jetty下EL版本沖突的問題

                                                       摘要: 今天用jetty做嵌入式web container,來做web項目的integration test,結果發現出現在渲染使用EL表達式的jsp頁面時出現異常:

                                                  javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

                                                  檢查了一下,發現javax.el.ExpressionFactory.newInstance()這個方法是EL2.2版本之后才有的方法,而在EL2.1之中是沒有這個方法的,問題很明顯:org.apache.jasper中試圖調用2.2版本的EL,當時提供的EL的版本是2.1版本,所以解決的方式無非就是兩個,要不降低org.apache.jasper的版本,要不提升el的版本。考慮到現在使用的jetty已經是最新的版本8.1.2.v20120308,因此提升EL的版本為2.2更為合適。  閱讀全文

                                                  posted @ 2012-05-25 07:11 sky ao 閱讀(9828) | 評論 (2)編輯 收藏

                                                  2012年2月14日 #

                                                  解決jenkins執行sonar時重復執行兩次test的問題

                                                       摘要: 在jenkins上建立了一個job,通過標準的maven命令來執行打包測試和上傳artifact到nexus倉庫。隨后發現有些性能問題:sonar的job執行時,需要重新update SCM,然后需要再次執行test,之后才能進行真正屬于sonar的任務如代碼檢測等。明顯update SCM 和執行test是重復了原有job,純屬浪費。這個重復執行問題隨著測試案例和測試執行時間的增加,會越來越明顯。因此需要考慮消除這里的重復問題,減少build的時間,并節約jenkins的資源。  閱讀全文

                                                  posted @ 2012-02-14 14:53 sky ao 閱讀(4633) | 評論 (5)編輯 收藏

                                                  2011年12月2日 #

                                                  搜索maven依賴的網站推薦

                                                      使用maven填寫依賴的時候,常會遇到需要查一下groupId/artifactId和version,有時候還要看看有沒有新的版本更新。 

                                                      原來一直用http://mvnrepository.com/ 這個網站來搜索,最近發現maven官網也提供了類似的功能,http://search.maven.org/。 

                                                      簡單試用了一下search.maven.org,功能基本和mvnrepository.com相同,而且界面更簡潔友好。推薦使用。

                                                  posted @ 2011-12-02 16:06 sky ao 閱讀(8122) | 評論 (4)編輯 收藏

                                                  2011年6月11日 #

                                                  cloudfoundry介紹-(1)申請試用

                                                       摘要: cloudfoundry是vmvare新推出來的開源PaaS平臺,我試用了一下,發現還是很不錯的,申請過程很簡單。發出來分享給大家,有需要的可以去申請,畢竟可以支持java的免費的空間實在太難得了。  閱讀全文

                                                  posted @ 2011-06-11 13:52 sky ao 閱讀(10277) | 評論 (6)編輯 收藏

                                                  2011年5月15日 #

                                                  解決gradle與sonar集成過程中的版本問題

                                                       摘要: 初學gradle,一切都還在摸索的過程中。今天剛剛試圖將之前基于ant + ivy的一個小項目轉移到gradle下,結果在和sonar集成時出現問題.  閱讀全文

                                                  posted @ 2011-05-15 13:12 sky ao 閱讀(4303) | 評論 (0)編輯 收藏

                                                  2010年11月30日 #

                                                  easymock教程-自定義參數匹配器

                                                       摘要: 雖然easymock中提供了大量的方法來進行參數匹配,但是對于一些特殊場合比如參數是復雜對象而又不能簡單的通過equals()方法來比較,這些現有的參數匹配器就無能為力了。easymock為此提供了IArgumentMatcher 接口來讓我們實現自定義的參數匹配器。  閱讀全文

                                                  posted @ 2010-11-30 18:18 sky ao 閱讀(2681) | 評論 (0)編輯 收藏

                                                  easymock教程-改變同一個方法調用的行為

                                                       摘要: 在easymock中,對于mock對象的同一個方法,可以為每一次的調用定制不同的行為。在record階段easymock會精確的記錄我們錄入的行為,基于每一次的方法調用。  閱讀全文

                                                  posted @ 2010-11-30 17:06 sky ao 閱讀(2239) | 評論 (0)編輯 收藏

                                                  easymock教程-運行時返回值或者異常

                                                       摘要: 前面的教程中,我們看到easymock可以通過expect方法來設定mock方法的返回值或者異常,但是注意這些案例中設置的返回值都是在調用被測試的類的方法前就已經確定下來的,即我們其實在測試類的代碼運行前(實際是在EasyMock.replay()方法調用前)就已經"預知"了返回結果。

                                                  但是在某些情況下,我們可能無法預知返回值,比如我們需要根據輸入的參數值來決定返回什么,而這個參數可能無法在record階段獲得。因此在mock方法中我們無法在record階段就決定應該返回什么。

                                                  對于這種場景,easymock提供了IAnswer接口和andAnswer()方法來提供運行時決定返回值或者異常的機制。  閱讀全文

                                                  posted @ 2010-11-30 16:36 sky ao 閱讀(3051) | 評論 (0)編輯 收藏

                                                  easymock教程-partial class mocking

                                                       摘要: easymock中提供對于類的mock功能,我們可以方便的mock這個類的某些方法,指定預期的行為以便測試這個類的調用者。這種場景下被mock的類在測試案例中扮演的是次要測試對象或者說依賴的角色,主要測試對象是這個mock類的調用者。但是有時候我們需要將這個測試類作為主要測試對象,我們希望這個類中的部分(通常是大部分)方法保持原有的正常行為,只有個別方法被我們mock掉以便測試。  閱讀全文

                                                  posted @ 2010-11-30 14:23 sky ao 閱讀(2793) | 評論 (0)編輯 收藏

                                                  2010年11月29日 #

                                                  easymock教程-參數匹配

                                                       摘要: easymock中提供了非常多的方法來實現參數匹配,基本能滿足一般參數匹配的要求。  閱讀全文

                                                  posted @ 2010-11-29 18:57 sky ao 閱讀(4135) | 評論 (2)編輯 收藏

                                                  easymock教程-命名mock對象

                                                       摘要: 在創建mock對象的時候,我們可以命名mock對象。
                                                  命名mock對象有什么好處呢?其實就是一點,即在當測試案例因為某個mock對象的狀態或行為不符合要求而失敗的時候,在異常信息里面可以輸出這個mock對象的名稱。  閱讀全文

                                                  posted @ 2010-11-29 16:34 sky ao 閱讀(2220) | 評論 (1)編輯 收藏

                                                  僅列出標題  下一頁
                                                  精准平特三肖
                                                  <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

                                                  <bdo id="rub96"></bdo>

                                                    1. <track id="rub96"><div id="rub96"></div></track>
                                                      <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

                                                          <nobr id="rub96"><address id="rub96"><big id="rub96"></big></address></nobr>
                                                        1. <menuitem id="rub96"><strong id="rub96"><menu id="rub96"></menu></strong></menuitem>
                                                          <dl id="rub96"><source id="rub96"><tr id="rub96"></tr></source></dl>
                                                          1. <tbody id="rub96"><div id="rub96"></div></tbody>
                                                            1. <bdo id="rub96"><optgroup id="rub96"></optgroup></bdo>
                                                            2. <bdo id="rub96"><dfn id="rub96"><dd id="rub96"></dd></dfn></bdo>
                                                              1. <option id="rub96"><source id="rub96"></source></option>
                                                              2. <bdo id="rub96"></bdo>

                                                                  <p id="rub96"><tr id="rub96"></tr></p>
                                                                1. <tbody id="rub96"></tbody>

                                                                  <bdo id="rub96"></bdo>

                                                                2. <option id="rub96"><source id="rub96"></source></option>

                                                                  <bdo id="rub96"><optgroup id="rub96"><dd id="rub96"></dd></optgroup></bdo>
                                                                    <track id="rub96"></track>

                                                                      <bdo id="rub96"></bdo>
                                                                    1. <option id="rub96"><p id="rub96"><tr id="rub96"></tr></p></option>

                                                                        <bdo id="rub96"></bdo>
                                                                        1. <track id="rub96"></track>
                                                                          1. <track id="rub96"></track>
                                                                                <bdo id="rub96"></bdo>
                                                                                <option id="rub96"></option>

                                                                                    1. <track id="rub96"><span id="rub96"></span></track>

                                                                                        <option id="rub96"></option>

                                                                                        1. 
                                                                                          
                                                                                            <option id="rub96"><span id="rub96"></span></option>
                                                                                            <bdo id="rub96"><address id="rub96"></address></bdo>
                                                                                            <option id="rub96"><source id="rub96"></source></option>
                                                                                              <nobr id="rub96"><address id="rub96"></address></nobr>
                                                                                            1. <nobr id="rub96"><optgroup id="rub96"><big id="rub96"></big></optgroup></nobr>
                                                                                              <track id="rub96"></track>

                                                                                              <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>
                                                                                                <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

                                                                                                <bdo id="rub96"></bdo>

                                                                                                  1. <track id="rub96"><div id="rub96"></div></track>
                                                                                                    <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

                                                                                                        <nobr id="rub96"><address id="rub96"><big id="rub96"></big></address></nobr>
                                                                                                      1. <menuitem id="rub96"><strong id="rub96"><menu id="rub96"></menu></strong></menuitem>
                                                                                                        <dl id="rub96"><source id="rub96"><tr id="rub96"></tr></source></dl>
                                                                                                        1. <tbody id="rub96"><div id="rub96"></div></tbody>
                                                                                                          1. <bdo id="rub96"><optgroup id="rub96"></optgroup></bdo>
                                                                                                          2. <bdo id="rub96"><dfn id="rub96"><dd id="rub96"></dd></dfn></bdo>
                                                                                                            1. <option id="rub96"><source id="rub96"></source></option>
                                                                                                            2. <bdo id="rub96"></bdo>

                                                                                                                <p id="rub96"><tr id="rub96"></tr></p>
                                                                                                              1. <tbody id="rub96"></tbody>

                                                                                                                <bdo id="rub96"></bdo>

                                                                                                              2. <option id="rub96"><source id="rub96"></source></option>

                                                                                                                <bdo id="rub96"><optgroup id="rub96"><dd id="rub96"></dd></optgroup></bdo>
                                                                                                                  <track id="rub96"></track>

                                                                                                                    <bdo id="rub96"></bdo>
                                                                                                                  1. <option id="rub96"><p id="rub96"><tr id="rub96"></tr></p></option>

                                                                                                                      <bdo id="rub96"></bdo>
                                                                                                                      1. <track id="rub96"></track>
                                                                                                                        1. <track id="rub96"></track>
                                                                                                                              <bdo id="rub96"></bdo>
                                                                                                                              <option id="rub96"></option>

                                                                                                                                  1. <track id="rub96"><span id="rub96"></span></track>

                                                                                                                                      <option id="rub96"></option>

                                                                                                                                      1. 
                                                                                                                                        
                                                                                                                                          <option id="rub96"><span id="rub96"></span></option>
                                                                                                                                          <bdo id="rub96"><address id="rub96"></address></bdo>
                                                                                                                                          <option id="rub96"><source id="rub96"></source></option>
                                                                                                                                            <nobr id="rub96"><address id="rub96"></address></nobr>
                                                                                                                                          1. <nobr id="rub96"><optgroup id="rub96"><big id="rub96"></big></optgroup></nobr>
                                                                                                                                            <track id="rub96"></track>

                                                                                                                                            <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>
                                                                                                                                            1. 新快3开奖直播 时时彩缩水软件免费版 快速时时网址 福彩3d开奖号码今晚开奖结果 北京pk最快 金马梦解诗句 江西时时组选遗漏 重庆幸运农场水果版走势图 十一选五黑龙江十一选五走势图 河北省快三 别人叫我玩广东快乐十分被骗 广东快乐10分走势如图 河北时时直选 现场开吗直播现场开奖直播 新时时和值 福建时时有什么技巧