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

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

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

    巷尾的酒吧

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      64 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

    #

    oracle 截取字符(substr),檢索字符位置(instr) case when then else end語句使用 收藏
    常用函數:substr和instr
    1.SUBSTR(string,start_position,[length])    求子字符串,返回字符串
    解釋:string 元字符串
           start_position   開始位置(從0開始)
           length 可選項,子字符串的個數
    For example:
    substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符
    substr("ABCDEFG", 2); //返回:CDEFG,截取從C開始之后所有字符
    substr("ABCDEFG", 0, 3); //返回:ABC,截取從A開始3個字符
    substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100雖然超出預處理的字符串最長度,但不會影響返回結果,系統按預處理字符串最大數量返回。
    substr("ABCDEFG", 0, -3); //返回:EFG,注意參數-3,為負值時表示從尾部開始算起,字符串排列位置不變。

    2.INSTR(string,subString,position,ocurrence)查找字符串位置
    解釋:string:源字符串
          subString:要查找的子字符串
          position:查找的開始位置
          ocurrence:源字符串中第幾次出現的子字符串
    For example:
    INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串為'CORPORATE FLOOR', 目標字符串為'OR',起始位置為3,取第2個匹配項的位置;返回結果為 14 '




    oracle中length()與lengthb()區別

    oracle中length()與lengthb()區別

     

    OracleSQL.oracle中length()與lengthb()區別
    SQL> select length('阿豬') from dual;
    LENGTH('阿豬')
    --------------
                 2

    SQL> select lengthb('阿豬') from dual;

    LENGTHB('阿豬')
    ---------------
                  4


    區別:length求得是字符長度,lengthb求得是字節長度。

    ----------------------------------------------------------------------------------------------------

    SQL> select sysdate from dual;

    SYSDATE
    --------------
    26-9月 -05

    SQL> select length(sysdate) from dual;

    LENGTH(SYSDATE)
    ---------------
                  9

    SQL> select lengthb(sysdate) from dual;

    LENGTHB(SYSDATE)
    ----------------
                  10

    length返回的是字符數
    lengthb返回的是字節數
    漢字“月”在length時,返回的時1
    而在lengthb時返回的時2

     

     length指的是字符個數,lengthb指的是字節數。字符個數跟數據庫字符集有很大關系。length和lengthb的參數都為varchar2型,因此length(sysdate)有一個隱式的類型轉換,實際上等同于length(to_char(sysdate)),ORACLE安裝好后默認的NLS_DATE_FORMAT參數值為DD-MON-RR,結果就相當于length('28-9月 -05')和
    lengthb('28-9月 -05')了,其結果就是9和10

    posted @ 2012-10-25 13:53 abing 閱讀(788) | 評論 (1)編輯 收藏

    一、引言

     

    忙里偷閑,終于動筆了。命令模式是從界面設計中提取出來的一種分離耦合,提高重用的方法。被認為是最優雅而且簡單的模式,它的應用范圍非常廣泛。讓我們一起來認識下它吧。

     

    先從起源說起。在設計界面時,大家可以注意到這樣的一種情況,同樣的菜單控件,在不同的應用環境中的功能是完全不同的;而菜單選項的某個功能可能和鼠標右鍵的某個功能完全一致。按照最差、最原始的設計,這些不同功能的菜單、或者右鍵彈出菜單是要分開來實現的,你可以想象一下,word文檔上面的一排菜單要實現出多少個“形似神非”的菜單類來?這完全是行不通的。這時,就要運用分離變化與不變的因素,將菜單觸發的功能分離出來,而制作菜單的時候只是提供一個統一的觸發接口。這樣修改設計后,功能點可以被不同的菜單或者右鍵重用;而且菜單控件也可以去除變化因素,很大的提高了重用;而且分離了顯示邏輯和業務邏輯的耦合。這便是命令模式的雛形。

     

    下面我們將仔細的討論下命令模式。

     

     

    二、定義與結構

     

    《設計模式》中命令模式的定義為:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤消的操作。

     

    看起來,命令模式好像神通廣大。其實命令模式的以上功能還要看你是怎么寫的——程序總是程序員寫出來的,你寫啥它才能干啥:)

     

           在我看來,其實命令模式像很多設計模式一樣——通過在你的請求和處理之間加上了一個中間人的角色,來達到分離耦合的目的。通過對中間人角色的特殊設計來形成不同的模式。當然命令模式就是一種特殊設計的結果。

     

           看下命令模式是有哪些角色來組成的吧。             

     

    1)        命令角色(Command):聲明執行操作的接口。有java接口或者抽象類來實現。

     

    2)        具體命令角色(Concrete Command):將一個接收者對象綁定于一個動作;調用接收者相應的操作,以實現命令角色聲明的執行操作的接口。

     

    3)        客戶角色(Client):創建一個具體命令對象(并可以設定它的接收者)。

     

    4)        請求者角色(Invoker):調用命令對象執行這個請求。

     

    5)        接收者角色(Receiver):知道如何實施與執行一個請求相關的操作。任何類都可能作為一個接收者。

     

     

    以下是命令模式的類圖,從中可以大致的了解到各個角色之間是怎么來協調工作的。

     

     

     

    三、舉例

     

    本來想接著我的JUnit分析來講解命令模式。但是由于在JUnit中,參雜了其它的模式在里面,使得命令模式的特點不太明顯。所以這里將以命令模式在Web開發中最常見的應用——Struts中Action的使用作為例子。

     

    在Struts中Action控制類是整個框架的核心,它連接著頁面請求和后臺業務邏輯處理。按照框架設計,每一個繼承自Action的子類,都實現execute方法——調用后臺真正處理業務的對象來完成任務。

     

    注:繼承自DispatchAction的子類,則可以一個類里面處理多個類似的操作。這個在這不做討論。

     

           下面我們將Struts中的各個類與命令模式中的角色對號入座。

     

           先來看下命令角色——Action控制類

     

    public class Action {

           ……

             /*

             *可以看出,Action中提供了兩個版本的執行接口,而且實現了默認的空實現。

           
    */

    public ActionForward execute( ActionMapping mapping,

                                                      ActionForm form,

                                                      ServletRequest request,

                                                      ServletResponse response)

            throws Exception {

            try {

                return execute(mapping, form, (HttpServletRequest) request,

                                         (HttpServletResponse) response);

            } catch (ClassCastException e) {

                return null;

            }

        }

     

    public ActionForward execute( ActionMapping mapping,

                                                      ActionForm form,

                                                       HttpServletRequest request,

                                                      HttpServletResponse response)

            throws Exception {

            return null;

        }

    }

     

    下面的就是請求者角色,它僅僅負責調用命令角色執行操作。

    public class RequestProcessor {

    ……

    protected ActionForward processActionPerform(HttpServletRequest request,

                                                            HttpServletResponse response,

                                                           Action action,

                                                           ActionForm form,

                                                           ActionMapping mapping)

            throws IOException, ServletException {

            try {

                return (action.execute(mapping, form, request, response));

            } catch (Exception e) {

                return (processException(request, response,e, form, mapping));

            }

    }

    }

     

    Struts框架為我們提供了以上兩個角色,要使用struts框架完成自己的業務邏輯,剩下的三個角色就要由我們自己來實現了。步驟如下:

    1)        很明顯我們要先實現一個Action的子類,并重寫execute方法。在此方法中調用業務模塊的相應對象來完成任務。

    2)        實現處理業務的業務類。

    3)        配置struts-config.xml配置文件,將自己的Action和Form以及相應頁面結合起來。

    4)        編寫jsp,在頁面中顯式的制定對應的處理Action。

    一個完整的命令模式就介紹完了。當你在頁面上提交請求后,Struts框架會根據配置文件中的定義,將你的Action對象作為參數傳遞給RequestProcessor類中的processActionPerform()方法,由此方法調用Action對象中的執行方法,進而調用業務層中的接收角色。這樣就完成了請求的處理。

     

    四、Undo、事務及延伸

     

    在定義中提到,命令模式支持可撤銷的操作。而在上面的舉例中并沒有體現出來。其實命令模式之所以能夠支持這種操作,完全得益于在請求者與接收者之間添加了中間角色。為了實現undo功能,首先需要一個歷史列表來保存已經執行過的具體命令角色對象;修改具體命令角色中的執行方法,使它記錄更多的執行細節,并將自己放入歷史列表中;并在具體命令角色中添加undo方法,此方法根據記錄的執行細節來復原狀態(很明顯,首先程序員要清楚怎么來實現,因為它和execute的效果是一樣的)。

     

    同樣,redo功能也能夠照此實現。

     

    命令模式還有一個常見的用法就是執行事務操作。這就是為什么命令模式還叫做事務模式的原因吧。它可以在請求被傳遞到接收者角色之前,檢驗請求的正確性,甚至可以檢查和數據庫中數據的一致性,而且可以結合組合模式的結構,來一次執行多個命令。

     

    使用命令模式不僅僅可以解除請求者和接收者之間的耦合,而且可以用來做批處理操作,這完全可以發揮你自己的想象——請求者發出的請求到達命令角色這里以后,先保存在一個列表中而不執行;等到一定的業務需要時,命令模式再將列表中全部的操作逐一執行。

     

    哦,命令模式實在太靈活了。真是一個很有用的東西啊!

     

     

    五、優點及適用情況

     

    由上面的講解可以看出命令模式有以下優點:

    1)        命令模式將調用操作的請求對象與知道如何實現該操作的接收對象解耦。

    2)        具體命令角色可以被不同的請求者角色重用。

    3)        你可將多個命令裝配成一個復合命令。

    4)        增加新的具體命令角色很容易,因為這無需改變已有的類。

    GOF總結了命令模式的以下適用環境。

    1)        需要抽象出待執行的動作,然后以參數的形式提供出來——類似于過程設計中的回調機制。而命令模式正是回調機制的一個面向對象的替代品。

    2)        在不同的時刻指定、排列和執行請求。一個命令對象可以有與初始請求無關的生存期。

    3)        需要支持取消操作。

    4)        支持修改日志功能。這樣當系統崩潰時,這些修改可以被重做一遍。

    5)        需要支持事務操作。

     

    六、總結

     

    命令模式是一個很有用的模式,希望這篇文章能給你實質性的幫助。謝謝大家指正。 v

     
    posted @ 2012-10-24 18:04 abing 閱讀(262) | 評論 (0)編輯 收藏

    create table ABING1
    (
      ID1   NVARCHAR2(100),
      NAME1 NVARCHAR2(100)
    )


    create table ABING2
    (
      ID2   NVARCHAR2(100),
      NAME2 NVARCHAR2(100)
    )


    merge into abing1 t 
    using abing2 s
    on(t.id1=s.id2)
    when matched then update set t.name1=s.name2
    when not matched then insert values (s.id2,s.name2);
    commit
    posted @ 2012-10-19 14:58 abing 閱讀(208) | 評論 (0)編輯 收藏

    這個可能是最好的對比volatile 和synchronized 作用的文章了。volatile 是一個變量修飾符,而synchronized 是一個方法或塊的修飾符。所以我們使用這兩種關鍵字來指定三種簡單的存取變量的方式。

             int i1;                       int geti1() {return i1;}

    volatile int i2;                        int geti2() {return i2;}

         int i3;          synchronized int geti3() {return i3;}

    geti1() 當前線程 中立即獲取在i1 變量中的值。線程可以獲得變量的本地拷貝,而所獲得的變量的值并不一定與其他線程所獲得的值相同。特別是,如果其他的線程修改了i1 的值,那么當前線程獲得的i1 的值可能與修改后的值有所差別。實際上,Java 有一種主內存的機制,使用一個主內存來保存變量當前的正確的值。線程將變量的值拷貝到自己獨立的內存中,而這些線程的內存拷貝可能與主內存中的值不同。所以實際當中可能發生這樣的情況,在主內存中i1 的值為1 ,線程1 和線程2 都更改了i1 ,但是卻沒把更新的值傳回給主內存或其他線程中,那么可能在線程1 中i1 的值為2,線程2 中i1 的值卻為 3 。

    另一方面,geti2() 可以有效的從主內存中獲取i2 的值。一個volatile 類型的變量不允許線程從主內存中將變量的值拷貝到自己的存儲空間。因此,一個聲明為volatile 類型的變量將在所有的線程中同步的獲得數據,不論你在任何線程中更改了變量,其他的線程將立即得到同樣的結果。由于線程存取或更改自己的數據拷貝有更高的效率,所以volatile 類型變量在性能上有所消耗。

    那么如果volatile 變量已經可以使數據在線程間同步,那么synchronizes 用來干什么呢?兩者有兩方面的不同。首先,synchronized 獲取和釋放由監聽器控制的鎖,如果兩個線程都使用一個監聽器( 即相同對象鎖) ,那么監聽器可以強制在一個時刻只有一個線程能處理代碼塊,這是最一般的同步。另外,synchronized 還能使內存同步。在實際當中,synchronized 使得所有的線程內存與主內存相同步。所以geti3() 的執行過程如下:

    1.    線程從監聽器獲取對象的鎖。( 這里假設監聽器非鎖,否則線程只有等到監聽器解鎖才能獲取對象鎖)

    2.    線程內存更新所有 的變量,也就是說他將讀取主內存中的變量使自己的變量保證有效。(JVM 會使用一個“臟”標志來最優化過程,使得僅僅具有“臟”標志變量被更新。詳細的情況查詢JAVA規范的17.9)

    3.    代碼塊被執行( 在這個例子中,設置返回值為剛剛從主內存重置的i3 當前的值。)

    4.    任何變量的變更將被寫回到主內存中。但是這個例子中geti3() 沒有什么變化。

    5.    線程釋放對象的鎖給監聽器。

    所以volatile 只能在線程內存和主內存之間同步一個變量的值,而synchronized 則同步在線程內存和主內存之間的所有變量的值,并且通過鎖住和釋放監聽器來實現。顯然,synchronized 在性能上將比volatile 更加有所消耗。

     

    =============關于兩者的區別===================

    1.volatile本質是在告訴jvm當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。 
    2.volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的 
    3.volatile僅能實現變量的修改可見性,不能保證原子性 ;而synchronized則可以保證變量的修改可見性和原子性 
    4.volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。 
    5.volatile標記的變量不會被編譯器優化;synchronized標記的變量可以被編譯器優化

     

    紅字體部分的原因如下:
    線程A修改了變量還沒結束時,另外的線程B可以看到已修改的值,而且可以修改這個變量,而不用等待A釋放鎖,因為Volatile 變量沒上鎖

    posted @ 2012-10-19 13:36 abing 閱讀(312) | 評論 (0)編輯 收藏

    匹配數字和字母組合,數字和字母至少出現一次,只匹配1a,1q1,a1,a1a,1q2q2ws,w1w2e3r4r之類的,不匹配11,aa,a,1,"",這種的。
    package com.abin.lee.servlet.regex;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class MyRegex {
    public static boolean StringResult(String str)throws Exception{
    String regex="^(\\d+[a-z]+[0-9a-z]*)|([a-z]+\\d[0-9a-z]*)$";
    // String regex="^(\\d+[a-z]{1}[0-9a-zA-Z]*)|([a-z]+\\d[0-9a-zA-Z]*)$";
    Pattern pattern=Pattern.compile(regex);
    Matcher matcher=pattern.matcher(str);
    boolean flag=matcher.matches();
    return flag;
    }
    public static void main(String[] args) throws Exception{
    String str="aa1as12ds3232ds2d22";
    boolean result=StringResult(str);
    System.out.println("result="+result);
    }
    }
    posted @ 2012-10-18 23:17 abing 閱讀(1079) | 評論 (1)編輯 收藏

    死鎖     死鎖是這樣一種情形:多個線程同時被阻塞,它們中的一個或者全部都在等待某個資源被釋放。由于線程被無限期地阻塞,因此程序不可能正常終止。     導致死鎖的根源在于不適當地運用“synchronized”關鍵詞來管理線程對特定對象的訪問。“synchronized”關鍵詞的作用是,確保在某個時刻只有一個線程被允許執行特定的代碼塊,因此,被允許執行的線程首先必須擁有對變量或對象的排他性的訪問權。當線程訪問對象時,線程會給對象加鎖,而這個鎖導致其它也想訪問同一對象的線程被阻塞,直至第一個線程釋放它加在對象上的鎖。     由于這個原因,在使用“synchronized”關鍵詞時,很容易出現兩個線程互相等待對方做出某個動作的情形。代碼一是一個導致死鎖的簡單例子。   //代碼一 class Deadlocker {  int field_1;  private Object lock_1 = new int[1];  int field_2;  private Object lock_2 = new int[1];   public void method1(int value) {   “synchronized” (lock_1) {    “synchronized” (lock_2) {     field_1 = 0; field_2 = 0;    }   }  }   public void method2(int value) {   “synchronized” (lock_2) {    “synchronized” (lock_1) {     field_1 = 0; field_2 = 0;    }   }  } }       參考代碼一,考慮下面的過程:     ◆ 一個線程(ThreadA)調用method1()。     ◆ ThreadA在lock_1上同步,但允許被搶先執行。     ◆ 另一個線程(ThreadB)開始執行。     ◆ ThreadB調用method2()。     ◆ ThreadB獲得lock_2,繼續執行,企圖獲得lock_1。但ThreadB不能獲得lock_1,因為ThreadA占有lock_1。     ◆ 現在,ThreadB阻塞,因為它在等待ThreadA釋放lock_1。     ◆ 現在輪到ThreadA繼續執行。ThreadA試圖獲得lock_2,但不能成功,因為lock_2已經被ThreadB占有了。     ◆ ThreadA和ThreadB都被阻塞,程序死鎖。     當然,大多數的死鎖不會這么顯而易見,需要仔細分析代碼才能看出,對于規模較大的多線程程序來說尤其如此。好的線程分析工具,例如JProbe Threadalyzer能夠分析死鎖并指出產生問題的代碼位置。     隱性死鎖     隱性死鎖由于不規范的編程方式引起,但不一定每次測試運行時都會出現程序死鎖的情形。由于這個原因,一些隱性死鎖可能要到應用正式發布之后才會被發現,因此它的危害性比普通死鎖更大。下面介紹兩種導致隱性死鎖的情況:加鎖次序和占有并等待。     加鎖次序     當多個并發的線程分別試圖同時占有兩個鎖時,會出現加鎖次序沖突的情形。如果一個線程占有了另一個線程必需的鎖,就有可能出現死鎖。考慮下面的情形,ThreadA和ThreadB兩個線程分別需要同時擁有lock_1、lock_2兩個鎖,加鎖過程可能如下:     ◆ ThreadA獲得lock_1;     ◆ ThreadA被搶占,VM調度程序轉到ThreadB;     ◆ ThreadB獲得lock_2;     ◆ ThreadB被搶占,VM調度程序轉到ThreadA;     ◆ ThreadA試圖獲得lock_2,但lock_2被ThreadB占有,所以ThreadA阻塞;     ◆ 調度程序轉到ThreadB;     ◆ ThreadB試圖獲得lock_1,但lock_1被ThreadA占有,所以ThreadB阻塞;     ◆ ThreadA和ThreadB死鎖。     必須指出的是,在代碼絲毫不做變動的情況下,有些時候上述死鎖過程不會出現,VM調度程序可能讓其中一個線程同時獲得lock_1和lock_2兩個鎖,即線程獲取兩個鎖的過程沒有被中斷。在這種情形下,常規的死鎖檢測很難確定錯誤所在。     占有并等待     如果一個線程獲得了一個鎖之后還要等待來自另一個線程的通知,可能出現另一種隱性死鎖,考慮代碼二。   //代碼二 public class queue {  static java.lang.Object queueLock_;  Producer producer_;  Consumer consumer_;   public class Producer {   void produce() {    while (!done) {     “synchronized” (queueLock_) {      produceItemAndAddItToQueue();      “synchronized” (consumer_) {       consumer_.notify();      }     }    }   }    public class Consumer {    consume() {     while (!done) {      “synchronized” (queueLock_) {       “synchronized” (consumer_) {        consumer_.wait();       }       removeItemFromQueueAndProcessIt();      }     }    }   }  } }       在代碼二中,Producer向隊列加入一項新的內容后通知Consumer,以便它處理新的內容。問題在于,Consumer可能保持加在隊列上的鎖,阻止Producer訪問隊列,甚至在Consumer等待Producer的通知時也會繼續保持鎖。這樣,由于Producer不能向隊列添加新的內容,而Consumer卻在等待Producer加入新內容的通知,結果就導致了死鎖。     在等待時占有的鎖是一種隱性的死鎖,這是因為事情可能按照比較理想的情況發展—Producer線程不需要被Consumer占據的鎖。盡管如此,除非有絕對可靠的理由肯定Producer線程永遠不需要該鎖,否則這種編程方式仍是不安全的。有時“占有并等待”還可能引發一連串的線程等待,例如,線程A占有線程B需要的鎖并等待,而線程B又占有線程C需要的鎖并等待等。     要改正代碼二的錯誤,只需修改Consumer類,把wait()移出“synchronized”()即可。
    posted @ 2012-10-17 15:48 abing 閱讀(323) | 評論 (0)編輯 收藏

    一.下載JDK
    1.登錄Sun的JDK官方下載網址:http://java.sun.com/javase/downloads/index.jsp
    2.下載jdk-1_5_0_07-linux-i586-rpm.bin文件
     
    二.安裝JDK
    1.增加jdk-1_5_0_07-linux-i586-rpm.bin文件的可執行權限
    #root> chmod 755 jdk-1_5_0_07-linux-i586-rpm.bin
    2.執行jdk-1_5_0_07-linux-i586-rpm.bin
    #root> ./ jdk-1_5_0_07-linux-i586-rpm.bin
    3.安裝PRM包文件
    #root> rpm -ivh jdk-1_5_0_07-linux-i586.rpm
     
    三.配置環境變量PATH,JAVA_HOME,CLASSPATH
    配置環境變量有三種:
    1.修改/etc/profile文件(系統有效)
    (1)#root > vi /etc/profile
    (2)使用VI編輯器在profile文件中添加以下語句:
    JAVA_HOME=/opt/jdk1.5
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.$JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar export JAVA_HOME,PATH,CLASSPATH
    (3)重新登錄
     
    [注意]
    <1>Linux下環境變量使用:分隔路徑,不同于Windows下的;
    <2>Linux使用($+環境變量名)來引用原來變量的值,Windows則是使用%+環境變量名+%.比如$PATH和%PATH%
    <3>CLASSPATH中不能存在空格,如Windows下的C:\Documents and Settings\seagar\jdk1.5將是不合法的路徑名
    <4>CLASSPATH中的當前目錄"."不能忽略
    <5>export把環境變量導出為全局變量
    <6>大小寫嚴格區分
     
    2.修改.bashrc文件(個人用戶有效)
    (1)#root > vi /home/seagar/.bashrc
    (2)使用VI編輯器在.bashrc文件中添加以下語句:
    JAVA_HOME=/opt/jdk1.5
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.$JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
    export JAVA_HOME,PATH,CLASSPAT
    3.直接在shell修改(當前Shell有效)
    export JAVA_HOME=/opt/jdk1.5
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.$JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
     
    四.測試安裝情況
    1.java -version查看版本號
    2.使用VI編輯器編寫一個Java程序
    (1)#root > vi Hello.java
    (2)編寫程序
    public class Hello
    {
         public static void main(String[] args)
         {
              System.out.println("Hello");
         }
    }
    3.編譯:javac Hello.java
    4.執行:java Hello


    五.卸載jdk

     

     

       卸載rpm版的jdk:

       #rpm -qa|grep jdk

       顯示:jdk-1.6.0_10-fcs

       這就說明了你安裝了jdk,下面卸載了它,
       卸載:#rpm -e  --nodeps  jdk-1.6.0_10-fcs 

     

    posted @ 2012-10-17 00:10 abing 閱讀(250) | 評論 (0)編輯 收藏

    fedora使用rpm包怎么安裝到指定文件夾:
    rpm -ivh --prefix=路徑 FILE.rpm
    需要注意的是:“路徑”必須是/home/abin/java這種的,不能為~/java

    fedora使用tar.gz包怎么安裝到指定文件夾:
    tar -zxvf abin.tar.gz -C /home/abin/java
    posted @ 2012-10-17 00:05 abing 閱讀(216) | 評論 (0)編輯 收藏

    http://hbase.apache.org/book/quickstart.html
    posted @ 2012-10-16 16:03 abing 閱讀(128) | 評論 (0)編輯 收藏

    系統
      # uname -a #查看內核/操作系統/CPU信息
      # head -n 1 /etc/issue #查看操作系統版本
      # cat /proc/cpuinfo #查看CPU信息
      # hostname #查看計算機名
      # lspci -tv #列出所有PCI設備
      # lsusb -tv #列出所有USB設備
      # lsmod #列出加載內核模塊
      # env #查看環境變量
      資源
      # free -m #查看內存使用量和交換區使用量
      # df -h #查看各分區使用情況
      # du -sh <目錄名> #查看指定目錄大小
      # grep MemTotal /proc/meminfo #查看內存總量
      # grep MemFree /proc/meminfo #查看空閑內存量
      # uptime #查看系統運行時間、用戶數、負載
      # cat /proc/loadavg #查看系統負載
      磁盤和分區
      # mount | column -t #查看掛接分區狀態
      # fdisk -l #查看所有分區
      # swapon -s #查看所有交換分區
      # hdparm -i /dev/hda #查看磁盤參數(僅適用于IDE設備)
      # dmesg | grep IDE #查看啟動時IDE設備檢測狀況
      網絡
      # config #查看所有網絡接口屬性
      # iptables -L #查看防火墻設置
      # route -n #查看路由表
      # netstat -lntp #查看所有監聽端口
      # netstat -antp #查看所有已經建立連接
      # netstat -s #查看網絡統計信息
      進程
      # ps -ef #查看所有進程
      # top #實時顯示進程狀態
      用戶
      # w #查看活動用戶
      # id <用戶名> #查看指定用戶信息
      # last #查看用戶登錄日志
      # cut -d: -f1 /etc/passwd #查看系統所有用戶
      # cut -d: -f1 /etc/group #查看系統所有組
      # crontab -l #查看當前用戶計劃任務
      服務
      # chkconfig --list #列出所有系統服務
      # chkconfig --list | grep on #列出所有啟動系統服務
      
      # rpm -qa #查看所有安裝軟件Software包 
    posted @ 2012-10-15 23:59 abing 閱讀(171) | 評論 (0)編輯 收藏

    僅列出標題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
    主站蜘蛛池模板: 99精品视频在线观看免费| 黄页视频在线观看免费| 免费无遮挡无码永久视频| 亚洲五月综合缴情在线观看| 日日摸夜夜添夜夜免费视频 | 毛片免费在线播放| 亚洲国产精品成人久久久| 青青青国产在线观看免费网站| 亚洲理论在线观看| 日韩精品福利片午夜免费观着| 亚洲一区欧洲一区| 国产国产人免费人成免费视频| 爱情岛论坛免费视频| 在线A亚洲老鸭窝天堂| 免费国产叼嘿视频大全网站| 久久精品国产亚洲av影院| 一色屋成人免费精品网站| 亚洲国产午夜精品理论片在线播放| 国产一区二区三区在线免费| g0g0人体全免费高清大胆视频| 亚洲国产AV无码专区亚洲AV| 91久久青青草原线免费| 亚洲日韩中文字幕无码一区| 亚洲国产午夜福利在线播放| 免费无码又爽又刺激网站| 亚洲人成人77777网站不卡| 国产又大又粗又硬又长免费| 在线观看片免费人成视频播放| 91亚洲一区二区在线观看不卡| 美女网站免费福利视频| 污网站免费在线观看| 亚洲AV永久青草无码精品| 一个人免费观看在线视频www| 国产成人亚洲午夜电影| 亚洲av无码乱码国产精品 | 国产又长又粗又爽免费视频| 久久久精品视频免费观看 | 特级毛片A级毛片免费播放| 亚洲av鲁丝一区二区三区| 天天摸天天碰成人免费视频| 99久久精品毛片免费播放|