軟件是對質量的不懈追求

          導航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          #

          狀態模式與策略模式的重要區別

          是否需要在State類或Strategy類中訪問Context.
          狀態模式通常需要調用Context中的方法,以改變Context的狀態。
          Strategy通常不需要。

          posted @ 2010-02-23 17:50 BlakeSu 閱讀(331) | 評論 (0)編輯 收藏

          linux正則表達式


          記號 含義 舉例 匹配
          . 任何字符 a.. a后兩個字符
          ^ 行首 ^wood 位于行首的wood
          $ 行尾 x$
          ^INSERT$
          ^$
          位于行尾的x
          只包含字符串INSERT的行
          不包含任何字符的行
          * 前導的正則表達式重復0或若干次 x*
          xx*
          .*
          w.*s
          0或若干次連續的x
          1或多個連續的x
          0或若干個字符
          以w開始,s結尾的任何字符串
          [字符表] 字符表中的任一 [tT]
          [a-z]
          [a-zA-Z]
          小寫或大寫的t
          小寫字母
          字母(大寫或小寫)
          [^字符表] 任一不在字符表中的字符 [^0-9]
          [^a-zA-Z]
          任何數字
          非字母
          \{min,max\} 前導的正則表達式重復至少min次,最多max次 X\{1,5\}
          [0-9]\{3,9\}
          [0-9]\{3\}
          [0-9]\{3,\}
          最少1個,最多5個x
          3到9個數字
          正好3個數字
          至少3個數字
          \(…\) 將小括號中匹配的字符串存儲到下一個寄存器中(1-9) ^\(.\)
          ^\(.\)\1
          行中第1個字符存到1號寄存器
          行首兩個字符,且它們相同

          如下命令含有正則表達式: cut paste sed tr grep sort uniq

          posted @ 2010-02-11 15:01 BlakeSu 閱讀(276) | 評論 (0)編輯 收藏

          開源框架(spring struts2 tomcat)源碼下載地址

          spring

          svn checkout https://src.springframework.org/svn/spring-framework/trunk spring-framework

            ant resolve

          struts2

          svn checkout http://svn.apache.org/repos/asf/struts/struts2/trunk struts2
          svn checkout http://svn.apache.org/repos/asf/struts/xwork/trunk/ xwork

           mvn install
           mvn eclipse:eclipse

          tomcat6

          svn checkout http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk tc6.0.x
           1.下載ant 1.6.x
           2. 命令行下執行 ant download,下載依賴jar.

          posted @ 2010-02-07 10:41 BlakeSu 閱讀(464) | 評論 (0)編輯 收藏

          spring 計時器類 StopWatch

           StopWatch

          posted @ 2010-02-05 16:08 BlakeSu 閱讀(543) | 評論 (0)編輯 收藏

          [李琨]REST的主要優勢到底是什么?

          在JavaEye論壇上回答網友joyjiang的疑問:“REST的優勢到底是什么?開發效率?文檔的管理?url的直觀?還是其它的什么優勢呢?”

          REST的主要優勢在我看來其實在于它是一種對于服務器的更加有效的抽象方式。

          對于基于網絡的應用來說,你怎么樣看待服務器,就會產生什么樣的架構風格,隨之產生與該架構風格相關的交互模式。

          RPC架構風格將服務器看作是由一些過程組成,客戶端調用這些過程來執行特定的任務。SOAP就是RPC風格的一種架構。過程是動詞性的(做某件事),因此RPC建模是以動詞為中心的。

          分布式對象架構風格認 為服務器是由一些對象和對象上的方法組成,客戶端通過調用這些對象上的方法來執行特定的任務。并且客戶端調用這些對象上的方法應該就像是調用本地對象上的 方法一樣,這樣開發就可以完全按照統一的面向對象方法來做。但是很可惜,這樣的抽象并不是很有效,因為分布式對象與本地對象存在著巨大的本質差別,想要掩 蓋這些差別很多時候甚至是有害無益的。

          REST架構風格并 沒有試圖掩蓋這些差別,而是將服務器抽象為一組離散資源的集合。資源是一個抽象的概念,而不是代表某個具體的東西。注意:要真正理解REST,就一定要增 強自己的抽象思維能力,充分理解到資源是抽象的。如果完全不具有抽象思維的能力,一定要將資源與數據庫中的一張表或服務器端的一個文件(HTML、 Servlet、JSP、etc.)一一掛起鉤來,就無法真正理解REST了。資源是名詞性的,因此REST建模是以名詞為中心的。

          上述 是目前基于網絡的應用的主要的三種抽象方式。這三種不同的抽象方式會嚴重影響客戶端與服務器的交互模式,而不同交互模式的交互效率差別相當大。分布式對象 的交互模式很多時候效率很低,因為掩蓋了分布式對象與本地對象的差別,很多時候都會導致細粒度的API(需要一再強調才能讓一些不明就里的架構初哥按照正 確的方式來做設計)。實踐已經證明,與RPC和分布式對象相比,REST是一種對于服務器更加有效的抽象方式,將會帶來粒度更大和更有效率的交互模式。這 樣的效果與Fielding設計REST的初衷是吻合的,REST就是專門為交互的性能和可伸縮性進行過優化的一種架構風格。而SOAP在設計的時候優先 考慮的從來不是性能和可伸縮性,而是互操作性。除非出現奇跡,否則你種什么,就應該長出來什么。你種的是瓜,長出來的就是瓜;你種的是豆,長出來的就是 豆。

          Fielding寫到:“REST提供了一組架構約束,當作為一個整體來應用時,強調組件交互的可伸縮性、接口的通用性、組件的獨立部署、以及用來減少交互延遲、增強安全性、封裝遺留系統的中間組件。

          有 人認為REST不是面向對象的,其實REST雖然沒有分布式對象那么面向對象,在我看來至少比RPC更加面向對象。按照《企業應用架構模式》,以動詞為中 心建模是什么?是不是就是事務腳本?以名詞為中心建模是什么?是不是就是領域模型?這就扯遠了,網絡通信是否一定需要實現為面向對象的形式,我認為是不需 要的。

          “REST的主要優勢在我看來其實在于它是一種對于服務器的更加有效的抽象方式。”
          這句話等于是,我先把一個骨架放在這里,還沒有用血肉來充實它,也就是還沒有舉出具體的實例來。具體的實例以后我們還需要來詳細討論。REST是非常簡練的,同時又是一種非常強大的抽象方式,在我看來就是從根本上簡化Web開發的一味良藥。

          posted @ 2010-02-05 10:57 BlakeSu 閱讀(240) | 評論 (0)編輯 收藏

          取用戶所有表的所有索引

          select index_name from dba_indexes where table_name
          in (select table_name from user_tables)

          posted @ 2010-01-29 10:08 BlakeSu 閱讀(149) | 評論 (0)編輯 收藏

          oracle優化新知識

          1.位圖索引用于數據倉庫,不能用于普通系統
          2.使用組合索引. 當大量字段同同時作為過濾條件時,使用組合索引會大大提高性能。
          建立組合索引時,注意小基數字段在前,大基數字段在后。
          3.同一字段出現在不同表要保持類型一致(確有需要,可使用函數索引)
          4.使用count(*)
          5.使用返回單個結果的查詢改寫外連接能取得較好的性能

          posted @ 2010-01-22 13:22 BlakeSu 閱讀(199) | 評論 (0)編輯 收藏

          Oracle中表連接的運行原理

          Oracle優化器會自動選擇以下三種方式的一種運行表連接,但在數據環境上配合強化選擇合適的方式或強制使用某種方式是SQL優化的需要:
           
             NESTED LOOP

          對于被連接的數據子集較小的情況,nested loop連接是個較好的選擇。nested loop就是掃描一個表,每讀到一條記錄,就根據索引去另一個表里面查找,沒有索引一般就不會是 nested loops。

          一般在nested loop中, 驅動表滿足條件結果集不大,被驅動表的連接字段要有索引,這樣就走nested loop。如果驅動表返回記錄太多,就不適合nested loops了。如果連接字段沒有索引,則適合走hash join,因為不需要索引。

          可用ordered提示來改變優化器默認的驅動表,可用USE_NL(table_name1 table_name2)提示來強制使用nested loop。

          HASH JOIN

          hash join是優化器做大數據集連接時的常用方式。優化器掃描小表(或數據源),利用連接鍵(也就是根據連接字段計算hash 值)在內存中建立hash表,然后掃描大表,每讀到一條記錄就來探測hash表一次,找出與hash表匹配的行。

          當 小表可以全部放入內存中,其成本接近全表掃描兩個表的成本之和。如果表很大不能完全放入內存,這時優化器會將它分割成若干不同的分區,不能放入內存的部分 就把該分區寫入磁盤的臨時段,此時要有較大的臨時段從而盡量提高I/O 的性能。臨時段中的分區都需要換進內存做hash join。這時候成本接近于全表掃描小表+分區數*全表掃描大表的代價和。

          至于兩個表都進行分區,其好處是可以使用parallel query,就是多個進程同時對不同的分區進行join,然后再合并。但是復雜。

          使用hash join時,HASH_AREA_SIZE初始化參數必須足夠的大,如果是9i,Oracle建議使用SQL工作區自動管理,設置WORKAREA_SIZE_POLICY 為AUTO,然后調整PGA_AGGREGATE_TARGET即可

          以下條件下hash join可能有優勢:

          兩個巨大的表之間的連接。

          在一個巨大的表和一個小表之間的連接。

          可用ordered提示來改變優化默認的驅動表,可用USE_HASH(table_name1 table_name2)提示來強制使用hash join。

          SORT MERGE JOIN

          sort merge join的操作通常分三步:對連接的每個表做table access full;對table access full的結果進行排序;進行merge join對排序結果進行合并。sort merge join性能開銷幾乎都在前兩步。一般是在沒有索引的情況下,9i開始已經很少出現了,因為其排序成本高,大多為hash join替代了

          通常情況下hash join的效果都比sort merge join要好,然而如果行源已經被排過序,在執行sort merge join時不需要再排序了,這時sort merge join的性能會優于hash join。

          在全表掃描比索引范圍掃描再通過rowid進行表訪問更可取的情況下,sort merge join會比nested loops性能更佳。

          可用USE_MERGE(table_name1 table_name2)提示強制使用sort merge join。

          posted @ 2010-01-15 12:05 BlakeSu 閱讀(379) | 評論 (0)編輯 收藏

          java 運行windows命令 并獲取輸出

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;

          public class ProcessTest {

              
          public static void main(String[] args) {
                  
                   ProcessBuilder pb 
          = new  ProcessBuilder ( "tasklist");  
                   try {
                      Process process 
          = pb.start();
                      InputStream fis 
          = process.getInputStream();
                      BufferedReader br 
          = new BufferedReader(new InputStreamReader(fis));

                      String line 
          = null;
                      StringBuffer cmdout 
          = new StringBuffer();
                      
          while ((line = br.readLine()) != null) {
                          cmdout.append(line).append(
          "\n");
                      }
                      System.out.println(cmdout.toString().trim());
                  } 
          catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }

          輸出如下:

          圖像名                       PID 會話名           會話#       內存使用
          ========================= ====== ================ ======== ============
          System Idle Process            0 Console                 0         28 K
          System                         4 Console                 0        324 K
          smss.exe                    1076 Console                 0        812 K
          csrss.exe                   1152 Console                 0      3,296 K
          winlogon.exe                1176 Console                 0     31,580 K
          services.exe                1220 Console                 0      4,684 K
          lsass.exe                   1232 Console                 0      1,672 K
          svchost.exe                 1408 Console                 0      6,236 K
          svchost.exe                 1496 Console                 0      5,036 K
          svchost.exe                 1656 Console                 0     38,656 K
          spoolsv.exe                 1872 Console                 0      8,000 K
          explorer.exe                 332 Console                 0     18,888 K
          avp.exe                      376 Console                 0     24,960 K
          db2dasrrm.exe                460 Console                 0     34,652 K
          TSVNCache.exe                672 Console                 0     12,476 K
          igfxtray.exe                1380 Console                 0      7,344 K
          hkcmd.exe                   1236 Console                 0      4,056 K
          igfxpers.exe                1428 Console                 0      3,468 K
          db2mgmtsvc.exe              1444 Console                 0     10,072 K
          RTHDCPL.exe                 1460 Console                 0     32,480 K
          igfxsrvc.exe                1572 Console                 0      3,772 K
          avp.exe                     1680 Console                 0      6,008 K
          db2systray.exe              1700 Console                 0     32,512 K
          ctfmon.exe                  1780 Console                 0      4,892 K
          picpick.exe                 1984 Console                 0      3,600 K
          QQ.exe                      2024 Console                 0     34,648 K
          dsNcService.exe              264 Console                 0      3,880 K
          365日歷.EXE                 1952 Console                 0     43,788 K
          CLCL.exe                    1028 Console                 0      8,252 K
          klnagent.exe                1052 Console                 0      3,196 K
          thunderbird.exe              352 Console                 0     38,692 K
          rtxc.exe                     472 Console                 0     29,968 K
          db2rcmd.exe                 1836 Console                 0     11,832 K
          TXPlatform.exe              2488 Console                 0      3,808 K
          firefox.exe                 2724 Console                 0    195,912 K
          cmd.exe                     2716 Console                 0         52 K
          sh.exe                      3936 Console                 0        152 K
          conime.exe                  2752 Console                 0      3,424 K
          eclipse.exe                 3060 Console                 0      2,592 K
          JAVAW.EXE                   2984 Console                 0    446,692 K
          EXCEL.EXE                   3232 Console                 0      1,936 K
          wmiprvse.exe                4084 Console                 0      6,368 K
          JAVAW.EXE                    320 Console                 0      6,860 K
          tasklist.exe                2936 Console                 0      4,812 K

          當運行其他命令 ,如dir等時,用如下寫法:

           
          ProcessBuilder pb = new  ProcessBuilder ( "cmd""/c""dir");


          posted @ 2010-01-13 13:49 BlakeSu 閱讀(592) | 評論 (0)編輯 收藏

          Ubuntu9.10正確有效關閉IPV6的方法

          Ubuntu下上網解析DNS慢有很大程度上是和IPV6有關,而目前國內大部分地方都還沒有IPV6網絡,所以一般用戶應該需要關閉IPV6

          網上流傳著很多IPV6的關閉方法,但是經過測試大部分都是針對老版本的,而且效果不好。

          這里提供一種方法作為參考

          /proc/sys/net/ipv6/conf/lo/disable_ipv6

          這個檔案,用cat指令可以看到 0 這個數字,將他設定為1就可以了。
          因為已經將ipv6編入kernel,因此在proc里面就可以看得到相關的設定。

          設定的方式有很多種,有的是用echo 1 >> [路徑]/檔桉名稱
          的方式,這種方式是每次開機以后就得要打一次。
          所以延伸出第二個方法,在rcS.d里面設定一個連結,去執行這個指令的script。
          第3個方法,就是設定sysctl.conf檔桉,也是最正統的做法。
          位置在
          /etc/sysctl.conf
          這個檔桉可以設定很多,包括要當成NAT時的封包轉發等等。
          要設定
          /proc/sys/net/ipv6/conf/lo/disable_ipv6
          這個檔桉,就是在sysctl.conf里面加上

          net.ipv6.conf.lo.disable_ipv6 = 1

          posted @ 2010-01-09 14:53 BlakeSu 閱讀(571) | 評論 (0)編輯 收藏

          僅列出標題
          共12頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 香格里拉县| 梅河口市| 临沂市| 雷州市| 体育| 青海省| 沙坪坝区| 武宁县| 芦山县| 杭锦后旗| 丰都县| 北京市| 尉氏县| 新泰市| 双牌县| 云阳县| 贵阳市| 阿坝县| 遂昌县| 峡江县| 通州市| 四子王旗| 阿拉善左旗| 武汉市| 永泰县| 洛南县| 德庆县| 鸡泽县| 青川县| 集贤县| 陕西省| 辽中县| 广安市| 鸡西市| 惠来县| 洛扎县| 屏东市| 焉耆| 青田县| 苍溪县| 瓮安县|