<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    統計

    留言簿(1)

    DB

    Others

    QA

    Tech Website

    閱讀排行榜

    評論排行榜

    #

    常見的OO原則

    封裝變化

    多用組合,少用繼承

    針對接口編程,不針對實現編程

    為交互對象之間的松耦合設計而努力

    類應該對擴展開放,對修改關閉

    只和朋友交談

    別找我,我會找你

    類應該只有一個改變的理由

    posted @ 2011-02-13 10:23 XXXXXX 閱讀(501) | 評論 (0)編輯 收藏

    【Effective Java】--異常

    38、只針對不正常的條件使用異常
    異常只應該被用于不正常的條件,它們永遠不應該被用于不正常的條件
    設計API啟示:一個良好的API不應該強迫它的客戶為了正常的控制流而使用異常。對于邊界的判斷常用的有兩種方法:狀態測試方法和可被識別的返回值


    40、對于可以恢復的條件使用被檢查的異常,對于程序錯誤使用運行時異常
     Thowable(可拋出異常)有三種結構:被檢查的異常(checked exception)、運行時異常(run-time exception)和錯誤(error)
    如果期望調用者能夠恢復,那么,對于這樣的條件應該使用被檢查的異常
    運行時異常和錯誤,不需要也不應該是被捕獲的拋出物
    用運行時異常來指明程序錯誤
    對于被檢查的異常,提供一些輔助方法是非常重要的,通過這些方法,調用者可以獲得一些有助于恢復的信息


    41、避免不必要地使用被檢查的異常

    42、盡量使用標準異常
          


    43、拋出的異常要適合于相應的抽象
    高層的實現應該捕獲低層的異常,同時導出一個可以按照高層抽象進行解釋的---異常轉譯
    低層的異常對于調試該異常被撥出的情形非常有幫助的話,可以使用異常鏈接。即低層的異常被高層的異常保存起來,并且高層的異常提供一個公有的訪問方法來獲得低層異常

    44、每個異常的拋出都必須有文檔

    45、在細節消息中包含失敗--捕獲信息
    為了捕獲失敗,一個異常的的字符串表示應該包含所有“對異常有貢獻”的參數和域的值
    在異常構造函數中以參數形式引入這些信息


    46、努力使失敗保持原子性
    一個失敗方法調用應該使用對象保持“它在被調用之前的狀態” ---failure atomic
    幾種解決方法:在執行操作之前檢查參數的有效性
    調整計算機過程,使得任何可能會失敗的計算部分發生在對象狀態被修改之前
    編寫一段恢復代碼
    在對象上臨時都拷貝一份,當操作完成之后把臨時拷貝中的結果復制給原來的對象。如:Collections.sort

    47、不要忽略異常
    寫上try catch塊

    posted @ 2011-02-12 18:02 XXXXXX 閱讀(251) | 評論 (0)編輯 收藏

    【編程珠現】-算法設計技術

            【編程珠璣】第一部分的基礎知識已經看完,比較有感觸的有以下幾點:
                1)、數據決定程序結構:對不同的程序,選用最合適的數據結構,必要是可以借助數據庫來解決問題
                2)、學會寫偽代碼:偽代碼是思想的結晶,拋開算法的細節,抓住算法的本質思想。

              第二部分是關于程序性能的講解。在算法設計技術章節講到了以下幾個重要的技術:
                1)、保存狀態,避免重要計算:這也是動態規劃所采用的思想,別浪費中間結果,它們很寶貴
                2)、將信息預處理至數據結構中:保存中間結果的一種方法
                3)、分治算法:算法課上第一個學習的算法,如:二分查找、Strassen矩陣乘法等等。核心思想在于把問題分解成簡單的子問題,然后對子
                            問題進行合并,經常和遞歸一起使用
                4)、掃描算法
                5)、累積:通常用于求前i個值的和
                6)、下界:許多問題要證明它的下界是多少


                下面是習題14的解答思想:
                 描述:給定整數m、n和整數(實)數向量x[n],請找到出現使總和x[i]+……+x[i+m]最接近0的整數i( 0<=i<n-m)
                 解決思路:從i+1開始的長度為m+1的子向量等當前子向量減去x[i-1],再加上x[i+m]

                  
    int alg(int * x, int m , int n){
        
    if0 == n )
            
    return 0;

        
    int i ;
        
    int start = 0;
        
    int subVal = 0;
        
    int sum = 0;

        
    for( i = 0; i <= m; i++){
            sum 
    += x[i];
        }

        subVal 
    = abs(sum);
        
        
    for( i = 1; i < n-m; i++){
            sum 
    -= x[i-1];
            sum 
    += x[i+m];
            cout 
    << "sum " << sum <<endl;
            
    if(abs(sum) < subVal){  //如果subVal比當前sum絕對值大
                start = i;
                subVal 
    = abs(sum);
                
            }

        }

        
        cout 
    << "sum: " <<  sum << endl;
        cout 
    << "subVal: " << subVal << endl;
        
        
    return start;
    }

             原題中的向量為實數,核心算法還是一樣的,只是浮點數比較的時候要注意下
             有興趣的朋友歡迎一起討論 :)

    posted @ 2011-01-14 11:20 XXXXXX 閱讀(274) | 評論 (0)編輯 收藏

    【編程珠璣】-啊哈!算法


            一、二分搜索
                    二分搜索可以說是無處不在,應用它的前提是,對象有序且在某一范圍之內。

            二、基本操作的威力
                    靈機一動,經過許久的思考,得出的解決方案或許就是一些基本操作的組合,不是嗎?
                    求逆代碼:把ab變成ba,可以有如下的方法:ab->arb->arbr->(arbr)r->ba
                       E.G.  n元向量左移i個位置
    reverse(0, rotdist - 1);
    reverse(rotdist, n
    -1);
    reverse (
    0, n-1);
          
            三、排序
                    變位分詞的應用,關鍵在于:選擇標識和集中具有相同標識的單詞

            四、原理
                    1)排序:產生有序輸出,將相等的元素集中在一起
                    2)二分搜索
                    3)標識:當使用等價類定義時,定義一種標識使同類中每一項都具有相同的標識,而該類之外的其它項則沒有該標識,這是很有用的
                    4)問題的定義:用戶的需求才是程序設計的根本
                    5)問題解決者的觀點:優秀的程序員有點懶,他們坐下來等待靈機一動的出現而不急于使用最開始的想法編程
                   

    posted @ 2011-01-11 11:49 XXXXXX 閱讀(369) | 評論 (0)編輯 收藏

    【編程珠璣】-開篇


           昨天入手《編程珠璣》(第二版)一書,去年寒假已經把這書看了一大半,發現里面的一些算法和觀點簡單而富有哲理。

           一、準確描述問題:程序員的主要問題與其說是技術問題,還不如說是心理問題,他不能解決問題,是因為他企圖解決錯誤的問題。所以準確描述一個問題非常重要,實際中往往體現中需求文檔的規范性和無異性中。

          二、位圖或者向量表示集合
                  1)、位圖數據結構的實現
      
    #define BITSPERWORD 32
    #define SHIFT 5
    #define MASK 0x1F
    #define N 10000000

    int a[1 + N/BITSPERWORD];

    void set(int i) {        a[i>>SHIFT] |=  (1<<(i & MASK)); }

    void clr(int i) {        a[i>>SHIFT] &= ~(1<<(i & MASK)); }
    int  test(int i)return a[i>>SHIFT] &   (1<<(i & MASK)); }
                2)、位圖可以用于排序和和統計當中,合理應用往往可以得到時間-空間折中與雙贏

            三、原理
             1)、正確的問題:明確了問題,這場戰役就成功了90%
             2)、位圖數據結構
             3)、多趟算法:這些算法多趟讀入其輸入數據,每次完成一步
             4)、時間-空間折中與雙贏
             5)、簡單的設計:設計者確定其設計已經達到了完美的標準不是不能增加任何東西,而是不能再減少任何東西
             6)、程序的設計階段

    posted @ 2011-01-08 10:41 XXXXXX 閱讀(231) | 評論 (0)編輯 收藏

    K-Menas算法


    一、算法簡介
     k-means 算法接受輸入量 k ;然后將n個數據對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個“中心對象”(引力中心)來進行計算的。


    二、偽碼

    算法:K-means。
    輸入:
        K:聚類的數目
        D:包含n個對象的數據集
    輸出:K個聚類的集合
    方法:
    1)    從D中任意選擇K個對象作為初始聚類中心;
    2)    repeat
             根據聚類中對象的均值,將每個對象(再)指派到最相似的聚類;
              更新聚類均值,即計算每個聚類中對象的均值;
    3)    until聚類不再發生變化

    算法復雜度為: O(nkt).其中t為迭代次數

    三、準確性評價



    四、應用和擴展

    posted @ 2011-01-04 11:05 XXXXXX 閱讀(479) | 評論 (0)編輯 收藏

    Install MySQL5.1.25 on Ubuntu

          Ubuntu crashed tonight which urged me to reintsall the system and MySQL. Damn!

    -------------------main procedure-------------------

    shell> groupadd mysql

    shell> useradd -g mysql mysql

    shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -

    shell> cd mysql-VERSION

    shell> ./configure --prefix=/usr/local/mysql

    shell> make

    shell> make install

    shell> cp support-files/my-medium.cnf /etc/my.cnf

    shell> cd /usr/local/mysql

    shell> bin/mysql_install_db --user=mysql

    shell> chown -R root  .

    shell> chown -R mysql var

    shell> chgrp -R mysql .

    shell> bin/mysqld_safe --user=mysql &

    ------------------initilize the password ------------------
    #set the password for root
    shell> mysql -u root
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');

    #creat user mysql and set its password '123456'
    CREATE USER mysql@localhost IDENTIFIED BY '123456';
    GRANT ALL ON db_name.* TO mysql@localhost


    References: http://dev.mysql.com/doc/refman/5.1/zh/index.html

    posted @ 2010-12-29 00:20 XXXXXX 閱讀(327) | 評論 (0)編輯 收藏

    打印全排列

    在《組合數學》里面全排列是一個常見的問題。
    描述如下:有x1,x2,x3,...xn,共n個元素,打印出它的全排列。
    如:1 , 2 , 3
    有6種排列: 123, 132, 213, 231, 312, 321
    思路: 元素的全排列,其實就是遍列全部元素組成的一個排列樹,用回溯法可以得到比較好的效率,特別是空間上,,由于遍列整棵樹,時間復雜度為O(n!)

     1 /** 
     2  *  打印出list[k,m]的全排列 
     3  * @param list 
     4  * @param k  beginning index 
     5  * @param m  finishing index 
     6  */  
     7 static void getPerm(Object[] list, int k , int m){  
     8     if( k == m){  
     9         for(int i = 0; i <= m; i++)  
    10             System.out.print(list[i]);  
    11         System.out.println();  
    12     }else  
    13         forint i = k; i <= m; i++){  
    14         MyMath.swap(list, i, k);  
    15         getPerm(list, k+1, m);  
    16         MyMath.swap(list, i, k);  
    17           
    18     }  
    19 }  


     引申:類似此種算法的還有就是打印字符串(如:ABC)的真子集,其核心算法還是一樣的

     

    posted @ 2010-11-21 00:27 XXXXXX 閱讀(508) | 評論 (0)編輯 收藏

    crontab 定時任務

     

    crontab 五個域的含義
    0~59 表示分
    1~23 表示小時
    1~31 表示日
    1~12 表示月份
    0~6 表示星期(其中0表示星期日

    * * * * * /home/milch/tmpmail      #每隔一分鐘執行一次后臺程序tmpmail
     

    腳本的路徑必須為全局路徑
    一個定時任務例子:
      1)設置環境變量
         在$HOME  .profile后面添加  export $EDITOR=vi
       2) 新建一個文件 davecron
            * * * * * /bin/echo `date` >>$HOME/dateInfo.txt 
       3) 提交給cron進程
           crontab davecron
       4)查看定時任務
           crontab -l
    //
    root@ubuntu:/var/spool/cron/crontabs# cat root
    # DO NOT EDIT THIS FILE - edit the master and reinstall.
    # (davecron installed on Mon Oct 25 11:29:52 2010)
    # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
    * * * * * /bin/echo `date` >>$HOME/dateInfo.txt
    //
    ---------------------------------------------
    重啟crond:
    service crond restart
    或者
    /etc/rc.d/init.d/crond restart

    查看自動自行項:
    crontab -l

    添加/編輯自動執行項:
    crontab -e
    ----------------------------------------------
    at命令
    at命令,用戶向cron守護進程提-交作業,提交后保留所有當前的環境變量
    /etc 下at.allow & at.deny 規定哪些用戶可以使用at和不可能使用

    提交一個任務
     

    列出所提交的作業  at -l
    清除一個作業   atrm job n.o.   # atrm 8


    向后臺提交命令
    命令 &
    find /etc -name "passwd" -print >$HOME/find.txt 2>&1 &

    退出帳戶后仍執行命令
    nohup command &

    -------------
    SSH
    1. 首先在服務器上安裝ssh的服務器端。
    $ sudo aptitude install openssh-server

    2. 啟動ssh-server。
    $ /etc/init.d/ssh restart

    3. 確認ssh-server已經正常工作。
    $ netstat -tlp
    tcp6    0    0 *:ssh                *:*                   LISTEN     -
    看到上面這一行輸出說明ssh-server已經在運行了。
    ---------------

     

    posted @ 2010-10-28 22:13 XXXXXX 閱讀(205) | 評論 (0)編輯 收藏

    僅列出標題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 
    主站蜘蛛池模板: 亚洲毛片基地日韩毛片基地| 色久悠悠婷婷综合在线亚洲| 亚洲一区二区三区免费视频| 久久国产高潮流白浆免费观看 | 中国性猛交xxxxx免费看| 国产免费牲交视频| 特级毛片免费观看视频| 亚洲精品视频免费| 人与动性xxxxx免费| 中文字幕亚洲天堂| 国产拍拍拍无码视频免费| 亚洲国产成人久久综合碰碰动漫3d | 亚洲区小说区图片区QVOD| 午夜视频在线免费观看| 亚洲精品中文字幕麻豆| 国产精品成人免费视频网站京东| 亚洲无mate20pro麻豆| 日本黄页网站免费| 一级毛片**免费看试看20分钟 | 亚洲春色另类小说| 成年女人午夜毛片免费看| 免费人人潮人人爽一区二区| 亚洲精品乱码久久久久久蜜桃不卡| 99久9在线|免费| 亚洲色无码专区一区| 精品国产香蕉伊思人在线在线亚洲一区二区| a毛片在线看片免费| 亚洲狠狠成人综合网| 4338×亚洲全国最大色成网站| 午夜影院免费观看| 亚洲色大18成人网站WWW在线播放| 免费人成激情视频| 亚洲午夜免费视频| 亚洲AV永久无码精品一福利 | 亚洲男人的天堂网站| 久久精品国产精品亚洲下载| 精品香蕉在线观看免费| 成人免费观看男女羞羞视频| 亚洲精品mv在线观看| 免费人成无码大片在线观看| 在线观看永久免费|