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

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

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

    牛仔褲的夏天

    JAVA是藍(lán)色的- online

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

    2006年3月23日 #

    ??? 貝貝在宜城中心幼兒園的第一個(gè)“六一”國(guó)際兒童節(jié)終于來(lái)到了,這對(duì)于我們?nèi)襾?lái)說(shuō)可是一個(gè)大日子。早上起來(lái),貝貝卻有點(diǎn)擔(dān)心我們不陪他一起參加幼兒園的慶祝活動(dòng),從而流露出一絲焦慮。其實(shí)我們才不會(huì)錯(cuò)過(guò)這個(gè)難得的機(jī)會(huì)呢,更何況爸爸媽媽和貝貝一起準(zhǔn)備的歌舞“小海軍”,也將在今天的慶祝活動(dòng)中一起亮相呢。

    ?????? 早上九點(diǎn),我們準(zhǔn)時(shí)來(lái)到幼兒園。作為小朋友們的樂(lè)園,這里歡歌笑語(yǔ),張燈結(jié)彩,處處洋溢著兒童節(jié)的歡快氣氛,貝貝也很快就融入到節(jié)日的氛圍之中了。

    師和潘老師井然有序的安排下,小一班的慶祝活動(dòng)開(kāi)始了。小朋友們分組表演了兒歌和童謠。輪到貝貝這一組開(kāi)始表演了,我們趕快準(zhǔn)備拍照和攝像,一定要把這精彩的瞬間捕捉記錄下來(lái)。“ 公雞每天早早起,母雞生蛋孵小雞 …” ,小朋友們花朵般幼嫩的歌喉伴隨著可愛(ài)的舞蹈動(dòng)作吸引了在場(chǎng)的每一位家長(zhǎng)。當(dāng)我們還都沉浸在剛才精彩的幼兒歌舞表演時(shí),家長(zhǎng)們的趣味游戲“水果蹲”開(kāi)始了,我和貝貝媽媽也積極參與了這個(gè)游戲。家長(zhǎng)們的表現(xiàn)讓小朋友們?nèi)炭〔恢梗翱┛┛?/span> 咯咯咯”,一串串的笑聲渲染了每一位大人和小朋友。

    貝貝今天的表現(xiàn)很棒,當(dāng)老師說(shuō)請(qǐng)貝貝家庭表演歌舞“小海軍”時(shí),他很快就大大方方地跑到舞臺(tái)中央,聲音響亮,和爸爸一起唱起小海軍這首兒歌,同時(shí)動(dòng)作流暢,和媽媽一起跳著舞蹈,開(kāi)開(kāi)心心地完成了這個(gè)節(jié)目,贏得了大家的一片掌聲。我們一直都很珍惜與貝貝一同參加集體活動(dòng)的機(jī)會(huì),因此心中尤為以這次在幼兒園里和貝貝一起同臺(tái)表演而感到高興。接下來(lái),其他的家庭也都表演了各自精彩的節(jié)目,有講故事、鋼琴獨(dú)奏、雙簧,還有魔術(shù),眾彩紛呈的節(jié)目把這次活動(dòng)的氣氛推向高潮。以至于活動(dòng)落下帷幕時(shí),家長(zhǎng)和小朋友們都還戀戀不舍呢。

    回家后,貝貝蹦蹦跳跳,不時(shí)唱著兒歌,似乎還對(duì)今天的活動(dòng)意猶未盡。“六一”兒童節(jié),我們?nèi)疫^(guò)得開(kāi)心而有意義。通過(guò)這次活動(dòng)增強(qiáng)了貝貝在集體活動(dòng)中的自信心和責(zé)任感,同時(shí)也加強(qiáng)了我們和貝貝之間的互動(dòng)體驗(yàn)。

    posted @ 2006-06-12 14:05 luckyrobbie 閱讀(259) | 評(píng)論 (0)編輯 收藏

    1
    早上,貝貝站在我的摩托車踏板上,我送他去幼兒園。開(kāi)到roundabout的地方時(shí),貝貝說(shuō):爸爸就開(kāi)這個(gè)溫度吧。 我問(wèn):什么? 貝貝說(shuō):是速度,不要再加速度了。

    2
    貝貝喜歡打電腦游戲,前幾天特別喜歡玩一個(gè)哆啦A夢(mèng)釣魚(yú)的flash游戲,如果不小心會(huì)釣到鯊魚(yú),而且我們不讓他多玩。一天貝貝睡覺(jué)做夢(mèng)而大哭,叫醒后問(wèn)他做到什么夢(mèng)了,他說(shuō):爸爸不讓我玩釣魚(yú),而且釣到了鯊魚(yú)把小貓吃掉了。

    3
    晚上吃櫻桃,貝貝吃的很開(kāi)心,還挑出紅的給我吃。我對(duì)貝貝說(shuō):挑1粒給媽媽吃吃,去拍拍她的馬屁。于是貝貝選了一個(gè)紅的櫻桃,跑到媽媽邊上說(shuō):媽媽,喏,吃個(gè)馬屁。
    posted @ 2006-04-23 11:02 luckyrobbie 閱讀(260) | 評(píng)論 (0)編輯 收藏

    1. 域模型也稱為設(shè)計(jì)模型,由以下內(nèi)容組成:
    ??? 具有狀態(tài)和行為的域?qū)ο?br />??? 域?qū)ο笾g的關(guān)系

    2. 域?qū)ο?Domain Object) - 對(duì)真實(shí)世界的實(shí)體的軟件抽象,也叫業(yè)務(wù)對(duì)象(Business Object),分為:
    ????實(shí)體域?qū)ο?實(shí)體EJB,POJO),為每個(gè)實(shí)體域?qū)ο蠓峙銸ID(Object Identifier)
    ????過(guò)程域?qū)ο?Session Bean, Message Driven Bean, Java Bean)
    ??? 事件域?qū)ο?事件觸發(fā))
    ? 三種域?qū)ο笪挥跇I(yè)務(wù)邏輯層

    3. 域?qū)ο笾g的關(guān)系
    ??? 關(guān)聯(lián)(Association):one to one, one to many, many to many, 單向, 雙向
    ??? 依賴(Dependency):類與類之間的訪問(wèn)關(guān)系,如果A訪問(wèn)B的屬性或者方法,或者A負(fù)責(zé)實(shí)例化B,則A依賴B。過(guò)程域?qū)ο笸蕾噷?shí)體域?qū)ο蟆?br />????聚集(Aggregation):整體與部分之間的關(guān)系,實(shí)體域?qū)ο笾g常見(jiàn)。聚集關(guān)系和關(guān)聯(lián)關(guān)系有相同的形式,區(qū)別是:對(duì)于聚集關(guān)系,部分類的對(duì)象不能單獨(dú)存在,它的生命周期依賴于整體類的對(duì)象的生命周期;對(duì)于關(guān)聯(lián)關(guān)系的2個(gè)類,可以分別單獨(dú)存在。
    ????一般化(Generalization)

    ?????
    ???

    posted @ 2006-04-18 15:53 luckyrobbie 閱讀(233) | 評(píng)論 (0)編輯 收藏

    這2天用hsqldb做hibernate測(cè)試,做insert時(shí),不論用hibernate的方法還是用jdbc的方法,顯示的一切信息都是成功的,可是后來(lái)打開(kāi)hsqldb的manager,發(fā)現(xiàn)table里面沒(méi)有記錄insert,郁悶之極,覺(jué)得應(yīng)該是hsqldb的配置問(wèn)題

    于是打開(kāi)那個(gè)script文件,最后找到這句配置:SET WRITE_DELAY 20
    改為SET WRITE_DELAY 0后,一切正常了

    posted @ 2006-04-06 22:32 luckyrobbie 閱讀(340) | 評(píng)論 (0)編輯 收藏

    http://msdn.microsoft.com/library/CHS/jscript7/html/jsreconIntroductionToRegularExpressions.asp?frame=true
    posted @ 2006-03-30 11:05 luckyrobbie 閱讀(326) | 評(píng)論 (0)編輯 收藏

    我對(duì)decorate模式的理解:
    1-首先要有一個(gè)Interface,提供一個(gè)通用的方法;
    2-其次有n多個(gè)class來(lái)實(shí)現(xiàn)這個(gè)接口中的方法,這些實(shí)現(xiàn)方法在功能上應(yīng)該是并列的,但不是必須的,從而可以根據(jù)需要decorate那個(gè)需要被修飾的初始對(duì)象。
    3-最后這些class都有一個(gè)帶有Interface作為參數(shù)的構(gòu)造方法和一個(gè)Interface的屬性,這樣在構(gòu)造的時(shí)候就可以取得那個(gè)需要修飾的對(duì)象的實(shí)例,然后在實(shí)現(xiàn)Interface的方法里面,首先實(shí)現(xiàn)修飾對(duì)象實(shí)例的修飾方法,然后再進(jìn)行自己的decorate方法。

    根據(jù)這個(gè)想法來(lái)畫(huà)一張畫(huà):

    package ?test;

    public ? interface ?Painting? {
    ????
    public ? void ?paint();
    }


    class ?SunPainting? implements ?Painting? {
    ????Painting?painting?
    = ? null ;

    ????
    public ?SunPainting()? {
    ????}


    ????
    public ?SunPainting(Painting?painting)? {
    ????????
    this .painting? = ?painting;
    ????}


    ????
    public ? void ?paint()? {
    ????????
    if ?(painting? != ? null )? {
    ????????????painting.paint();
    ????????}

    ????????System.out.println(
    " 畫(huà)了一個(gè)太陽(yáng) " );
    ????}

    }


    class ?CloudPainting? implements ?Painting? {
    ????Painting?painting?
    = ? null ;

    ????
    public ?CloudPainting()? {
    ????}


    ????
    public ?CloudPainting(Painting?painting)? {
    ????????
    this .painting? = ?painting;
    ????}


    ????
    public ? void ?paint()? {
    ????????
    if ?(painting? != ? null )? {
    ????????????painting.paint();
    ????????}

    ????????System.out.println(
    " 畫(huà)了一朵白云 " );
    ????}

    }


    class ?LawnPainting? implements ?Painting? {
    ????Painting?painting?
    = ? null ;

    ????
    public ?LawnPainting()? {
    ????}


    ????
    public ?LawnPainting(Painting?painting)? {
    ????????
    this .painting? = ?painting;
    ????}


    ????
    public ? void ?paint()? {
    ????????
    if ?(painting? != ? null )? {
    ????????????painting.paint();
    ????????}

    ????????System.out.println(
    " 畫(huà)了一片草地 " );
    ????}

    }

    再寫(xiě)段測(cè)試畫(huà)畫(huà)的代碼:

    package ?test;

    public ? class ?TestPainting? {
    ????
    public ? static ? void ?main(String[]?args) {
    ????????
    new ?SunPainting( new ?CloudPainting( new ?LawnPainting())).paint();
    ????}

    }

    測(cè)試結(jié)果:

    畫(huà)了一片草地
    畫(huà)了一朵白云
    畫(huà)了一個(gè)太陽(yáng)


    ?最后有個(gè)問(wèn)題:為什么不直接定義一個(gè)畫(huà)畫(huà)的類,然后把這些該怎么畫(huà)的事情分別通過(guò)方法來(lái)實(shí)現(xiàn)呢? 那么什么情況下使用decorate模式更為合適呢?

    posted @ 2006-03-27 16:56 luckyrobbie 閱讀(564) | 評(píng)論 (0)編輯 收藏

    你覺(jué)得自己是一個(gè)Java專家嗎?是否肯定自己已經(jīng)全面掌握了Java的異常處理機(jī)制?在下面這段代碼中,你能夠迅速找出異常處理的六個(gè)問(wèn)題嗎?

    ??????? 1 OutputStreamWriter out = ...
      2 java.sql.Connection conn = ...
      3 try { // ⑸
      4 Statement stat = conn.createStatement();
      5 ResultSet rs = stat.executeQuery(
      6 "select uid, name from user");
      7 while (rs.next())
      8 {
      9 out.println("ID:" + rs.getString("uid") // ⑹
      10 ",姓名:" + rs.getString("name"));
      11 }
      12 conn.close(); // ⑶
      13 out.close();
      14 }
      15 catch(Exception ex) // ⑵
      16 {
      17 ex.printStackTrace(); // ⑴,⑷
      18 }

    作為一個(gè)Java程序員,你至少應(yīng)該能夠找出兩個(gè)問(wèn)題。但是,如果你不能找出全部六個(gè)問(wèn)題,請(qǐng)繼續(xù)閱讀本文。

    本文討論的不是Java異常處理的一般性原則,因?yàn)檫@些原則已經(jīng)被大多數(shù)人熟知。我們要做的是分析各種可稱為“反例”(anti-pattern)的違背優(yōu)秀編碼規(guī)范的常見(jiàn)壞習(xí)慣,幫助讀者熟悉這些典型的反面例子,從而能夠在實(shí)際工作中敏銳地察覺(jué)和避免這些問(wèn)題。

    反例之一:丟棄異常

    代碼:15行-18行。

    這段代碼捕獲了異常卻不作任何處理,可以算得上Java編程中的殺手。從問(wèn)題出現(xiàn)的頻繁程度和禍害程度來(lái)看,它也許可以和C/C++程序的一個(gè)惡名遠(yuǎn)播的問(wèn)題相提并論??不檢查緩沖區(qū)是否已滿。

    如果你看到了這種丟棄(而不是拋出)異常的情況,可以百分之九十九地肯定代碼存在問(wèn)題(在極少數(shù)情況下,這段代碼有存在的理由,但最好加上完整的注釋,以免引起別人誤解)。

    這段代碼的錯(cuò)誤在于,異常(幾乎)總是意味著某些事情不對(duì)勁了,或者說(shuō)至少發(fā)生了某些不尋常的事情,我們不應(yīng)該對(duì)程序發(fā)出的求救信號(hào)保持沉默和無(wú)動(dòng)于衷。調(diào)用一下printStackTrace算不上“處理異常”。

    不錯(cuò),調(diào)用printStackTrace對(duì)調(diào)試程序有幫助,但程序調(diào)試階段結(jié)束之后,printStackTrace就不應(yīng)再在異常處理模塊中擔(dān)負(fù)主要責(zé)任了。

    丟棄異常的情形非常普遍。打開(kāi)JDK的ThreadDeath類的文檔,可以看到下面這段說(shuō)明:“特別地,雖然出現(xiàn)ThreadDeath是一種‘正常的情形’,但ThreadDeath類是Error而不是Exception的子類,因?yàn)樵S多應(yīng)用會(huì)捕獲所有的Exception然后丟棄它不再理睬。

    ”這段話的意思是,雖然ThreadDeath代表的是一種普通的問(wèn)題,但鑒于許多應(yīng)用會(huì)試圖捕獲所有異常然后不予以適當(dāng)?shù)奶幚恚訨DK把ThreadDeath定義成了Error的子類,因?yàn)镋rror類代表的是一般的應(yīng)用不應(yīng)該去捕獲的嚴(yán)重問(wèn)題。可見(jiàn),丟棄異常這一壞習(xí)慣是如此常見(jiàn),它甚至已經(jīng)影響到了Java本身的設(shè)計(jì)。

    那么,應(yīng)該怎樣改正呢?主要有四個(gè)選擇:

    1、處理異常。針對(duì)該異常采取一些行動(dòng),例如修正問(wèn)題、提醒某個(gè)人或進(jìn)行其他一些處理,要根據(jù)具體的情形確定應(yīng)該采取的動(dòng)作。再次說(shuō)明,調(diào)用printStackTrace算不上已經(jīng)“處理好了異常”。

    2、重新拋出異常。處理異常的代碼在分析異常之后,認(rèn)為自己不能處理它,重新拋出異常也不失為一種選擇。

    3、把該異常轉(zhuǎn)換成另一種異常。大多數(shù)情況下,這是指把一個(gè)低級(jí)的異常轉(zhuǎn)換成應(yīng)用級(jí)的異常(其含義更容易被用戶了解的異常)。

    4、不要捕獲異常。

    結(jié)論一:既然捕獲了異常,就要對(duì)它進(jìn)行適當(dāng)?shù)奶幚怼2灰东@異常之后又把它丟棄,不予理睬。

    反例之二:不指定具體的異常

    代碼:15行。

    許多時(shí)候人們會(huì)被這樣一種“美妙的”想法吸引:用一個(gè)catch語(yǔ)句捕獲所有的異常。最常見(jiàn)的情形就是使用catch(Exception

    ex)語(yǔ)句。但實(shí)際上,在絕大多數(shù)情況下,這種做法不值得提倡。為什么呢?

    要理解其原因,我們必須回顧一下catch語(yǔ)句的用途。catch語(yǔ)句表示我們預(yù)期會(huì)出現(xiàn)某種異常,而且希望能夠處理該異常。異常類的作用就是告訴Java編譯器我們想要處理的是哪一種異常。

    由于絕大多數(shù)異常都直接或間接從java.lang.Exception派生,catch(Exception ex)就相當(dāng)于說(shuō)我們想要處理幾乎所有的異常。

    再來(lái)看看前面的代碼例子。我們真正想要捕獲的異常是什么呢?最明顯的一個(gè)是SQLException,這是JDBC操作中常見(jiàn)的異常。另一個(gè)可能的異常是IOException,因?yàn)樗僮鱋utputStreamWriter。

    顯然,在同一個(gè)catch塊中處理這兩種截然不同的異常是不合適的。如果用兩個(gè)catch塊分別捕獲SQLException和IOException就要好多了。這就是說(shuō),catch語(yǔ)句應(yīng)當(dāng)盡量指定具體的異常類型,而不應(yīng)該指定涵蓋范圍太廣的Exception類。

    另一方面,除了這兩個(gè)特定的異常,還有其他許多異常也可能出現(xiàn)。例如,如果由于某種原因,executeQuery返回了null,該怎么辦?答案是讓它們繼續(xù)拋出,即不必捕獲也不必處理。實(shí)際上,我們不能也不應(yīng)該去捕獲可能出現(xiàn)的所有異常,程序的其他地方還有捕獲異常的機(jī)會(huì)直至最后由JVM處理。

    結(jié)論二:在catch語(yǔ)句中盡可能指定具體的異常類型,必要時(shí)使用多個(gè)catch。不要試圖處理所有可能出現(xiàn)的異常。

    反例之三:占用資源不釋放

    代碼:3行-14行。

    異常改變了程序正常的執(zhí)行流程。這個(gè)道理雖然簡(jiǎn)單,卻常常被人們忽視。如果程序用到了文件、Socket、JDBC連接之類的資源,即使遇到了異常,也要正確釋放占用的資源。為此,Java提供了一個(gè)簡(jiǎn)化這類操作的關(guān)鍵詞finally。

    finally是樣好東西:不管是否出現(xiàn)了異常,F(xiàn)inally保證在try/catch/finally塊結(jié)束之前,執(zhí)行清理任務(wù)的代碼總是有機(jī)會(huì)執(zhí)行。遺憾的是有些人卻不習(xí)慣使用finally。

    當(dāng)然,編寫(xiě)finally塊應(yīng)當(dāng)多加小心,特別是要注意在finally塊之內(nèi)拋出的異常??這是執(zhí)行清理任務(wù)的最后機(jī)會(huì),盡量不要再有難以處理的錯(cuò)誤。

    結(jié)論三:保證所有資源都被正確釋放。充分運(yùn)用finally關(guān)鍵詞。

    反例之四:不說(shuō)明異常的詳細(xì)信息

    代碼:3行-18行。

    仔細(xì)觀察這段代碼:如果循環(huán)內(nèi)部出現(xiàn)了異常,會(huì)發(fā)生什么事情?我們可以得到足夠的信息判斷循環(huán)內(nèi)部出錯(cuò)的原因嗎?不能。我們只能知道當(dāng)前正在處理的類發(fā)生了某種錯(cuò)誤,但卻不能獲得任何信息判斷導(dǎo)致當(dāng)前錯(cuò)誤的原因。

    printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程,但只提供了一些最基本的信息,未能說(shuō)明實(shí)際導(dǎo)致錯(cuò)誤的原因,同時(shí)也不易解讀。

    因此,在出現(xiàn)異常時(shí),最好能夠提供一些文字信息,例如當(dāng)前正在執(zhí)行的類、方法和其他狀態(tài)信息,包括以一種更適合閱讀的方式整理和組織printStackTrace提供的信息。

    結(jié)論四:在異常處理模塊中提供適量的錯(cuò)誤原因信息,組織錯(cuò)誤信息使其易于理解和閱讀。

    反例之五:過(guò)于龐大的try塊

    代碼:3行-14行。

    經(jīng)常可以看到有人把大量的代碼放入單個(gè)try塊,實(shí)際上這不是好習(xí)慣。這種現(xiàn)象之所以常見(jiàn),原因就在于有些人圖省事,不愿花時(shí)間分析一大塊代碼中哪幾行代碼會(huì)拋出異常、異常的具體類型是什么。把大量的語(yǔ)句裝入單個(gè)巨大的try塊就象是出門(mén)旅游時(shí)把所有日常用品塞入一個(gè)大箱子,雖然東西是帶上了,但要找出來(lái)可不容易。

    一些新手常常把大量的代碼放入單個(gè)try塊,然后再在catch語(yǔ)句中聲明Exception,而不是分離各個(gè)可能出現(xiàn)異常的段落并分別捕獲其異常。這種做法為分析程序拋出異常的原因帶來(lái)了困難,因?yàn)橐淮蠖未a中有太多的地方可能拋出Exception。

    結(jié)論五:盡量減小try塊的體積。

    反例之六:輸出數(shù)據(jù)不完整

    代碼:7行-11行。

    不完整的數(shù)據(jù)是Java程序的隱形殺手。仔細(xì)觀察這段代碼,考慮一下如果循環(huán)的中間拋出了異常,會(huì)發(fā)生什么事情。循環(huán)的執(zhí)行當(dāng)然是要被打斷的,其次,catch塊會(huì)執(zhí)行??就這些,再也沒(méi)有其他動(dòng)作了。

    已經(jīng)輸出的數(shù)據(jù)怎么辦?使用這些數(shù)據(jù)的人或設(shè)備將收到一份不完整的(因而也是錯(cuò)誤的)數(shù)據(jù),卻得不到任何有關(guān)這份數(shù)據(jù)是否完整的提示。對(duì)于有些系統(tǒng)來(lái)說(shuō),數(shù)據(jù)不完整可能比系統(tǒng)停止運(yùn)行帶來(lái)更大的損失。

    較為理想的處置辦法是向輸出設(shè)備寫(xiě)一些信息,聲明數(shù)據(jù)的不完整性;另一種可能有效的辦法是,先緩沖要輸出的數(shù)據(jù),準(zhǔn)備好全部數(shù)據(jù)之后再一次性輸出。

    結(jié)論六:全面考慮可能出現(xiàn)的異常以及這些異常對(duì)執(zhí)行流程的影響。

    改寫(xiě)后的代碼

    根據(jù)上面的討論,下面給出改寫(xiě)后的代碼。也許有人會(huì)說(shuō)它稍微有點(diǎn)?嗦,但是它有了比較完備的異常處理機(jī)制。


    OutputStreamWriter out = ...
      java.sql.Connection conn = ...
      try {
       Statement stat = conn.createStatement();
       ResultSet rs = stat.executeQuery("select uid, name from user");
       while (rs.next()){
        out.println("ID:" + rs.getString("uid") + ",姓名: "+ rs.getString("name"));
       }
      }
      catch(SQLException sqlex)
      {
       out.println("警告:數(shù)據(jù)不完整");
       throw new ApplicationException("讀取數(shù)據(jù)時(shí)出現(xiàn)SQL錯(cuò)誤", sqlex);
      }
      catch(IOException ioex)
      {
       throw new ApplicationException("寫(xiě)入數(shù)據(jù)時(shí)出現(xiàn)IO錯(cuò)誤", ioex);
      }
      finally
      {
       if (conn != null) {
        try {
         conn.close();
        }
        catch(SQLException sqlex2)
        {
         System.err(this.getClass().getName() + ".mymethod - 不能關(guān)閉數(shù)據(jù)庫(kù)連接:" + sqlex2.toString());
        }
       }
       if (out != null){
        try {
         out.close();
        }
        catch(IOException ioex2)
        {
         System.err(this.getClass().getName() + ".mymethod - 不能關(guān)閉輸出文件" + ioex2.toString());
        }
       }
      }




    本文的結(jié)論不是放之四海皆準(zhǔn)的教條,有時(shí)常識(shí)和經(jīng)驗(yàn)才是最好的老師。如果你對(duì)自己的做法沒(méi)有百分之百的信心,務(wù)必加上詳細(xì)、全面的注釋。

    一方面,不要笑話這些錯(cuò)誤,不妨問(wèn)問(wèn)你自己是否真地徹底擺脫了這些壞習(xí)慣。即使最有經(jīng)驗(yàn)的程序員偶爾也會(huì)誤入歧途,原因很簡(jiǎn)單,因?yàn)樗鼈兇_確實(shí)實(shí)帶來(lái)了“方便”。所有這些反例都可以看作Java編程世界的惡魔,它們美麗動(dòng)人,無(wú)孔不入,時(shí)刻誘惑著你。也許有人會(huì)認(rèn)為這些都屬于雞皮蒜毛的小事,不足掛齒,但請(qǐng)記住:勿以惡小而為之,勿以善小而不為。
    posted @ 2006-03-27 10:17 luckyrobbie 閱讀(275) | 評(píng)論 (0)編輯 收藏

    JSP彩色驗(yàn)證碼

    xiaohanne 發(fā)表于2004-06-01 作者:xiaohanne 評(píng)價(jià):13/6 評(píng)論數(shù):5 點(diǎn)擊數(shù):5229 [ 收藏 ]
    摘要:



    本文Matrix永久鏡像:
    http://www.matrix.org.cn/resource/article/0/910.html
    說(shuō)明:本文可能由Matrix原創(chuàng),也可能由Matrix的會(huì)員整理,或者由
    Matrix的Crawler在全球知名Java或者其他技術(shù)相關(guān)站點(diǎn)抓取并永久
    保留鏡像,Matrix會(huì)保留所有原來(lái)的出處URL,并在顯著地方作出說(shuō)明,
    如果你發(fā)覺(jué)出處URL有誤,請(qǐng)聯(lián)系Matrix改正.
    生成有4個(gè)隨機(jī)數(shù)字和雜亂背景的圖片,數(shù)字和背景顏色會(huì)改變,服務(wù)器端刷新(用history.go(-1)也會(huì)變)
    原型參考ALIBABA??
    http://china.alibaba.com/member/showimage

    ------------產(chǎn)生驗(yàn)證碼圖片的文件-----image.jsp-------------------------------------------

    <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
    <%!
    Color getRandColor(int fc,int bc){//給定范圍獲得隨機(jī)顏色
    ????????Random random = new Random();
    ????????if(fc>255) fc=255;
    ????????if(bc>255) bc=255;
    ????????int r=fc+random.nextInt(bc-fc);
    ????????int g=fc+random.nextInt(bc-fc);
    ????????int b=fc+random.nextInt(bc-fc);
    ????????return new Color(r,g,b);
    ????????}
    %>
    <%
    //設(shè)置頁(yè)面不緩存
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);

    // 在內(nèi)存中創(chuàng)建圖象
    int width=60, height=20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    // 獲取圖形上下文
    Graphics g = image.getGraphics();

    //生成隨機(jī)類
    Random random = new Random();

    // 設(shè)定背景色
    g.setColor(getRandColor(200,250));
    g.fillRect(0, 0, width, height);

    //設(shè)定字體
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));

    //畫(huà)邊框
    //g.setColor(new Color());
    //g.drawRect(0,0,width-1,height-1);


    // 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
    g.setColor(getRandColor(160,200));
    for (int i=0;i<155;i++)
    {
    ????????int x = random.nextInt(width);
    ????????int y = random.nextInt(height);
    ????????int xl = random.nextInt(12);
    ????????int yl = random.nextInt(12);
    ????????g.drawLine(x,y,x+xl,y+yl);
    }

    // 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字)
    String sRand="";
    for (int i=0;i<4;i++){
    ????String rand=String.valueOf(random.nextInt(10));
    ????sRand+=rand;
    ????// 將認(rèn)證碼顯示到圖象中
    ????g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調(diào)用函數(shù)出來(lái)的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成
    ????g.drawString(rand,13*i+6,16);
    }

    // 將認(rèn)證碼存入SESSION
    session.setAttribute("rand",sRand);


    // 圖象生效
    g.dispose();

    // 輸出圖象到頁(yè)面
    ImageIO.write(image, "JPEG", response.getOutputStream());


    %>

    ---------------使用驗(yàn)證碼圖片的文件---------a.jsp------------------------------------

    <%@ page contentType="text/html;charset=gb2312" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>認(rèn)證碼輸入頁(yè)面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">
    </head>
    <body>
    <form method=post action="check.jsp">
    <table>
    <tr>
    <td align=left>系統(tǒng)產(chǎn)生的認(rèn)證碼:</td>
    <td><img border=0 src="image.jsp"></td>
    </tr>
    <tr>
    <td align=left>輸入上面的認(rèn)證碼:</td>
    <td><input type=text name=rand maxlength=4 value=""></td>
    </tr>
    <tr>
    <td colspan=2 align=center><input type=submit value="提交檢測(cè)"></td>
    </tr>
    </form>
    </body>
    </html>

    -----------------驗(yàn)證的頁(yè)面----------check.jsp

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <html>
    <head>
    <title>認(rèn)證碼驗(yàn)證頁(yè)面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">
    </head>

    <body>
    <%
    String rand = (String)session.getAttribute("rand");
    String input = request.getParameter("rand");
    %>
    系統(tǒng)產(chǎn)生的認(rèn)證碼為: <%= rand %><br>
    您輸入的認(rèn)證碼為: <%= input %><br>
    <br>
    <%
    ??if (rand.equals(input)) {
    %>
    <font color=green>輸入相同,認(rèn)證成功!</font>
    <%
    ??} else {
    %>
    <font color=red>輸入不同,認(rèn)證失敗!</font>
    <%
    ??}
    %>
    </body>
    </html>
    posted @ 2006-03-27 10:13 luckyrobbie 閱讀(273) | 評(píng)論 (0)編輯 收藏

    自己的build.xml?
    <?xml version="1.0" encoding="gb2312"?>
    <project name="app" default="build" basedir=".">
    ?<property name="app.name" value="hello-ant"/>
    ??? ?<property name="app.jar" value="${app.name}.jar"/>
    ??? ?<property name="app.copyright" value=" Copyright (c) 2005 The Robbie's Software Foundation.? All rights reserved."/>

    ?<property name="src.dir" location="src"/>
    ?<property name="build.dir" location="build"/>
    ?<property name="build.docs" value="${build.dir}/docs"/>
    ?<property name="build.docs.api" value="${build.docs}/api"/>
    ?<property name="dist.dir" location="dist"/>
    ?<property name="lib.dir" location="lib"/>
    ?<property environment="env"/> <!--取系統(tǒng)環(huán)境變量-->
    ?
    ?<path id="myclasspath">
    ??<fileset dir="${lib.dir}">
    ???<include name="**/*.jar"/>
    ??</fileset>
    ??<fileset dir="${env.STRUTS_HOME}">
    ???<include name="lib/*.jar"/>
    ??</fileset>
    <!--
    pathelement只能添加單個(gè)的jar文件, 沒(méi)有fileset方便
    ??<pathelement path="${env.STRUTS_HOME}/lib/struts.jar"/>
    -->??
    ?</path>
    ?
    ?<target name="init" depends="clean">
    ??<echo message="初始化..."/>
    ??<mkdir dir="${build.dir}"/>
    ?</target>
    ?
    ?<target name="build" depends="init">
    ??<echo message="編譯中..."/>
    ??<javac srcdir="${src.dir}" destdir="${build.dir}" verbose="true">
    ???<classpath refid="myclasspath"/>
    ?
    ??<compilerarg value="-Xlint:all"/> <!--網(wǎng)上找了半天才找到的, 用于添加javac的編譯參數(shù)-->
    ??</javac>
    ?</target>
    ?
    ?<target name="clean">
    ??<echo message="清理中..."/>
    ??<delete dir="${build.dir}"/>
    ??<delete dir="${dist.dir}"/>
    ?</target>
    ?
    ?<target name="dist" depends="build">
    ??<echo message="制作jar..."/>
    ??<tstamp/>
    ??<mkdir dir="${dist.dir}"/>
    ??<jar destfile="${dist.dir}/app-${DSTAMP}${TSTAMP}.jar" basedir="${build.dir}"/>??
    ?</target>
    ?
    ?<target name="javadocs" depends="dist">
    ??<echo message="制作api手冊(cè)..."/>
    ??<mkdir dir="${build.docs.api}"/>
    ??????? ?<javadoc packagenames="tax.*"
    ??????????????? ?? sourcepath="${src.dir}"
    ?????????????????? defaultexcludes="yes"
    ???????????????? ? destdir="${build.docs.api}"
    ???????????????? ? author="true"
    ???????????????? ? version="true"
    ???????????????? ? use="true"
    ???????????????? ? windowtitle="Docs API">
    ???????????? ??<doctitle><![CDATA[<h1>tax struts ant API Docs</h1>]]></doctitle>
    ???????????? ??<bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
    ??????? </javadoc>
    ??? ?</target>
    </project>

    ?
    ?
    ?
    ?
    ?
    ?
    ?
    ?
    ?
    ?

    ?別人的build.xml
    ?
    <?xml version="1.0"? encoding="GB2312" ?>
    <!--
    ??? =======================================================================
    ????? hello-ant 項(xiàng)目 ,學(xué)習(xí)ant工具的第2個(gè)build file.
    ????? 參照ant的jakarta-ant-1.6alpha的build.xml
    ????? Copyright (c) 2002 The Neusoft Software Foundation.? All rights
    ????? reserved.
    ??? =======================================================================
    -->
    <project default="dist" basedir=".">
    <!--
    ??? ===================================================================
    ????? 定義屬性(property tasks)
    ????? 最好把用到的路徑呀,名稱呀都在這里定義成全局變量
    ????? 例:定義
    ????????? <property name="a" value="hello"/>
    ????? 以后就可以這樣用它:
    ????????? <property name="b" value="${a}/b"/>
    ????? 現(xiàn)在:b=="hello/b"
    ??? ===================================================================
    -->
    ??? <!--主要的系統(tǒng)環(huán)境屬性-->
    ??? <property environment="env"/><!--取window,unix...的環(huán)境變量-->
    ??? <property name="java.home" value="${env.JAVA_HOME}"/>
    ??? <property name="ant.home"? value="${env.ANT_HOME}"/>
    ??? <!--主要的app環(huán)境屬性-->
    ??? <property name="app.name"????? value="hello-ant"/>
    ??? <property name="app.jar"?????? value="${app.name}.jar"/>
    ??? <property name="app.copyright" value=" Copyright (c) 2002 The Neusoft Software Foundation.? All rights reserved."/>

    ??? <!--app中src的屬性-->
    ??? <property name="src.dir"??? value="src" />
    ??? <property name="src.main"?? value="${src.dir}/main"/>
    ??? <property name="src.script" value="${src.dir}/script"/>
    ??? <!--app用到的lib-->
    ??? <property name="lib.dir" value="lib"/>
    ??? <!--app的build目錄中-->
    ??? <property name="build.dir"????? value="build" />
    ??? <property name="build.classes"? value="${build.dir}/classes"/>
    ??? <property name="build.docs"???? value="${build.dir}/docs"/>
    ??? <property name="build.docs.api" value="${build.docs}/api"/>
    ??? <property name="build.lib"????? value="${build.dir}/lib"/>
    ??? <!--app的dist (distribution) 目錄中-->
    ??? <property name="dist.dir"????? value="dist"/>
    ??? <property name="dist.bin"????? value="${dist.dir}/bin"/>
    ??? <property name="dist.docs"???? value="${dist.dir}/docs"/>
    ??? <property name="dist.lib"????? value="${dist.dir}/lib"/>
    ??? <!--app的docs目錄中-->
    ??? <property name="docs.dir"????? value="docs"/>
    ??? <!--
    ??? 定義一組路徑以后可以通過(guò)id重用這組路徑 ,例:
    ??? <javac srcdir="src/main" destdir="build/classes">
    ??????????? <classpath refid="classpath"/>
    ??? </javac>
    ??? -->
    ??? <path id="classpath">
    ??????? <!--本項(xiàng)目只有一個(gè)java,用不上classpath,這里只是做個(gè)例子-->
    ??????? <pathelement location="${build.classes}"/>
    ??????? <pathelement path="${java.home}/lib/tools.jar"/>
    ??? </path>
    <!--
    ??? ===================================================================
    ????? init 準(zhǔn)備目錄(File Tasks)
    ????? 主要的目錄結(jié)構(gòu)通常是不會(huì)變的,一起生成他們
    ??? ===================================================================
    -->
    ??? <target name="init">
    ??????? <!--清除以前目錄-->
    ??????? <delete dir="${build.dir}" failonerror="false" />
    ??????? <delete dir="${dist.dir}"? failonerror="false"/>
    ??????? <!--準(zhǔn)備目錄-->
    ??????? <mkdir dir="${build.dir}"/>
    ??????? <mkdir dir="${build.classes}"/>
    ??????? <mkdir dir="${build.docs}"/>
    ??????? <mkdir dir="${build.docs.api}"/>
    ??????? <mkdir dir="${build.lib}"/>
    ??????? <mkdir dir="${dist.dir}"/>
    ??????? <mkdir dir="${dist.bin}"/>
    ??????? <mkdir dir="${dist.lib}"/>
    ??? </target>
    <!--
    ??? ===================================================================
    ????? Build the code (Compile Tasks,File Tasks)
    ??? ===================================================================
    -->
    ??? <target name="build" depends="init">
    ??????? <!--編譯-->
    ??????? <javac srcdir="${src.main}" destdir="${build.classes}">
    ??????????? <classpath refid="classpath"/>
    ??????? </javac>
    ??? </target>
    <!--
    ??? ===================================================================
    ????? 打包文檔(Archive Tasks)
    ????? Create the project jars: xxx1.jar and xxx2.jar
    ??? ===================================================================
    -->
    ?? <target name="jars" depends="build">
    ??????? <jar basedir="${build.classes}" jarfile="${build.lib}/${app.jar}"/>
    ??? </target>
    <!--
    ???? ===================================================================
    ?????? Creates the API documentation
    ???? ===================================================================
    -->
    ??? <target name="javadocs"
    ??????????? depends="jars"
    ??????????? description="--> creates the API documentation">
    ??????? <!--copy docs 手冊(cè)... -->
    ??????? <copy todir="${build.docs}">
    ??????????? <fileset dir="${docs.dir}"/>
    ??????? </copy>
    ??????? <javadoc packagenames="hello.ant.*"
    ???????????????? sourcepath="${src.main}"
    ???????????????? defaultexcludes="yes"
    ???????????????? destdir="${build.docs.api}"
    ???????????????? author="true"
    ???????????????? version="true"
    ???????????????? use="true"
    ???????????????? windowtitle="Docs API">
    ???????????? <doctitle><![CDATA[<h1>hello ant Docs API</h1>]]></doctitle>
    ???????????? <bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
    ???????????? <tag name="todo" scope="all" description="To do:" />
    ???????? </javadoc>
    ??? </target>
    <!--
    ???? ===================================================================
    ?????? Create the distribution that can run (Archive Tasks)
    ?????? 主要是從各目錄中把該copy的copy上
    ???? ===================================================================
    -->
    ?? <target name="dist" depends="javadocs">
    ??????? <!--copy bin 執(zhí)行文件 -->
    ??????? <copy todir="${dist.bin}">
    ??????????? <fileset dir="${src.script}/"/>
    ??????? </copy>
    ??????? <copy todir="${dist.docs}">
    ??????????? <fileset dir="${build.docs}/"/>
    ??????? </copy>
    ??????? <!-- copy lib 文件 -->
    ??????? <copy todir="${dist.lib}">
    ??????????? <fileset dir="${build.lib}/"/>
    ??????? </copy>
    ??? </target>
    <!--
    ???? ===================================================================
    ????? Cleans everything(File Tasks)
    ????? 例如可以刪除build中的文件,留給你發(fā)揮吧
    ???? ===================================================================
    -->
    </project>
    posted @ 2006-03-27 10:07 luckyrobbie 閱讀(457) | 評(píng)論 (0)編輯 收藏

    Action中的代碼:
    ActionMessages actionMessages=new ActionMessages();
    actionMessages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("......"));
    saveMessages(request, actionMessages);
    ?
    對(duì)應(yīng)的jsp中:
    <html:messages id="message" message="true">
    ????? <bean:write name="message"/>
    </html:messages>
    • name : 指定ActionMessages存放在request或者session內(nèi)的屬性key.
    • message: 指定消息的來(lái)源, 如果為true, 對(duì)應(yīng)于key=Globals.MESSAGE_KEY的ActionMessages對(duì)象, 此時(shí)name屬性無(wú)效;如果為false, 則根據(jù)name屬性檢索ActionMessages對(duì)象, 如果沒(méi)有設(shè)置name, 默認(rèn)為Globals.ERROR_KEY. message屬性的默認(rèn)值為false.
    posted @ 2006-03-27 10:02 luckyrobbie 閱讀(2136) | 評(píng)論 (4)編輯 收藏

         摘要: from: http://bobcat.webappcabaret.net/javachina/faq/ant_01.htm FAQ on ANT Building Process by Roseanne Zhang scjp, advanced, job tips, xml, ant, c/c++, ...  閱讀全文
    posted @ 2006-03-27 10:00 luckyrobbie 閱讀(190) | 評(píng)論 (0)編輯 收藏

    aix的系統(tǒng)備份命令是mksysb, make system backup ,有點(diǎn)類似 ghost.

    aix5.3支持微分區(qū)技術(shù),所謂微分區(qū)就是1臺(tái)機(jī)器上裝多個(gè)OS(操作系統(tǒng)),把這臺(tái)機(jī)器上的cpu資源進(jìn)行劃分,然后分配給每一個(gè)os使用,最小粒度是0.1個(gè)cpu.有點(diǎn)類似vmware軟件.讓一個(gè)機(jī)器跑多個(gè)操作系統(tǒng).這項(xiàng)技術(shù)早在ibm的大機(jī)上就已經(jīng)實(shí)現(xiàn)了.只不過(guò)最近才在小機(jī)和pc機(jī)器上發(fā)布.

    TIVOLI是系統(tǒng)管理軟件.

    關(guān)閉aix的命令:shutdown ->正常關(guān)機(jī),關(guān)閉所有服務(wù). halt -> 相當(dāng)于直接關(guān)閉電源.
    重啟aix:shutdown -Fr

    查看出錯(cuò)信息:errpt errpt -a | more -> 分頁(yè)顯示 errpt -a > /tmp/err01 輸出到文件.
    清除錯(cuò)誤信息:errclear 0

    smit 用鼠標(biāo)操作 smitty 用鍵盤(pán)來(lái)操作,一般用smitty為好.

    ping -f 全速ping ,利用所有的服務(wù)器資源來(lái)ping,如果是多個(gè)服務(wù)器ping一個(gè)ip,可以把機(jī)器ping死.

    幾個(gè)關(guān)于磁盤(pán)的名詞:
    lv: logical volume 邏輯卷
    pv: physical volume 物理卷
    vg: volume group 卷組
    pp: physical partition 物理分區(qū)
    lp: logical partition 邏輯分區(qū)

    pv對(duì)應(yīng)的是物理硬盤(pán)或者是磁盤(pán)陣列上劃分的lun,一個(gè)vg最多可以有1016個(gè)pp.
    pv的上面是vg,一個(gè)vg可以包含多個(gè)pv.
    vg的上面是lv,lv如果不作任何處理就是裸設(shè)備,也可以作成文件系統(tǒng).
    lv被分為多個(gè)lp,默認(rèn)情況下,lp與pp是一一對(duì)應(yīng)的,也可以做成一對(duì)多的.這樣就相當(dāng)于用多個(gè)pp來(lái)作raid0備份.

    lsdev -C | grep disk 可以查看物理磁盤(pán)的硬件信息
    lspv 查看pv的信息 -p hdisk0 查看具體數(shù)據(jù)存放的位置:例如,數(shù)據(jù)在第m到n個(gè)pp上面.
    lsvg 查看vg的信息 -l vg的列表 -c 被使用的vg -l rootvg 查看rootvg的詳情.
    lslv -m lv1 查看lv1 的lp與pp的映射.
    getlvcv -AT lv1 看到lv1的控制信息.
    fsck -y /dev/newlv 檢查lv.

    smit vg 可以管理vg
    smit lv 管理lv

    varryonvg rootvg 激活rootvg卷組,varryoffvg newvg 使newvg卷組脫機(jī).

    nbpi:number of bytes per inode 每個(gè)i節(jié)點(diǎn)擁有的字節(jié)數(shù),這個(gè)參數(shù)越小,文件系統(tǒng)的可用的inode越多.如果inode用完,即使有剩余空間,系統(tǒng)也會(huì)報(bào)空間不夠.此時(shí)要調(diào)小nbpi的值.一般是4k
    df -k 中iused 指的是i節(jié)點(diǎn)的使用情況.

    設(shè)置從cd啟動(dòng),bootlist -m normal cd0

    啟動(dòng)時(shí)按ESC+1或者F1,可以進(jìn)入啟動(dòng)菜單.選擇啟動(dòng)方式.

    用smitty crfs 創(chuàng)建完文件系統(tǒng)以后還要mount.
    /etc/filesystems 文件記錄文件系統(tǒng)的信息.如想把某個(gè)lv映射到不同的文件系統(tǒng)路徑上面,可以直接修改這個(gè)文件.

    用logform /dev/testloglv 將lv格式化成jfs的log的格式.

    file 文件名 可以看某個(gè)文件的信息,包括文件類型,可執(zhí)行文件,文本文件,等等.

    uname -a 可以看到os的信息.

    fsck 檢查文件系統(tǒng)的信息,在umount的時(shí)候是準(zhǔn)確的, 相當(dāng)于windows的磁盤(pán)掃描.

    碎片整理 smitty jfs

    lsfs /root 顯示文件系統(tǒng)的屬性

    各個(gè)組件的關(guān)系:

    lsps -a 查看page space的使用情況

    vgda:vg description area 每個(gè)vg的頭部存放vg的描述信息,
    如果包含2個(gè)pv,那么第一個(gè)pv會(huì)在頭部和另一個(gè)位置存放2個(gè)vgda,第2個(gè)pv也會(huì)存放一個(gè).
    如果包含3個(gè)pv,那么每個(gè)pv上都有1個(gè)vgda.
    vg的信息在odm中也會(huì)存儲(chǔ),但必須和vgda中的信息一致,否則無(wú)法varryonvg,有下面4個(gè)命令來(lái)管理odm中的vg信息.
    importvg:從vgda中讀取信息到odm中
    exportvg:從odm中刪除vg信息
    varryonvg:激活(online)vg
    varryoffvg:卸載(offline)vg

    修改vg的factor,這樣可以將vg的max pp 從默認(rèn)的1016 增大1倍,到2032,但由于vgda的總大小不變,這些信息都是記錄到里面的.所以vg的最大文件數(shù)要減小1倍,實(shí)際上是個(gè)等式:max pp * max file = 固定的一個(gè)值,factor增大,實(shí)際上是max pp * factor,max file / factor.具體做法:chvg -t 2 rootvg 修改factor為2.vgda

    用cfgmgr,來(lái)刷新,來(lái)認(rèn)出新assign的hdisk.
    cfgmgr -v 檢查新設(shè)備,新硬件.
    -i /dev/cd0 從光盤(pán)自動(dòng)安裝新硬件驅(qū)動(dòng).

    當(dāng)作雙機(jī)時(shí),2個(gè)服務(wù)器server1 和 server2 來(lái)連接同一個(gè)盤(pán)陣,server1對(duì)磁盤(pán)分配一個(gè)pvid,當(dāng)?shù)谝淮吻袚Q到server2時(shí),要用ckdev命令來(lái)讀出server1配置的pvid.系統(tǒng)是通過(guò)pvid來(lái)識(shí)別pv的.
    ckdev -l hdisk1 -a pv = clear 清除pvid
    ckdev -l hdisk1 -a pv = yes 新置pvid

    lsdev 查看物理設(shè)備
    lsdev -C 顯示所有設(shè)備狀態(tài)
    rmdev -l cd0 邏輯刪除 cd0
    mkdev -l cd0 安裝cd0
    rmdev -d -l cd0 刪除cd0設(shè)備驅(qū)動(dòng)

    查看cpu的信息
    lsattr -El proc0
    lsdev -C | grep proc
    查看內(nèi)存的信息
    lsattr -El mem0
    查看光驅(qū)的信息
    lsattr -El cd0
    查看硬盤(pán)的信息
    lsattr -El hdisk0

    lscfg -vp | more 分頁(yè)看全部硬件信息
    prtconf | more 列出硬件信息

    查看誰(shuí)在使用cdrom fuser /cdrom -k 直接殺掉用戶進(jìn)程

    telnet的登陸信息存放在/etc/motd文件中.
    想查看最近有誰(shuí)登陸,用last命令.
    查看登錄失敗的信息: /etc/security/failedlogin
    存放用戶密碼的文件:/etc/security/passwd

    用戶登錄需要運(yùn)行的腳本:
    1 /etc/profile
    2 /etc/environment 在這個(gè)文件中設(shè)置中文環(huán)境,LANG=zh_CN
    3 用戶profile ,分2種情況:
    如果是命令行登錄,則運(yùn)行/home/user/.profile
    如果是圖形登錄,則運(yùn)行 /home/user/.dtprofile 需要將次文件中,#DTSOURCEPROFILE=TRUE 的# 去掉,否則還是使用.profile.

    在/dev下面有2種設(shè)備,一種是block設(shè)備,一種是char(字符)設(shè)備.這取決于不同的應(yīng)用.

    vmstat的某些行的解釋:
    vmstat->faults->cs: user calls 用戶調(diào)用的次數(shù)
    cpu->wa: >40 說(shuō)明io繁忙
    kthr: kernel thread
    kthr->r 在運(yùn)行隊(duì)列中等待執(zhí)行的進(jìn)程
    b 正在等待io的進(jìn)程
    memory->avm:active vitual memory 物理內(nèi)存+使用的虛擬內(nèi)存,以4k為單位.
    page->re:是pin 和 pout 的總和.
    sr:search的內(nèi)存塊數(shù).
    fr:釋放的內(nèi)存塊數(shù).
    每次作page out時(shí),系統(tǒng)要搜索物理內(nèi)存以找到可以釋放的塊,sr和fr分別代表搜索的和通過(guò)搜索找到的可以釋放的塊 數(shù).如果2者很接近,說(shuō)明內(nèi)存中有很多用于file cache,內(nèi)存的數(shù)量是夠用的.如果fr/sr的值很小,說(shuō)明內(nèi)存不夠.

    tty:代表終端

    iostat:
    %tm_act 實(shí)際transaction的百分比
    tps 每秒發(fā)生的次數(shù)
    kbps 每秒的速率
    名詞:thrasing: 應(yīng)用程序頻繁交換,導(dǎo)致paging過(guò)多.

    /usr/samples/kernel/vmtune -f 120 -F 128
    -f 120 代表minfree mem < 120 時(shí)要進(jìn)行page out
    -F 128 代表maxfree mem > 128 時(shí)要進(jìn)行page in
    -p -P 也跟page out 有關(guān),具體不清楚,還需明確.

    sar->avque:平均的請(qǐng)求數(shù)

    對(duì)文件系統(tǒng)作監(jiān)視:filemon
    filemon -o /tmp/a.txt -O all -v
    運(yùn)行之后系統(tǒng)會(huì)一直監(jiān)視文件系統(tǒng)的使用情況并記錄日志,-T 64000 是使用的buffer cache,在大型系統(tǒng)上,這個(gè)值可以調(diào)大.
    運(yùn)行一段時(shí)間后,要停掉filemon,使用trcstop 或者 kill -9 進(jìn)程.
    從a.txt中可以看到使用最頻繁的文件等信息,有些類似statspack的報(bào)告.

    對(duì)于后綴是Z的文件用uncompress來(lái)解壓縮. uncompress a.tar.Z

    用strings 命令來(lái)看2進(jìn)制文件

    如何調(diào)大page space,直接設(shè)置對(duì)應(yīng)lv的大小.如果對(duì)應(yīng)lv的vg空間不夠的話,可以向vg中加硬盤(pán).

    dd的用法:dd if=/dev/rnewfs of=/dev/rcopyfs bs=1024 count=10240
    bs: block size 塊大小,1024字節(jié)
    count: block count 塊的數(shù)量
    if是input file ,of 是output file

    將任務(wù)切換到后臺(tái)執(zhí)行: ctrl+z ,然后 bg+回車
    查看后臺(tái)執(zhí)行的程序:jobs
    把后臺(tái)執(zhí)行的程序切換到前臺(tái)執(zhí)行:fg %n n是后臺(tái)的job 編號(hào)

    ip抓包工具:iptrace 和 tcpdump
    iptrace -a a.out
    停止iptrace:kill -9
    tcpdump -i en1 -w a.out a.out 是輸出文件

    把進(jìn)程與cpu綁定:bindprocessor -U 進(jìn)程號(hào) cpuid
    bindprocessor -U 12345 0

    odm庫(kù):
    env | grep obj
    ODMDIR=/etc/objrepos 這是odm庫(kù)的存儲(chǔ)路徑

    在disk0上生成引導(dǎo)區(qū)
    bosboot -a -d /dev/hdisk0

    用kdb 查看os 的 dump

    ethernet channel 把2個(gè)網(wǎng)卡綁定到1個(gè)ip,可以作網(wǎng)絡(luò)負(fù)載均衡.

    crontab 設(shè)置定時(shí)任務(wù)
    crontab -l list the crontab
    crontab -e edit the crontab
    crontab的格式:分鐘 小時(shí) 月中的天數(shù) 月份 星期 命令
    minute:
    0 到 59
    hour:
    0 到 23
    day_of_month:
    1 到 31
    month:
    1 到 12
    weekday:
    星期日到星期六的 0 到 6 時(shí)
    要在每星期日上午 2 時(shí)運(yùn)行 fwlogmgmt 命令,請(qǐng)將下列各行添加至 crontab 文件底部:
    0 2 * * 0 /usr/bin/fwlogmgmt -1

    發(fā)送郵件,aix和redhad linux 都默認(rèn)安裝了smtp郵件服務(wù),可以直接給internet發(fā)郵件.
    mail -s "test mail"
    haochunpeng@ninetowns.com < $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert$ORACLE_SID.log
    mail -s "test mail"
    haochunpeng@ninetowns.com <<EOF
    ******** MAIL CONTENT *******
    FJLADSFJLAKHFGAL
    FJALDSKFJA
    FASLJFLASF
    *****************************
    EOF
    有了crontab和mail,就可以定時(shí)監(jiān)控?cái)?shù)據(jù)庫(kù),然后把報(bào)告發(fā)送郵件到管理員的信箱.

    kill -9 9 是kill命令傳送的一個(gè)信號(hào),一共15個(gè)信號(hào)可以發(fā)送.

    /etc/ftpusers 限制登錄ftp的用戶,誰(shuí)在這個(gè)文件里面,誰(shuí)就登不進(jìn)去.

    網(wǎng)絡(luò)服務(wù) /etc/inetd.conf 刷新 refresh src -d

    lslpp -l | grep http 查看安裝的軟件

    檢查瓶頸:
    利用vmstat iostat 查看總體情況,ps aux 可以看到具體進(jìn)程占用資源的情況.
    如果是io瓶頸,可以利用filemon -o /tmp/a.txt -O all; sleep 10;trcstop 來(lái)查看io資源的使用情況.

    辨別僵尸進(jìn)程:ps -ef pid 那列是 defunc的為僵尸進(jìn)程.

    幾個(gè)不錯(cuò)的aix網(wǎng)站:
    http://www.douzhe.com
    http://www.xfocus.net/articles/200208/433.html

    posted @ 2006-03-27 09:57 luckyrobbie 閱讀(2019) | 評(píng)論 (0)編輯 收藏

    昨晚貝貝的幼兒園里每個(gè)班級(jí)都召開(kāi)家長(zhǎng)會(huì),這是貝貝的第一次家長(zhǎng)會(huì)。

    前一天貝貝媽媽讓我準(zhǔn)備的發(fā)言稿,可是在昨天上午的電話里面LP說(shuō)不準(zhǔn)備采納我寫(xiě)的,她自己已經(jīng)準(zhǔn)備了一份了,郁悶。

    晚上我6點(diǎn)才趕到家,貝貝媽媽已經(jīng)開(kāi)始出發(fā)去幼兒園了。于是我匆匆吃過(guò)晚飯,拉著貝貝去湊熱鬧。貝貝和我說(shuō)家長(zhǎng)會(huì)不能帶小孩去的。我告訴他沒(méi)關(guān)系,我們?cè)谟變簣@玩,不進(jìn)教室。

    帶著我買的奧特曼飛機(jī),貝貝在操場(chǎng)上的各個(gè)滑梯滑了n次,我們就開(kāi)始往教室門(mén)口蹭了。上了樓梯,到了自己教室門(mén)口,貝貝賴著不肯往前走了,呵呵。過(guò)了一會(huì),他壯著膽子靠近了一點(diǎn),然后“啪啪啪啪”的大步跑過(guò)教室前的走廊,我心中一笑,仿佛看到了自己童年的影子。跟上去和他在前面的一個(gè)活動(dòng)空間一起玩。

    家長(zhǎng)會(huì)開(kāi)了近2個(gè)小時(shí),比別的班級(jí)結(jié)束的晚,看來(lái)貝貝的老師還是比較認(rèn)真負(fù)責(zé)的。我們?cè)跇翘萆系鹊搅素愗悑寢專缓蟾吒吲d興的一起回家了。

    貝貝媽媽說(shuō),家長(zhǎng)會(huì)上老師多次表?yè)P(yáng)了貝貝。優(yōu)點(diǎn)是:有禮貌,守紀(jì)律,愛(ài)學(xué)習(xí),還有想象力和創(chuàng)造力比較豐富,這一點(diǎn)我特別欣賞。需要提高的是:動(dòng)手能力。我也覺(jué)得在家里太嬌慣貝貝了,今后要讓他自己的事情自己做。

    希望貝貝快快樂(lè)樂(lè)成長(zhǎng)。^^
    posted @ 2006-03-24 12:32 luckyrobbie 閱讀(239) | 評(píng)論 (0)編輯 收藏

    教孩子禮貌待人

       各位老師和家長(zhǎng),我是貝貝的媽媽,今日很高興能在這次家長(zhǎng)會(huì)上,和大家一起交流和探討關(guān)于對(duì)孩子進(jìn)行文明禮貌教育的話題。
           作為每個(gè)父母,都希望自己的孩子能夠從小養(yǎng)成講文明、懂禮貌的好習(xí)慣。文明禮貌的行為習(xí)慣是從小開(kāi)始長(zhǎng)期實(shí)踐而形成的。如何對(duì)孩子進(jìn)行文明和禮貌教育,我認(rèn)為著重從以下三個(gè)方面開(kāi)展:

             一、父母的言行和思維在孩子成長(zhǎng)過(guò)程中起到關(guān)鍵的影響作用
            小孩子的求知欲是非常強(qiáng)的,因此孩子的成長(zhǎng)過(guò)程也是一個(gè)學(xué)習(xí)的過(guò)程。孩子對(duì)于一個(gè)環(huán)境從陌生到熟悉的認(rèn)可過(guò)程,其實(shí)就是一種習(xí)慣的養(yǎng)成過(guò)程,這個(gè)環(huán)境是指孩子身邊的一切事物。孩子在和外界環(huán)境的接觸過(guò)程中,會(huì)不斷主動(dòng)或者被動(dòng)的接受一些言論、行為和思想。而作為與孩子關(guān)系最為密切的父母,則更應(yīng)在自己的言行舉止方面做到誠(chéng)實(shí)守信、禮貌待人,用文明的思想灌輸給子女,給孩子起到模范表率作用。久而久之,我們的孩子才會(huì)看在眼里,學(xué)在心里,并把父母的這種行為意識(shí)加上自己的理解作為一個(gè)定式記憶在自己的腦海中。而且會(huì)把這個(gè)思維定式作為一種潛意識(shí)在合適的場(chǎng)合表達(dá)出來(lái)。因此,我認(rèn)為父母的意識(shí)形態(tài)對(duì)孩子的表率作用在孩子的成長(zhǎng)過(guò)程中尤為重要。
            在日常生活中,我們?cè)谪愗惖臓敔斈棠碳依锏臅r(shí)間比較多,大家經(jīng)常在一起吃飯聊天和做游戲的場(chǎng)合也比較多。我和貝貝的爸爸對(duì)長(zhǎng)輩都是很尊重的,貝貝也在這種氛圍中也慢慢養(yǎng)成尊敬長(zhǎng)輩的好習(xí)慣。為了讓孩子能夠正確理解我們的一些做法,我們會(huì)在適當(dāng)?shù)臅r(shí)機(jī)和貝貝解釋為什么要在待人接物中文明禮貌的原因,貝貝會(huì)耐心地聽(tīng)我們說(shuō),還會(huì)問(wèn)一些為什么的問(wèn)題,理解后就會(huì)知道怎么做是正確的,怎么做是錯(cuò)誤的。此外,我們有時(shí)會(huì)通過(guò)講故事的方法,加強(qiáng)孩子思維能力的培養(yǎng)。當(dāng)講到某個(gè)環(huán)節(jié),讓貝貝判斷出故事中某個(gè)小動(dòng)物或者小朋友應(yīng)該怎么做,或者對(duì)貝貝說(shuō)如果是你,你會(huì)怎么做。
            二、及時(shí)發(fā)現(xiàn)并糾正孩子的一些不好的做法
    .........................................................................
            三、在集體生活中培養(yǎng)文明禮貌的習(xí)慣
    ..........................................................................
           最后和大家分享一下我在一個(gè)早期教育節(jié)目中的收獲, 兒童最佳智力結(jié)構(gòu)是記憶力,注意力,觀察力,想象力,思維能力和操作能力這六方面的能力。其中思維能力是核心。我們有些家長(zhǎng)只注重孩子記憶力的訓(xùn)練,如記憶和背誦一些唐詩(shī)等等,而忽視了其他方面的鍛煉和開(kāi)發(fā),缺乏想像力和創(chuàng)造力、動(dòng)手能力,造成智力結(jié)構(gòu)失衡發(fā)展,這是對(duì)孩子教育中的一個(gè)誤區(qū)。

    posted @ 2006-03-24 09:39 luckyrobbie 閱讀(294) | 評(píng)論 (0)編輯 收藏

    是學(xué)習(xí)JSF的時(shí)候了,請(qǐng)看下面摘抄的文章

    Struts和JSF/Tapestry都屬于表現(xiàn)層框架,這兩種分屬不同性質(zhì)的框架,后者是一種事件驅(qū)動(dòng)型的組件模型,而Struts只是單純的MVC模式框架,老外總是急吼吼說(shuō)事件驅(qū)動(dòng)型就比MVC模式框架好,何以見(jiàn)得,我們下面進(jìn)行詳細(xì)分析比較一下到底是怎么回事?

      首先事件是指從客戶端頁(yè)面(瀏覽器)由用戶操作觸發(fā)的事件,Struts使用Action來(lái)接受瀏覽器表單提交的事件,這里使用了Command模式,每個(gè)繼承Action的子類都必須實(shí)現(xiàn)一個(gè)方法execute。

      在struts中,實(shí)際是一個(gè)表單Form對(duì)應(yīng)一個(gè)Action類(或DispatchAction),換一句話說(shuō):在Struts中實(shí)際是一個(gè)表單只能對(duì)應(yīng)一個(gè)事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。

      struts重要的表單對(duì)象ActionForm是一種對(duì)象,它代表了一種應(yīng)用,這個(gè)對(duì)象中至少包含幾個(gè)字段,這些字段是Jsp頁(yè)面表單中的input字段,因?yàn)橐粋€(gè)表單對(duì)應(yīng)一個(gè)事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時(shí),也就是說(shuō),一個(gè)字段對(duì)應(yīng)一個(gè)事件時(shí),單純使用Struts就不太可能,當(dāng)然通過(guò)結(jié)合JavaScript也是可以轉(zhuǎn)彎實(shí)現(xiàn)的。

      而這種情況使用JSF就可以方便實(shí)現(xiàn),

    <h:inputText id="userId" value="#{login.userId}">
      <f:valueChangeListener type="logindemo.UserLoginChanged" />
    </h:inputText>

      #{login.userId}表示從名為login的JavaBean的getUserId獲得的結(jié)果,這個(gè)功能使用struts也可以實(shí)現(xiàn),name="login" property="userId"

      關(guān)鍵是第二行,這里表示如果userId的值改變并且確定提交后,將觸發(fā)調(diào)用類UserLoginChanged的processValueChanged(...)方法。

      JSF可以為組件提供兩種事件:Value Changed和 Action. 前者我們已經(jīng)在上節(jié)見(jiàn)識(shí)過(guò)用處,后者就相當(dāng)于struts中表單提交Action機(jī)制,它的JSF寫(xiě)法如下:

    <h:commandButton id="login" commandName="login">
      <f:actionListener type=”logindemo.LoginActionListener” />
    </h:commandButton>

      從代碼可以看出,這兩種事件是通過(guò)Listerner這樣觀察者模式貼在具體組件字段上的,而Struts此類事件是原始的一種表單提交Submit觸發(fā)機(jī)制。如果說(shuō)前者比較語(yǔ)言化(編程語(yǔ)言習(xí)慣做法類似Swing編程);后者是屬于WEB化,因?yàn)樗莵?lái)自Html表單,如果你起步是從Perl/PHP開(kāi)始,反而容易接受Struts這種風(fēng)格。

    posted @ 2006-03-24 08:58 luckyrobbie 閱讀(212) | 評(píng)論 (0)編輯 收藏

    • 在JMS的Connection Factories 中新建一個(gè)連接工廠
    • 在Stores中新建一個(gè)存儲(chǔ)空間,可以為jdbc或者file類型
    • 在Servers中新建一個(gè)Server
    • 展開(kāi)剛才創(chuàng)建的DemoJMSServer,新建一個(gè)Destinations,其中有2種類型,queue:點(diǎn)對(duì)點(diǎn)方式,topic:廣播方式給所有的MDB
    • 在jb中新建一個(gè)MDB,transaction type:bean ,Destination type:javax.jms.Queue,在Destination name中輸入剛才在weblogic的jms里面建立的目標(biāo)名稱,Pool properties的Maximum pool size:10
    • 在onMessage方法中加入代碼
      public?void?onMessage(Message?msg){?
      try?{

      ??????TextMessage?TMS?
      =?(TextMessage)?msg;

      ??????String?a1?
      =?TMS.getText();

      ??????String?b1?
      =?a1;

      ??????System.out.println(
      "Message?getted?Is?:"?+?a1?+?">>>>>>>>>>>OK");

      ??????Context?context?
      =?new?InitialContext();

      ??????Object?ref?
      =?context.lookup("Sess");? //session bean的本地接口

      ??????SessHome?sessHome?
      =?(SessHome)?PortableRemoteObject.narrow(ref,?SessHome.class);

      ??????sessHome.create().insTableAa11(a1,?b1);

      ??????
      //這是通過(guò)Session?Bean的insTableAa11調(diào)用EntityBean的ejbHomeEjbInsertAa11

      ??????
      //功能其是很簡(jiǎn)單,插入Aa11表一條記錄(a1,a1)

      ????}


      ????
      catch?(Exception?ex)?{

      ??????ex.printStackTrace();

      ????}

      }
    • deploy這個(gè)消息驅(qū)動(dòng)Bean
    • new一個(gè)MDBTestClient class
      package?bmpsessmdb;
      import?java.util.*;

      import?javax.jms.*;

      import?javax.naming.*;


      public?class?MDBTestClient?{
      ????
      public?final?static?String

      ??????JNDI_FACTORY?
      =?"weblogic.jndi.WLInitialContextFactory";

      ??
      public?final?static?String?URL?=?"t3://127.0.0.1:7001";

      ??
      private?static?final?String?QUEUE_CONNECTION_FACTORY?=

      ??????
      "DemoJMSConnectionFactory";

      ??
      private?static?final?String?QUEUE?=?"DemoJMSQueue";

      ??
      private?static?InitialContext?getInitialContext(String?url)?throws

      ??????NamingException?
      {

      ????Hashtable?env?
      =?new?Hashtable();

      ????env.put(Context.INITIAL_CONTEXT_FACTORY,?JNDI_FACTORY);

      ????env.put(Context.PROVIDER_URL,?url);

      ????
      return?new?InitialContext(env);

      ??}




      ??
      public?static?void?main(String[]?args)?throws?Exception?{

      ????Context?ctx?
      =?getInitialContext(URL);

      ????QueueConnectionFactory?qConnFact?
      =

      ????(QueueConnectionFactory)?ctx.lookup(QUEUE_CONNECTION_FACTORY);

      ????QueueConnection?qConn?
      =?qConnFact.createQueueConnection();

      ????QueueSession?qSess?
      =?qConn.createQueueSession(false,

      ??????????????????????????????????????????????????Session.AUTO_ACKNOWLEDGE);

      ????Queue?q?
      =?(Queue)?ctx.lookup(QUEUE);

      ????QueueSender?qSend?
      =?qSess.createSender(q);



      ????TextMessage?txtMsg?
      =?qSess.createTextMessage("songtx3");

      ????System.out.println(
      "Sending?a?message?to?queue");

      ????qSend.send(txtMsg);

      ????
      //---------------------------------------------------------//

      ????txtMsg?
      =?qSess.createTextMessage("songtx4");

      ????System.out.println(
      "Sending?a?message?to?queue");

      ????qSend.send(txtMsg);

      ????
      //---------------------------------------------------------//

      ????qConn.close();

      ????System.exit(
      0);

      ??}


      }
    • 運(yùn)行測(cè)試,over
    posted @ 2006-03-23 14:51 luckyrobbie 閱讀(1556) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 成人免费午夜视频| 久久亚洲国产最新网站| 国产伦一区二区三区免费 | 一二三四在线播放免费观看中文版视频 | 亚洲综合校园春色| 亚洲AV日韩AV天堂一区二区三区| 四虎影视永久免费观看网址| 成年免费大片黄在线观看岛国| 久艹视频在线免费观看| 中文字幕在线视频免费观看| 日韩在线视频免费| 亚洲爆乳成av人在线视菜奈实| 亚洲a级成人片在线观看| 激情内射亚洲一区二区三区| 亚洲精品自产拍在线观看| 亚洲人午夜射精精品日韩| 日本a级片免费看| 成人毛片18女人毛片免费| 免费下载成人电影| 亚洲成人免费网址| 18成禁人视频免费网站| 午夜免费福利视频| 亚欧日韩毛片在线看免费网站| 伊人免费在线观看高清版| igao激情在线视频免费| 精品97国产免费人成视频 | 亚洲一区二区三区AV无码| 国产成人精品久久亚洲高清不卡 | 免费a级黄色毛片| 免费人成在线观看视频播放| 国产hs免费高清在线观看| 国产精品自在自线免费观看| 国产大片51精品免费观看| 又粗又大又硬又爽的免费视频| 国产成人精品高清免费| 免费一级毛片在线播放不收费| 免费观看国产精品| 亚洲无码精品浪潮| 亚洲国产AV无码专区亚洲AV| 亚洲情a成黄在线观看动漫尤物| 亚洲人成在线播放网站岛国|