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

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

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

    posts - 195, comments - 34, trackbacks - 0, articles - 1

    2010年1月2日


                偶然發(fā)現(xiàn)了盛大的maiku, 是一個(gè)不錯(cuò)的日志和資源整理平臺(tái)。于是轉(zhuǎn)向了它,地址是 http://note.sdo.com/u/dongwq
    歡迎來(lái)看看。

    posted @ 2011-05-15 21:53 小強(qiáng)摩羯座 閱讀(248) | 評(píng)論 (0)編輯 收藏

    •  前者:看見與不看見,但是位置保留。
          •  后者處理與位置有關(guān):block, inline, none 分別是有前后換行,不換行,不顯示功能但是不保留位置。
        
        
    •  二者功能差異:保留位置,和位置形式

        
    <script language="javascript">
        function toggleVisibility(me)
        {
        
    if(me.style.visibility=="hidden")
        {
        me.style.visibility
    ="visible";
        }

        
    else
        {
        me.style.visibility
    ="hidden";
        }
        }

        
    </script>

        
    <DIV  onclick="toggleVisibility(this)"

        style
    ="position:relative">

        第一行文本將會(huì)觸發(fā)
    "hidden""visible"屬性,注意第二行的變化。

        
    </DIV>

        
    <DIV>因?yàn)関isibility會(huì)保留元素的位置,所以第二行不會(huì)移動(dòng).</DIV>

        
    <script language="javascript">

        function toggleDisplay(me){

        
    if(me.style.display=="block"){

        me.style.display
    ="inline";

        alert(
    "文本現(xiàn)在是:'inline'.");

        }

        
    else{

        
    if(me.style.display=="inline"){

        me.style.display
    ="none";

        alert(
    "文本現(xiàn)在是:'none'.3秒鐘后自動(dòng)重新顯示。");

        window.setTimeout(
    "blueText.style.display='block';",

        
    3000,"javascript");

        }

        
    else{

        me.style.display
    ="block";

        alert(
    "文本現(xiàn)在是:'block'.");

        }

        }

        }

        
    </script>

        
    <DIV><span id="blueText"

        onclick
    ="toggleDisplay(this)"

        style
    ="color:blue;position:relative;cursor:hand;">

        藍(lán)色
    </span>文字上點(diǎn)擊來(lái)查看效果.</DIV>

    posted @ 2010-09-14 13:47 小強(qiáng)摩羯座 閱讀(1035) | 評(píng)論 (0)編輯 收藏

         摘要: 1 . 日志的組成:配置文件,寫日志 log.cfg ############################################################ #      Default Logging Configuration File # # You&nbs...  閱讀全文

    posted @ 2010-09-09 15:09 小強(qiáng)摩羯座 閱讀(416) | 評(píng)論 (0)編輯 收藏

    項(xiàng)目經(jīng)理之修煉(8)——?jiǎng)e忘了告訴別人你是誰(shuí)

    文章分類:軟件開發(fā)管理
    副標(biāo)題——名不正言不順,項(xiàng)目管理難度加倍

    你能想象美國(guó)總統(tǒng)上任,卻沒有總統(tǒng)就職儀式嗎?
    你能想象北京奧林匹克運(yùn)動(dòng)會(huì),沒有開幕式表演嗎??
    OK。相信你一定見過(guò)這樣的場(chǎng)景:
    某老板匆匆忙忙地進(jìn)了屋,忽地來(lái)了一嗓子:“大家靜靜,通知大家一下:以后,某項(xiàng)目就由小張負(fù)責(zé)了!”

    **************************************************

    話說(shuō)楚漢相爭(zhēng)。劉邦在蕭何的再三舉薦下,決定讓韓信為大將。

    “來(lái)人,叫韓信過(guò)來(lái),我要封他為大將。”劉邦道。

    蕭何表示異議:“漢王你一向傲慢沒有禮貌,現(xiàn)在拜大將就和喊一個(gè)小孩子那么隨便,所以韓信才會(huì)離開的。漢王要想用人家,必須選一個(gè)吉日,吃素,設(shè)祭壇,用非常鄭重地禮節(jié)來(lái)拜將才行。”劉邦同意蕭何的意見。

    結(jié)果,盡管韓信是個(gè)無(wú)名小卒,卻順利的接過(guò)了軍權(quán),而沒有碰到那些元老們的抵抗,成功地導(dǎo)演了一幕幕戰(zhàn)爭(zhēng)奇跡。

    **************************************************

    登臺(tái)拜將,是一件具有深刻管理內(nèi)涵的故事。它告訴我們這樣一個(gè)道理:
    ——內(nèi)容是重要的,但形式卻是不容忽視。

    我們不求老板非要在某個(gè)公開場(chǎng)合悠揚(yáng)地宣告:“某項(xiàng)目成立了!!小張從此站起來(lái)了!!!”什么吉日,什么齋戒,什么禮儀。。。也就罷了。

    但是,不給正式任命書;不在正式場(chǎng)合公布;甚至連一個(gè)頭銜都舍不得。這絕對(duì)是沒天理的。

    **************************************************

    “看,老板不重視這個(gè)項(xiàng)目。。。”(相關(guān)人員)
    “瞧,老板不重視這個(gè)家伙。估計(jì)這個(gè)家伙沒有什么后臺(tái)” (相關(guān)人員)
    “你負(fù)責(zé)某項(xiàng)目?我怎么不知道有這么個(gè)項(xiàng)目呢?你是哪位啊?” (相關(guān)人員)
    “老板似乎并不重視/信任我啊” (項(xiàng)目經(jīng)理)

    ***************************************************

    以上種種,對(duì)項(xiàng)目的推動(dòng)極為不利的。尤其是手下有資深員工、或者項(xiàng)目經(jīng)理候補(bǔ)者等挑戰(zhàn)者的時(shí)候,問題將會(huì)加倍嚴(yán)重。

    大家可能會(huì)懷疑:“沒有那么嚴(yán)重吧?”
    沒有不嚴(yán)重,只有更嚴(yán)重!!
    這其中蘊(yùn)含著一個(gè)深刻的道理——名不正則言不順!!

    言不順是什么意思呢?

    -你的意見可能被忽視;
    -你的命令可能被當(dāng)作建議;
    -你的計(jì)劃可能被別人忘記;
    試想,你如果是項(xiàng)目經(jīng)理,你的項(xiàng)目將會(huì)怎樣。。。。。。

    *********************************************************

    Question: 我沒有辦法叫老板改變。那么,我該怎么辦?
    Answer:要寫一封郵件!!告訴別人你是誰(shuí)。

    *********************************************************

    你的老板犯了錯(cuò)誤,可是你不能將錯(cuò)就錯(cuò)!你的老板忽視了“名”的問題(形式問題),你一定要扳回來(lái)!!
    試想,你的老板不重視,你也不重視,你能指望別人重視嗎??
    當(dāng)然,答案就是別人會(huì)更不重視!!

    那么,這封郵件該怎么寫呢??


    **************************************************

    MailTo: 所有下屬
    CC:     所有相關(guān)領(lǐng)導(dǎo),所有相關(guān)人員,自己
    Title:  【A項(xiàng)目】A項(xiàng)目的新項(xiàng)目經(jīng)理小張向大家問好
    Content:

    1 開門見山地告訴別人自己的位置(正名)
    2 向相關(guān)人員致敬,并自然地點(diǎn)出自己的優(yōu)勢(shì)(自我介紹)
    3 向領(lǐng)導(dǎo)致敬致謝(拉近和領(lǐng)導(dǎo)關(guān)系)
    4 暗示自己的權(quán)利范圍(宣布自己的領(lǐng)地)
    5 喊兩句口號(hào)(合作和積極的姿態(tài)是必要的)
    6 不要忘了簽名(進(jìn)一步加深印象)

    //其中,1、2、4是必須要表現(xiàn)出來(lái)的

    **************************************************

    上面這封郵件,基本上完成了告訴別人你是誰(shuí)的問題,而且完成了你的位置身份暗示。
    如果說(shuō)老板不負(fù)責(zé)任的任命形式帶給你身份位置認(rèn)同危機(jī),沉重打擊了你的威信的話,
    通過(guò)這份郵件,你已經(jīng)用身份暗示這個(gè)武器,奪回了主動(dòng)權(quán)!!

    從這封信以后,由于你的身份位置的明確,
    相關(guān)人員在潛意識(shí)中會(huì)認(rèn)同你的領(lǐng)地所有權(quán),
    會(huì)對(duì)在你的領(lǐng)地上和你發(fā)生沖突產(chǎn)生不自然,不合法甚至負(fù)罪感,
    從而下意識(shí)中就會(huì)避免和你發(fā)生沖突。

    反過(guò)來(lái)講,你的位置身份的明確,將成為你自信的源泉,
    而這種位置感產(chǎn)生的自信將使你的發(fā)言充滿了正義感,
    加上項(xiàng)目經(jīng)理這個(gè)位置所帶來(lái)的小小的勢(shì)能。。。
    權(quán)力這個(gè)東西,真好!!

    嗯,一個(gè)好的開端,不是嗎?

    posted @ 2010-09-08 17:02 小強(qiáng)摩羯座 閱讀(218) | 評(píng)論 (0)編輯 收藏



    1、函數(shù)定義和使用

     

    <script>

    function sqrt(x) {
        return x * x;
    }
    function other(f) {
        var y = f(10);
        return y;
    }

    var farr = new Array();
    farr[0] = function(arg) { return arg + arg;};
    farr[1] = function(arg) { return arg * arg;};

    document.write(farr[0](10) + '<br/>');
    document.write(farr[1](10));

     

    document.write(other(sqrt));

    </script>

    sqrt.count = 0;
    sqrt.getcount = function() {
                        return this.count;
                    }; // 附加函式

    //sqrt();
    document.write(sqrt.count, '<br/>');
    document.write(sqrt.getcount());

    posted @ 2010-07-25 15:38 小強(qiáng)摩羯座 閱讀(197) | 評(píng)論 (0)編輯 收藏

    杜拉拉升級(jí)記:


     關(guān)鍵一點(diǎn),你的上級(jí)要喜歡你。工作中涉及要決策的都要跟上級(jí)報(bào)告。這是上級(jí)的作用。


     對(duì)于平級(jí)的同事是不能用命令,不能要求別人做事的。

     事情不能自己承擔(dān)下來(lái)。

     

    感謝小熊同學(xué)借我這本書看
        說(shuō)說(shuō)我的感受:此書沒有書評(píng)中說(shuō)的那么好,當(dāng)然也沒有那么壞。大家各取所需就好。與其叫小說(shuō),不如說(shuō)是一種創(chuàng)新形式的職場(chǎng)教材。不要太去在意作者的文筆,而要更多的體會(huì)書中各位同學(xué)的處事之道。
        幾句話總結(jié)一下:
        1、勤奮是王道,其他的都屬于EQ范疇了
        2、要注意技巧,尤其是溝通技巧,別干了半天,沒人知道你的工作量有多少。
        3、掂量自己的能力,做好該做的事,不做不該做的事,比如越級(jí)匯報(bào)。
        4、不要說(shuō)人壞話,能幫助別人時(shí)要幫,關(guān)鍵時(shí)刻即使沒有人幫你說(shuō)話,但也不會(huì)有人說(shuō)你的壞話。不信的話,去看看圣經(jīng)怎么說(shuō)得吧。
        5、要有氣量,做事要圓通。
        6、要有自己的風(fēng)格,風(fēng)格沒有好壞之分,但是一定要有。
        7、告訴我們什么是好工作,這點(diǎn)比較長(zhǎng),見下面的摘抄(感謝“木馬|造化弄人”的貢獻(xiàn)):
      
      “一、關(guān)于什么樣的職位算好職位
        
      1.你得找一家好公司
      什么是好公司?
          
      1)產(chǎn)品附加值高,生意好,并且從業(yè)務(wù)線看,具備持續(xù)發(fā)展的能力和前景;
      2)有專業(yè)的/聰明能干的/經(jīng)驗(yàn)豐富的/并且為人現(xiàn)實(shí)的管理層,在把握這公司,并且有保護(hù)一貫這樣用人的制度的公司;
      3)有嚴(yán)格的財(cái)務(wù)制度,對(duì)預(yù)算、費(fèi)用和利潤(rùn)等于投入產(chǎn)出有關(guān)的內(nèi)容,敏感并且具有強(qiáng)控制力的公司;
      4)崇尚客戶導(dǎo)向/市場(chǎng)導(dǎo)向/結(jié)果導(dǎo)向/執(zhí)行力的公司;
      5)有專業(yè)嚴(yán)謹(jǐn)全面的流程和制度,并且其執(zhí)行有利于推動(dòng)業(yè)務(wù)的良性發(fā)展,具有控制性和實(shí)操性兼?zhèn)涞奶攸c(diǎn);
      ---總結(jié)起來(lái),就是一家具有持續(xù)贏利能力的牛B公司
          
      2.你的找一個(gè)好的方向
          
      什么是好的方向?
       永遠(yuǎn)不要遠(yuǎn)離核心業(yè)務(wù)線。你得看明白,在企業(yè)中,哪個(gè)環(huán)節(jié)是實(shí)現(xiàn)利潤(rùn)最大化的關(guān)鍵環(huán)節(jié)。有時(shí)候是銷售環(huán)節(jié),有時(shí)候是市場(chǎng)策劃環(huán)節(jié),有時(shí)候是研發(fā)環(huán)節(jié),有時(shí)候是生產(chǎn)環(huán)節(jié),視乎你所在行業(yè)而不同。
       最重要的環(huán)節(jié),總是 最貴的,最牛的,最得到重視的,也是最有發(fā)展前途的部門。它擁有最多的資源和最大的權(quán)威--你應(yīng)該依附在這樣的核心業(yè)務(wù)線上發(fā)展,至少能避免被邊緣化,而成為關(guān)鍵人才的可能性則更大了。
          
      3.你得跟一個(gè)好老板。
          
        好老板的標(biāo)準(zhǔn)很多,關(guān)鍵的是,你要設(shè)法跟上一個(gè)在公司處于強(qiáng)勢(shì)地位的老板。他強(qiáng),你才能跟著上。跟了一個(gè)弱勢(shì)的老板,你的前途就很同意被根著給耽擱了。
          
      二、關(guān)于具備謀取好職位的資格
      要具備怎么樣的資格呢?一般情況下,你得是用人部門眼中的優(yōu)秀者。
      
      
      怎么樣才算優(yōu)秀呢?
          
      1.對(duì)上級(jí)
          
      1)你要知道與他建立一致性,他覺得重要的事情,你就覺得重要,他認(rèn)為緊急的事情你也認(rèn)為緊急,你得和他勁往一處使--通常情況下,你得表現(xiàn)和能力好還是不好,主要是你得直接主管說(shuō)了算的;
      
      2)你的具備從上級(jí)那里獲得支持和資源的能力--別你干的半死,你的老板還對(duì)你愛搭不理的,那你就不具備本條件的能力。
          
      2.對(duì)下級(jí)
          
      1)要能明確有效的設(shè)置正確的工作目標(biāo),使其符合SMART原則;
      2)要能有效地管理團(tuán)隊(duì)內(nèi)部沖突;
      3)要能公平合理地控制分配團(tuán)隊(duì)資源;
      4) 要有愿望和能力發(fā)展指導(dǎo)下屬,并恰當(dāng)授權(quán);
      5)恰當(dāng)?shù)馁潛P(yáng)鼓勵(lì)認(rèn)可團(tuán)隊(duì)成員;
      6)尊重不同想法,分享知識(shí)經(jīng)驗(yàn)和信息,建立信任的氛圍。
          
      3.對(duì)內(nèi)、外部客戶
          
      1)愿意提供協(xié)助和增值服務(wù)(不然要你干嘛);
      2)善意聆聽并了解需求(搞明白人家需要的到底是啥);
      3)可靠的提供產(chǎn)品和服務(wù),及時(shí)跟進(jìn)(千萬(wàn)注意及時(shí));
      4)了解組織架構(gòu)并具影響力。及早地建立并維護(hù)關(guān)鍵的關(guān)系,是這樣的關(guān)系有利于你達(dá)成業(yè)績(jī)(專業(yè)而明智的選擇);
          
      比如你想取得一個(gè)內(nèi)部職位,你的搞明白了,誰(shuí)是關(guān)鍵的做決定的人物,別傻乎乎不小心給這個(gè)人留下壞印象。
          
      比如必要去客人那里拿訂單,你找了一個(gè)關(guān)鍵的人物A,可是你也別忽略作購(gòu)買決定環(huán)節(jié)上的另一個(gè)人物B,沒準(zhǔn)B和A是死敵,本來(lái)B會(huì)同意給你下訂單的,就因?yàn)锳同意給你單子,B就是不同意給你單子。
          
      4.對(duì)本崗任務(wù)
          
      1)清楚自己的定位和職責(zé)--別搞不清楚自己是誰(shuí),什么是自己的活,知道什么該報(bào)告,什么要自己獨(dú)立做決定;
      2)結(jié)果導(dǎo)向--設(shè)立高目標(biāo),信守承諾,承擔(dān)責(zé)任,注重質(zhì)量、速度和期限,爭(zhēng)取主動(dòng),無(wú)需督促;
      3)清晰的制定業(yè)務(wù)計(jì)劃并有效實(shí)施;
      4)學(xué)習(xí)能力--愿意學(xué),堅(jiān)持學(xué),及時(shí)了解行業(yè)趨勢(shì)/競(jìng)爭(zhēng)狀況和技術(shù)更新,并學(xué)以致用;
      5)承受壓力的能力--嚴(yán)峻的工作條件下,能堅(jiān)忍不拔,想辦法獲取資源、支持和信息,努力以實(shí)現(xiàn)甚至超越目標(biāo);
      6)適應(yīng)的能力--如適應(yīng)多項(xiàng)要求并存,優(yōu)先級(jí)變換以及情況不明等工作條件,及時(shí)調(diào)整自己的行為和風(fēng)格來(lái)適應(yīng)不同個(gè)人及團(tuán)隊(duì)的需要(工作重心會(huì)變化,老板會(huì)換人,客人也會(huì)變,別和他們說(shuō)“我過(guò)去如何如何”,多去了解對(duì)方的風(fēng)格) ”。

     

     

     

    posted @ 2010-06-20 23:43 小強(qiáng)摩羯座 閱讀(232) | 評(píng)論 (0)編輯 收藏

    方與圓:


        最少期望的去感謝別人。不要抱著目的去感謝別人,甚至事前感謝也好。感謝只需說(shuō)一次。

      發(fā)掘別人不明顯的優(yōu)點(diǎn)加以贊揚(yáng)。
      贊揚(yáng)行動(dòng)和品性,而不要擴(kuò)大到贊揚(yáng)一個(gè)人。贊揚(yáng)的原因要說(shuō)明。


      和氣生財(cái)嗎?喝杯水。

      對(duì)陌生人要特別要笑。微笑是影響人氣質(zhì)的一個(gè)特別重要的東西。

     

      對(duì)生活的真誠(chéng),快樂的感情最能夠打動(dòng)人。 男的微笑也很好。

     

    認(rèn)真的品質(zhì):畫一個(gè)月和十年。

    組裝的質(zhì)量差?認(rèn)真的態(tài)度。德國(guó)人的認(rèn)真,指路會(huì)指出的很具體的。

    只有最認(rèn)真的人才能做出最好的產(chǎn)品。

     

    自動(dòng)自發(fā)的精神,一定要發(fā)揮自己的主觀能動(dòng)性。

    當(dāng)成自己的事來(lái)做吧。要主動(dòng)的來(lái)做。


    做好產(chǎn)品是人的一種尊嚴(yán)。爭(zhēng)強(qiáng)好勝在自己的工作上面。因?yàn)檫@是你的發(fā)揮場(chǎng)地。

    只辦總裁班?成本與質(zhì)量觀念不一樣的? 規(guī)模經(jīng)濟(jì)?質(zhì)量了的產(chǎn)品成本會(huì)降低。

    檢查的目的是為了改進(jìn)生活流程。

    管制圖?


    困定的供貨商?不是投標(biāo)。是指定方式做。


    永遠(yuǎn)追求持續(xù)不斷的完善。

     有必要再試一次。

    改進(jìn)自己的產(chǎn)品吧。

    也淘汰了自己的競(jìng)爭(zhēng)者。 一個(gè)系列的生產(chǎn)方式是不錯(cuò)的。


    到外去演講,不做化療?活過(guò)了三年?


    要有自己的追求。活就要活出自己的價(jià)值。無(wú)論在何時(shí)的年齡,都要有自己的追求。

    人生不是直線的,是C型的人生。


    人生可以隨時(shí)開始。

    posted @ 2010-06-12 11:17 小強(qiáng)摩羯座 閱讀(291) | 評(píng)論 (0)編輯 收藏

    <設(shè)計(jì)模式:java語(yǔ)言中的應(yīng)用>摘要、總結(jié) 收藏
    <設(shè)計(jì)模式:java語(yǔ)言中的應(yīng)用>一書已經(jīng)學(xué)完,現(xiàn)做個(gè)摘要、總結(jié)。

    創(chuàng)建模式(Creational Patterns)
    Abstract Factory Builder
    Factory Method  Prototype
    Singleton

    結(jié)構(gòu)模式(Structural Patterns)
    Adapter  Bridge
    Composite Decorator
    Facade  Flyweight
    Proxy

    行為模式(Behavioral Pattern)
    Chain of Responsibility  Command
    Interpreter   Iterator
    Mediator   Memento
    Observer   State
    Strategy   Template Method
    Visitor

    一、創(chuàng)建模式(Creational Patterns)

    1.Abstract Factory(抽象工廠)—把相關(guān)零件組合成產(chǎn)品
     Abstract Factory Pattern 是把各種抽象零件組合成抽象產(chǎn)品。換句話說(shuō),處理的重點(diǎn)是在接口(API)而不是零件的具體實(shí)現(xiàn)。只利用接口(API)就能把零件組合成產(chǎn)品.
     程序示例:
     --Main.java 測(cè)試用的類
     |-factory
     |    |-------Factory.java 表示抽象工廠的類(產(chǎn)生Link,Tray,Page)
     |    |-------Itme.java 用來(lái)統(tǒng)一處理Link和Tray的類
     |    |-------Link.java 抽象零件:表示HTML連接的類
     |    |-------Tray.java 抽象零件:抽取Link和Tray的類
     |    |-------Page.java 抽象零件:表示HTML網(wǎng)頁(yè)的類
     |
     |-listfactory
          |-------listFactory.java 表示具體工廠的類(產(chǎn)生ListLink,ListTray,ListPage)
          |-------listLink.java 具體零件:表示HTML連接的類
          |-------listTray.java 具體零件:抽取Link和Tray的類
          |-------listPage.java 具體零件:表示HTML網(wǎng)頁(yè)的類
     步驟:定義抽象零件->用抽象零件定義抽象工廠->定義具體零件(繼承實(shí)現(xiàn)抽象零件)->定義具體工廠(繼承實(shí)現(xiàn)抽象工廠,制造實(shí)際產(chǎn)品)

    2.Factory Method
     Factory Method Pattern 在父類規(guī)定對(duì)象的創(chuàng)建方法,但并沒有深入到較具體的類名.所有具體的完整內(nèi)容都放在子類.根據(jù)這個(gè)原則,我們可以大致分成產(chǎn)生對(duì)象實(shí)例的大綱(框架)和實(shí)際產(chǎn)生對(duì)象實(shí)例的類兩方面.
     程序示例:
     --Main.java 測(cè)試用的類
     |-framework
     |    |-------Product.java 僅定義抽象方法use的抽象類
     |    |-------Factory.java 規(guī)定createProduct,registerProduct,實(shí)現(xiàn)create的抽象類(類似模板方法)
     |
     |-idcard
          |-------IDCard.java 實(shí)現(xiàn)方法use的具體類
          |-------IDCardFactory.java 實(shí)現(xiàn)方法createProduct,registerProduct的類
     步驟:定義抽象產(chǎn)品->根據(jù)抽象產(chǎn)品定義抽象工廠->定義具體產(chǎn)品(繼承實(shí)現(xiàn)抽象產(chǎn)品)->定義具體工廠(繼承實(shí)現(xiàn)抽象工廠,制造實(shí)際產(chǎn)品)

    3.Singleton(單件)-唯一的對(duì)象實(shí)例
     Singleton Pattern 是針對(duì)一個(gè)類而言. Singleton類只會(huì)產(chǎn)生1個(gè)對(duì)象實(shí)例.Singleton類把singleton定義為static字段(類變量),再以Singleton類的對(duì)象實(shí)例進(jìn)行初始化.這個(gè)初始化的操作僅在加載Singleton類時(shí)進(jìn)行一次.
     Singleton類的構(gòu)造函數(shù)是private的,主要是為了禁止從非Singleton類調(diào)用構(gòu)造函數(shù).即使下面這個(gè)表達(dá)式不在此類之內(nèi),編譯時(shí)仍然會(huì)出現(xiàn)錯(cuò)誤.
      程序示例:
     |--Main.java 測(cè)試用的類
     |--Singleton.java 只有1個(gè)對(duì)象實(shí)例的類
     步驟:定義一個(gè)該類類型的static字段,同時(shí)實(shí)例化->該類的構(gòu)造方法設(shè)為private->定義一個(gè)static的getInstance()方法,返回已經(jīng)實(shí)例化的static字段.

    4.Builder(生成器)-組合復(fù)雜的對(duì)象實(shí)例
     Builder Pattern 是采用循序漸進(jìn)的方式組合較復(fù)雜對(duì)象實(shí)例的.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Builder.java 規(guī)定建立文件時(shí)的方法的抽象類
     |--Director.java 產(chǎn)生1個(gè)文件的類
     |--TextBuilder.java 產(chǎn)生plaintext格式(一般文本格式)的類
     |--HTMLBuilder.java 產(chǎn)生HTML格式的類
     步驟:定義建立文件時(shí)的通用方法(Builder.java)->根據(jù)通用方法組織建立文件(Director.java)->根據(jù)不同需求實(shí)現(xiàn)建立文件的通用方法(TextBuilder.java,HTMLBuilder.java)

    5.Prototype(原型)-復(fù)制建立對(duì)象
     Prototype Pattern 不是利用類產(chǎn)生對(duì)象實(shí)例,而是從一個(gè)對(duì)象實(shí)例產(chǎn)生出另一個(gè)新對(duì)象實(shí)例.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--MessageBox.java 把字符串框起來(lái)use的類.實(shí)現(xiàn)use和createClone
     |--UnderlinePen.java 把字符串加上下劃線的類.實(shí)現(xiàn)use和createCone
     |--framework
          |-------Product.java 已聲明抽象方法use和createClone的接口
          |-------Manager.java 利用createClone復(fù)制對(duì)象實(shí)例的類
     步驟:規(guī)定可復(fù)制產(chǎn)品的接口(Product.java,繼承Cloneable接口)->保存可復(fù)制的產(chǎn)品(以Product類型存以哈西表中),并提供復(fù)制產(chǎn)品的方法create(調(diào)用產(chǎn)品的復(fù)制方法,復(fù)制工作在具體產(chǎn)品類中執(zhí)行)(Manager.java)->定義可復(fù)制的具體產(chǎn)品(UnderlinePen.java,MessageBox.java,實(shí)現(xiàn)復(fù)制產(chǎn)品方法)


    二、結(jié)構(gòu)模式(Structural Patterns)

    1.Adapter(適配器)-換個(gè)包裝再度利用
     Adapter Pattern 把既有的無(wú)法直接利用的內(nèi)容轉(zhuǎn)換成必要的類型后再使用.具有填平"既有內(nèi)容"和"需要結(jié)果"兩者間"落差"的功能.
     Adapter Pattern 有繼承和委托兩種形式.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Banner.java 具有原始功能showWithParen,showWithAster的類
     |--Print.java 所需新功能printWeak,printStrong的接口或抽象類
     |--PrintBanner.java 把原始功能轉(zhuǎn)換成新功能的類
     步驟:
     (繼承)構(gòu)造具有原始功能的類(Banner.java)->定義具有新功能的接口(Print.java)->轉(zhuǎn)換(PrintBanner.java,繼承Banner實(shí)現(xiàn)Print接口,即繼承舊方法實(shí)現(xiàn)新功能)
     (委托)構(gòu)造具有原始功能的類(Banner.java)->定義具有新功能的抽象類(Print.java)->轉(zhuǎn)換(PrintBanner.java,繼承具有新功能的Print類.定義委托對(duì)象,即原始功能類.構(gòu)造時(shí)傳入原始功能實(shí)例對(duì)象,新功能的實(shí)現(xiàn)利用委托對(duì)象的原始功能.)

    2.Bridge(橋接)-分成功能層次和實(shí)現(xiàn)層次
     Bridge Pattern 溝通著"功能的類層次"和"實(shí)現(xiàn)的類層次"
     功能的類層次:給父類增加不同的功能
     實(shí)現(xiàn)的類層次:給父類以不同的實(shí)現(xiàn)
     Bridge Pattern 本質(zhì)上是通過(guò)功能類(最上層的功能類)中的一個(gè)實(shí)現(xiàn)類(最上層的實(shí)現(xiàn)類,一般是抽象類)字段來(lái)橋接兩個(gè)類層次的.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Display.java 功能類層次的最上層類
     |--CountDisplay.java 功能類層次的新增功能類
     |--DisplayImpl.java 實(shí)現(xiàn)類層次的最上層類
     |--StringDisplayImpl.java 實(shí)現(xiàn)類層次的實(shí)現(xiàn)類
     步驟:定義實(shí)現(xiàn)類層次的最上層類(DisplayImpl.java)->定義功能類層次的最上層類(Display.java,使用Adapter Pattern的委托方式把DisplayImpl.java的原始功能轉(zhuǎn)換成Display.java的新功能)->定義功能類層次的新增功能類(CountDisplay.java)->定義實(shí)現(xiàn)類層次的實(shí)現(xiàn)類(StringDisplayImpl.java)

    3.Composite(組成)-對(duì)容器和內(nèi)容一視同仁
     有時(shí)候把容器和內(nèi)容當(dāng)作是同類來(lái)處理會(huì)比較好下手。容器里面可以是內(nèi)容,也可以是更小一號(hào)的容器;而這個(gè)小一號(hào)的容器里還可以再放更小一號(hào)的容器,可以建立出像這樣大套小的結(jié)構(gòu)和遞歸結(jié)構(gòu)的Pattern就是Composite Pattern
     使用Composite Pattern,容器和內(nèi)容必須有一定的共性.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--File.java 表示文件的類
     |--Directory.java 表示目錄的類
     |--Entry.java 對(duì)File和Directory一視同仁的抽象類
     |--FileTreatmentException.java 欲在文件內(nèi)新增Entry時(shí)所發(fā)生的異常類
     步驟:定義異常類(FileTreatmentException.java)->定義進(jìn)入點(diǎn)類,即將容器和內(nèi)容一視同仁的抽象類(Entry.java,容器和內(nèi)容都含有共同的方法)->定義容器類和內(nèi)容類(File.java,Directory.java,繼承Entry,實(shí)現(xiàn)通用方法)

    4.Decorator(裝飾)-對(duì)裝飾和內(nèi)容一視同仁
     先建立一個(gè)核心對(duì)象,再一層層加上裝飾用的功能,就可以完成符合所需的對(duì)象.可以看成是多個(gè)通用的適配器.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Display.java 打印字符串用的抽象類
     |--StringDisplay.java 只有1行的打印字符串用的類
     |--Border.java 表示"裝飾外框"的抽象類
     |--SideBorder.java 只在左右加上裝飾外框的類
     |--FullBorder.java 在上下左右加上裝飾外框的類
     步驟:定義核心對(duì)象的抽象類(Display.java)->定義核心對(duì)象類(StringDisplay.java)->定義裝飾類的抽象類(Border.java,繼承核心對(duì)象的抽象類Display.java,以便裝飾和內(nèi)容一視同仁.裝飾類中繼承自核心對(duì)象抽象類的方法委托給傳入的核心對(duì)象)->定義其它裝飾類(SideBorder.java,FullBorder.java,繼承Border.java)

    5.Facade(外觀)-單一窗口
     Facade Pattern 能整理錯(cuò)綜復(fù)雜的來(lái)龍去脈,提供較高級(jí)的接口(API).Facade參與者讓系統(tǒng)外部看到較簡(jiǎn)單的接口(API).而且Facade參與者還會(huì)兼顧系統(tǒng)內(nèi)部各類功能和互動(dòng)關(guān)系,以最正確的順序利用類.
     Facade Pattern 把業(yè)務(wù)邏輯封裝起來(lái),只提供一個(gè)簡(jiǎn)單的接口給外部調(diào)用.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--maildata.txt 郵件列表文件
     |--pagemaker
           |-------Database.java 從郵件信箱取得用戶名稱的類
           |-------HtmlWriter.java 產(chǎn)生HTML文件的類
           |-------PageMaker.java 根據(jù)郵件信箱產(chǎn)生用戶網(wǎng)頁(yè)的類
     步驟:定義業(yè)務(wù)邏輯需要的相關(guān)類(Database.java,HtmlWriter.java)->定義外部接口類(PageMaker.java)

    6.Flyweight(享元)-有相同的部分就共享,采用精簡(jiǎn)政策
     "盡量共享對(duì)象實(shí)例,不做無(wú)謂的new".不是一需要對(duì)象實(shí)例就馬上new,如果可以利用其他現(xiàn)有的對(duì)象實(shí)例,就讓它們共享.這就是Flyweigth Pattern的核心概念.
     Flyweight Pattern 實(shí)質(zhì)是把創(chuàng)建的占用內(nèi)存量大的對(duì)象存儲(chǔ)起來(lái)(一般用hashtable存儲(chǔ)),后續(xù)使用時(shí),再?gòu)膆ashtable取出.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--BigChar.java 表示"大型字符"的類
     |--BigCharFactory.java 共享并產(chǎn)生BigChar的對(duì)象實(shí)例的類
     |--BigString.java 表示多個(gè)BigChar所產(chǎn)生的"大型文本"的類
     步驟:定義占用內(nèi)存量大,需要共享的類(Display.java)->定義共享實(shí)例的類(BigCharFactory.java,共享處理在此進(jìn)行,將產(chǎn)生的共享對(duì)象存儲(chǔ)在哈希表中,第二次使用時(shí)從表中取出即可,不需要new)->定義共享對(duì)象組合使用類(BigString.java)

    7.Proxy(代理)-需要再建立
     代理就是那個(gè)代替本來(lái)應(yīng)該自己動(dòng)手做事的本人的人.
     由于代理純粹只是代理工作而已,因此能力范圍也有限.如果遇到超出代理能力所及的范圍,代理就應(yīng)該去找本人商量才對(duì).
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Printer.java 表示命名的打印機(jī)的類(本人)
     |--Printable.java Printer和PrinterProxy共享的接口
     |--PrinterProxy.java 表示命名的打印機(jī)的類(代理)
     步驟:定義本人和代理都能處理的問題的接口(Printable.java)->建立本人類(Printer.java,實(shí)現(xiàn)Printable.java接口)->建立代理類(PrinterProxy.java,定義本人字段,把代理無(wú)法處理的問題交給本人)


    三、行為模式(Behavioral Pattern)

    1.Chain of Responsibility(職責(zé)鏈)-責(zé)任轉(zhuǎn)送
     先對(duì)人產(chǎn)生一個(gè)要求,如果這個(gè)人有處理的能力就處理掉;如果不能處理的話,就把要求轉(zhuǎn)送給"第二個(gè)人".同樣的,如果第二個(gè)人有處理的能力時(shí)就處理掉,不能處理的話,就繼續(xù)轉(zhuǎn)送給"第三個(gè)人",依此類推.這就是Chain of Responsiblility Pattern.
     Chain of Responsibility Pattern 的關(guān)鍵在于定義轉(zhuǎn)送字段(next)和定義職責(zé)鏈.
     程序示例:
     |--Main.java 建立Support的連鎖,產(chǎn)生問題的測(cè)試用類
     |--Trouble.java 表示發(fā)生問題的類.內(nèi)有問題編號(hào).
     |--Support.java 解決問題的抽象類.內(nèi)有轉(zhuǎn)送字段和處理方法.
     |--NoSupport.java 解決問題的具體類(永遠(yuǎn)"不處理")
     |--LimitSupport.java 解決問題的具體類(解決小于指定號(hào)碼的問題)
     |--OddSupport.java 解決問題的具體類(解決奇數(shù)號(hào)碼的問題)
     |--SpecialSupport.java 解決問題的具體類(解決特殊號(hào)碼的問題)
     步驟:建立問題類(Trouble.java)->建立解決問題的抽象類(Support.java,定義了轉(zhuǎn)送字段next,設(shè)置轉(zhuǎn)送字段的方法setNext和處理問題的方法support)->建立解決問題的具體類(NoSupport.java,LimitSupport.java,OddSupport.java,SpecialSupport.java,繼承Support.java)->產(chǎn)生處理問題的對(duì)象,建立職責(zé)鏈

    2.Command(命令)-將命令寫成類
     用一個(gè)"表示命令的類的對(duì)象實(shí)例"來(lái)代表欲執(zhí)行的操作,而不需采用"調(diào)用方法"的類的動(dòng)態(tài)處理.如欲管理相關(guān)紀(jì)錄,只需管理該對(duì)象實(shí)例的集合即可.而若預(yù)先將命令的集合存儲(chǔ)起來(lái),還可再執(zhí)行同一命令;或者是把多個(gè)命令結(jié)合成一個(gè)新命令供再利用.
     Command Pattern 重點(diǎn)在于存儲(chǔ)/使用命令
     程序示例:
     --Main.java 測(cè)試用的類
     |-command
     |    |-------Command.java 表示"命令"的接口
     |    |-------MacroCommand.java 表示"結(jié)合多個(gè)命名的命令"的類
     |
     |-drawer
          |-------DrawCommand.java 表示"點(diǎn)的繪制命令"的類
          |-------Drawable.java 表示"繪制對(duì)象"的接口
          |-------DrawCanvas.java 表示"繪制對(duì)象"的類
     步驟:建立命令接口(Command.java)->建立命令結(jié)合類(MacroCommand.java,將各個(gè)命令存儲(chǔ)到一個(gè)Stack類型的字段)->建立繪制命令類(DrawCommand.java,定義繪制對(duì)象字段drawable,實(shí)現(xiàn)命令接口)->建立繪制對(duì)象接口(Drawable.java)->建立繪制對(duì)象類(DrawCanvas.java,實(shí)現(xiàn)繪制對(duì)象接口,定義命令集合字段history)->測(cè)試

    3.Interpreter(解釋器)-以類來(lái)表達(dá)語(yǔ)法規(guī)則
     Interpreter Pattern 是用簡(jiǎn)單的"迷你語(yǔ)言"來(lái)表現(xiàn)程序要解決的問題,以迷你語(yǔ)言寫成"迷你程序"而表現(xiàn)具體的問題.迷你程序本身無(wú)法獨(dú)自啟動(dòng),必須先用java語(yǔ)言另外寫一個(gè)負(fù)責(zé)"解釋(interpreter)"的程序.解釋程序能分析迷你語(yǔ)言,并解釋\執(zhí)行迷你程序.這個(gè)解釋程序也稱為解釋器.當(dāng)應(yīng)解決的問題發(fā)生變化時(shí),要修改迷你程序來(lái)對(duì)應(yīng)處理.而不是修改用java語(yǔ)言寫成的程序.
     迷你語(yǔ)言語(yǔ)法:
     <program>::=program<command list>
     <command list>::=<command>* end
     <command>::=<repeat command>|<primitive command>
     <repeat command>::=repeat<number><command list>
     <primitive command>::=go|right|left
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Node.java 樹狀剖析中"節(jié)點(diǎn)"的類
     |--ProgramNode.java 對(duì)應(yīng)<program>的類
     |--CommandListNode.java 對(duì)應(yīng)<command list>的類
     |--CommandNode.java 對(duì)應(yīng)<command>的類
     |--RepeatCommandNode.java 對(duì)應(yīng)<repeat command>的類
     |--PrimitiveCommandNode.java 對(duì)應(yīng)<primitive command>的類
     |--Context.java 表示語(yǔ)法解析之前后關(guān)系的類
     |--ParseException.java 語(yǔ)法解析中的例外類
     步驟:確定迷你語(yǔ)言的語(yǔ)法->建立語(yǔ)法解析類(Context.java,使用java.util.StringTokenizer類)->建立解析異常類(ParseException.java)->建立語(yǔ)法節(jié)點(diǎn)抽象類(Node.java,定義parse解析方法)->建立各語(yǔ)法節(jié)點(diǎn)對(duì)應(yīng)的語(yǔ)法類(ProgramNode.java,CommandListNode.java,CommandNode.java,RepeatCommandNode.java,PrimitiveCommand.java,繼承語(yǔ)法節(jié)點(diǎn)Node.java類)

    4.Iterator-迭代器
     Iterator Pattern 是指依序遍歷并處理多個(gè)數(shù)字或變量.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Aggregate.java 表示已聚合的類
     |--Iterator.java 執(zhí)行遞增\遍歷的接口
     |--Book.java 表示書籍的類
     |--BookShelf.java 表示書架的類
     |--BookShelfIterator.java 掃描書架的類
     步驟:定義聚合接口(Aggregate.java)->定義遍歷接口(Iterator.java)->建立具體的遍歷對(duì)象類(Book.java)->建立具體的聚合類(BookShelf.java,實(shí)現(xiàn)聚合接口)->建立具體的遍歷類(BookShelfIterator.java,實(shí)現(xiàn)遍歷接口)

    5.Mediator(中介者)-只要面對(duì)一個(gè)顧問
     每個(gè)成員都只對(duì)顧問提出報(bào)告,也只有顧問會(huì)發(fā)出指示給各個(gè)成員;成員們彼此也不會(huì)去探問目前狀況如何,或亂發(fā)指示給其他成員.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Mediator.java 決定"顧問"接口(API)的接口
     |--Colleague.java 決定"成員"接口(API)的接口
     |--ColleagueButton.java 實(shí)現(xiàn)Colleagues接口.表示按鍵的類
     |--ColleagueTextField.java 實(shí)現(xiàn)Colleagues接口.輸入文本的類
     |--ColleagueCheckbox.java 實(shí)現(xiàn)Colleagues接口.表示選擇項(xiàng)目(在此為選擇按鈕)的類
     |--LoginFrame.java 實(shí)現(xiàn)Mediator接口.表示登錄對(duì)話框的類
     步驟:定義顧問接口(Mediator.java)->定義成員接口(Colleague.java)->建立具體的成員類(ColleagueButton.java,ColleagueTextField.java,ColleagueCheckbox.java,實(shí)現(xiàn)成員接口)->建立具體的顧問類(LoginFrame.java,實(shí)現(xiàn)顧問接口)

    6.Memento(備忘錄)-存儲(chǔ)狀態(tài)
     Memento Pattern 會(huì)把某個(gè)時(shí)間點(diǎn)的對(duì)象實(shí)例狀態(tài)記錄存儲(chǔ)起來(lái),等到以后再讓對(duì)象實(shí)例復(fù)原到當(dāng)時(shí)的狀態(tài).
     程序示例:
     |--Main.java 進(jìn)行游戲的類.先把Memento的對(duì)象實(shí)例存儲(chǔ)起來(lái),如有必要時(shí)再?gòu)?fù)原Gamer的狀態(tài)
     |--game
         |-------Gamer.java 玩游戲的主人翁的類
         |-------Memento.java 表示Gamer狀態(tài)的類.產(chǎn)生Memento的對(duì)象實(shí)例
     步驟:建立需要存儲(chǔ)狀態(tài)的類(Gamer.java)->建立狀態(tài)類(Memento.java,狀態(tài)類與需要存儲(chǔ)狀態(tài)的類Gamer.java應(yīng)具有相同的必要字段)

    7.Observer(觀察者)-通知狀態(tài)變化
     當(dāng)被Observer Pattern 列入觀察名單的狀態(tài)發(fā)生變化,就會(huì)通知觀察者.在寫一些跟狀態(tài)變化有關(guān)的處理時(shí),Observer Pattern是很好用的工具.
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Observer.java 表示觀察者的接口
     |--NumberGenerator.java 表示產(chǎn)生數(shù)值對(duì)象的抽象類
     |--RandomNumberGenerator.java 產(chǎn)生隨機(jī)數(shù)的類
     |--DigitObserver.java 以數(shù)字表示數(shù)值的類
     |--GraphObserver.java 以簡(jiǎn)易長(zhǎng)條圖表示數(shù)值的類
     步驟:定義觀察者接口(Observer.java)->建立被觀察的類(NumberGenerator.java,RandomNumberGenerator.java,定義觀察者結(jié)合字段將觀察者存儲(chǔ)起來(lái))->建立具體的觀察者類(DigitObserver.java,GraphObserver.java,實(shí)現(xiàn)觀察者接口)

    8.State(狀態(tài))-以類表示狀態(tài)
     以類來(lái)表示狀態(tài)之后,只要切換類就能表現(xiàn)“狀態(tài)變化”,而且在必須新增其他狀態(tài)時(shí),也很清楚該編寫哪個(gè)部分。
     程序示例:
     |--Main.java 測(cè)試用的類
     |--State.java 表示金庫(kù)狀態(tài)的接口
     |--DayState.java 實(shí)現(xiàn)State的類。表示白天的狀態(tài)
     |--NightState.java 實(shí)現(xiàn)State的類。表示夜間的狀態(tài)
     |--Context.java 管理金庫(kù)的狀態(tài)變化,跟保安中心聯(lián)絡(luò)的接口
     |--SafeFrame.java 實(shí)現(xiàn)Context的類。含有按鈕、畫面顯示等的用戶接口
     步驟:定義狀態(tài)接口(State.java,將使用State Pattern之前各種行為方法抽象出來(lái))->建立具體的狀態(tài)類(DayState.java,NightState.java,實(shí)現(xiàn)狀態(tài)接口,狀態(tài)變化的具體動(dòng)作在這里執(zhí)行)->定義管理狀態(tài)變化的接口(Context.java,規(guī)定狀態(tài)變化及相關(guān)的調(diào)用方法)->建立狀態(tài)管理類(SafeFrame.java,實(shí)現(xiàn)狀態(tài)管理接口)

    9.Strategy(策略)-把算法整個(gè)換掉
     在Strategy Pattern之下,可以更換實(shí)現(xiàn)算法的部分而且不留痕跡。切換整個(gè)算法,簡(jiǎn)化改為采用其他方法來(lái)解決同樣的問題。
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Hand.java 表示猜拳“手勢(shì)”的類
     |--Strategy.java 表示猜拳“戰(zhàn)略”的接口
     |--WinningStrategy.java 表示猜贏之后繼續(xù)出同樣招式的戰(zhàn)略的類
     |--ProbStrategy.java 表示從上一次出的招式,以概率分配方式求出下一個(gè)招式機(jī)率的類
     |--Player.java 表示玩猜拳的游戲者的類
     步驟:定義策略接口(Strategy.java)->建立具體的策略類(WinningStrategy.java,ProbStrategy.java,實(shí)現(xiàn)策略接口)->建立使用策略的類(Player.java,定義策略字段,以便使用切換策略)->建立其它類(Main.java,Hand.java)

    10.Template Method(模板方法)-實(shí)際處理交給子類
     在父類指定處理大綱、在子類規(guī)定具體內(nèi)容的Design Pattern就稱為Template Method Pattern
     程序示例:
     |--Main.java 測(cè)試用的類
     |--AbstractDisplay.java 只實(shí)現(xiàn)方法display的抽象類
     |--CharDisplay.java 實(shí)現(xiàn)方法open,print,close的類
     |--StringDisplay.java 實(shí)現(xiàn)方法open,print,close的類
     步驟:定義模板類(AbstractDisplay.java,實(shí)現(xiàn)dispaly方法,即制作了模板)->建立具體內(nèi)容類(CharDisplay.java,StringDisplay.java,繼承模板類,實(shí)現(xiàn)模板類沒有實(shí)現(xiàn)的方法)

    11.Visitor(訪問者)-在結(jié)構(gòu)中穿梭還同時(shí)做事
     Visitor Pattern 把數(shù)據(jù)結(jié)構(gòu)和處理兩者分開,另外寫一個(gè)表示在數(shù)據(jù)結(jié)構(gòu)內(nèi)穿梭來(lái)去的主體“訪客”的類,然后把處理交給這個(gè)類來(lái)進(jìn)行。如此一來(lái),如果想追加新的處理行為時(shí),只要再建立一個(gè)新的“訪客”即可。而在數(shù)據(jù)結(jié)構(gòu)這邊,也只要能接受來(lái)敲門的“訪客”就能完成動(dòng)作。
     在父類指定處理大綱、在子類規(guī)定具體內(nèi)容的Design Pattern就稱為Template Method Pattern
     程序示例:
     |--Main.java 測(cè)試用的類
     |--Visitor.java 表示訪問文件或目錄的訪客的抽象類
     |--Acceptor.java 表示接受Visitor類的對(duì)象實(shí)例的數(shù)據(jù)結(jié)構(gòu)的接口
     |--ListVisitor.java Visitor類的子類,打印文件和目錄信息的類
     |--Entry.java File和Directory的父類的抽象類(實(shí)現(xiàn)Acceptor接口)
     |--File.java 表示文件的類
     |--Directory.java 表示目錄的類
     |--FileTreatmentException.java 發(fā)生在對(duì)File進(jìn)行add時(shí)的例外類
     步驟:定義訪問者的抽象類(Visitor.java,定義訪問方法)->定義受訪者接口(Acceptor.java,定義接受訪問的方法)->建立具體的訪問者類(ListVisitor.java,繼承訪問者抽象類,實(shí)現(xiàn)訪問方法)->建立具體的受訪者類(Entry.java,File.java,Directory.java,實(shí)現(xiàn)受訪者接口)->編寫異常類(FileTreatmentException.java)

     

    本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/pian_yun/archive/2007/09/14/1784981.aspx

    posted @ 2010-05-28 16:24 小強(qiáng)摩羯座 閱讀(366) | 評(píng)論 (0)編輯 收藏

    直接在html中使用xml導(dǎo)入數(shù)據(jù)

    <xml id="cdcat" src="cd_catalog.xml"></xml>
    <table border="1" datasrc="#cdcat">
      <tr>
        <td><span datafld="ARTIST"></span></td>
        <td><span datafld="TITLE"></span></td>
          <td datafld="price"> </td>
     <td><span datafld="year"></span></td>
      </tr>
    </table>


    注意可以引入xml字段的元素有 限:
    例如,與DIV元素綁定的代碼如下:
     d: U) f1 y
      注意:并非所有的HTML元素都能與XML數(shù)據(jù)島綁定。目前,支持這種DSO綁定機(jī)制的元素如下:. H2 V- _% j! E/ {4 i
    $ \( \$ l" b+ H( M& Y
      A、APPLET、BUTTON、DIV、FRAME、IFRAME、 IMG、INPUT (此處類型是:CHECKBOX、HIDDEN、 LABEL、PASSWORD、RADIO和TEXT)、LABEL、 MARQUEE、SELECT、SPAN、TABLE和 TEXTAREA。

    posted @ 2010-05-27 10:24 小強(qiáng)摩羯座 閱讀(548) | 評(píng)論 (0)編輯 收藏

    H.264中的NAL技術(shù)

    NAL技術(shù)

    1.NAL概述
    NAL全稱Network Abstract Layer, 即網(wǎng)絡(luò)抽象層。
    在H.264/AVC視頻編碼標(biāo)準(zhǔn)中,整個(gè)系統(tǒng)框架被分為了兩個(gè)層面:視頻編碼層面(VCL)和網(wǎng)絡(luò)抽象層面(NAL)。其中,前者負(fù)責(zé)有效表示視頻數(shù)據(jù)的內(nèi)容,而后者則負(fù)責(zé)格式化數(shù)據(jù)并提供頭信息,以保證數(shù)據(jù)適合各種信道和存儲(chǔ)介質(zhì)上的傳輸。
    現(xiàn)實(shí)中的傳輸系統(tǒng)是多樣化的,其可靠性,服務(wù)質(zhì)量,封裝方式等特征各不相同,NAL這一概念的提出提供了一個(gè)視頻編碼器和傳輸系統(tǒng)的友好接口,使得編碼后的視頻數(shù)據(jù)能夠有效地在各種不同的網(wǎng)絡(luò)環(huán)境中傳輸。

    2.NAL單元
    NAL單元是NAL的基本語(yǔ)法結(jié)構(gòu),它包含一個(gè)字節(jié)的頭信息和一系列來(lái)自VCL的稱為原始字節(jié)序列載荷(RBSP)的字節(jié)流。頭信息中包含著一個(gè)可否丟棄的指示標(biāo)記,標(biāo)識(shí)著該NAL單元的丟棄能否引起錯(cuò)誤擴(kuò)散,一般,如果NAL單元中的信息不用于構(gòu)建參考圖像,則認(rèn)為可以將其丟棄;最后包含的是NAL單元的類型信息,暗示著其內(nèi)含有效載荷的內(nèi)容。
    送到解碼器端的NAL單元必須遵守嚴(yán)格的順序,如果應(yīng)用程序接收到的NAL單元處于亂序,則必須提供一種恢復(fù)其正確順序的方法。

    3.NAL實(shí)現(xiàn)編解碼器與傳輸網(wǎng)絡(luò)的結(jié)合
    NAL提供了一個(gè)編解碼器與傳輸網(wǎng)絡(luò)的通用接口,而對(duì)于不同的網(wǎng)絡(luò)環(huán)境,具體的實(shí)現(xiàn)方案是不同的。對(duì)于基于流的傳輸系統(tǒng)如H.320、MPEG等,需要按照解碼順序組織NAL單元,并為每個(gè)NAL單元增加若干比特字節(jié)對(duì)齊的前綴以形成字節(jié)流;對(duì)于RTP/UDP/IP系統(tǒng),則可以直接將編碼器輸出的NAL單元作為RTP的有效載荷;而對(duì)于同時(shí)提供多個(gè)邏輯信道的傳輸系統(tǒng),我們甚至可以根據(jù)重要性將不同類型的NAL單元在不同服務(wù)質(zhì)量的信道中傳輸[2]。

    4.結(jié)論
    為了實(shí)現(xiàn)編解碼器良好的網(wǎng)絡(luò)適應(yīng)性,需要做兩方面的工作:第一、在Codec中將NAL這一技術(shù)完整而有效的實(shí)現(xiàn);第二、在遵循H.264/AVC NAL規(guī)范的前提下設(shè)計(jì)針對(duì)不同網(wǎng)絡(luò)的最佳傳輸方案。如果實(shí)現(xiàn)了以上兩個(gè)目標(biāo),所實(shí)現(xiàn)的就不僅僅是一種視頻編解碼技術(shù),而是一套適用范圍很廣的多媒體傳輸方案,該方案適用于如視頻會(huì)議,數(shù)據(jù)存儲(chǔ),電視廣播,流媒體,無(wú)線通信,遠(yuǎn)程監(jiān)控等多種領(lǐng)域。

    NALU類型

    標(biāo)識(shí)NAL單元中的RBSP數(shù)據(jù)類型,其中,nal_unit_type為1, 2, 3, 4, 5及12的NAL單元稱為VCL的NAL單元,其他類型的NAL單元為非VCL的NAL單元。

    0:未規(guī)定
    1:非IDR圖像中不采用數(shù)據(jù)劃分的片段
    2:非IDR圖像中A類數(shù)據(jù)劃分片段
    3:非IDR圖像中B類數(shù)據(jù)劃分片段
    4:非IDR圖像中C類數(shù)據(jù)劃分片段
    5:IDR圖像的片段
    6:補(bǔ)充增強(qiáng)信息 (SEI)
    7:序列參數(shù)集
    8:圖像參數(shù)集
    9:分割符
    10:序列結(jié)束符
    11:流結(jié)束符
    12:填充數(shù)據(jù)
    13 – 23:保留
    24 – 31:未規(guī)定

    NALU的順序要求

    H.264/AVC標(biāo)準(zhǔn)對(duì)送到解碼器的NAL單元順序是有嚴(yán)格要求的,如果NAL單元的順序是混亂的,必須將其重新依照規(guī)范組織后送入解碼器,否則解碼器不能夠正確解碼。

    1.序列參數(shù)集NAL單元必須在傳送所有以此參數(shù)集為參考的其他NAL單元之前傳送,不過(guò)允許這些NAL單元中間出現(xiàn)重復(fù)的序列參數(shù)集NAL單元。所謂重復(fù)的詳細(xì)解釋為:序列參數(shù)集NAL單元都有其專門的標(biāo)識(shí),如果兩個(gè)序列參數(shù)集NAL單元的標(biāo)識(shí)相同,就可以認(rèn)為后一個(gè)只不過(guò)是前一個(gè)的拷貝,而非新的序列參數(shù)集。
    2.圖像參數(shù)集NAL單元必須在所有以此參數(shù)集為參考的其他NAL單元之先,不過(guò)允許這些NAL單元中間出現(xiàn)重復(fù)的圖像參數(shù)集NAL單元,這一點(diǎn)與上述的序列參數(shù)集NAL單元是相同的。
    3.不同基本編碼圖像中的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元在順序上不可以相互交叉,即不允許屬于某一基本編碼圖像的一系列片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元中忽然出現(xiàn)另一個(gè)基本編碼圖像的片段(slice)單元片段和數(shù)據(jù)劃分片段(data partition)單元。
    4.參考圖像的影響:如果一幅圖像以另一幅圖像為參考,則屬于前者的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元必須在屬于后者的片段和數(shù)據(jù)劃分片段之后,無(wú)論是基本編碼圖像還是冗余編碼圖像都必須遵守這個(gè)規(guī)則
    5.基本編碼圖像的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元必須在屬于相應(yīng)冗余編碼圖像的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前。
    6.如果數(shù)據(jù)流中出現(xiàn)了連續(xù)的無(wú)參考基本編碼圖像,則圖像序號(hào)小的在前面。
    7.如果arbitrary_slice_order_allowed_flag置為1,一個(gè)基本編碼圖像中的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元的順序是任意的,如果arbitrary_slice_order_allowed_flag置為零,則要按照片段中第一個(gè)宏塊的位置來(lái)確定片段的順序,若使用數(shù)據(jù)劃分,則A類數(shù)據(jù)劃分片段在B類數(shù)據(jù)劃分片段之前,B類數(shù)據(jù)劃分片段在C類數(shù)據(jù)劃分片段之前,而且對(duì)應(yīng)不同片段的數(shù)據(jù)劃分片段不能相互交叉,也不能與沒有數(shù)據(jù)劃分的片段相互交叉。
    8.如果存在SEI(補(bǔ)充增強(qiáng)信息) 單元的話,它必須在它所對(duì)應(yīng)的基本編碼圖像的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前,并同時(shí)必須緊接在上一個(gè)基本編碼圖像的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元后邊。假如SEI屬于多個(gè)基本編碼圖像,其順序僅以第一個(gè)基本編碼圖像為參照。
    9.如果存在圖像分割符的話,它必須在所有SEI 單元、基本編碼圖像的所有片段slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前,并且緊接著上一個(gè)基本編碼圖像那些NAL單元。
    10.如果存在序列結(jié)束符,且序列結(jié)束符后還有圖像,則該圖像必須是IDR(即時(shí)解碼器刷新)圖像。序列結(jié)束符的位置應(yīng)當(dāng)在屬于這個(gè)IDR圖像的分割符、SEI 單元等數(shù)據(jù)之前,且緊接著前面那些圖像的NAL單元。如果序列結(jié)束符后沒有圖像了,那么它的就在比特流中所有圖像數(shù)據(jù)之后。
    11.流結(jié)束符在比特流中的最后。

     

    本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:file:///D:/新建文件夾/桌面/H_264中的NAL技術(shù)%20-%20Bolt%20的專欄%20-%20CSDN博客.htm

    posted @ 2010-05-06 17:58 小強(qiáng)摩羯座 閱讀(331) | 評(píng)論 (0)編輯 收藏

    生成zigzag序,
    1、分析關(guān)鍵,在以zigzag序的每一行,以上三角為計(jì)算對(duì)象分別以i或j的增序排列,因此利用這一點(diǎn)就可以得出結(jié)果。
        程序中s即為zigzag行號(hào),而變換則以i和j交替。所以程序很簡(jiǎn)單。

     

    #include<iostream>
    #include<iomanip>

    using namespace std;

    #define M 255

    void zigzag(const int N)
    {
        int squa = N * N;
        int a[M][M]={0};
        for (int i = 0;i < N; i++)
        {
            for (int j = 0;j < N;j++)
            {
                int s = i + j;
                if ( s < N)
                {
                     a[i][j] = s * (s+1)/2 + ( (s %2 !=0)?i:j);//注意?:的優(yōu)先級(jí)低于+
                }
                else
                {
                    int sn = (N-1-i) + (N-1-j);
                    a[i][j] = squa - sn * (sn+1)/2 - (N - ( (sn%2 != 0)? i:j));
                }
            }
        }

        for (int i=0; i < N; i++)
        {
            for (int j = 0;j < N;j++)
            {

                cout<<setw(4)<<a[i][j]<<",";
            }
            cout<<endl<<endl;
        }
    }

    int main()
    {
     zigzag(5);
     cout<<endl;
     
     zigzag(8);
     cout<<endl;

        return 0;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void zigzag(int n)
    {
    int **a =(int**) malloc(n*sizeof(int *)); //分配空間

    if(NULL == a)
    return ;
    int i;
    for(i = 0; i < n; i++) {
            if((a[i] =(int*) malloc(n * sizeof(int))) == NULL) {
                while(--i>=0)
                    free(a[i]);
                free(a);
                return;
            }
        }

    bool flag = false; //這個(gè)標(biāo)志位用來(lái)判斷是從45度角生成還是225度角生成
    int count = 0;
    for(i=0; i<n; i++) //生成的上半部分的數(shù)據(jù)
    {

    if(flag)
    {
       for(int r = 0; r<=i; r++)
       {
        a[r][i-r] = count;
        count++;
       }
       flag = false;
    }
    else
    {
       for(int r = i; r>=0; r--)
       {
        a[r][i-r] = count;
        count++;
       }
       flag = true;
    }
    }
    for(i=n-1; i>=0; i--) //生成的是下半部分的數(shù)據(jù)
    {
    // cout<<i<<endl;
    if(flag)
    {
       for(int r = 0; r<=i-1; r++)
       {
        int r1 = n-i+r;       //代表當(dāng)前行
        int c1 = 2*n-i-1-r1; //代表當(dāng)前列
        a[r1][c1] = count;
        count++;
       }
       flag = false;
    }
    else
    {
       for(int r = i-1; r>=0; r--)
       {
        cout<<"ddd"<<endl;
        int r1 = n-i+r;
        int c1 = 2*n-i-1-r1;
    //   cout<<r1<<","<<c1<<endl;
        a[r1][c1] = count;
        count++;
       }
       flag = true;
    }
    }
    for(int r = 0; r<n; r++)
    {
    for(int c=0; c<n; c++)
       cout<<a[r][c]<<",";
    cout<<endl;
    }
    }
    int main()
    {
    int n;
    cin>>n;
    zigzag(n);
    return 0;
    }
    網(wǎng)上還有一個(gè)人寫了一個(gè)比較巧的算法:
    /**
    * 得到如下樣式的二維數(shù)組
    * zigzag(jpeg編碼里取象素?cái)?shù)據(jù)的排列順序)
    *
    *   0, 1, 5, 6,14,15,27,28,
    *   2, 4, 7,13,16,26,29,42,
    *   3, 8,12,17,25,30,41,43,
    *   9,11,18,24,31,40,44,53,
    *   10,19,23,32,39,45,52,54,
    *   20,22,33,38,46,51,55,60,
    *   21,34,37,47,50,56,59,61,
    *   35,36,48,49,57,58,62,63
    */

    #include <stdio.h>
    int main()
    {
        int N;
        int s, i, j;
        int squa;
        scanf("%d", &N);
        /* 分配空間 */
        int **a = malloc(N * sizeof(int *));
        if(a == NULL)
            return 0;
        for(i = 0; i < N; i++) {
            if((a[i] = malloc(N * sizeof(int))) == NULL) {
                while(--i>=0)
                    free(a[i]);
                free(a);
                return 0;
            }
        }
        /* 數(shù)組賦值 */
        squa = N*N;   
        for(i = 0; i < N; i++)
            for(j = 0; j < N; j++) {
                s = i + j;
                if(s < N)
                    a[i][j] = s*(s+1)/2 + (((i+j)%2 == 0)? i : j);
                else {
                    s = (N-1-i) + (N-1-j);
                    a[i][j] = squa - s*(s+1)/2 - (N - (((i+j)%2 == 0)? i : j));
                }
            }
        /* 打印輸出 */   
        for(i = 0; i < N; i++) {
            for(j = 0; j < N; j++)
                printf("%-6d", a[i][j]);
            printf("\n");
        }
        return 0;
    }

    posted @ 2010-05-03 17:26 小強(qiáng)摩羯座 閱讀(270) | 評(píng)論 (0)編輯 收藏

    幾道面試筆試題
    2008-02-26 18:38

    一、如何判斷一個(gè)單鏈表是有環(huán)的?(注意不能用標(biāo)志位,最多只能用兩個(gè)額外指針)
       struct node { char val; node* next;}
       bool check(const node* head) {} //return false : 無(wú)環(huán);true: 有環(huán)
        一種O(n)的辦法就是(搞兩個(gè)指針,一個(gè)每次遞增一步,一個(gè)每次遞增兩步,如果有環(huán)的話兩者必然重合,反之亦然):
        bool check(const node* head)
        {
             if(head==NULL)
                  return false;  
             node *low=head, *fast=head->next;
             while(fast!=NULL && fast->next!=NULL)
            {
                   low=low->next;
                   fast=fast->next->next;
                   if(low==fast)
                        return true;
            }
           return false;
       }

    二、刪除一個(gè)單項(xiàng)鏈表的最中間的元素,要求時(shí)間盡可能短(不能使用兩次循環(huán))
    struct link
    {
        int data;
        struct link *next;
    };
    void delMiddle(link *head)
    {
        if(head == NULL)
               return;
        else if(head->next == NULL)
        {
                delete head;
                return;
        }
        else
        {
                link *low = head;
                link *fast = head->next;
                while(fast != NULL && fast->next != NULL)
                {  
                           fast = fast->next->next;
                           if(fast == NULL)
                                        break;
                           low = low->next;
                }
                link *temp = low->next;
                low->next = low->next->next;
                delete temp;

        }
    }
    int main()
    {
           struct link *head,*l;
           struct link *s;
           head = (link*)malloc(sizeof(link));
           head->data=0;
           head->next = NULL;
           l = head;
           for(int i=1; i<9; i++)
           {
                s = (link*)malloc(sizeof(link));
                s->data = i;
                s->next = NULL;
                l->next= s;
                l = l->next;
           }
           print(head);
           delMiddle(head);
           print(head);
           return 0;
    }

    三、輸入n,求一個(gè)n*n矩陣,規(guī)定矩陣沿45度線遞增(威盛)
    /**
    * 得到如下樣式的二維數(shù)組
    * zigzag(jpeg編碼里取象素?cái)?shù)據(jù)的排列順序)
    *
    *   0, 1, 5, 6,14,15,27,28,
    *   2, 4, 7,13,16,26,29,42,
    *   3, 8,12,17,25,30,41,43,
    *   9,11,18,24,31,40,44,53,
    *   10,19,23,32,39,45,52,54,
    *   20,22,33,38,46,51,55,60,
    *   21,34,37,47,50,56,59,61,
    *   35,36,48,49,57,58,62,63
    */
    void zigzag(int n)
    {
    int **a =(int**) malloc(n*sizeof(int *)); //分配空間

    if(NULL == a)
    return ;
    int i;
    for(i = 0; i < n; i++) {
            if((a[i] =(int*) malloc(n * sizeof(int))) == NULL) {
                while(--i>=0)
                    free(a[i]);
                free(a);
                return;
            }
        }

    bool flag = false; //這個(gè)標(biāo)志位用來(lái)判斷是從45度角生成還是225度角生成
    int count = 0;
    for(i=0; i<n; i++) //生成的上半部分的數(shù)據(jù)
    {

    if(flag)
    {
       for(int r = 0; r<=i; r++)
       {
        a[r][i-r] = count;
        count++;
       }
       flag = false;
    }
    else
    {
       for(int r = i; r>=0; r--)
       {
        a[r][i-r] = count;
        count++;
       }
       flag = true;
    }
    }
    for(i=n-1; i>=0; i--) //生成的是下半部分的數(shù)據(jù)
    {
    // cout<<i<<endl;
    if(flag)
    {
       for(int r = 0; r<=i-1; r++)
       {
        int r1 = n-i+r;       //代表當(dāng)前行
        int c1 = 2*n-i-1-r1; //代表當(dāng)前列
        a[r1][c1] = count;
        count++;
       }
       flag = false;
    }
    else
    {
       for(int r = i-1; r>=0; r--)
       {
        cout<<"ddd"<<endl;
        int r1 = n-i+r;
        int c1 = 2*n-i-1-r1;
    //   cout<<r1<<","<<c1<<endl;
        a[r1][c1] = count;
        count++;
       }
       flag = true;
    }
    }
    for(int r = 0; r<n; r++)
    {
    for(int c=0; c<n; c++)
       cout<<a[r][c]<<",";
    cout<<endl;
    }
    }
    int main()
    {
    int n;
    cin>>n;
    zigzag(n);
    return 0;
    }
    網(wǎng)上還有一個(gè)人寫了一個(gè)比較巧的算法:
    /**
    * 得到如下樣式的二維數(shù)組
    * zigzag(jpeg編碼里取象素?cái)?shù)據(jù)的排列順序)
    *
    *   0, 1, 5, 6,14,15,27,28,
    *   2, 4, 7,13,16,26,29,42,
    *   3, 8,12,17,25,30,41,43,
    *   9,11,18,24,31,40,44,53,
    *   10,19,23,32,39,45,52,54,
    *   20,22,33,38,46,51,55,60,
    *   21,34,37,47,50,56,59,61,
    *   35,36,48,49,57,58,62,63
    */

    #include <stdio.h>
    int main()
    {
        int N;
        int s, i, j;
        int squa;
        scanf("%d", &N);
        /* 分配空間 */
        int **a = malloc(N * sizeof(int *));
        if(a == NULL)
            return 0;
        for(i = 0; i < N; i++) {
            if((a[i] = malloc(N * sizeof(int))) == NULL) {
                while(--i>=0)
                    free(a[i]);
                free(a);
                return 0;
            }
        }
        /* 數(shù)組賦值 */
        squa = N*N;   
        for(i = 0; i < N; i++)
            for(j = 0; j < N; j++) {
                s = i + j;
                if(s < N)
                    a[i][j] = s*(s+1)/2 + (((i+j)%2 == 0)? i : j);
                else {
                    s = (N-1-i) + (N-1-j);
                    a[i][j] = squa - s*(s+1)/2 - (N - (((i+j)%2 == 0)? i : j));
                }
            }
        /* 打印輸出 */   
        for(i = 0; i < N; i++) {
            for(j = 0; j < N; j++)
                printf("%-6d", a[i][j]);
            printf("\n");
        }
        return 0;
    }


    四、打印1到1000的整數(shù),不能使用流程控制語(yǔ)句(for,while,goto等)也不能使用遞歸
    1.
    typedef struct _test{
        static int a;
        _test(){
            printf("%d\n",_test::a);
            a++;
        }
    }Test;
    int Test::a = 1;

    int   main()  
    {  
        Test tt[1000];
        return 0;
    }  
    2.
    #include   <stdio.h>
    #define   B   P,P,P,P,P,P,P,P,P,P
    #define   P   L,L,L,L,L,L,L,L,L,L
    #define   L   I,I,I,I,I,I,I,I,I,I,N
    #define   I   printf( "%3d   ",i++)
    #define   N   printf( "\n ")
    int main()
    {
        int   i   =   1;
        B;
    }

    #define A(x) x;x;x;x;x;x;x;x;x;x;
    int main ()
    {
        int n = 1;
        A(A(A(printf ("%d ", n++))));

        return 0;
    }

     

    五、struct   S   {
            int   i;
            int   *   p;
    };
    void   main()
    {
            S   s;
            int   *   p   =   &s.i;
            p[0]   =   4;
            p[1]   =   3;
            s.p   =   p;
            s.p[1]   =   1;
            s.p[0]   =   2;
    }
    問程序會(huì)在哪一行死掉。 (microsoft)
    解: S   s;
             int   *   p   =   &s.i;        //s.i的地址存儲(chǔ)在p里
            p[0]   =   4;                    //修改了s.i
             p[1]   =   3;                    //修改了s.p
             s.p   =   p;                    //s.p指向s.i
             s.p[1]   =   1;               //修改s.p本身
            s.p[0]   =   2;               //s.p指向的是0x00000001,嘗試向這里寫,出錯(cuò)
         s.p[0]       =       2;   時(shí)出錯(cuò)
         因?yàn)閟.p存的是s.i的地址,s.p[1]為s.p,當(dāng)s.p[1]=1時(shí),s.p此時(shí)存放的是1了,而不是地址s.i,故在s.p[0]   =   2時(shí)出錯(cuò).
    此時(shí)相當(dāng)于s.p=ox00000001;地址ox0000001   =   2;當(dāng)然就出錯(cuò)了

    如果語(yǔ)句s.p[0]   =2   先于s.p[1]=1則程序就不會(huì)出錯(cuò).此時(shí)語(yǔ)句相當(dāng)于s.i=2;s.p=1;


    六、題目描述:
    1.   int   swap(int   *x,int   *y)
    {
        if(x==NULL   | |   y==NULL)
            return   -1;
        *x   +=   *y;
        *y   =   *x-   *y;
        *x   -=   *y;
          return   1;
    }
    請(qǐng)改錯(cuò),溢出已經(jīng)考慮,不是錯(cuò)誤
    2.
    void   foo(int   *x,   int   *y)
    {
        *x   +=   *y;
        *x   +=   *y;
    }
    void   fun(int   *x,   int   *y)
    {  
        *x   +=   2   *   (*y);
    }
    問兩個(gè)函數(shù)是否等價(jià),能否互換
    解答:第一題的函數(shù)是交換。但假如考慮x,   y都是指向同一個(gè)變量,結(jié)果是這個(gè)變量的值為0.
    第二題的兩個(gè)函數(shù)是有區(qū)別的,也考慮x,y是指向同一個(gè)變量.這樣第一個(gè)函數(shù)的結(jié)果是這個(gè)變量的4倍.但第二個(gè)函數(shù)的結(jié)果是變量的3倍.

    posted @ 2010-05-03 17:25 小強(qiáng)摩羯座 閱讀(144) | 評(píng)論 (0)編輯 收藏

    C++ placement new 用法舉例zz
    2009-12-17 16:16

    在處理內(nèi)存分配的時(shí)候,C++程序員會(huì)用new操作符(operator new)來(lái)分配內(nèi)存,并用delete操作符(operator delete)來(lái)釋放內(nèi)存。這是一個(gè)new操作符的例子。

    class CTest
    {
         
    /* 成員函數(shù)和成員數(shù)據(jù) */
    };

    // . . . 代碼

    //
    分配一個(gè)對(duì)象
    CTest * pTest = new Test;
    // 分配一個(gè)有十個(gè)對(duì)象的數(shù)組 (CTest 要有缺省構(gòu)造函數(shù)(default constuctor)
    CTest * p10Tests = new Test[ 10];

    雖然這種寫法在大多數(shù)時(shí)候都工作得很好,但還是有些情況下使用new是很煩人的,比如當(dāng)你想重新分配一個(gè)數(shù)組或者當(dāng)你想在預(yù)分配的內(nèi)存上構(gòu)造一個(gè)對(duì)象的時(shí)候。

    比如第一種情況,重新分配一個(gè)數(shù)組效率是很低的:

    // 分配一個(gè)有10個(gè)對(duì)象的數(shù)組
    CTest * pTests = new Test[ 10];
    // . . .
    //
    假設(shè)現(xiàn)在我們需要11個(gè)對(duì)象
    CTest * pNewTests = new Test[ 11];
    // . . . 我們必須把原來(lái)的對(duì)象拷貝到新分配的內(nèi)存中
    for ( int i = 0; i < 10; i++)
         pNewTests[ i] = pTests[ i];
    delete pTests;
    pTests = pNewTests;

    如果你想在預(yù)分配的內(nèi)存上創(chuàng)建對(duì)象,用缺省的new操作符是行不通的。要解決這個(gè)問題,你可以用placement new構(gòu)造。它允許你構(gòu)造一個(gè)新對(duì)象到預(yù)分配的內(nèi)存上:

    // buffer 是一個(gè)void指針 (void *)
    //
    用方括號(hào)[] 括起來(lái)的部分是可選的
    [CYourClass * pValue = ] new( buffer) CYourClass[( parameters)];

    下面是一些例子:

    #include <new>

    class CTest
    {
    public:
         CTest()
         {}
         CTest( int)
         {}
        
    /* 代碼*/
    };

    int main(int argc, char* argv[])
    {

         //
    由于這個(gè)例子的目的,我們不考慮內(nèi)存對(duì)齊問題
         char strBuff[ sizeof( CTest) * 10 + 100];
         CTest * pBuffer = ( CTest *)strBuff;

        
    // 缺省構(gòu)造
         CTest * pFirst = new(pBuffer) CTest;

        
    // 缺省構(gòu)造
         CTest * pSecond = new(pBuffer + 1) CTest;
        
        
    // 帶參數(shù)的構(gòu)造;
         //
    不理會(huì)返回的指針
         new(pBuffer + 2) CTest( 5);

        
    // 帶參數(shù)的構(gòu)造
         CTest * pFourth = new( pBuffer + 3) CTest( 10);

        
    // 缺省構(gòu)造
         CTest * pFifth = new(pBuffer + 4) CTest();

        
    // 構(gòu)造多個(gè)元素(缺省構(gòu)造)
         CTest * pMultipleElements = new(pBuffer + 5) CTest[ 5];
         return 0;
    }

    當(dāng)你有自己的內(nèi)存緩沖區(qū)或者在你實(shí)現(xiàn)自己的內(nèi)存分配策略的時(shí)候,placement new會(huì)很有用。事實(shí)上在STL中廣泛使用了placement new來(lái)給容器分配內(nèi)存;每個(gè)容器類都有一個(gè)模版參數(shù)說(shuō)明了構(gòu)造/析構(gòu)對(duì)象時(shí)所用的分配器(allocator)。

    在使用placement new的時(shí)候,你要記住以下幾點(diǎn):

    • 加上頭文件#include <new>
    • 你可以用placement new構(gòu)造一個(gè)數(shù)組中的元素。
    • 要析構(gòu)一個(gè)用placement new分配的對(duì)象,你應(yīng)該手工調(diào)用析構(gòu)函數(shù)(并不存在一個(gè)“placement delete”)。它的語(yǔ)法如下:

    pFirst->~CTest();
    pSecond->~CTest();

    前段事件,我問過(guò)關(guān)于placement new的問題,一位仁兄講了一些道理,他說(shuō)道:

    ::棧上的對(duì)象(注意,是類對(duì)象,char類型就無(wú)需了,后面還會(huì)提到)保證放在對(duì)齊地址上. 

    但是,個(gè)人實(shí)驗(yàn)了一下,發(fā)現(xiàn)并不是這樣

    例如:
    int main()
    {
    char c1 = 'A' ;
    char c2 = 'B' ;
    char c3 = 'C' ;
    char c4 = 'D' ;
    char c5 = 'E' ;

    //-------- 驗(yàn)證這四個(gè)地址是否是 4 的倍數(shù) --------------//
    if ( ((int)(&c1)) % 4 == 0 )
    cout << "c1:Yes" << endl ;

    if ( ((int)(&c2)) % 4 == 0 )
    cout << "c2:Yes" << endl ;

    if ( ((int)(&c3)) % 4 == 0 )
    cout << "c3:Yes" << endl ;

    if ( ((int)(&c4)) % 4 == 0 )
    cout << "c4:Yes" << endl ;

    if ( ((int)(&c5)) % 4 == 0 )
    cout << "c5:Yes" << endl ;

    cout << (int)(&c1) << endl // 輸出四個(gè)字符所在的地址(輸出結(jié)果都是 4 的倍數(shù))
     << (int)(&c2) << endl 
     << (int)(&c3) << endl 
     << (int)(&c4) << endl 
     << (int)(&c5) << endl ;
    }
    -----------------------------
    上面的執(zhí)行結(jié)果在VC下運(yùn)行都是 4 的倍數(shù)
    --------------

    --> 問題1:連棧上分配的空間地址都是 4 的倍數(shù),那就說(shuō)明系統(tǒng)分配的空間都是 4 的倍數(shù)吧???

    --> 問題2:如果萬(wàn)一,如果放一個(gè)對(duì)象的地址不是4的倍數(shù),那么會(huì)出現(xiàn)什么情況??可以給簡(jiǎn)單說(shuō)一下嗎?

    --> 問題3:地址對(duì)齊的通用性???
       -------------
       程序1:
    Class C1
    {
    int i ;
    char c ;
    } ;
    cout << sizeof(C1) << endl ;// 輸出結(jié)果: 8 (是 4 的倍數(shù))
       程序2:
    class C2
    {
    char c1 ;
    char c2 ;
    } ;
    cout << sizeof(C2) << endl ;// 輸出結(jié)果:2 ( 上一個(gè)中char類型也給了4個(gè)字節(jié),怎么這個(gè)地方都給了一個(gè)字節(jié)??)
    --> 問題4:由上面的程序2 引出下面的程序
    class C2// sizeof(C2) =2 ,在VC實(shí)驗(yàn)下的結(jié)果,不是 4
    {
    char c1 ;
    char c2 ;
    } ;
    //----------用placement new方法建立對(duì)象----------------
    void *ptr = operator new(100) ;// 分配內(nèi)存
    C2 *POINTER = (C2*)ptr ;// 類型轉(zhuǎn)換
    String *str1 = new (POINTER) C2() ;// 建立一C2對(duì)象
    String *str2 = new (POINTER+1) C2() ;// 再建立一個(gè)對(duì)象
    String *str3 = new (POINTER+2) C2() ;// 再建立一個(gè)對(duì)象

    cout << (int)(str1) << endl// 結(jié)果:3608720(  是4的倍數(shù))
          << (int)(str2) << endl // 結(jié)果:3608722(不是4的倍數(shù))!!
                         << (int)(str3) << endl ;// 結(jié)果:3608724(不是4的倍數(shù))!!

    posted @ 2010-04-20 17:15 小強(qiáng)摩羯座 閱讀(3805) | 評(píng)論 (0)編輯 收藏

    很實(shí)用的word的高級(jí)用法總匯2009-04-23 16:26

     

    任意放大/變小 字體

    快捷鍵ctrl+] 放大 字體      ctrl+[ 縮小字體

    把文字替換成圖片
    首先把圖片復(fù)制到 剪貼板中,然后打開替換對(duì)話框,在“查找內(nèi)容”框中輸入將被替換的文字,接著在 “替換為”框中輸入“^c”(注意:輸入的一定要是半角字符,c要小寫),單擊替換 即可。說(shuō)明:“^c”的意思就是指令Word XP以剪貼板中的內(nèi)容替換“查找內(nèi)容”框中的內(nèi) 容。按此原理,“^c”還可替換包括回車符在內(nèi)的任何可以復(fù)制到剪貼板的可視內(nèi)容,甚至Excel表格。

    三招去掉頁(yè)眉那條橫線
    1、在頁(yè)眉中,在“格式”-“邊框和底紋”中設(shè)置表格和邊框?yàn)?#8220;無(wú)”,應(yīng)用于“段落”
    2、同上,只是把邊框的顏色設(shè)置為白色(其實(shí)并沒有刪的,只是看起來(lái)沒有了,呵呵)
    3、在“樣式”欄里把“頁(yè)眉”換成“正文”就行了——強(qiáng)烈推薦!
    會(huì)多出--(兩個(gè)橫杠) 這是用戶不愿看到的,又要多出一步作刪除--
    解決方法:替換時(shí)在前引號(hào)前加上一個(gè)空格 問題就解決了

    插入日期和時(shí)間的快捷鍵
    Alt+Shift+D:當(dāng)前日期
    Alt+Shift+T:當(dāng)前時(shí)間

    批量轉(zhuǎn)換全角字符為半角字符
    首先全選。然后“格式”→“更改大小寫”,在對(duì)話框中先選中“半角”,確定即可


    Word啟動(dòng)參數(shù)簡(jiǎn)介
    單擊“開始→運(yùn)行”命令,然后輸入Word所在路徑及參數(shù)確定即可運(yùn)行,如“C:\ PROGRAM FILES \MICROSOFT Office \Office 10\ WINWord.EXE /n”,這些常用的參數(shù)及功能如下:
    /n:?jiǎn)?dòng)Word后不創(chuàng)建新的文件。
    /a:禁止插件和通用模板自動(dòng)啟動(dòng)。
    /m:禁止自動(dòng)執(zhí)行的宏。
    /w:?jiǎn)?dòng)一個(gè)新Word進(jìn)程,獨(dú)立與正在運(yùn)行的Word進(jìn)程。
    /c:?jiǎn)?dòng)Word,然后調(diào)用Netmeeting。
    /q:不顯示啟動(dòng)畫面。
    另外對(duì)于常需用到的參數(shù),我們可以在Word的快捷圖標(biāo)上單擊鼠標(biāo)右鍵,然后在“目標(biāo)”項(xiàng)的路徑后加上該參數(shù)即可。

    快速打開最后編輯的文檔
    如果你希望Word在啟動(dòng)時(shí)能自動(dòng)打開你上次編輯的文檔,可以用簡(jiǎn)單的宏命令來(lái)完成:
    (1)選擇“工具”菜單中的“宏”菜單項(xiàng),單擊“錄制新宏”命令打開“錄制宏”對(duì)話框;
    (2)在“錄制宏”對(duì)話框中,在“宏名”輸入框中輸入“autoexec”,點(diǎn)擊“確定”;
    (3)從菜單中選擇“文件”,點(diǎn)擊最近打開文件列表中顯示的第一個(gè)文件名;并“停止錄制”。保存退出。下次再啟動(dòng)Word時(shí),它會(huì)自動(dòng)加載你工作的最后一個(gè)文檔。

    格式刷的使用
    1、設(shè)定好文本1的格式。
    2、將光標(biāo)放在文本1處。
    3、單擊格式刷按鈕。
    4、選定其它文字(文本2),則文本2的格式與文本1 一樣。
    若在第3步中單擊改為雙擊,則格式刷可無(wú)限次使用,直到再次單擊格式刷(或按Esc鍵)為止。

    刪除網(wǎng)上下載資料的換行符(象這種“↓”)
    在查找框內(nèi)輸入半角^l(是英文狀態(tài)下的小寫L不是數(shù)字1),在替換框內(nèi)不輸任何內(nèi)容,單擊全部替換,就把大量換行符刪掉啦。

    選擇性刪除文件菜單下的最近使用的文件快捷方式。
    工具→選項(xiàng)→常規(guī)把“列出最近使用文件數(shù)改為0”可以全部刪除,若要選擇性刪除,可以按ctrl+Alt+ -三個(gè)鍵,光標(biāo)變?yōu)橐粋€(gè)粗減號(hào)后,單擊文件,再單擊要?jiǎng)h除的快捷方式就行了。

    建立一個(gè)矩形選區(qū):
    一般的選區(qū)建立可用鼠標(biāo)左鍵,或用shift鍵配合pgup、pgdn、home、end、箭頭等功能鍵,當(dāng)復(fù)制一個(gè)規(guī)則的矩形區(qū)域時(shí),可先按住Alt鍵,然后用鼠標(biāo)左鍵來(lái)選。我一般用此來(lái)刪除段首多余的成塊的空格。大家試一試*^_^*

    將字體快速改為上標(biāo)或下標(biāo)的方法:
    本人在一次無(wú)意間發(fā)現(xiàn)了這個(gè)方法,選定你要下標(biāo)的字,然后在英文狀態(tài)下按住Ctrl,再按一下BASKSPACE旁的+/=的鍵,就可以了。上標(biāo)只要在按Ctrl的同時(shí)也按住Shift,大家可以試試。

    讓W(xué)ord表格快速一分為二
    將光標(biāo)定位在分開的表格某個(gè)位置上,按下“Ctrl+Shift+Enter”組合鍵。這時(shí)你就會(huì)發(fā)現(xiàn)表格中間自動(dòng)插入一個(gè)空行,這樣就達(dá)到了將一個(gè)表格一分為二的目的。

    用Word來(lái)拆字
    首先點(diǎn)擊“工具/自定義/命令/分解圖片”,按住鼠標(biāo)左鍵把它拖放到工具欄任意位置即可;然后點(diǎn)擊“插入/圖片/藝術(shù)字”,例如輸入空心字“心”,選擇該“心”字剪切,在選擇性粘貼中選圖片(Windows圖元文件),選中該字,點(diǎn)擊工具欄中的“分解圖片”按鈕,這樣可以選擇“心”中的任意筆畫進(jìn)行一筆一畫的拆分了。

    快速刪除段前段后的任意多個(gè)空格
    選定這些段段落,單擊居中按鈕,然后再單擊原來(lái)的那種對(duì)齊方式按鈕(如果原來(lái)是居中對(duì)齊的,先單擊其它對(duì)齊方式按鈕,再單擊居中按鈕就行了),是不是這些空格全不見了?


    只要打開WORD新建一個(gè)空文檔的時(shí)候,出現(xiàn)的不是空的文檔,而是我以前打的一份文檔
    首先:將資源管理器設(shè)置為顯示所有文件和文件夾;
    然后:
    C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates文件夾下將所有Normal.doc文件刪掉;
    然后:OK(XP系統(tǒng))

    快速輸入平方的方法
    先輸入2,然后選重后,按ctrl加shift加+就可以了.

    WORD中表格的選擇性錄入
    1.設(shè)置好表格,選定表格-視圖-工具-窗體-插入下拉型窗體域
    2.輸入數(shù)據(jù),完成
    3.點(diǎn)擊鎖按鈕,保護(hù),輸入完后再點(diǎn)擊進(jìn)行其它的輸入.

    標(biāo)點(diǎn)符號(hào)的全角/半的轉(zhuǎn)換用:Ctrl+.
    數(shù)字字母的全角/半的轉(zhuǎn)換用:Shift+空格

    輕松了解工具欄按鈕的作用
    按下“shift+F1”鍵,鼠標(biāo)指針旁多了一個(gè)“?”號(hào),想知道哪個(gè)按鈕
    的作用,就用鼠標(biāo)單擊哪個(gè)。

    要經(jīng)常在文檔中插入自己公司的信息
    公司名稱
    公司住址
    聯(lián)系電話
    聯(lián)系人姓名
    QQ號(hào)碼
    可以先選定這些內(nèi)容,再單擊工具→自動(dòng)更正→在替換框中輸入標(biāo)記名稱(如“公司信息”)→添加→確定,以后凡是在文檔中要用到這個(gè)信息的地方鍵入“公司信息”(不要引號(hào))這幾個(gè)字后就自動(dòng)替換成:
    公司名稱
    公司住址
    聯(lián)系電話
    聯(lián)系人姓名
    QQ號(hào)碼
    說(shuō)明:有些輸入法不支持這個(gè)功能,鍵入標(biāo)記名稱后要按一下空格才行。

    快速換頁(yè)的方法
    雙擊某頁(yè)的右下腳,光標(biāo)即可定位在那里,然后按回車直到換頁(yè)。ctrl+回車點(diǎn)插入按紐,分隔符,選中分頁(yè)符,然后確認(rèn)就OK了 !!!

    表格的簡(jiǎn)單調(diào)整寬度
    鼠標(biāo)放在表格的右邊框上帶鼠標(biāo)變成可以調(diào)整大小的時(shí)候
    雙擊
    根據(jù)表格內(nèi)的內(nèi)容調(diào)節(jié)表格大小

    代替金山詞霸
    點(diǎn)工具——語(yǔ)言——翻譯,在右邊出現(xiàn)的搜索框中輸入要查的單詞,回車就可以翻譯了。可以選擇英語(yǔ)翻成中文或中文翻成英語(yǔ)。
    第一次使用可能要安裝。

    [Alt]鍵實(shí)現(xiàn)標(biāo)尺的精確定位
    如果你經(jīng)常使用水平標(biāo)尺來(lái)精確定位標(biāo)簽、頁(yè)邊框、首字縮進(jìn)及頁(yè)面對(duì)象的位置,那么你點(diǎn)擊標(biāo)尺設(shè)置頁(yè)邊框或標(biāo)簽時(shí),您只可以將其設(shè)置為1字符或2字符,但不能設(shè)為1.5字符!要想設(shè)置更為精確的度量單位(例如百分之幾字符),在按住[Alt]鍵的同時(shí),點(diǎn)擊并移動(dòng)標(biāo)尺或邊框,此時(shí)標(biāo)尺將用數(shù)字精確顯示出當(dāng)前的位置為百分之幾字符位置。

    用“記事本”去除格式
    網(wǎng)頁(yè)上COPY下來(lái)的東西往往都是有網(wǎng)格的,如果直接粘貼在WORD中會(huì)雜亂無(wú)章。先粘貼到記事本當(dāng)中,再粘貼到WORD中,就可以去除網(wǎng)格等格式,再全選選擇清除格式,居中再取消居中即可取消所有格式。可以直接在WORD中進(jìn)行:(菜單)編輯/選擇性粘貼……/無(wú)格式文本/確定。這樣省事多了。

    快速將文檔轉(zhuǎn)換成圖片
    先把欲想轉(zhuǎn)換的文檔保存退出.如:保存在桌面
    然后新建一個(gè)文件.把想轉(zhuǎn)換的文檔(鼠標(biāo)左建按住該文檔不放)直接施放在頁(yè)面上

    恢復(fù)office的默認(rèn)設(shè)置
    比如不小心把word設(shè)置亂了(如刪了菜單欄等等).
    查找normal.dot直接刪除.
    下一次啟動(dòng)word會(huì)恢復(fù)默認(rèn)值.

    讓W(xué)ord只粘貼網(wǎng)頁(yè)中的文字而自動(dòng)去除圖形和版式
    方法一、選中需要的網(wǎng)頁(yè)內(nèi)容并按“Ctrl+C”鍵復(fù)制,打開Word,選擇菜單“編輯”→“選擇性粘貼”,在出現(xiàn)的對(duì)話框中選擇“無(wú)格式文本”。
    方法二、選中需要的網(wǎng)頁(yè)內(nèi)容并按“Ctrl+C” 鍵復(fù)制,打開記事本等純文本編輯工具,按“Ctrl+V”鍵將內(nèi)容粘貼到這些文本編輯器中,然后再?gòu)?fù)制并粘貼到Word中。

    ctrl+alt+f可以輸入腳注
    這個(gè)對(duì)于經(jīng)常寫論文的朋友應(yīng)該有點(diǎn)幫助。

    將阿拉伯?dāng)?shù)字轉(zhuǎn)換成中文數(shù)字或序號(hào)
    1、先輸入阿拉伯?dāng)?shù)字(如1234),全選中,單擊“插入/數(shù)字/數(shù)字類型(壹、貳……)/確定”,即變?yōu)榇髮憯?shù)字(如壹仟貳佰叁拾肆),會(huì)計(jì)朋友非常適用。
    2、其他像一千二百三十四,甲、乙……,子、丑……,羅馬數(shù)字等的轉(zhuǎn)換,可參考上法。

    Word中的常用快捷鍵吧
    “字體”對(duì)話框     Ctrl+D
    選擇框式工具欄中的“字體”框     Ctrl+Shift+F
    加粗 Ctrl+B
    傾斜 Ctrl+I
    下劃線Ctrl+U
    “上標(biāo)”效果     Ctrl+Shift+=
    “下標(biāo)”效果     Ctrl+=
    “關(guān)閉”命令     Ctrl+W
    Word快捷鍵一覽表
    序號(hào)       快捷鍵CTRL+       代表意義
    1…………Z…………撤消
    2…………A…………全選
    3…………X…………剪切
    4…………C…………復(fù)制
    5…………V…………粘貼
    6…………S…………保存
    7…………B…………加粗
    8………… Q…………左對(duì)齊
    9…………E…………據(jù)中
    10…………R…………右對(duì)齊
    11…………]…………放大
    22…………[…………縮小
    12…………N…………新建文檔
    13…………I…………字體傾斜
    14…………W…………退出
    15…………P…………打印
    16…………U…………下劃線
    17…………O…………打開
    18…………k…………插入超級(jí)連接
    19…………F…………查找
    20…………H…………替換
    21…………G…………定位
    23…Ctrl+Alt+L……帶括號(hào)的編號(hào)
    24…Ctrl+Alt+.________…
    25…Alt+數(shù)字………區(qū)位碼輸入
    26…Ctrl+Alt+Del………關(guān)機(jī)
    27…Ctrl+Alt+Shift+?……¿
    28…Ctrl+Alt+Shift+!……¡
    29…Alt+Ctrl+E……………?
    30…Alt+Ctrl+R……………®
    31…Alt+Ctrl+T……………™
    32…Alt+Ctrl+Ctrl…………©
    33……Ctrl+D……………格式字體
    34……Ctrl+Shift+= ………上標(biāo)
    35……Ctrl+=………………下標(biāo)
    36……Ctrl+Shift+>……放大字體
    37……Ctrl+Shift+< ……縮小字體
    38……Alt+Ctrl+I………打印預(yù)覽
    39……Alt+Ctrl+O………大剛示圖
    40……Alt+Ctrl+P………普通示圖
    41……Alt+Ctrl+M………插入批注
    42……Alt+菜單上字母………打開該菜單

    無(wú)級(jí)微調(diào)
    打開“繪圖”工具欄-點(diǎn)開下拉菜單-繪圖網(wǎng)格...-將水平間距和垂直間距調(diào)到最小0.01-確定,這樣你就可以無(wú)級(jí)微調(diào)

    把work設(shè)置成在線打開,但不能修改‘只讀’怎搞啊?
    文件夾共享為只讀

    在WORD中輸入三個(gè)等號(hào)然后回車。。。出來(lái)的是雙橫線哦。。。
    同樣的方法也可以做出波浪線單橫線哦!~~~~~ ,
    ###為中間粗上下細(xì)的三線, ***為點(diǎn)線, ~~~為波浪線, ---為單線

    輸入拼音字母的音調(diào)怎么輸入
    用智能ABC,鍵入v9,然后自己挑選吧!

    頁(yè)碼設(shè)置
    1、打開頁(yè)眉/頁(yè)腳視圖,點(diǎn)擊插入頁(yè)碼按鈕,將頁(yè)碼插入(此時(shí)所有的頁(yè)碼是連續(xù)編號(hào)的) 2、切換到頁(yè)面視圖,在需要從1計(jì)數(shù)的頁(yè)面上插入連續(xù)分節(jié)符(插入--分隔符--分節(jié)符--連續(xù)) 3、再次換到頁(yè)眉/頁(yè)腳視圖,點(diǎn)擊設(shè)置頁(yè)碼格式按鈕,將頁(yè)碼編排-起始頁(yè)碼設(shè)置為1

    把Excel中的表格以圖片形式復(fù)制到Word中
    除了用抓圖軟件和全屏拷貝法外還有更簡(jiǎn)單的呢
    先選定區(qū)域,按住Shift健點(diǎn)擊"編輯"會(huì)出現(xiàn)"復(fù)制圖片""粘貼圖片",復(fù)制了后,在Word中選"粘貼圖片"就可像處理圖片一樣處理Excel表格了!

    Ctrl+鼠標(biāo)滑輪(左右鍵中間的那個(gè)輪子)可以迅速調(diào)節(jié)顯示比例的大小(100%)。向上滑擴(kuò)大,向下滑縮小。


    快速調(diào)整頁(yè)眉橫線長(zhǎng)度
    在word插入頁(yè)眉后,會(huì)自動(dòng)在此位置添加一條長(zhǎng)橫線。如果需要調(diào)整此線的長(zhǎng)度及其水平位置,可以首先激活頁(yè)眉,選擇格式下的段落命令,調(diào)整一下左右縮進(jìn)的字符值,確定可以看到最終效果了!

    快速瀏覽圖片
    在WORD2003中,如果插入的圖片過(guò)多,會(huì)影響打開和翻滾的速度。其實(shí),我們可以通過(guò)改變圖片的顯示方式改變?yōu)g覽速度。
    工具--選項(xiàng)--視圖--圖片框
    這樣,先顯示的是圖片框,需要看的時(shí)候,停留,即可顯示!

    WORD 中如何輸入分?jǐn)?shù)
    1、打開word,點(diǎn)擊工具菜單欄的“插入”,在下拉菜單中點(diǎn)“域”。
    2、在打開的復(fù)選框中的類別欄中“選等式公式”,域名中“EQ”。然后點(diǎn)擊“選項(xiàng)”,在出現(xiàn)的菜單選項(xiàng)中選“F(,)”,接著點(diǎn)擊“添加到域”并“確定”。
    3、然后在輸入F(,)數(shù)字,如要輸入23 只需在F(,)輸入F(2,3)就能得到2/3

    怎樣使WORD 文檔只有第一頁(yè)沒有頁(yè)眉,頁(yè)腳
    答:頁(yè)面設(shè)置-頁(yè)眉和頁(yè)腳,選首頁(yè)不同,然后選中首頁(yè)頁(yè)眉中的小箭頭,格式-邊框和底紋,選擇無(wú),這個(gè)只要在“視圖”——“頁(yè)眉頁(yè)腳”,其中的頁(yè)面設(shè)置里,不要整個(gè)文檔,就可以看到一個(gè)“同前”的標(biāo)志,不選,前后的設(shè)置情況就不同了

    Word中雙擊鼠標(biāo)的妙用
    在Word的程序窗口中不同位置上雙擊,可以快速實(shí)現(xiàn)一些常用功能,我們歸納如下:
    在標(biāo)題欄或垂直滾動(dòng)條下端空白區(qū)域雙擊,則窗口在最大化和原來(lái)狀態(tài)之間切換;
    將鼠標(biāo)在標(biāo)題欄最左邊WORD文檔標(biāo)記符號(hào)處雙擊,則直接退出WORD(如果沒有保存,會(huì)彈出提示保存對(duì)話框);
    將鼠標(biāo)移到垂直滾動(dòng)條的上端成雙向拖拉箭頭時(shí)雙擊,則快速將文檔窗口一分為二;
    將鼠標(biāo)移到兩個(gè)窗口的分界線處成雙向拖拉箭頭時(shí)雙擊,則取消對(duì)窗口的拆分;
    在狀態(tài)欄上的“修訂”上雙擊,則啟動(dòng)“修訂”功能,并打開“審閱”工具欄。再次雙擊,則關(guān)閉該功能,但“審閱”工具欄不會(huì)被關(guān)閉;
    在狀態(tài)欄上的“改寫”上雙擊,則轉(zhuǎn)換為“改寫”形式(再次“雙擊”,轉(zhuǎn)換為“插入”形式);
    如果文檔添加了頁(yè)眉(頁(yè)腳),將鼠標(biāo)移到頁(yè)眉(頁(yè)腳)處雙擊,則激活頁(yè)眉(頁(yè)腳)進(jìn)入編輯狀態(tài),對(duì)其進(jìn)行編輯;在空白文檔處雙擊,則啟動(dòng)“即點(diǎn)即輸”功能;
    在標(biāo)尺前端空白處雙擊,則啟動(dòng)“頁(yè)面設(shè)置”對(duì)話框。


    在word編輯中經(jīng)常要調(diào)整字休大小來(lái)滿足編輯要求
    選中要修改的文字,按ctrl+]或ctrl+[來(lái)改變字體的大小!
    這個(gè)方法可以微量改字體大小~



    文本框的線條
    1. 制作好文檔后,通過(guò)“視圖→頁(yè)眉頁(yè)腳”命令,調(diào)出“頁(yè)眉頁(yè)腳”工具欄,單擊其中的“顯示→隱藏文檔正文文字”按鈕,隱藏正文部分的文字內(nèi)容。
    2. 選擇“插入”菜單中的“文本框”命令,在頁(yè)眉的下方插入一個(gè)空文本框。
    3. 在文本框內(nèi)加入作為水印的文字、圖形等內(nèi)容,右擊圖片,選擇快捷菜單中的“設(shè)置圖片格式”命令,在對(duì)話框中“圖片”選項(xiàng)卡下,通過(guò)“圖像控制”改變圖像的顏色,對(duì)比度和亮度,并手動(dòng)調(diào)整圖片的大小。   
    4. 通過(guò)“設(shè)置文本框格式”命令,把文本框的線條色改為無(wú)線條色。
    5. 單擊“頁(yè)眉頁(yè)腳”工具欄的“關(guān)閉”按鈕,退出“頁(yè)眉頁(yè)腳”編輯。

    每頁(yè)添加水印的操作
    1. 制作好文檔后,通過(guò)“視圖→頁(yè)眉頁(yè)腳”命令,調(diào)出“頁(yè)眉頁(yè)腳”工具欄,單擊其中的“顯示→隱藏文檔正文文字”按鈕,隱藏正文部分的文字內(nèi)容。
    2. 選擇“插入”菜單中的“文本框”命令,在頁(yè)眉的下方插入一個(gè)空文本框。
    3. 在文本框內(nèi)加入作為水印的文字、圖形等內(nèi)容,右擊圖片,選擇快捷菜單中的“設(shè)置圖片格式”命令,在對(duì)話框中“圖片”選項(xiàng)卡下,通過(guò)“圖像控制”改變圖像的顏色,對(duì)比度和亮度,并手動(dòng)調(diào)整圖片的大小。   
    4. 通過(guò)“設(shè)置文本框格式”命令,把文本框的線條色改為無(wú)線條色。
    5. 單擊“頁(yè)眉頁(yè)腳”工具欄的“關(guān)閉”按鈕,退出“頁(yè)眉頁(yè)腳”編輯。
    6. 完成上述步驟的操作,水印制作得以完成,這樣就為每一頁(yè)都添加了相同的水印。

    讓W(xué)ord頁(yè)面快速一分為二
    將光標(biāo)定位在想分開的位置上,按下“Ctrl+Shift+Enter”組合鍵。


    使Word中的字體變清晰
    Word文檔中使用 “仿宋” 字體很淡,可按以下方法使字體更清晰:
    右擊桌面,點(diǎn) “屬性”,點(diǎn) “外觀”,點(diǎn) “效果”,選中“使用下列方式使屏幕字體的邊緣平滑”選“清晰”,確定。

    Word雙面打印技巧
       我們平時(shí)用電腦的時(shí)候可能都少不了打印材料,Word是我們平常用的最多的Office軟件之一。有時(shí)我們要用Word打印許多頁(yè)的文檔,出于格式要求或?yàn)榱斯?jié)省紙張,會(huì)進(jìn)行雙面打印

      我們一般常用的操作方法是:選擇“打印”對(duì)話框底部的“打印”下拉列表框中的“打印奇數(shù)頁(yè)”或“打印偶數(shù)頁(yè)”,來(lái)實(shí)現(xiàn)雙面打印。我們?cè)O(shè)定為先打印奇數(shù)頁(yè)。等奇數(shù)頁(yè)打印結(jié)束后,將原先已打印好的紙反過(guò)來(lái)重新放到打印機(jī)上,選擇該設(shè)置的“打印偶數(shù)頁(yè)”,單擊“確定”按鈕。這樣通過(guò)兩次打印命令就可以實(shí)現(xiàn)雙面打印。

      我們也可以利用另一種更靈活的雙面打印方式:打開“打印”對(duì)話框,選中“人工雙面打印”,確定后就會(huì)出現(xiàn)一個(gè)“請(qǐng)將出紙器中已打印好的一面的紙取出并將其放回到送紙器中,然后‘確定’按鍵,繼續(xù)打印”的對(duì)話框并開始打印奇數(shù)頁(yè),打完后將原先已打印好的紙反過(guò)來(lái)重新放到打印機(jī)上,然后按下該對(duì)話框的“確定”按鍵,Word就會(huì)自動(dòng)再打印偶數(shù)頁(yè),這樣只用一次打印命令就可以了。

      兩種方法對(duì)比,后者較前者更為方便。

    posted @ 2010-04-20 10:26 小強(qiáng)摩羯座 閱讀(238) | 評(píng)論 (0)編輯 收藏

    字符串拆分的中文處理問題

    容健行@20077

    轉(zhuǎn)載請(qǐng)注明出處

    原文出處:http://www.devdiv.net/home/space.php?uid=125&do=blog&id=365

    概述:

    拆分一個(gè)字符串在程序中使用非常廣泛,特別是我們經(jīng)常跟表格打交道的程序員們。所謂拆分字符串,就是將一個(gè)字符串中間以某個(gè)(或某些)字符為分隔,拆分成多個(gè)字符串。如 std::string s = "abc | ddd | 中國(guó)";    如果以豎線“|”拆分,可以將這個(gè)字符串拆分成三個(gè)字符串。

    當(dāng)然字符串拆分還包括通過(guò)正則表達(dá)式來(lái)拆分,為了簡(jiǎn)化問題,我們以單個(gè)字符做分隔的拆分,因?yàn)檫@種拆分用得最多。代碼使用C++來(lái)講解。

    問題:

    問題來(lái)源于實(shí)際,是之前我們組和其他組都有遇上的。先看一個(gè)例子,使用"|"拆分以下字符串,看起來(lái)怎么數(shù)都是分為48列,但我看到好幾個(gè)版本的字符串拆分函數(shù)卻報(bào)有49列:

    "AGZGY1000004|200|劉瓅||20100101||OPRT10|1|0||AAGZ0Y100|0|0|24|0|0|0|0||-1|20030101|0|20991231||AGZGK6172888|200|曾曉翔||20100101||OPRT10|1|0||AAGZ0K617|0|0|24|0|0|0|0||-1|20061215|1|20061215||"

    原因分析:

    讓我們先把以上字符串放到UltraEdit中,并切換到16進(jìn)制的編輯模式,看看它的編碼。

    原因是原來(lái)的字符串拆分函數(shù)只是簡(jiǎn)單的查找“|”(編碼為0x7c,而沒有考慮到中文的處理(源代碼太多,且有好幾個(gè)版本,這里略去)。

    boss中,c++程序使用的編碼方式幾乎全為ansi,而在ansi中,表示中文是用兩個(gè)字符,且第一個(gè)字符是一個(gè)大于0x80的字符(字符的第一位為1),第二個(gè)字符為任意字符。這里引起一個(gè)問題:

    當(dāng)我們要分割字符串時(shí),假如用"|"(0x7c)作為分割符,當(dāng)分析上面這個(gè)字符遇到""(編碼為0xad,0x7c)這個(gè)字符時(shí),會(huì)把它第二個(gè)字符作為了分割符,結(jié)果就多出了一列。

    解決方案:

    問題原因找到了,重新寫了一下字符串拆分函數(shù)-Split,這里使用的方法是:找到分隔符后,再向前查找字符看一下它前一個(gè)字符是否為東亞文字的第一個(gè)字符編碼(編碼大于0x80)。

    考慮到以后支持unicode,這里使用了模板。以下可能不是最高效簡(jiǎn)單的實(shí)現(xiàn),但如果以后遇上這種問題,可以參考一下。

    #include "stdafx.h"

    #include <stdio.h>

    #include <tchar.h>

    #include <iostream>

    #include <string>

    #include <vector>

    #include <algorithm>

    #include <fstream>

    // unicode 分割策略

    inline

        bool __SplitPolicy(

        const std::wstring& s,

        const std::wstring& splitchar,

        std::wstring::size_type& pos)

    {

        pos = s.find_first_of(splitchar, pos);

        return pos != std::string::npos;

    }

    // ansi 分割策略

    inline

        bool __SplitPolicy(

        const std::string& s,

        const std::string& splitchar,

        std::string::size_type& pos)

    {

        pos = s.find_first_of(splitchar, pos);

        if (pos != std::string::npos)

        {

           // 如果前一個(gè)字符的第一位為1,且當(dāng)前字符是在東亞文字的第二個(gè)字符,

           // 則認(rèn)為該字符是東亞字的其中一個(gè)字符,要跳過(guò),不作為分割符。

           std::string::size_type i = 1;

           for (; i < pos; ++i)

           {

               if (!((char)(s[pos - i]) & 0x80)) // 判斷第一位是否為1。(0x80的二進(jìn)制為 10000000)

                  break;

           }

           if (!(i % 2)) // 看一下當(dāng)前字符是否為東亞文字的第二個(gè)字符

           {

               ++pos;

               __SplitPolicy(s, splitchar, pos);

           }

        }

        return pos != std::string::npos;

    }

    template<typename char_type> inline

        int Split(

        const std::basic_string<char_type>& s,

        const std::basic_string<char_type>& splitchar,

        std::vector<std::basic_string<char_type> >& vec)

    {

        typedef std::basic_string<char_type>   string_t;

        typedef typename string_t::size_type   size_t;

        string_t tmpstr;

        size_t pos = 0, prev_pos = 0;

        vec.clear();

        while (__SplitPolicy(s, splitchar, pos))

        {

           tmpstr = s.substr(prev_pos, pos - prev_pos);

           vec.push_back(tmpstr);

           prev_pos = ++pos;

        }

        size_t len = s.length() - prev_pos;

        if (len > 0)

           vec.push_back(s.substr(prev_pos, len));

        return static_cast<int>(vec.size());

    }

    // ansi版本測(cè)試

    void testSplit()

    {

        std::vector<std::string> vec;

        const std::string str = "AGZGY1000004|200|劉瓅瓅||20100101||OPRT10|1|0||AAGZ0Y100|0|0|24|0|0|0|0||-1|20030101|0|20991231||AGZGK6172888|200|曾曉翔||20100101||OPRT10|1|0||AAGZ0K617|0|0|24|0|0|0|0||-1|20061215|1|20061215||a";

        const std::string sp = "|";

        int count = Split(str, sp, vec);

        for (std::vector<std::string>::const_iterator it = vec.begin(); it != vec.end(); ++it)

           std::cout << *it << " ";

    }

    // unicode版本測(cè)試

    void testSplitW()

    {

        std::vector<std::wstring> vec;

        const std::wstring str = L"AGZGY1000004|200|劉瓅||20100101||OPRT10|1|0||AAGZ0Y100|0|0|24|0|0|0|0||-1|20030101|0|20991231||AGZGK6172888|200|曾曉翔||20100101||OPRT10|1|0||AAGZ0K617|0|0|24|0|0|0|0||-1|20061215|1|20061215||";

        const std::wstring sp = L"|";

        Split(str, sp, vec);

        const char head[3] = {0xff, 0xfe, 0};

        const wchar_t line[3] = L" ";

        // 控制臺(tái)輸出不了unicode字符,使用輸出到文件的方式

        std::ofstream fileOut("C:/out.txt");

        fileOut.write(head, 2);

        for (std::vector<std::wstring>::iterator it = vec.begin(); it != vec.end(); ++it)

        {

           fileOut.write((const char*)it->c_str(), it->length() * 2);

           fileOut.write((const char*)line, 2);

        }

    }

    int main()

    {

        testSplit();

        testSplitW();

    }

    參考:

    1http://unicode.org/

    2《談?wù)刄nicode編碼,簡(jiǎn)要解釋UCS、UTF、BMP、BOM等名詞》

    posted @ 2010-04-19 01:47 小強(qiáng)摩羯座 閱讀(764) | 評(píng)論 (0)編輯 收藏

    關(guān)于C++中文字符的處理

    一 引入問題
    代碼 wchar_t a[3]=L”中國(guó)”,編譯時(shí)出錯(cuò),出錯(cuò)信息為:數(shù)組越界。但wchar_t 是一個(gè)寬字節(jié)類型,數(shù)組a的大小應(yīng)為6個(gè)字節(jié),而兩個(gè)漢字的的unicode碼占4個(gè)字節(jié),再加上一個(gè)結(jié)束符,最多6個(gè)字節(jié),所以應(yīng)該不會(huì)越界。難道是編譯器出問題了?
    二 解決引入問題所需的知識(shí)
       主要需兩方面的知識(shí),第一個(gè)為字符尤其是漢字的編碼,以及語(yǔ)言和工具的支持情況,第二個(gè)是vc/c++中MutiByte Charater Set 和 Wide Character Set有關(guān)內(nèi)存分配的情況.
    三 漢字的編碼方式及在vc/c++中的處理
    1.漢字編碼方式的介紹
    對(duì)英文字符的處理,7位ASCII碼字符集中的字符即可滿足使用需求,且英文字符在計(jì)算機(jī)上的輸入及輸出也非常簡(jiǎn)單,因此,英文字符的輸入、存儲(chǔ)、內(nèi)部處理和輸出都可以只用同一個(gè)編碼(如ASCII碼)。
    而漢字是一種象形文字,字?jǐn)?shù)極多(現(xiàn)代漢字中僅常用字就有六、七千個(gè),總字?jǐn)?shù)高達(dá)5萬(wàn)個(gè)以上),且字形復(fù)雜,每一個(gè)漢字都有"音、形、義"三要素,同音字、異體字也很多,這些都給漢字的的計(jì)算機(jī)處理帶來(lái)了很大的困難。要在計(jì)算機(jī)中處理漢字,必須解決以下幾個(gè)問題:首先是漢字的輸入,即如何把結(jié)構(gòu)復(fù)雜的方塊漢字輸入到計(jì)算機(jī)中去,這是漢字處理的關(guān)鍵;其次,漢字在計(jì)算機(jī)內(nèi)如何表示和存儲(chǔ)?如何與西文兼容?最后,如何將漢字的處理結(jié)果從計(jì)算機(jī)內(nèi)輸出?
    為此,必須將漢字代碼化,即對(duì)漢字進(jìn)行編碼。對(duì)應(yīng)于上述漢字處理過(guò)程中的輸入、內(nèi)部處理及輸出這三個(gè)主要環(huán)節(jié),每一個(gè)漢字的編碼都包括輸入碼、交換碼、內(nèi)部碼和字形碼。在計(jì)算機(jī)的漢字信息處理系統(tǒng)中,處理漢字時(shí)要進(jìn)行如下的代碼轉(zhuǎn)換:輸入碼→交換碼→內(nèi)部碼→字形碼。
    (1)輸入碼: 作用是,利用它和現(xiàn)有的標(biāo)準(zhǔn)西文鍵盤結(jié)合來(lái)輸入漢字。輸入碼也稱為外碼。主要?dú)w為四類:
    a)      數(shù)字編碼:數(shù)字編碼是用等長(zhǎng)的數(shù)字串為漢字逐一編號(hào),以這個(gè)編號(hào)作為漢字的輸入碼。例如,區(qū)位碼、電報(bào)碼等都屬于數(shù)字編碼。
    b)      拼音碼:拼音碼是以漢字的讀音為基礎(chǔ)的輸入辦法。
    c)      字形碼:字形碼是以漢字的字形結(jié)構(gòu)為基礎(chǔ)的輸入編碼。例如,五筆字型碼(王碼)。
    d)      音形碼:音形碼是兼顧漢字的讀音和字形的輸入編碼。
    (2)交換碼:用于漢字外碼和內(nèi)部碼的交換。交換碼的國(guó)家標(biāo)準(zhǔn)代號(hào)為GB2312-80。
    (3)內(nèi)部碼:內(nèi)部碼是漢字在計(jì)算機(jī)內(nèi)的基本表示形式,是計(jì)算機(jī)對(duì)漢字進(jìn)行識(shí)別、存儲(chǔ)、處理和傳輸所用的編碼。內(nèi)部碼也是雙字節(jié)編碼,將國(guó)標(biāo)碼兩個(gè)字節(jié)的最高位都置為"1",即轉(zhuǎn)換成漢字的內(nèi)部碼。
    (4)字形碼:字形碼是表示漢字字形信息(漢字的結(jié)構(gòu)、形狀、筆劃等)的編碼,用來(lái)實(shí)現(xiàn)計(jì)算機(jī)對(duì)漢字的輸出(顯示、打印)。
    2.VC中漢字的編碼方式
         vc/c++正是采用了GB2312內(nèi)部碼作為漢字的編碼方式,因此vc/c++中的各種輸入輸出方法,如cin/wcin,cout/wcout,scanf/wsanf,printf/wprintf...都是基于GB2312的,如果漢字的內(nèi)碼不是這種編碼方式,那么利用上述各種方法就不會(huì)正確的解析漢字。
    仔細(xì)觀察ASCII字符表,從第161個(gè)字符開始,后面的字符并不經(jīng)常為用戶所使用,負(fù)值也未使用。GB2312編碼方式充分利用這一特性,將161-255(-95~-1)之間的數(shù)值空間作為漢字的標(biāo)識(shí)碼。既然255-161 = 94不能滿足漢字容量的要求,就將每?jī)蓚€(gè)字符并在一塊(即一個(gè)漢字占兩個(gè)字節(jié)),顯然,94* 94 =8836基本上已經(jīng)滿足了常用漢字個(gè)數(shù)的要求。計(jì)算機(jī)處理字符時(shí),當(dāng)連續(xù)處理到兩個(gè)大與160(或-95~-1)的字節(jié)時(shí),就認(rèn)為這兩個(gè)字節(jié)存放了一個(gè)漢字字符。可以用下面的Demo程序來(lái)模擬vc/c++中輸出漢字字符的過(guò)程。
        unsigned char input[50];
    cin>>input;
        int flag=0;
         for(int i =0 ;i < 50 ;i++)
          {
             if(input[i] > 0xa0 && input[i] != 0)
              {
                  if(flag == 1)
                   {
                        cout<<"chinese character"<<endl;
                        flag = 0;
                   }
                  else
                   {
                        flag++;
                   }
              }
             else if(input[i] == 0)
              {
                  break;
              }
             else
              {
                   cout<<"english character"<<endl;
              }
    }
    輸入:Hello中國(guó) (“中國(guó)”對(duì)應(yīng)的GB2312內(nèi)碼為:214 208,185 250)
    輸出:english character
    english character
    english character
    english character
    english character
    chinese character
    chinese character
    vc/c++中的英文字符仍然采用ASCII編碼方式。可以設(shè)想,其他國(guó)家程序員利用vc/c++編寫程序輸入本國(guó)字符時(shí),vc/c++則會(huì)采用該國(guó)的字符編碼方式來(lái)處理這些字符。
        問題又產(chǎn)生了,韓國(guó)的vc/c++程序在中國(guó)的vc/c++上運(yùn)行時(shí),如果沒有相應(yīng)的內(nèi)碼庫(kù),則對(duì)韓語(yǔ)字符的顯示有可能出現(xiàn)亂碼。我個(gè)人猜測(cè),vc安裝程序中應(yīng)該帶有不同國(guó)家的內(nèi)碼庫(kù),這樣一來(lái)肯定會(huì)占用很大的空間。如果所有的國(guó)家使用統(tǒng)一的編碼方式,且所有的程序設(shè)計(jì)語(yǔ)言和開發(fā)工具都支持這種編碼方式該多好!而現(xiàn)實(shí)中,確實(shí)已經(jīng)有這種編碼方式了,且許多新的語(yǔ)言也都支持這種編碼方式,如Java、C#等,它就是下面的Unicode編碼
    3.新的內(nèi)碼標(biāo)準(zhǔn)---Unicode
    Unicode(統(tǒng)一碼、萬(wàn)國(guó)碼、單一碼)是一種在計(jì)算機(jī)上使用的字符編碼。它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語(yǔ)言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。1990年開始研發(fā),1994年正式公布。隨著計(jì)算機(jī)工作能力的增強(qiáng),Unicode也在面世以來(lái)的十多年里得到普及。最新版本的 Unicode 是 2005年3月31推出的Unicode 4.1.0 。另外,5.0 Beta已于2005年12月12日推出,以供各會(huì)員評(píng)價(jià)。
    Unicode 編碼系統(tǒng)可分為編碼方式和實(shí)現(xiàn)方式兩個(gè)層次。
    編碼方式:Unicode 的編碼方式與 ISO 10646 的通用字符集(Universal Character Set,UCS)概念相對(duì)應(yīng),目前的用于實(shí)用的 Unicode 版本對(duì)應(yīng)于 UCS-2,使用16位的編碼空間。也就是每個(gè)字符占用2個(gè)字節(jié)。這樣理論上一共最多可以表示 216 個(gè)字符。基本滿足各種語(yǔ)言的使用。實(shí)際上目前版本的 Unicode 尚未填充滿這16位編碼,保留了大量空間作為特殊使用或?qū)?lái)擴(kuò)展。
    實(shí)現(xiàn)方式:Unicode 的實(shí)現(xiàn)方式不同于編碼方式。一個(gè)字符的 Unicode 編碼是確定的。但是在實(shí)際傳輸過(guò)程中,由于不同系統(tǒng)平臺(tái)的設(shè)計(jì)不一定一致,以及出于節(jié)省空間的目的,對(duì) Unicode 編碼的實(shí)現(xiàn)方式有所不同。Unicode 的實(shí)現(xiàn)方式稱為Unicode轉(zhuǎn)換格式(Unicode Translation Format,簡(jiǎn)稱為 UTF)。如,UTF-8 編碼,這是一種變長(zhǎng)編碼,它將基本7位ASCII字符仍用7位編碼表示,占用一個(gè)字節(jié)(首位補(bǔ)0)。而遇到與其他 Unicode 字符混合的情況,將按一定算法轉(zhuǎn)換,每個(gè)字符使用1-3個(gè)字節(jié)編碼,并利用首位為0或1進(jìn)行識(shí)別。
    Java與C#語(yǔ)言都是采用Unicode編碼方式,在這兩種語(yǔ)言中定義一個(gè)字符,在內(nèi)存中存放的就是這個(gè)字符的兩字節(jié)Unicode碼。如下所示:
    char a='我';     => 內(nèi)存中存放的Unicode碼為:25105
    4.內(nèi)碼的相互轉(zhuǎn)換
    (1)vc中的實(shí)現(xiàn)方法
       利用Windows系統(tǒng)提供的API:::MultiByteToWideChar::WideCharToMultiByte
    ::MultiByteToWideChar實(shí)現(xiàn)當(dāng)前碼到Unicode碼的轉(zhuǎn)換;
    ::WideCharToMultiByte實(shí)現(xiàn)Unicode碼到當(dāng)前碼的轉(zhuǎn)換;
    (2)Java中的實(shí)現(xiàn)方法
        String vcString=new String(javaString.getBytes("UTF-8"),"gb2312");
    java的編碼應(yīng)該是UTF-8
    (3)C#中的實(shí)現(xiàn)方法
        ??
    四 vc中的MutiByte Charater Set 和 Wide Character Set
    1.MultiByte Charater Set方式
       這種方式以按字節(jié)為單位存放字符,即如果一個(gè)字符碼為兩字節(jié),則在內(nèi)存中占兩字節(jié),字符碼為一字節(jié),就占一字節(jié)。例如,字符串“中國(guó)abc”的編碼為:中(0xd6、0xd0)、國(guó)(0xb9、0xfa)、a(0x61)、b(0x62)、c(0x63)、\0(0x00),就存為如下方式:
    對(duì)應(yīng)的類型,方法有:
    char、scanf、printf、cin、cout …
    2.Wide Character Set
    這種方式是以兩字節(jié)為單位存放字符,即如果一個(gè)字符碼為兩字節(jié),則在內(nèi)存中占四字節(jié),字符碼為一字節(jié),就占兩字節(jié)。例如,字符串“中國(guó)abc”就存為如下方式:
    對(duì)應(yīng)的類型,方法有:
    wchar_t、wscanf、wprintf、wcin、wcout …
    造成上面存儲(chǔ)方式的根本原因在于,wchar_t類型其實(shí)是一個(gè)unsigned short 類型。如,存儲(chǔ)上面字符串的數(shù)組的定義為:wchar_t buffer[8] 等價(jià)于unsigned short buffer[8].而所有以字母w開頭的方法也都是以u(píng)nsigned short類型,即兩字節(jié)為單位來(lái)處理字符,因此,存儲(chǔ)在wchar_t類型數(shù)組中的字符串無(wú)法用cout顯示,只能用wcout方法來(lái)顯示。
    由于Unicode碼也是采用兩個(gè)字節(jié),因此Wide Character Set方式能夠很好的支持Unicode碼的存儲(chǔ),但是在vc的環(huán)境下要將一個(gè)Unicode碼存入兩字節(jié)而不是四字節(jié)內(nèi)存中,必須通過(guò)上面的API函數(shù)::MultiByteToWideChar首先,將當(dāng)前的編碼轉(zhuǎn)換為Unicode碼,然后,將每個(gè)字符的Unicode碼放入每一個(gè)wchar_t類型的變量中。以下是一個(gè)實(shí)例代碼:
    char input[50];
    cin>>input;
    int size;
    size=::MultiByteToWideChar(CP_ACP,0,input,strlen(input)+1,NULL,0);
    if(size==0)
         return -1;
    wchar_t *widebuff=new wchar_t[size];
    ::MultiByteToWideChar(CP_ACP,0,input,strlen(input)+1,widebuff,size);
    輸入:中國(guó)abc
    Debug斷點(diǎn)調(diào)試:
    size==6
    數(shù)組widebuff[0-size]占12字節(jié),存放了6個(gè)字符的Unicode碼,碼值為:
    中(0x4e2d) 國(guó)(0x56fd) a(0x0061) b(0x0062) c(0x0063) d(0x0000)
    這時(shí),數(shù)組的大小size等于輸入的字符個(gè)數(shù)加上一個(gè)結(jié)束符,符合我們的想象。
    五 引入問題的錯(cuò)誤分析
    (1) 沒有理解編譯器中的編碼方式
        雖然vc/c++中漢字的編碼占兩個(gè)字節(jié),但并不是Unicode碼,是GB2312碼。
    (2) 沒有理解MutiByte Charater Set 和 Wide Character Set的存儲(chǔ)原則;
        在vc/c++中,“中國(guó)”按char[5]來(lái)對(duì)待,而wchar_t a[3]實(shí)際上是三個(gè)unsigned short類型的變量,因此賦值時(shí)會(huì)越界。

    posted @ 2010-04-18 01:10 小強(qiáng)摩羯座 閱讀(225) | 評(píng)論 (0)編輯 收藏

        

    //gameloft 筆試題
    /*
    1、RGB值轉(zhuǎn)灰度值對(duì)32位整數(shù)取R,G,B對(duì)應(yīng)的8位并加權(quán)合成。
    2、求一個(gè)字符串中出現(xiàn)頻率最高的字符。字符范圍并渦有說(shuō)明,通常應(yīng)
    指ASCII字符集,可是當(dāng)時(shí)考慮復(fù)雜了,于是想到了stl的map來(lái)做。
    結(jié)果沒有寫完。就交了。
    */
    #include<iostream>

    using namespace std;
    #define CHARNUM 256 
    //計(jì)算一個(gè)串最出現(xiàn)頻率最高的字符

    char mostFreq(const char* str)
    {
     int freq[CHARNUM]= {0};
     int firstPos[CHARNUM] = {0};
     int pos = 0;
     const char* p = str;
     while( *p != '\0')
     {
      if(freq[*p] == 0)
      {
       firstPos[*p] = pos; 
      }
      freq[*p++]++;
       pos++;
      }
      int maxF = -1;
      int ch = '\0';
      for(int i = 1;i < 256;i++)
      {
       if( freq[i] > maxF)
       {
        ch = i;
       maxF = freq[i];
       }
       if( freq[i] == maxF)
       {
        if( firstPos[i] < firstPos[ch])
        {
         ch = i; 
        }
       }    
      }
      cout<<" maxF ="<<maxF<<endl;
     
      return (char)ch;
    }
     
    int main()
    {
     int* a[9][4][5];
     
     
     int b = a[5] - a[3];
     cout<<"b = "<<b<<endl;
     
     int* c[3];
     
     char * str = "aabyebbdfdf 1`5454545$$$#$#$2788kldef";
     
     char ch;
     ch = mostFreq( str);
     
     cout<<"ch = " <<ch<<endl;
    }
    4.給出一個(gè)CThing 類的源代碼讓分析,其中有三個(gè)語(yǔ)句要求解釋語(yǔ)句作用。
    一個(gè)填空,分析時(shí)有點(diǎn)忙了,應(yīng)該一個(gè)函數(shù)一個(gè)函數(shù)的分析,或許會(huì)有清晰思路。
    將各個(gè)類的名稱和功能整理下會(huì)理出些思路。
    5、給出strcpy的源代碼讓說(shuō)明其功能,并指出參數(shù)設(shè)置上只少一人錯(cuò)誤
    6、給出一個(gè)將整數(shù)i轉(zhuǎn)換為8進(jìn)制的方法,要求對(duì)其進(jìn)行改進(jìn)。
    src:
    void count(int i, char* str)
    {
         map[
     sorry, 記憶不清楚了

    7、給幾個(gè)名詞讓解釋placement new,ARM, GCC, android, 還有一人??
     8、英文解釋題目。第一個(gè)還好。第二個(gè)說(shuō)游戲加速的
     
     increment  ...update frame , ??這詞詞認(rèn)識(shí),放一起讀不出來(lái)表示什么
     意思

    posted @ 2010-04-17 01:38 小強(qiáng)摩羯座 閱讀(204) | 評(píng)論 (0)編輯 收藏

         摘要:   1   2   3   4#include<cstdio>   5#include<iostream>   6#include<cstdlib>   7#include<typeinfo>&nbs...  閱讀全文

    posted @ 2010-04-16 10:31 小強(qiáng)摩羯座 閱讀(240) | 評(píng)論 (0)編輯 收藏

         摘要:   1   2   3// realize a SingleList class   4/**//*   5實(shí)現(xiàn)方法   6add()   7add2Head(dd);   8del ...  閱讀全文

    posted @ 2010-04-16 10:30 小強(qiáng)摩羯座 閱讀(183) | 評(píng)論 (0)編輯 收藏

    /**
      * 實(shí)現(xiàn)測(cè)試:串匹配和詞頻統(tǒng)計(jì)功能
      */
     public  void largerTextExample()
     {
      String text = "你好abc,ac,abc,def,ac,okt, ac,dfdfe, ac , what is it 你好啊,bc";
      String[] terms = {"你好","ac", "abc", "bc"};
      for (int i = 0; i < terms.length; i++)
      {
       
       tree.add(terms[i].getBytes(), terms[i]);
       System.out.println( terms[i]);
      }
      tree.prepare();

      Set termsThatHit = new HashSet();
      Iterator iter = tree.search(text.getBytes());
      
    //  統(tǒng)計(jì)詞頻
      Map<String, Integer> freqCount = new HashMap<String, Integer>();
      for (; iter.hasNext();)
      {
       SearchResult result = (SearchResult) iter.next();
       Set set = result.getOutputs();
       System.out.println(set);
       for(Iterator it = set.iterator();it.hasNext();)
       {
        String str = (String)it.next();
        if( freqCount.get(str) == null)
         freqCount.put(str, 1);
        else
         freqCount.put(str, freqCount.get(str)+1);
       }
      }
      for(String key: freqCount.keySet())
      {
       System.out.println( "key = " + key + ", value "+ freqCount.get(key) );
      }

    ------------結(jié)果-------------------------
    你好
    ac
    abc
    bc
    [你好]
    [abc, bc]
    [ac]
    [abc, bc]
    [ac]
    [ac]
    [ac]
    [你好]
    [bc]
    key = abc, value 2
    key = 你好, value 2
    key = ac, value 4
    key = bc, value 3

    posted @ 2010-01-21 23:46 小強(qiáng)摩羯座 閱讀(1230) | 評(píng)論 (0)編輯 收藏

    從北大的WIBA課程中得知,這本中文名為《知道做到》的書,真正是我所需要的。

    書的下載地址:Know and Do

    以下是讀書時(shí)的摘要筆記,書的語(yǔ)言本身已經(jīng)能說(shuō)明所討論的問題了。所以并沒有加上去多少自己的話。只是將重點(diǎn)進(jìn)行了整理。


    “在你的工作中,最讓你感到失望的事情是什么?”

    一個(gè)人行為的改變總是先從內(nèi)心想法的轉(zhuǎn)變開始,然后才逐漸由內(nèi)而外變化的。


    我的關(guān)注點(diǎn)一直集中在領(lǐng)導(dǎo)方法和領(lǐng)導(dǎo)行為上,卻始終沒有考慮過(guò)人們的大腦或內(nèi)心到底在想些什么。

    保羅為自己擔(dān)任董事的一家大型跨國(guó)公司準(zhǔn)備了一場(chǎng)主題演講。演講的題目是“缺失的一環(huán):怎樣才能把你從書本、錄音帶、電視錄像或研討班上學(xué)到的知識(shí)應(yīng)用到實(shí)際工作中”。這就是《知道做到》創(chuàng)作的開始。


    學(xué)會(huì)三樣?xùn)|西:
    1、記筆記
    2、24小時(shí)內(nèi)重讀筆記,整理學(xué)習(xí)內(nèi)容和重點(diǎn)。
    3、將學(xué)習(xí)內(nèi)容傳遞給他人。


    缺失的一環(huán)
    1、信息過(guò)載

    我們首先必須確定自己需要學(xué)什么,然后才能更有效率地去學(xué)這些東西

    每個(gè)人,包括你和我的大腦總是在不斷地處理一件或兩件事,要么是學(xué)習(xí)新的東西,要么是遺忘。一旦忽視了某件事,我們很快就會(huì)將其遺忘。而當(dāng)學(xué)會(huì)用間隔性重復(fù)來(lái)集中思考某件事時(shí),我們就會(huì)記住它
    2、消極過(guò)濾
    3、缺少跟進(jìn)

     
    要想做到這點(diǎn),關(guān)鍵就在于重復(fù)、重復(fù)、重復(fù)!這就是那缺失的一環(huán).。

    重復(fù)是克服所有知行差距的3個(gè)原因的關(guān)鍵。

    重復(fù)的力量:這里的重復(fù)實(shí)際上是指間隔性重復(fù)

    第五章 應(yīng)用“少而精”哲學(xué)

    知行鴻溝的存在,人們沒能學(xué)以致用的原因
    1:信息超載
    ◆對(duì)于那些只接觸過(guò)一次的信息,我們通常只能記住其中一小部分。
    ◆我們應(yīng)該少而精而非多而淺地去學(xué)習(xí)。
    ◆要想掌握某件事,我們必須首先選擇一些關(guān)鍵點(diǎn),隔段時(shí)間就重復(fù)一下,讓自己完全沉浸其中,并不斷提高自己的知識(shí)和技能。關(guān)鍵在于間隔性重復(fù)。
    ◆一旦真正透徹地掌握了自己的工作,人們就會(huì)變得更有創(chuàng)造性,甚至能夠創(chuàng)造奇跡。

    第六章 原因2:消極過(guò)濾

    “在我們聊天的過(guò)程中,我想我明白了兩件事。第一,一個(gè)對(duì)你充滿信心的人可以改變你的人生;第二,我們完全可以選擇自己去聆聽什么。如果我總是在聆聽那些否定我的人的話,我可能就會(huì)選擇接受一個(gè)不是那么有挑戰(zhàn)性的工作,對(duì)自己的期待也會(huì)變得非常有限。在爬出‘消極之匣’的過(guò)程中,我最最需要的,就是一句鼓勵(lì)的話。”

    第七章 積極聆聽

    聆聽
    不要帶有任何偏見或先入為主;
    帶著一種學(xué)習(xí)的態(tài)度,對(duì)新的信息感到興奮;
    帶著積極的期待;
    手里拿支筆,準(zhǔn)備做記錄;
    帶著強(qiáng)烈的欲望,不僅要仔細(xì)聆聽對(duì)方的講話內(nèi)容,還要努力激發(fā)出自己的形象力;
    帶著一種“我該如何應(yīng)用這些”的態(tài)度。

    企業(yè)家說(shuō):“有趣的是,呈現(xiàn)6次似乎正是間隔性重復(fù)秘訣。”
    “為什么這么說(shuō)呢?”
    “我發(fā)現(xiàn),當(dāng)人們第一次接觸時(shí),他們會(huì)立刻拒絕,因?yàn)檫@個(gè)想法跟他們之前的想法有些沖突;第二次接觸時(shí),他們會(huì)抵制,因?yàn)樗麄內(nèi)匀粺o(wú)法接受這個(gè)想法;第三次接觸,他們會(huì)部分接受,但在實(shí)際應(yīng)用的時(shí)候仍然會(huì)有所保留;第四次接觸時(shí),他們會(huì)完全接受,因?yàn)樗麄兏杏X這個(gè)想法跟自己一直以來(lái)的想法完全一致;第五次接觸時(shí),他們會(huì)將其應(yīng)用到實(shí)際工作中,會(huì)部分吸收,將其轉(zhuǎn)化為自己的想法;等到第六次接觸時(shí),他們會(huì)將其據(jù)為己有,完全吸收,并將其傳播給其他人。”


      通過(guò)自己的積極思維所體驗(yàn)到的積極經(jīng)歷越多,你就可以自動(dòng)跨越這6個(gè)步驟,許多創(chuàng)造性的想法幾乎會(huì)不知不覺地浮現(xiàn)出來(lái)。最終你就會(huì)像我一樣成為一個(gè)反向偏執(zhí)狂(inverted paranoid).
    “什么是反向偏執(zhí)狂?”作家問。
    “反向偏執(zhí)狂就是那些認(rèn)為世界在合伙照顧自己的人。當(dāng)一個(gè)人總是習(xí)慣進(jìn)行積極思考時(shí),他就容易成為一名反向偏執(zhí)狂,但這需要一個(gè)過(guò)程。有時(shí)候人們?cè)谕瓿蛇@個(gè)過(guò)程時(shí)需要幫助。”

    第八章 使用綠燈思維

     人們沒能學(xué)以致用的原因2:消極過(guò)濾

    由于在年少時(shí)并沒有得到無(wú)條件的愛和支持,所以我們開始對(duì)自己和其他人產(chǎn)生懷疑。
    自我懷疑讓我們開始對(duì)所有的信息進(jìn)行過(guò)濾,無(wú)論是從圖書、錄音帶、錄像、培訓(xùn)班,還是從談話中獲取的,在過(guò)濾的過(guò)程中,由于我們會(huì)猶豫不決,會(huì)封閉自己的觀念,讓自己帶有先入之見,會(huì)帶著批判的心態(tài),甚至?xí)a(chǎn)生一種恐懼心理,所有這一切都會(huì)讓我們形成一種消極的思維方式。
    消極思維會(huì)讓我們,只能學(xué)到或利用自己接觸到的一小部分信息;只能發(fā)揮自己的一小部分潛力;過(guò)早地拒絕大部分信息;

    積極、開放的心態(tài)最有利于我們的成長(zhǎng),它會(huì)引發(fā)我們的創(chuàng)造力和應(yīng)變力,最大限度地激發(fā)我們的靈感。
    我們必須設(shè)法敞開自己的心胸。每次接觸新信息時(shí),我們不要總是琢磨這些信息錯(cuò)在哪里,而是成為綠燈思考者,積極發(fā)現(xiàn)其中的正確之處,并告訴自己,“我知道自己讀到或聽到的信息是有一定價(jià)值的,可它究竟在哪兒呢?”
    將封閉、消極的心態(tài)變成開放而積極的心態(tài)并不是偶然事件。一旦下定決心要作出改變,你就需要制定一套清晰的策略,不斷加強(qiáng)自己的新思維方式。

    第九章 原因3:缺少跟進(jìn)

    作家點(diǎn)點(diǎn)頭,“這讓我想起了彼得?德魯克(Peter Drucker)的話,‘沒有什么好事是偶然發(fā)生的。’”
    “一點(diǎn)沒錯(cuò),”菲爾說(shuō),“要想改變某個(gè)行為,得到自己預(yù)期的結(jié)果,你需要指導(dǎo)(structure)、支持(support)和問責(zé)(accountability)。當(dāng)這三個(gè)要素同時(shí)具備時(shí),你便可以制訂一份出色的跟進(jìn)計(jì)劃。人們沒有將知識(shí)轉(zhuǎn)化為行動(dòng)的第三個(gè)原因是缺少跟進(jìn),而這是所有障礙當(dāng)中最難克服的,所以我們才需要制訂一份周密的計(jì)劃。”
    “為什么說(shuō)它是最難克服的呢?”作家問。
    “這還是有一些歷史背景的,”菲爾若有所思地回答,“我是從我父親那里學(xué)到跟進(jìn)策略的重要性的。他是來(lái)自德國(guó)的一名大師級(jí)木匠。他一再告訴我,除非你能得到名師指點(diǎn),否則千萬(wàn)不要接受一份工作。”

    練習(xí),并不能幫你做到完美。
    只有完美的練習(xí)才能幫你做到完美。

    如何學(xué)習(xí)及訂出計(jì)劃。

    強(qiáng)調(diào)積極面,幫人們?nèi)〉贸晒?/p>

    在每一位成功人士的生活中,都有一條貫穿始終的金線。那就是專注的金線,再加上堅(jiān)持。所有有所成就的人都有一種獨(dú)特的能力,他們能夠像激光一樣將自己的能量集中于一點(diǎn),并在整個(gè)實(shí)現(xiàn)目標(biāo)的過(guò)程中失重保持焦點(diǎn)集中。

    “第一個(gè)例子,我們?cè)诠纠飳?shí)行了一套一對(duì)一的學(xué)習(xí)系統(tǒng),規(guī)定所有的管理者每?jī)蓚€(gè)星期都要跟自己的直接下屬面對(duì)面地單獨(dú)溝通,時(shí)間為每次15—30分鐘。”


     

    posted @ 2010-01-02 17:51 小強(qiáng)摩羯座 閱讀(376) | 評(píng)論 (1)編輯 收藏

    主站蜘蛛池模板: 久久久久久久综合日本亚洲| 国内少妇偷人精品视频免费| 国产一精品一aⅴ一免费| 亚洲娇小性xxxx| 手机在线看永久av片免费| 亚洲国产精品线观看不卡| 亚洲精品在线免费观看视频| 最近中文字幕无吗免费高清| 亚洲国产成人精品无码区在线秒播 | 精品一区二区三区免费观看 | 亚洲精品无码av中文字幕| 免费黄色小视频网站| 亚洲日本天堂在线| 免费观看理论片毛片| 亚洲AV综合色区无码一二三区| 日本免费中文字幕在线看| 看亚洲a级一级毛片| 成人影片麻豆国产影片免费观看| 亚洲国产成人九九综合| 亚洲免费福利在线视频| 亚洲中文字幕无码一去台湾 | 成人免费视频88| 亚洲av日韩综合一区二区三区| 国产一区二区三区免费在线观看| 特级av毛片免费观看| 巨胸喷奶水视频www网免费| 亚洲欧美日本韩国| 国产精品免费看久久久久| 黄色网页免费观看| 浮力影院亚洲国产第一页| 国产成人一区二区三区视频免费| 亚洲最大成人网色| 国产一级片免费看| 亚洲综合久久综合激情久久| 精品久久久久成人码免费动漫| 亚洲人成欧美中文字幕| 午夜国产大片免费观看| 9久热精品免费观看视频| 亚洲AV日韩精品久久久久| 亚洲免费观看在线视频| 国产v亚洲v天堂a无|