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

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

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

    ZT文萃

    本博不原創(chuàng),轉(zhuǎn)帖自己感興趣那些事人物,什么入眼貼什么,隨心所欲。
    posts - 93, comments - 5, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2014年4月27日

    移動(dòng)互聯(lián)網(wǎng),就是將移動(dòng)通信和互聯(lián)網(wǎng)二者結(jié)合起來(lái),成為一體。
    4G時(shí)代的開(kāi)啟以及移動(dòng)終端設(shè)備的凸顯必將為移動(dòng)互聯(lián)網(wǎng)的發(fā)展注入巨大的能量,2014年移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)必將帶來(lái)前所未有的飛躍。

    度娘百科詳解:http://baike.baidu.com/view/1168245.htm

     


    云計(jì)算(英語(yǔ):Cloud Computing),是一種基于互聯(lián)網(wǎng)的計(jì)算方式,通過(guò)這種方式,共享的軟硬件資源和信息可以按需求提供給計(jì)算機(jī)和其他設(shè)備。

    云 計(jì)算是繼1980年代大型計(jì)算機(jī)到客戶端-服務(wù)器的大轉(zhuǎn)變之后的又一種巨變。用戶不再需要了解“云”中基礎(chǔ)設(shè)施的細(xì)節(jié),不必具有相應(yīng)的專業(yè)知識(shí),也無(wú)需直 接進(jìn)行控制。[1]云計(jì)算描述了一種基于互聯(lián)網(wǎng)的新的IT服務(wù)增加、使用和交付模式,通常涉及通過(guò)互聯(lián)網(wǎng)來(lái)提供動(dòng)態(tài)易擴(kuò)展而且經(jīng)常是虛擬化的資源。

    度娘百科詳解:http://baike.baidu.com/view/1316082.htm?fr=aladdin
     


    大 數(shù)據(jù)(英語(yǔ):Big data),或稱巨量數(shù)據(jù)、海量數(shù)據(jù)、大數(shù)據(jù),指的是所涉及的數(shù)據(jù)量規(guī)模巨大到無(wú)法通過(guò)人工,在合理時(shí)間內(nèi)達(dá)到截取、管理、處理、并整理成為人類所能解讀 的信息。在總數(shù)據(jù)量相同的情況下,與個(gè)別分析獨(dú)立的小型數(shù)據(jù)集(data set)相比,將各個(gè)小型數(shù)據(jù)集合并后進(jìn)行分析可得出許多額外的信息和數(shù)據(jù)關(guān)系性,可用來(lái)察覺(jué)商業(yè)趨勢(shì)、判定研究質(zhì)量、避免疾病擴(kuò)散、打擊犯罪或測(cè)定實(shí)時(shí) 交通路況等;這樣的用途正是大型數(shù)據(jù)集盛行的原因。

    度娘百科詳解:http://baike.baidu.com/subview/6954399/13647476.htm?fr=aladdin

     


    O2O(Online To Offline)模式,又稱離線商務(wù)模式,是指線上營(yíng)銷(xiāo)線上購(gòu)買(mǎi)帶動(dòng)線下經(jīng)營(yíng)和線下消費(fèi)。O2O通過(guò)促銷(xiāo)、打折、提供信息、服務(wù)預(yù)訂等方式,把線下商店的 消息推送給互聯(lián)網(wǎng)用戶,從而將他們轉(zhuǎn)換為自己的線下客戶,這就特別適合必須到店消費(fèi)的商品和服務(wù),比如餐飲、健身、電影和演出、美容美發(fā)、攝影及百貨商店 等。

    度娘百科詳解:http://baike.baidu.com/subview/4717113/13607799.htm?fr=aladdin

    一些O2O案列:Groupon、OpenTable、易到用車(chē)

    posted @ 2014-11-05 23:07 ZT文萃 閱讀(1363) | 評(píng)論 (0)編輯 收藏

    亂講,誰(shuí)說(shuō)我們2002年倒數(shù)第一的啊

    不還有沙特了么

    再說(shuō)了,中國(guó)隊(duì)多牛B洋人不知道嗎

    在長(zhǎng)達(dá)84年十九屆世界杯的歷史上
    僅有三支國(guó)家隊(duì)?wèi)?zhàn)勝過(guò)中國(guó)國(guó)家隊(duì)
    分別是巴西、土耳其、哥斯達(dá)黎加

    即使是巴西這樣的世界強(qiáng)隊(duì)也僅戰(zhàn)勝過(guò)中國(guó)隊(duì)一次。

    而中國(guó)隊(duì)從未在世界杯點(diǎn)球大戰(zhàn)中失利過(guò),
    從來(lái)沒(méi)有一支球隊(duì)能夠在世界杯上擊敗過(guò)中國(guó)隊(duì)兩次。

    從數(shù)據(jù)分析中可以看的出,世界杯史上共產(chǎn)生八支冠軍球隊(duì),
    也只有巴西隊(duì)曾經(jīng)戰(zhàn)勝過(guò)中國(guó)隊(duì)。
    歐洲諸強(qiáng)德西荷法英意葡等從來(lái)沒(méi)有世界杯上戰(zhàn)勝過(guò)中國(guó)。

    而且,中國(guó)隊(duì)在世界杯上丟球數(shù)遠(yuǎn)少于足球之國(guó)巴西和以防守見(jiàn)長(zhǎng)的意大利,
    在過(guò)去84年里,中國(guó)隊(duì)只丟了9個(gè)球。

    除此之外,世界上除了巴西,中國(guó)是另外一支敢在胸前繡五顆星的隊(duì)。

    posted @ 2014-06-16 21:36 ZT文萃 閱讀(240) | 評(píng)論 (0)編輯 收藏

    釋迦牟尼在《佛譬喻經(jīng)》中,講了一段有名的譬喻,這譬喻是這樣的:
          在一個(gè)寂寞的秋天黃昏,無(wú)盡廣闊的荒野中,有一位旅人趕著路。突然,旅人發(fā)現(xiàn)薄暗的野道中,散落著一塊塊白白的東西,仔細(xì)一看,原來(lái)是人的白骨。
          旅人正疑惑思考時(shí),忽然從前方傳來(lái)驚人的咆哮聲,隨著一只大老虎緊逼而來(lái)??吹竭@只老虎,旅人頓時(shí)了解白骨的原因,立刻向來(lái)時(shí)的道路拔腿逃跑。
          但顯然是迷失了道路,旅人竟跑到一座斷崖絕壁的頂上。在毫無(wú)辦法之中,幸好發(fā)現(xiàn)斷崖上有一顆松樹(shù),并且從樹(shù)枝上垂下一條藤蔓。旅人便毫不猶豫,馬上抓著藤蔓垂下去,可謂九死一生。
          老虎眼看好不容易即將入口的食物,居然被逃離,可以想象它是如何懊惱地在崖上狂吼著。
          好感謝??!幸虧有這藤蔓,終于救了寶貴一命。旅人暫時(shí)安心了。但是當(dāng)他朝腳下一看時(shí),不禁啊了一聲,原來(lái)腳下竟是波濤洶涌、底不可測(cè)的深海,怒浪澎湃著,而且在那波濤間還有三條毒龍,正張開(kāi)大口等待著他的墜落。旅人不知不覺(jué)全身戰(zhàn)栗起來(lái)。
          但更恐怖的是,依靠救生的藤蔓,在其根接處出現(xiàn)了兩只白色和黑色的老鼠,正在交互地啃著藤蔓。旅人拼命搖動(dòng)藤蔓,想趕走老鼠,可是老鼠一點(diǎn)也沒(méi)有逃開(kāi)的樣 子。而且每次搖動(dòng)藤蔓,便有水滴從上面落下來(lái),這是樹(shù)枝上蜂巢所滴下的蜂蜜。由于蜂蜜太甜了,旅人竟完全忘記自己正處于危險(xiǎn)萬(wàn)分的境地,此心陶陶然地被蜂 蜜所奪。
          這愚癡的旅人之相,便是所有人類的人生之真相。那么釋迦穆尼這段譬喻意味著什么呢?

    1、孤獨(dú)的心靈
    旅人:這旅人是指我們自己。
    荒野:無(wú)盡而寂寞的荒野是譬喻我們無(wú)盡寂寞的人生。
    秋天的黃昏:秋天的黃昏是譬喻人生的孤寂感。
    白骨:路邊的白骨是指我們?nèi)松猛局?,家族、親屬、朋友等的死亡。我們活到現(xiàn)在,應(yīng)該看到很多白骨,那時(shí)我們有何想法?有何感觸?我們可曾注意到緊逼而來(lái)的“無(wú)常之虎”?
    老虎:饑餓的老虎所譬喻的,既是我們自己的死亡。

    2、無(wú)力的松樹(shù)
    松樹(shù):接著我們攀上崖頂?shù)乃蓸?shù),松樹(shù)是指金錢(qián)、財(cái)產(chǎn)、名譽(yù)、地位等等。這些東西即使擁有再多,在死亡的面前也仍是無(wú)力的。

    3、人生是夢(mèng)
    藤蔓:藤蔓所譬喻的是“還不會(huì)!還不會(huì)!我還不會(huì)死”的那種以為還有二十年、三十年的壽命可依恃,但即使認(rèn)為還有十年、還有二十年可活著,但你認(rèn)為到底人 壽幾何?想想便知:已過(guò)去的十年二十年,也不過(guò)是《啊》的一聲之間,便如夢(mèng)如幻般地消逝了。而今后的十年二十年,也同樣是《啊》的一聲之間便會(huì)過(guò)去。
    老鼠:咬著藤蔓的白老鼠和黑老鼠是指白天和晚上。白天的白老鼠和晚上的黑老鼠,在相互地縮短著我們的壽命。

    4,后生大事
    深海:深海所譬喻的便是地獄。墜入此地獄,必須承受八萬(wàn)劫中大苦惱,這一件事情便稱為——后生一大事。
    毒龍:顯現(xiàn)地獄之苦的是這三條毒龍,這三條毒龍指我們自己內(nèi)心的貪欲、嗔怒、愚癡。
          “善因善果、惡因惡果、自因自果”的因果法則是不會(huì)有絲毫差錯(cuò)的。由自己所不斷造作的罪惡所生出的地獄,最后還是由自己墜入。

    posted @ 2014-06-13 15:44 ZT文萃 閱讀(207) | 評(píng)論 (0)編輯 收藏

    其實(shí)都是些很簡(jiǎn)單的東西
    如果有CLER認(rèn)為這些東西發(fā)出來(lái)沒(méi)必要那  朕只能說(shuō)抱歉

    如果看了帖子 對(duì)進(jìn)有那么一點(diǎn)幫助 請(qǐng)cler 回帖支持下 讓更多的 朋友可以了解下,很多問(wèn)題,可以從開(kāi)機(jī)看出問(wèn)題
    謝謝

    為 使用電腦時(shí)間比較長(zhǎng)的老用戶,難免會(huì)到朋友或同事家?guī)兔S護(hù)、維修電腦,有時(shí)還要幫人購(gòu)買(mǎi)PC,這時(shí)我們肯定會(huì)帶上硬件檢測(cè)軟件,不過(guò),誰(shuí)也不能隨身總是 帶著這些軟件,如果手頭上沒(méi)有合適的檢測(cè)軟件該怎么辦呢?總不能因此就什么都不知道吧?那樣你的高手形象大大會(huì)受損的,其實(shí),離開(kāi)這些軟件我們也能明明白 白查看電腦硬件的配置情況。下面我們就來(lái)一起學(xué)習(xí)一下吧?! ?br />
      一、開(kāi)機(jī)自檢中查看硬件配置  

      機(jī)器組裝結(jié)束后即使不裝操作系統(tǒng)也可以進(jìn)行加電測(cè)試,在開(kāi)機(jī)自檢的畫(huà)面中就隱藏著硬件配置的簡(jiǎn)單介紹喲(由于開(kāi)機(jī)畫(huà)面一閃而過(guò),要想看清楚的話,記得及時(shí)伸手按住“PAUSE”鍵)。

      1.顯卡信息  

       開(kāi)機(jī)自檢時(shí)首先檢查的硬件就是顯卡,因此啟動(dòng)機(jī)器以后在屏幕左上角出現(xiàn)的幾行文字就是有顯卡的“個(gè)人資料”介紹。四行文字中,第一行“GeForce4 MX440……”標(biāo)明了顯卡的顯示核心為GeForce4 MX440、支持AGP 8X技術(shù);第二行“Version……”標(biāo)明了顯卡BIOS的版本,我們可以通過(guò)更新顯卡BIOS版本“榨取”顯卡性能,當(dāng)然更新后這一行文字也會(huì)隨之發(fā) 生變化;第三行“Copyright (C)……”則為廠商的版權(quán)信息,標(biāo)示了顯示芯片制造廠商及廠商版權(quán)年限;第四行“64.0MB RAM”則標(biāo)明了顯卡顯存容量?! ?br />
      2.CPU及硬盤(pán)、內(nèi)存、光驅(qū)信息  

      顯示完顯卡的基本信息之后,緊接著出 現(xiàn)的第二個(gè)自檢畫(huà)面則顯示了更多的硬件信息,像CPU型號(hào)、頻率、內(nèi)存容量、硬盤(pán)及光驅(qū)信息等都會(huì)出現(xiàn)在此畫(huà)面中。該畫(huà)面最上面兩行文字標(biāo)示了主板 BIOS版本及BIOS制造商的版權(quán)信息;緊接著的文字一看就明白啦,當(dāng)然是主板芯片組嘍;其下幾行文字則標(biāo)明了CPU的頻率及內(nèi)存容量、速度。下面四行 “IDE……”則標(biāo)明了連接在IDE主從接口上的設(shè)備,包括硬盤(pán)型號(hào)及光驅(qū)型號(hào)等等。
      
      3.主板信息 

      在第二 個(gè)自檢畫(huà)面的最下方還會(huì)出現(xiàn)一行關(guān)于主板的信息,前面的日期顯示的是當(dāng)前主板的BIOS更新日期,后面的符號(hào)則是該主板所采用的代碼,根據(jù)代碼我們可以了 解主板的芯片組型號(hào)和生產(chǎn)廠商。以往老主板的自檢畫(huà)面中最下方文字的中間標(biāo)明的是主板芯片組,這一塊板子則將其提到了自檢畫(huà)面的上方?! ?br />
      機(jī)器啟動(dòng)之后按“DEL”鍵進(jìn)入BIOS設(shè)置頁(yè)面,在基本信息中同樣也可以看到機(jī)器的硬件信息,與開(kāi)機(jī)畫(huà)面顯示的沒(méi)有區(qū)別。

      二、利用設(shè)備管理器查看硬件配置  

       進(jìn)入操作系統(tǒng)之后,在安裝硬件驅(qū)動(dòng)程序的情況下還可以利用設(shè)備管理器與DirectX診斷工具來(lái)查看硬件配置。下面看看如何利用設(shè)備管理器查看硬件信 息。進(jìn)入桌面,鼠標(biāo)右擊“我的電腦”圖標(biāo),在出現(xiàn)的菜單中選擇“屬性”,打開(kāi)“系統(tǒng)屬性”窗口,點(diǎn)擊“硬件--設(shè)備管理器”,在“設(shè)備管理器”中顯示了機(jī) 器配置的所有硬件設(shè)備。從上往下依次排列著光驅(qū)、磁盤(pán)控制器芯片、CPU、磁盤(pán)驅(qū)動(dòng)器、顯示器、鍵盤(pán)、聲音及視頻等信息,最下方則為顯示卡。想要了解哪一 種硬件的信息,只要點(diǎn)擊其前方的“+”將其下方的內(nèi)容展開(kāi)即可?! ?br />  利用設(shè)備管理器除了可以看到常規(guī)硬件信息之外,還可以進(jìn)一步了解主板芯片、聲卡及硬盤(pán)工作模式等情況。例如想要查看硬盤(pán)的工作模式,只要雙擊相應(yīng)的IDE通道即可彈出屬性窗口,在屬性窗口中可輕檢看到硬盤(pán)的設(shè)備類型及傳送模式。這些都是開(kāi)機(jī)畫(huà)面所不能提供的?! ?br />
      需要注意的是在Windows Xp之前的操作系統(tǒng)中所提供的設(shè)備管理器是無(wú)法用來(lái)查看CPU工作頻率的,好在我們還有DirectX診斷工具?! ?br />
       三、利用DirectX診斷工具查看硬件配置  

       DirectX診斷工具可以幫助我們對(duì)硬件工作情況作出測(cè)試、診斷并進(jìn)行修改,當(dāng)然我們也可以利用它來(lái)查看機(jī)器的硬件配置。運(yùn)行“系統(tǒng)信息”窗口,找到 “工具--DirectX診斷工具”(或者進(jìn)入安裝盤(pán)符中Windows目錄下的System32目錄中運(yùn)行Dxdiag.exe),在窗口中可以方便地 查看硬件信息。

      1.查看基本信息  

      在“DirectX診斷工具”窗口中點(diǎn)擊“系統(tǒng)”選項(xiàng)卡,當(dāng)前日期、計(jì)算機(jī) 名稱、操作系統(tǒng)、系統(tǒng)制造商及BIOS版本、CPU處理器頻率及及內(nèi)存容量一目了然。注意嘍,雖然我將Celeron 2.0MHz超頻至2.40MHz使用,但是DirectX卻不認(rèn)這個(gè)帳,依然顯示的是未超頻的原始頻率。看來(lái)沒(méi)有AIDA32,我們同樣也可以識(shí)別奸商 是否將超頻的CPU賣(mài)給我們??!  

      2.查看顯卡信息  

      在“DirectX診斷工具”窗口中點(diǎn)擊“顯示”選項(xiàng)卡,在這里我們可以看到顯卡的制造商、顯示芯片類型、顯存容量、顯卡驅(qū)動(dòng)版本、監(jiān)視器等常規(guī)信息?! ?br />
      3.查看音頻信息  

      音頻設(shè)備往往為人所忽視,但缺了它又不行,單擊“聲音”選項(xiàng)卡,對(duì)其做一番了解吧!同樣在出現(xiàn)的窗口中能看到設(shè)備的名稱、制造商及其驅(qū)動(dòng)程序等等極為詳細(xì)的資料。不同的是我們還可以點(diǎn)擊右下角的“測(cè)試DirectSound(T)”對(duì)聲卡進(jìn)行一下簡(jiǎn)單的測(cè)試?! ?br />怎么樣,經(jīng)過(guò)這一番了解,是不是感覺(jué)很受益?

    題外話,由于主板更新頻繁,現(xiàn)在很多主板BIOS有快速啟動(dòng)功能,以上很多信息都被瞬間屏蔽掉了。需要看自檢的信息,需要到BIOS設(shè)置。但是以上講的信息,能讓你明白,計(jì)算機(jī)如何自檢。

    posted @ 2014-06-10 22:57 ZT文萃 閱讀(225) | 評(píng)論 (0)編輯 收藏

    http://kb.cnblogs.com/page/192251/

    這些日子我一直在寫(xiě)一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,已有小成了,等寫(xiě)完我會(huì)全部公開(kāi),希望能夠?yàn)閲?guó)內(nèi)IT的發(fā)展盡自己一份微薄的力量。最近看到很多學(xué)生朋友和我當(dāng)年一樣沒(méi)有方向 ,所以把我的經(jīng)歷寫(xiě)出來(lái)與大家共勉,希望能給剛?cè)缧械呐笥褌円稽c(diǎn)點(diǎn)幫助。

      一轉(zhuǎn)眼我在IT行業(yè)學(xué)習(xí)工作已經(jīng)七年多了,這期間我做過(guò)網(wǎng)頁(yè),寫(xiě)過(guò)MIS、數(shù)據(jù)庫(kù),應(yīng)用程序,做過(guò)通信軟件、硬件驅(qū)動(dòng)、協(xié)議棧,到現(xiàn)在做操作系統(tǒng)內(nèi)核和IC相關(guān)開(kāi)發(fā),這中間走了很多彎路,也吃了不少苦。

      我上的是一個(gè)三流的高校,就連同一個(gè)城市的人多數(shù)都不知道。因?yàn)閷W(xué)校不好也就沒(méi)有指望能靠學(xué)校名氣找一個(gè)好工作。所有的希望都寄托在自己的努力 上了,大一開(kāi)學(xué)前的假期我就開(kāi)始了學(xué)習(xí)。記得我買(mǎi)的第一本書(shū)是《計(jì)算機(jī)基礎(chǔ)DOS3.0》,大家別嚇著了,其實(shí)當(dāng)時(shí)已經(jīng)普及了DOS6.22了,只是我在 書(shū)店里看到了DOS4.0/5.0/6.0的書(shū),以為像英語(yǔ)那樣是第四、五、六冊(cè),記得當(dāng)時(shí)到處找DOS1.0,現(xiàn)在想想也幸好我沒(méi)有找到:)。開(kāi)學(xué)前我 學(xué)完了PASCAL,那時(shí)既沒(méi)有計(jì)算機(jī)也沒(méi)有人可以請(qǐng)教,我連程序是什么的概念都沒(méi)有,只好死記硬背代碼,然后拿紙寫(xiě)。我一直到大三才有了一臺(tái)486,在 這之前用紙寫(xiě)了多少程序我也記不清楚了,只知道最長(zhǎng)的一個(gè)我拿A4大小的草稿紙寫(xiě)了30多頁(yè),我的C語(yǔ)言、C++ 、VC都是在這樣的條件下入門(mén)的。

      所以說(shuō)條件是可以克服的,希望我的經(jīng)歷多少給條件艱苦的同學(xué)們一點(diǎn)信心。第一次上機(jī)是在我姐夫的機(jī)房,我的心情激動(dòng)的無(wú)與倫比,但是一上機(jī)我立 刻傻了眼,他們用的是英文版的Win3.1,我的那點(diǎn)DOS知識(shí)都見(jiàn)了鬼,上機(jī)提心吊膽的一陣瞎摸,一不小心把Word弄成了全屏,怎么都還不了原,當(dāng)時(shí) 真是心急如焚,我以機(jī)器被我弄壞了。第一個(gè)C語(yǔ)言程序,就是那個(gè)經(jīng)典的HelloWorld,我調(diào)了幾個(gè)星期,上機(jī)機(jī)會(huì)非常少,也沒(méi)有書(shū)告訴我開(kāi)發(fā)環(huán)境 (TC2.0)需要設(shè)置,而且開(kāi)始我都不知道有編譯器,我甚至自作聰明把寫(xiě)好的程序擴(kuò)展名從.c改成.exe,結(jié)果可想而知。

      大一學(xué)完了C、X86的匯編、數(shù)據(jù)結(jié)構(gòu)、C++ 。由于精力都花在自學(xué)上了,大一下四門(mén)課掛了彩,三類學(xué)校就是這點(diǎn)好,掛上一二十門(mén)也照樣畢業(yè)。不過(guò)扯遠(yuǎn)點(diǎn)說(shuō),我那么刻苦都及不了格,可見(jiàn)我們國(guó)家的計(jì)算機(jī)教育有多死板。

      大二準(zhǔn)備學(xué)VC和BC,當(dāng)時(shí)難以取舍,后來(lái)選了VC,不為別的,只為書(shū)店里兩本書(shū),VC那本便宜6塊錢(qián)。我的努力在班上無(wú)人能及,學(xué)的日夜不 分,大三有了計(jì)算機(jī)后更是如此,很多次父親半夜教訓(xùn)我說(shuō)我不要命了,我一直覺(jué)得自己基礎(chǔ)差,記憶又不行,條件也不好 ,所以覺(jué)得只有多花點(diǎn)時(shí)間才能趕上別人。居然后來(lái)有許多朋友說(shuō)我有學(xué)計(jì)算機(jī)的天賦,讓我哭笑不得。我用的是486,16M內(nèi)存,1G硬盤(pán),當(dāng)時(shí)同學(xué)們的配 置都是P166MMX,我安裝一個(gè)Windows NT4.0需要一個(gè)通宵,編譯一個(gè)BC5.0向?qū)傻某绦蛐枰鼉蓚€(gè)小時(shí),我的顯示器是個(gè)二手的,輻射非常大,開(kāi)機(jī)屏幕冒火花,看起來(lái)很酷的:)。有一 次程序?qū)懙奶?,覺(jué)得怎么白色的編輯器背景變成了紫色,以為顯示器壞了,后來(lái)才發(fā)現(xiàn)眼睛不行了,不過(guò)說(shuō)來(lái)也奇怪,到今天我的視力還能保持1.5,真是個(gè)奇 跡。但是就是那臺(tái)破機(jī)器陪伴我兩年,讓我學(xué)會(huì)了VC、Delphi、SQL Server等。后來(lái)那臺(tái)機(jī)器給我阿姨打字用,據(jù)她說(shuō)一天她正打的開(kāi)心,一股青煙夾著火苗從顯示器鉆出來(lái),之后它才壽終正寢。

      大三假期找了個(gè)機(jī)會(huì)在一個(gè)計(jì)算機(jī)研究所實(shí)習(xí),與其說(shuō)實(shí)習(xí)不如說(shuō)是做義工,工作了兩個(gè)月一分錢(qián)沒(méi)有拿。但是這兩個(gè)月對(duì)我的發(fā)展幫助很大,讓我早一 步了解了社會(huì),剛?cè)サ臅r(shí)候我當(dāng)然是一竅不通,在那里我熟悉了網(wǎng)絡(luò),學(xué)會(huì)了Delphi和Oracle。由于工作很認(rèn)真,得到了比較好的評(píng)價(jià),在一位長(zhǎng)者的 引薦下,我開(kāi)始和他們一起做項(xiàng)目,這使我在大三大四就有了自己的收入,大四又找了兩家MIS公司兼職,雖然錢(qián)不多,但是在學(xué)生期間有1000多的收入我已 經(jīng)非常滿足了,我終于用自己賺的錢(qián)把計(jì)算機(jī)換了。

      大四下開(kāi)始找工作,這時(shí)我的工作經(jīng)驗(yàn)已經(jīng)比較多(當(dāng)然現(xiàn)在想想非常幼稚),開(kāi)始聽(tīng)父母的想去那個(gè)研究所,實(shí)習(xí)過(guò)那個(gè)部門(mén)也希望我能去,但是不知 道為什么最后不了了之,這種單位就是比較官僚,我一氣之下就到了我兼職的一個(gè)公司做MIS的Team Leader。在大三到畢業(yè)一年的時(shí)間,做過(guò)了各種MIS,從煤氣、煙廠、公安、鐵路、飲食到高校,什么有錢(qián)做什么,工作也很辛苦,經(jīng)常加班和熬通宵,從 跟客戶談需求到設(shè)計(jì)、編碼、測(cè)試、交付都要上。那時(shí)覺(jué)得很有成就感,覺(jué)得自己還不錯(cuò),現(xiàn)在想想真是很膚淺。

      剛走上工作崗位的學(xué)生很容易被誤導(dǎo),各種開(kāi)發(fā)工具讓人眼花繚亂,同時(shí)也覺(jué)得很受公司器重,但這樣工作永遠(yuǎn)是一個(gè)低層次的開(kāi)發(fā)者。不要跟我說(shuō)什么 系統(tǒng)分析有多么多么重要,多么多么難。你以為自己跟用戶談需求做設(shè)計(jì)就是系統(tǒng)分析和設(shè)計(jì)了嗎,國(guó)內(nèi)又有幾個(gè)公司能夠做的很到位很規(guī)范?我是ISO9000 內(nèi)審員,也在Rational公司受過(guò)多次培訓(xùn),拿了4個(gè)證書(shū),還有一個(gè)公司讓我去做CMM。這些我聽(tīng)過(guò)很多,但是很多事情到內(nèi)就變了性質(zhì),一個(gè)公司不是 通過(guò)了ISO9000或者CMM就能規(guī)范了,我現(xiàn)在在一家有幾十年歷史的外企工作,里面的管理不是一般國(guó)內(nèi)企業(yè)能及的。作為一個(gè)畢業(yè)不久以前沒(méi)有步入過(guò)社 會(huì)的學(xué)生,幾乎不可能在很短的時(shí)間掌握系統(tǒng)分析和設(shè)計(jì),面向?qū)ο蟆ML只是一個(gè)工具,關(guān)鍵是人本身的思想,不是說(shuō)你熟悉了C++ 、Rose就能夠做出好的設(shè)計(jì),相反如果你具備了很高的素質(zhì),你可以用C寫(xiě)出比別人用C++更加模塊化的程序。

      話說(shuō)遠(yuǎn)一些,國(guó)內(nèi)軟件開(kāi)發(fā)行業(yè)有一個(gè)怪圈,很多人覺(jué)得VC > Delphi > VB,真是很搞笑。這幾個(gè)軟件我都做過(guò)開(kāi)發(fā),說(shuō)白了他們都是工具,應(yīng)該根據(jù)應(yīng)用的需要選擇采用哪個(gè),而不是覺(jué)得哪個(gè)上層次。如果你因?yàn)橛媚硞€(gè)開(kāi)發(fā)工具很有 面子而選擇的話,只能說(shuō)明你很淺薄。如果說(shuō)層次,那么這些工具都不上層次,因?yàn)樗鼈冇脕?lái)用去都是一些系統(tǒng)的API,微軟的朋友不會(huì)因?yàn)槟阌涀∷麄兌嗌賯€(gè) API或者多少個(gè)類就會(huì)覺(jué)得你很了不起,你永遠(yuǎn)只是他們的客戶,他們看重的是你口袋里的銀子。我也做過(guò)系統(tǒng)內(nèi)核,我也封裝過(guò)很多API,同樣我也不會(huì)看重 那些使用這些API做二次開(kāi)發(fā)的客戶,除非他能夠作出自己獨(dú)到的設(shè)計(jì)。

      至于有人認(rèn)為C++ > C那更是讓人笑掉大牙,不妨你去打聽(tīng)一下,現(xiàn)在有幾個(gè)操作系統(tǒng)內(nèi)核是用C++寫(xiě)的,又有幾個(gè)實(shí)時(shí)系統(tǒng)用的是C++,當(dāng)然我也不是說(shuō)C++不好,但是目前的 內(nèi)核和實(shí)時(shí)系統(tǒng)中C++還無(wú)法與C匹敵,至于說(shuō)C++適合做應(yīng)用系統(tǒng)的開(kāi)發(fā)那是另外一回事。所以我的觀點(diǎn)是不在于你用什么工具和語(yǔ)言,而在于你干什么工 作。你的設(shè)計(jì)體現(xiàn)了你的技術(shù)層次。

      這樣干了一年我覺(jué)得非??鄲灒龅拇蠖鄶?shù)都是熟練工種的活,個(gè)人技術(shù)上沒(méi)有太多的提高也看不到方向。所以決定離開(kāi)這個(gè)城市去上海,尋求更好的發(fā)展,并且打算放棄我以前的MIS轉(zhuǎn)到通信行業(yè)。

      寫(xiě)到這里不能不提到我女朋友,我們是在來(lái)上海前半年認(rèn)識(shí)的,她大四在我公司實(shí)習(xí),公司派她給我寫(xiě)文檔,我們的感情發(fā)展的很快。她告訴我很多事 情,她家原本是改革開(kāi)放的第一批暴發(fā)戶,她母親愛(ài)打牌,輸?shù)袅藥装偃f(wàn),還欠了很多債,她有男朋友,但是她對(duì)他沒(méi)有感情,只因?yàn)樗o了她母親兩萬(wàn)多塊錢(qián),后 來(lái)還強(qiáng)迫她寫(xiě)了四萬(wàn)塊的借條,她男朋友背叛過(guò)她并且不止一次打她,現(xiàn)在逼她結(jié)婚,不然就要她還錢(qián)。這人居然還是一個(gè)高校的老師!她母親把父親給她的學(xué)費(fèi)花 了,因?yàn)橥锨穼W(xué)費(fèi)她沒(méi)有辦法拿到畢業(yè)證。

      她母親現(xiàn)在有病需要錢(qián),我拿出了自己的一點(diǎn)積蓄并且跟朋友們借了一些,替她交了學(xué)費(fèi)并給她母親看?。ê髞?lái)才知道看病的錢(qián)又不知所終,就連她母親 是不是有病我都不知道,但她也是沒(méi)有辦法)。這個(gè)時(shí)候我家知道了一些事情,堅(jiān)決反對(duì)我和她在一起,她原來(lái)的男朋友也極力破壞。無(wú)奈之下我們決定早一定離開(kāi) 這個(gè)傷心的城市,并且瞞著我們家。由于時(shí)間倉(cāng)促,我只準(zhǔn)備了4000塊錢(qián),她僅有的幾百塊錢(qián)也被她母親要去了,我買(mǎi)了三張票,一張是中午的,兩張是晚上 的,中午我的家人把我送上船,他們一離開(kāi)我就下了船,我和她乘坐晚上的船離開(kāi)了這個(gè)我和她生活了很多年的城市,帶走的只是一身債務(wù)。

      沒(méi)有來(lái)過(guò)上海的我們兩個(gè)性倔強(qiáng),都不愿意去麻煩同學(xué)和朋友。來(lái)到上海是傍晚6點(diǎn)半,我們都不知道該去哪里,我們找了一個(gè)20塊錢(qián)的旅館,這個(gè)房 間連窗戶都沒(méi)有,7月份的天氣酷熱難耐,房間里非常悶熱。第二天我們開(kāi)始租房子,因?yàn)樯砩系腻X(qián)不多,我們基本都是步行,花了一個(gè)星期時(shí)間,不知道在浦東轉(zhuǎn) 了多少圈后找到了一個(gè)400塊的房子,但是我們都 不了解上海是付三壓一,還要付半個(gè)月的中介費(fèi),買(mǎi)了一些鍋碗瓢盆后,我們身上只有800塊錢(qián)了。工作都還沒(méi)有著落,這800塊錢(qián)要支持到我們拿到第一個(gè)月 工資,為了省錢(qián)我們自己做飯,每天買(mǎi)菜只花兩塊錢(qián),她非常喜歡吃(也可能她在大學(xué)經(jīng)常挨餓的原因),看到她現(xiàn)在這樣省吃儉用我真的很不忍心。

      她以前的男朋友也沒(méi)有放過(guò)她,經(jīng)常打電話來(lái)騷擾,并且來(lái)上??此?,還說(shuō)了不少恐嚇?biāo)脑?,她過(guò)于善良,說(shuō)他以前畢竟幫助過(guò)她,叫我不要與他一般 見(jiàn)識(shí)。以后的每天在家就是苦等面試通知,原本我想迅速找一家MIS公司解決眼前的困難,但是她堅(jiān)持讓我不要放棄自己的理想,終于功夫不負(fù)有心人,我找到了 一家通信公司,4000塊的工資雖然趕不上MIS公司給我開(kāi)出的價(jià)位,但也夠在上海生存。她也找到了工作,第一天上班她哭了,這是她來(lái)上海第一次流淚,我 心里很難受也很感動(dòng)。

      由于是全新的行業(yè),我把自己降到了零點(diǎn),我學(xué)的VC、Delphi、數(shù)據(jù)庫(kù)派不上用場(chǎng),擺在我面前的是嵌入式、協(xié)議、信令一些我從未接觸過(guò)的知 識(shí)。我知道我沒(méi)有退路,于是拼命的學(xué)習(xí),我把自己當(dāng)做一個(gè)應(yīng)屆畢業(yè)生一樣,一分努力一分收獲,半年過(guò)去我終于熟悉了工作,并且得到了公司的表彰,薪水也加 了一級(jí)。后面的日子里我們省吃儉用,把欠朋友的1萬(wàn)多塊錢(qián)還了,日子終于上了正軌。這時(shí)女朋友告訴我她想考研究生,我也很支持,于是她辭職在家備考。

      另外,在這里我要感謝我的Project Manager,他原來(lái)是一個(gè)大通信公司的產(chǎn)品經(jīng)理,對(duì)人非常和善,我從他那里學(xué)到了很多知識(shí),而且他也給了我許許多多無(wú)私的幫助。在工作上他給我充分的 空間和信任。記得公司安排我維護(hù)一個(gè)接入服務(wù)器軟件,由于代碼量不算太?。?萬(wàn)行),資料和文檔都不齊全,我維護(hù)起來(lái)非常吃力,所以想重新把它做一遍,公 司領(lǐng)導(dǎo)不太支持,可能覺(jué)得工作量太大,但是他極力支持我,私下里他讓我放手去做,我的維護(hù)工作他擠時(shí)間做。在他的支持下,我花了半年時(shí)間完成了接入服務(wù)器 的軟件,并且實(shí)現(xiàn)了一個(gè)相對(duì)完整的TCP/IP協(xié)議棧。在這里我學(xué)會(huì)了嵌入式系統(tǒng)設(shè)計(jì)、驅(qū)動(dòng)開(kāi)發(fā)、TCP/IP和很多通信的知識(shí),我花了一年時(shí)間終于使自 己從MIS開(kāi)發(fā)轉(zhuǎn)到了通信行業(yè),并且站穩(wěn)了腳跟。我的開(kāi)發(fā)大量是對(duì)硬件的直接操作,不再受微軟的操作系統(tǒng),VC、Delhpi這些開(kāi)發(fā)工具的約束,我終于 看到了另外一片天空。

      我做事情喜歡追根問(wèn)底,隨著開(kāi)發(fā)的深入,軟件開(kāi)發(fā)與硬件聯(lián)系越來(lái)越緊密,硬件知識(shí)的匱乏又對(duì)我的發(fā)展產(chǎn)生了障礙,而且芯片技術(shù)基本上掌握在國(guó)外 公司的手里,這對(duì)做系統(tǒng)級(jí)設(shè)計(jì)是一個(gè)非常大的制約,一個(gè)新產(chǎn)品出來(lái),第一道利潤(rùn)(也往往是最豐厚的利潤(rùn))常常都被IC公司如Intel、Motorola 賺去了,國(guó)內(nèi)的廠商只能喝點(diǎn)湯。所以我決心解決自己的硬件技術(shù)障礙,并打算離開(kāi)通信行業(yè),進(jìn)入IC設(shè)計(jì)相關(guān)領(lǐng)域。

      當(dāng)然我明白如果我對(duì)硬件了解的非常少,沒(méi)有哪家IC公司會(huì)仁慈到招我這樣一個(gè)一竅不通的人來(lái)培訓(xùn)。所以我必須努力打好基礎(chǔ),學(xué)一些相關(guān)知識(shí)為以 后做準(zhǔn)備。就像我開(kāi)始從MIS轉(zhuǎn)到通信一樣,我看過(guò)大量通信方面的書(shū),并且給一個(gè)ISP做過(guò)RADIUS計(jì)費(fèi)分揀臺(tái),在這樣的背景下這家通信公司才給了我 這個(gè)機(jī)會(huì)。我在的通信公司是做系統(tǒng)設(shè)計(jì)的,有不少PCB  Layout硬件人員,平常我就注意向他們學(xué)習(xí),由于我做的是軟件,在公司看硬件資料不好意思,所以開(kāi)始只好在家看,剛來(lái)上海工作我連續(xù)一年都在加班, 后來(lái)不加了,因?yàn)槲乙獢D出時(shí)間學(xué)習(xí),通常我12點(diǎn)左右睡,第二天5點(diǎn)半起,我上班比較早,地鐵上如果人不多,我也用來(lái)看書(shū)。

      學(xué)習(xí)當(dāng)然不會(huì)是一帆風(fēng)順的,有些實(shí)在不懂的問(wèn)題就積累起來(lái)問(wèn)硬件人員,他們的幫助使我學(xué)習(xí)進(jìn)度快了很多。因?yàn)樵跊](méi)有人點(diǎn)撥的情況下自學(xué),我的一 半時(shí)間是花在解決疑難問(wèn)題上,但這種問(wèn)題經(jīng)常是別人的一句話就可以讓我豁然開(kāi)朗,我非常慶幸我有這樣的學(xué)習(xí)環(huán)境。在后面的一年里,我學(xué)會(huì)了看硬件原理圖, 學(xué)會(huì)了簡(jiǎn)單的硬件設(shè)計(jì) (模擬電路方面還有不小的差距),事情就是這樣的,當(dāng)你安安份份做軟件,別人永遠(yuǎn)認(rèn)為你是軟件開(kāi)發(fā)人員,在你開(kāi)始學(xué)習(xí)硬件時(shí)別人未必會(huì)認(rèn)同,有位中興通訊 的朋友還對(duì)我說(shuō)過(guò),一個(gè)人不可能把所有東西都學(xué)完。

      我也明白這一點(diǎn),但我希望自己做的更好。但當(dāng)你熟悉硬件后大家又會(huì)覺(jué)得你好像原本就是軟硬件都懂的,同事們也都習(xí)以為常了。這個(gè)時(shí)候我可以把硬 件資料堂堂正正的拿到公司看,沒(méi)有人再大驚小怪了。讓我比較自豪的是我通過(guò)自己的努力做了一個(gè)IAD(軟交換的終端設(shè)備)系統(tǒng)方案,包含軟硬件的選型、設(shè) 計(jì)等內(nèi)容,這個(gè)方案得到了公司和同事們的認(rèn)同,讓我感到非常欣慰。

      技術(shù)是相輔相成的,當(dāng)我的硬件有了一定的進(jìn)步后,我的軟件設(shè)計(jì)也有了很大的提高 ,我可以從更深層次理解問(wèn)題。我做的接入服務(wù)器CPU是Motorola PowerPC 860,熟悉的朋 友都知道860 QMC與軟件的批量數(shù)據(jù)傳輸通常采用BD表的方式,硬件人員做驅(qū)動(dòng)的時(shí)候習(xí)慣采用固定BD表,每接收或發(fā)送數(shù)據(jù)都將數(shù)據(jù)從BD表拷貝到用戶Buffer, 或從用戶Buffer拷 貝到BD表。由于理解的比較深入,我自己重新實(shí)現(xiàn)了這個(gè)過(guò)程,采用動(dòng)態(tài)BD表的方式,驅(qū)動(dòng)從一個(gè)網(wǎng)口接收數(shù)據(jù),提交給我的軟件進(jìn)行三層交換,直至從另外的 接口發(fā)送出去,沒(méi)有進(jìn)行一次拷貝。這樣的設(shè)計(jì)大大提高了性能,使系統(tǒng)的指標(biāo)接近理論值。

      軟硬件的結(jié)合使我的設(shè)計(jì)水平上了一個(gè)臺(tái)階。我現(xiàn)在寫(xiě)的這個(gè)操作系統(tǒng),編譯后我把程序反編譯成匯編,找出其中不優(yōu)化的代碼,然后在C程序中進(jìn)行調(diào) 整。舉個(gè)例子,很多CPU沒(méi)有專門(mén)的乘法指令,這個(gè)大家應(yīng)該都知道,在這種CPU上進(jìn)行一個(gè)乘法操作常常會(huì)花費(fèi)大量的指令周期,有的朋友會(huì)說(shuō)這個(gè)我知道。 我會(huì)盡量避免采用×號(hào),但是事情往往不是那么簡(jiǎn)單,你知道C語(yǔ)言中數(shù)組的下標(biāo)操作是怎么實(shí)現(xiàn)的嗎?仔細(xì)看看反匯編的代碼你就會(huì)明白,同樣是通過(guò)下標(biāo)的定位 操作,C編譯器會(huì)有時(shí)候會(huì)產(chǎn)生位移指令,但有時(shí)候會(huì)用乘法實(shí)現(xiàn),兩者效率往往是天壤之別,所以明白這些問(wèn)題你才能將系統(tǒng)性能提升到極致。這些問(wèn)題就不多說(shuō) 了,有興趣的話以后可以共同探討。

      話說(shuō)遠(yuǎn)一點(diǎn),我由衷的希望在軟件上做的比較深入的朋友們有機(jī)會(huì)學(xué)學(xué)硬件以及其它相關(guān)知識(shí),尤其是做底層開(kāi)發(fā)和嵌入式設(shè)計(jì)的。這對(duì)軟件技術(shù)的提高 有非常大的幫助,否則很多事情你只知道該這樣但不會(huì)明白為什么該這樣。我這個(gè)觀點(diǎn)在我現(xiàn)在的IC公司Project Manager那里也得到了驗(yàn)證。他告訴我們公司現(xiàn)在802.11芯片產(chǎn)品的軟件經(jīng)理原本是做該芯片硬件設(shè)計(jì)的,某某某原本是做軟件的,現(xiàn)在在做IC,類 似的例子還有很多,只是在國(guó)內(nèi)這樣的風(fēng)氣不是非常流行。

      我有一些心得體會(huì)與大家分享,只有當(dāng)我干好本職工作后,我才會(huì)學(xué)習(xí)與工作關(guān)系不大的技術(shù),這樣公司的上司才不至于反感。在入門(mén) 階段的問(wèn)題我通常不去問(wèn)那些資深人士 ,而是問(wèn)一些資歷比較淺的朋友,比如剛畢業(yè)不久的學(xué)生,因?yàn)樗麄兺鶗?huì)跟你詳細(xì)的講解,而資深人士通常覺(jué)得你的問(wèn)題太簡(jiǎn)單,所以回答的也很簡(jiǎn)單,我又不好 意思多問(wèn)。

      等技術(shù)上了一定的層次后我才會(huì)問(wèn)他們,他們也能給你比較深入的回答。另外,有些朋友說(shuō)我機(jī)會(huì)比較好,他們也希望能從事新的工作可惜沒(méi)有機(jī)會(huì),我 聽(tīng)了只有苦笑,我的機(jī)會(huì)了 解的人都應(yīng)該知道,我沒(méi)有出生在什么IT世家:)也沒(méi)有誰(shuí)一路提拔我,所有的路都是自己走出來(lái)的,我母親去世比較早,我的后母(我叫她阿姨)看著我努力過(guò) 來(lái)的,一次她看我大年30還在寫(xiě)程序,她說(shuō)像我這樣努力木頭都能學(xué)出來(lái)。

      我的最終目的是IC而不是PCB,所以我下一步的準(zhǔn)備開(kāi)始學(xué)習(xí)IC設(shè)計(jì)的知識(shí)。公司的同事沒(méi)有懂IC設(shè)計(jì)的,后面的路又要靠自己了。我買(mǎi)了不少 相關(guān)的書(shū),在網(wǎng)上也查了很多的資料,我花了大量的時(shí)間去學(xué)習(xí)VHDL,并且用軟件進(jìn)行了一些簡(jiǎn)單的設(shè)計(jì)和仿真(沒(méi)有設(shè) 計(jì)ASIC,只是針對(duì)FPGA)。隨著學(xué)習(xí)的深入,我漸漸明白了IC設(shè)計(jì)的基本流程,同時(shí)也明白了這條路的艱辛。這個(gè)時(shí)候我已經(jīng)做好了跳槽的準(zhǔn)備,我向一 家業(yè)界又一定知名度的IC設(shè)計(jì)公司投了簡(jiǎn)歷,并通過(guò)了漫長(zhǎng)的面試(4個(gè)多小時(shí))。其他的一切我都比較滿意,唯獨(dú)薪資差強(qiáng)人意,我也明白原因,因?yàn)槲沂沁@個(gè) 行業(yè)的新人,我沒(méi)有經(jīng)驗(yàn),我再一次將自清零了。公司老板問(wèn)我6000多一個(gè)月能不能接受,我知道他也是照章辦事。想想我通信行業(yè)的朋友們,基本上都是年薪 10萬(wàn)以上,月薪過(guò)萬(wàn)的也比比皆是,朋友們也幫我介紹了不 少待遇不錯(cuò)的公司。我該怎么選擇,當(dāng)時(shí)我很猶豫,我熱愛(ài)我的事業(yè),我向往我的追求,但我也是一個(gè)普通的人,我也需要養(yǎng)家糊口,我也想早一點(diǎn)買(mǎi)房買(mǎi)車(chē)。生活 給我出了一道難題。

      愛(ài)因斯坦在63歲時(shí)說(shuō)過(guò)一個(gè)人沒(méi)有在30歲以前達(dá)成科學(xué)上的最大成就,那他永遠(yuǎn)也不會(huì)有。這句話給了我很大 的壓力和震動(dòng),我馬上就26歲了,離30只有四年時(shí)間,我必須抓緊這幾年寶貴的時(shí)間,努力達(dá)到我技術(shù)上的最高峰。為了這個(gè)理想,為了能離自己的夢(mèng)更近一 些,我選擇了這家IC公司,我明白自己的薪資和公司剛進(jìn)來(lái)的碩士研究生相差無(wú)幾,但為了今后的發(fā)展只能忍受,一切又得重新開(kāi)始。換行業(yè)是一個(gè)非常痛苦的過(guò) 程,尤其從一個(gè)春風(fēng)得意的位置換到一個(gè)陌生的崗位,感覺(jué)象從溫暖的被子里鉆出來(lái)跳進(jìn)冰水中,讓人難以接受。在原來(lái)那家通信公司,我是唯一兩年時(shí)間漲了五次 工資的員工,公司和同事都給了我極大的認(rèn)可,工作上也常常被委以重任。但現(xiàn)在這一切都成了過(guò)去,在新的公司 我只是一個(gè)新人,沒(méi)有人知道也沒(méi)有人在意我過(guò)去的成績(jī)。我決定重新開(kāi)始,我把自己看作 新畢業(yè)的學(xué)生,我要用自己的努力得到公司的認(rèn)可。進(jìn)入新的行業(yè)是非常痛苦的,我告訴自己必須忍受這一切,雖然外面有很多誘惑,但是既然作出了選擇我就不允 許自己輕易放棄。

      我現(xiàn)在已經(jīng)在這家新公司上了一個(gè)多月的班,開(kāi)始非常艱難,現(xiàn)在慢慢適應(yīng)了。第一個(gè)月結(jié)束時(shí),Team Leader找我談話,說(shuō)我是新進(jìn)員工中最優(yōu)秀的一個(gè),我心里很欣慰,這也算對(duì)我努力的一個(gè)肯定吧。在這里還要感謝我的女朋友,她給了我很大的支持和鼓 舞, 每次在我動(dòng)搖的時(shí)候她都在鼓勵(lì)我,讓我堅(jiān)持自己的理想,剛來(lái)上海是她讓我不要勉強(qiáng)去做MIS,這次也是她讓我頂住了月薪過(guò)萬(wàn)的誘惑,沒(méi)有她我可能不會(huì)有今 天的成績(jī)?,F(xiàn)在的公司有自己的操作系統(tǒng),自己的CPU、DSP和其它芯片,在這里我能學(xué)到世界上最先進(jìn)的技術(shù),我們的設(shè)計(jì)開(kāi)發(fā)不再完全依賴別人的硬件和系 統(tǒng),這讓我很開(kāi)心。我打算等工作步入正軌后,全力學(xué)習(xí)新的知識(shí),實(shí)現(xiàn)我的理想。
      在后面的兩年里我給自己定下了幾個(gè)目標(biāo):

      1、努力做好本職工作,在工作上得到公司和同事們的認(rèn)同;
      2、努力學(xué)習(xí)IC硬件設(shè)計(jì)知識(shí),多向同事請(qǐng)教,并利用一切機(jī)會(huì)多實(shí)踐;
      3、實(shí)現(xiàn)我的實(shí)時(shí)操作系統(tǒng)的主要部分,完成TCP/IP協(xié)議棧模塊,并免費(fèi)發(fā)布源代碼;
      4、和我女朋友結(jié)婚并買(mǎi)一套小房子,這是最重要的,因?yàn)槲颐靼资聵I(yè)是可以重來(lái)的,但是珍貴的感情很難失而復(fù)得。

      在這里提一下我現(xiàn)在開(kāi)發(fā)的操作系統(tǒng),它是一個(gè)實(shí)時(shí)嵌入式系統(tǒng),目前支持以下特性:

      a. 支持時(shí)間片輪轉(zhuǎn)調(diào)度和基于優(yōu)先級(jí)調(diào)度,最多64個(gè)優(yōu)先級(jí);
      b. 搶占式實(shí)時(shí)內(nèi)核;
      c. 為了便于移植,主體用標(biāo)準(zhǔn)C實(shí)現(xiàn);
      d. 匯編代碼非常少,不到100行;
      e. 支持任務(wù)管理,各任務(wù)有獨(dú)立的堆棧;
      f. 進(jìn)程同步和通信目前完成了Semaphore,Message Queue正在調(diào)試;
      g. 實(shí)現(xiàn)了定時(shí)系統(tǒng)調(diào)用;
      h. 可以在Windows上仿真調(diào)試。

      我還打算下一步實(shí)現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)保護(hù),Event Flag,Data Pipe,內(nèi)存管理(以前實(shí)現(xiàn)過(guò)) ,驅(qū)動(dòng)接口等。在這之后我還會(huì)努力完善它,比如加入文件系統(tǒng),協(xié)議棧、調(diào)試接口等。希望朋友們提出自己的意見(jiàn)和建議,在此不勝感激!
      后記:

      就像有的朋友說(shuō)的,我的經(jīng)歷或許會(huì)給一些朋友產(chǎn)生誤導(dǎo),在這里我必須說(shuō)明一下。我來(lái)上海以前學(xué)習(xí)過(guò)于拼命,常常晚上只睡3個(gè)多小時(shí),我身高1米 71,那時(shí)只有108斤(我現(xiàn)在130多),家人也說(shuō)我這樣拼命活不過(guò)60歲,但是當(dāng)時(shí)的我太固執(zhí),我對(duì)他們說(shuō)只要能實(shí)現(xiàn)理想活50歲我就夠了。那時(shí)的拼 命使我的身體受到了影響,有一次早上突然腰肌劇痛難忍,痛的我倒在床上站不起來(lái)。雖然我現(xiàn)在已經(jīng)比較注意,但有時(shí)候還會(huì)隱隱作痛。后來(lái)在女朋友說(shuō)服了我, 來(lái)上海以后我不再如此。我經(jīng)常引用父親的一句話身體是革命的本錢(qián)。

      而且我也發(fā)現(xiàn)拼命不是辦法,我可以熬一兩個(gè)通宵,最多的一次我連續(xù)工作了三天三夜, 但是我半個(gè)月都沒(méi)有恢復(fù)過(guò)來(lái),這樣是不是得不償失?學(xué)習(xí)工作應(yīng)該是一個(gè)長(zhǎng)期的過(guò)程, 像馬拉松而不是百米沖刺。我現(xiàn)在非常注意調(diào)整學(xué)習(xí)和工作的強(qiáng)度,我要保證每天盡量有相對(duì)充沛的精力,一些年輕的朋友覺(jué)得自己也應(yīng)該拼命努力,這讓我多少有 些擔(dān)心,如果我的故事能讓你在學(xué)習(xí)工作上多一點(diǎn)興趣,我會(huì)感到很開(kāi)心,但如果誤導(dǎo)了某些朋友,讓你做一些不值得的付出,我會(huì)感到很內(nèi)疚。

      技術(shù)沒(méi)有貴賤之分,我以前換行業(yè)是因?yàn)樽约旱呐d趣所致,而不是對(duì)哪個(gè)行業(yè)有什么偏見(jiàn)。我希望我的經(jīng)歷不要給朋友一個(gè)錯(cuò)誤的導(dǎo)向,覺(jué)得我始終向更 高的技術(shù)發(fā)展。其實(shí)各行各業(yè)做到頂尖都是很困難的。話又說(shuō)回來(lái)雖然技術(shù)沒(méi)有貴賤,但是門(mén)檻是有高低的,無(wú)論如何,做IC的門(mén)檻要比做網(wǎng)頁(yè)的高,這一點(diǎn)無(wú)可 否認(rèn)。國(guó)家各種人才都是需要的,但是作為個(gè)人奮發(fā)向上的想法還是應(yīng)該有的,努力在自己喜歡的行業(yè)上做的更好,而不應(yīng)該停留在比較膚淺的層次上。

      我是一個(gè)自己覺(jué)得比較有自知之明的人,或許我最大的優(yōu)點(diǎn)就是知道自己有很多缺點(diǎn) :)。我的故事中很多的曲折和錯(cuò)誤都是由我的缺點(diǎn)造成的,希望大家用審慎的眼光看待我的經(jīng)歷,不要被我的花言巧語(yǔ)所迷惑。我學(xué)習(xí)有些隨心所欲,這給我?guī)?lái) 了無(wú)盡的麻煩,也大大阻礙了我的發(fā)展。記得我小時(shí)候成績(jī)比較出色,但是后來(lái)學(xué)習(xí)嚴(yán)重偏科,導(dǎo)致我中學(xué)成績(jī)一再滑坡,也沒(méi)有考上什么好的學(xué)校,小時(shí)候的一個(gè) 朋友,當(dāng)時(shí)的成績(jī)和我相仿,但是沒(méi)有我這個(gè)缺點(diǎn),她上了清華,后來(lái)在去了美國(guó)深造,在一個(gè)著名導(dǎo)師手下研究理論科學(xué),這未嘗不是一條更好的出路。

      另外我的學(xué)習(xí)方法也是在不斷改善中的,過(guò)去的學(xué)習(xí)過(guò)于講究數(shù)量和時(shí)間,那樣學(xué)習(xí)既苦而已效率不高。現(xiàn)在我非常注意學(xué)習(xí)的效率和技巧,這樣才是學(xué) 習(xí)的捷徑(當(dāng)然不是指投機(jī)取巧),比如說(shuō)學(xué)一相對(duì)陌生的技術(shù),如果有條件,不妨問(wèn)一問(wèn)有經(jīng)驗(yàn)的人,不需要問(wèn)很多,往往他不經(jīng)意的幾句話會(huì)給你非常大的幫 助,甚至超過(guò)你看一個(gè)星期的書(shū)。帶著這樣的思想再去學(xué)習(xí)你會(huì)節(jié)省很多時(shí)間,這樣何樂(lè)不為呢?

      這些年中我學(xué)了不少的東西,由于開(kāi)始非常盲目,所以學(xué)的東西雜亂無(wú)章,現(xiàn)在回想起來(lái)讓我啼笑皆非,我把大量的時(shí)間浪費(fèi)在一些沒(méi)有必要深入了解的 知識(shí)上,畢竟一個(gè)人的精力是有限度的。很多朋友和我一樣都背過(guò)五筆字形,的確它是個(gè)不錯(cuò)的輸入法,但是對(duì)一個(gè)研發(fā)人員它絕對(duì)不值得你去背,你的時(shí)間應(yīng)該花 在有價(jià)值的地方。我這樣的事情還做過(guò)很多,我背過(guò)CCED、WPS的命令和快捷鍵,在dBase基本退出歷史舞臺(tái)后我還花了很多時(shí)間去學(xué)習(xí)它的使用。所以 我的學(xué)習(xí)在前期缺乏規(guī)劃,沒(méi)有明確的短期目的、中期目標(biāo),只有一個(gè)虛無(wú)飄渺的長(zhǎng)期的理想。這就像做設(shè)計(jì)一樣,好的設(shè)計(jì)是從需求抽象到代碼有很多過(guò)程,而不 能得到了需求就立刻開(kāi)始開(kāi)始編碼。

      當(dāng)然這么些年的學(xué)習(xí)和工作多多少少有些收獲,下面我說(shuō)說(shuō)我的一些學(xué)習(xí)的心得,這些方法未必正確,我也在不斷探索和改進(jìn)中。我的學(xué)習(xí)和工作有相對(duì) 明確的目標(biāo),我不會(huì)一時(shí)心動(dòng)而去學(xué)習(xí)某一技術(shù),在下決定之前我會(huì)考慮很多,包括長(zhǎng)期的發(fā)展,個(gè)人路線的規(guī)劃,需要付出的代價(jià)、可能遇到的困難及解決的辦法 等等;在決定后還會(huì)制定更加明確的計(jì)劃,包括短期、中期和長(zhǎng)期的,身邊可以利用到的資源(包括好的書(shū)籍、資料、軟硬件環(huán)境,也包括有經(jīng)驗(yàn)的朋友或者師 長(zhǎng)),以及每一個(gè)階段是怎么過(guò)渡到高一階段的計(jì)劃 ;往往在一個(gè)學(xué)習(xí)階段一旦上路后會(huì)走的相對(duì)順利,但是跨階段通常比較麻煩,比如從學(xué)習(xí)基礎(chǔ)知識(shí)轉(zhuǎn)到實(shí)踐。另外我買(mǎi)書(shū)也有自己的方法,現(xiàn)在世面上高質(zhì)量的書(shū) 遠(yuǎn)不如低質(zhì)量書(shū)多,對(duì)于一個(gè)陌生的技術(shù),往往在第一次買(mǎi)書(shū)會(huì)選擇錯(cuò)誤,即使買(mǎi)到一本好書(shū)但是它的方向也未必適合你,所以我通常會(huì)先在網(wǎng)上查找一些該技術(shù)的 介紹,有了一點(diǎn)點(diǎn)概念后再去買(mǎi)一本比較薄、相對(duì)便宜并且內(nèi)容相對(duì)泛泛而談的書(shū),這是國(guó)內(nèi)作者最善于寫(xiě)的書(shū):) ,再把它瀏覽一遍后我就會(huì)基本明白這門(mén)技術(shù)的要點(diǎn),后面買(mǎi)書(shū)和制定計(jì)劃就會(huì)明確的多 。否則一開(kāi)始就想找本好書(shū)往往比較困難,而且買(mǎi)回來(lái)后努力學(xué)習(xí),有時(shí)候?qū)W了一半才發(fā)現(xiàn)是本低質(zhì)量的書(shū)或者是相對(duì)過(guò)時(shí)技術(shù),讓人非常懊惱。另外讓有經(jīng)驗(yàn)的人 幫你介紹,通常也是一個(gè)不錯(cuò)的選擇。

    posted @ 2014-05-07 14:22 ZT文萃 閱讀(240) | 評(píng)論 (0)編輯 收藏

    下文轉(zhuǎn)載自:
    http://www.sbanzu.com/topicdisplay.asp?BoardID=8&Page=1&TopicID=4136822
    轉(zhuǎn)載不代表贊同作者,僅僅是記錄。

    有一個(gè)名字,全世界所有的獨(dú)裁者聽(tīng)到都會(huì)驚慌。
    有一個(gè)名字,一切熱愛(ài)自由的人民聽(tīng)到都要贊揚(yáng)。
    有一個(gè)名字,躲在陰暗中謀殺百姓的歹徒對(duì)她咬牙切齒。
    有一個(gè)名字,陽(yáng)光下渴望和平的人們對(duì)她寄予厚望。
    是她一次又一次的把世界從惡魔手中拯救,
    是她一次又一次的給予恐懼中的人類希望。
    是誰(shuí)擋住了納粹的鐵蹄?
    是誰(shuí)支援了遠(yuǎn)東的戰(zhàn)場(chǎng)?
    是誰(shuí)把集中營(yíng)解放?
    是誰(shuí)迫使日寇投降?
    是誰(shuí)將那隔開(kāi)同胞的高墻推倒?
    是誰(shuí)擊斃了伊阿獨(dú)裁流氓?
    她高舉著火炬,在黑暗中指引我們方向!
    她宣言的真理,時(shí)時(shí)回響在我們耳旁!
    虛偽者越是污蔑她虛偽,
    正直者越是堅(jiān)定對(duì)她的信仰!
    她的偉大我們一刻不忘!
    你問(wèn)我她長(zhǎng)的什么模樣?
    她是炙熱通紅的火焰,
    她是寬廣蔚藍(lán)的大海,
    她是純潔耀眼的白光!
    你問(wèn)我她的名?
    正告你!
    美利堅(jiān)!
    人類的希望!
    壯哉,我大美利堅(jiān)!

    posted @ 2014-05-06 12:02 ZT文萃 閱讀(339) | 評(píng)論 (0)編輯 收藏

    下文轉(zhuǎn)帖自:
    http://www.cnblogs.com/chenssy/p/3651218.html
    版權(quán)歸作者所有。

    hashCode的作用

          要想了解一個(gè)方法的內(nèi)在原理,我們首先需要明白它是干什么的,也就是這個(gè)方法的作用。在講解數(shù)組時(shí)(java提高篇(十八)------數(shù)組),我們提到數(shù)組是java中效率最高的數(shù)據(jù)結(jié)構(gòu),但是“最高”是有前提的。第一我們需要知道所查詢數(shù)據(jù)的所在位置。第二:如果我們進(jìn)行迭代查找時(shí),數(shù)據(jù)量一定要小,對(duì)于大數(shù)據(jù)量而言一般推薦集合。

          在Java集合中有兩類,一類是List,一類是Set他們之間的區(qū)別就在于List集合中的元素師有序的,且可以重復(fù),而Set集合中元素是無(wú)序不可重 復(fù)的。對(duì)于List好處理,但是對(duì)于Set而言我們要如何來(lái)保證元素不重復(fù)呢?通過(guò)迭代來(lái)equals()是否相等。數(shù)據(jù)量小還可以接受,當(dāng)我們的數(shù)據(jù)量 大的時(shí)候效率可想而知(當(dāng)然我們可以利用算法進(jìn)行優(yōu)化)。比如我們向HashSet插入1000數(shù)據(jù),難道我們真的要迭代1000次,調(diào)用1000次 equals()方法嗎?hashCode提供了解決方案。怎么實(shí)現(xiàn)?我們先看hashCode的源碼(Object)。

    public native int hashCode();

          它是一個(gè)本地方法,它的實(shí)現(xiàn)與本地機(jī)器有關(guān),這里我們暫且認(rèn)為他返回的是對(duì)象存儲(chǔ)的物理位置(實(shí)際上不是,這里寫(xiě)是便于理解)。當(dāng)我們向一個(gè)集合中添加某 個(gè)元素,集合會(huì)首先調(diào)用hashCode方法,這樣就可以直接定位它所存儲(chǔ)的位置,若該處沒(méi)有其他元素,則直接保存。若該處已經(jīng)有元素存在,就調(diào)用 equals方法來(lái)匹配這兩個(gè)元素是否相同,相同則不存,不同則散列到其他位置(具體情況請(qǐng)參考(Java提高篇()-----HashMap))。這樣 處理,當(dāng)我們存入大量元素時(shí)就可以大大減少調(diào)用equals()方法的次數(shù),極大地提高了效率。

          所以hashCode在上面扮演的角色為尋域(尋 找某個(gè)對(duì)象在集合中區(qū)域位置)。hashCode可以將集合分成若干個(gè)區(qū)域,每個(gè)對(duì)象都可以計(jì)算出他們的hash碼,可以將hash碼分組,每個(gè)分組對(duì)應(yīng) 著某個(gè)存儲(chǔ)區(qū)域,根據(jù)一個(gè)對(duì)象的hash碼就可以確定該對(duì)象所存儲(chǔ)區(qū)域,這樣就大大減少查詢匹配元素的數(shù)量,提高了查詢效率。

    hashCode對(duì)于一個(gè)對(duì)象的重要性

          hashCode重要么?不重要,對(duì)于List集合、數(shù)組而言,他就是一個(gè)累贅,但是對(duì)于HashMap、HashSet、HashTable而言,它變 得異常重要。所以在使用HashMap、HashSet、HashTable時(shí)一定要注意hashCode。對(duì)于一個(gè)對(duì)象而言,其hashCode過(guò)程就 是一個(gè)簡(jiǎn)單的Hash算法的實(shí)現(xiàn),其實(shí)現(xiàn)過(guò)程對(duì)你實(shí)現(xiàn)對(duì)象的存取過(guò)程起到非常重要的作用。

          在前面LZ提到了HashMap和HashTable兩種數(shù)據(jù)結(jié)構(gòu),雖然他們存在若干個(gè)區(qū)別,但是他們的實(shí)現(xiàn)原理是相同的,這里我以HashTable為例闡述hashCode對(duì)于一個(gè)對(duì)象的重要性。

          一個(gè)對(duì)象勢(shì)必會(huì)存在若干個(gè)屬性,如何選擇屬性來(lái)進(jìn)行散列考驗(yàn)著一個(gè)人的設(shè)計(jì)能力。如果我們將所有屬性進(jìn)行散列,這必定會(huì)是一個(gè)糟糕的設(shè)計(jì),因?yàn)閷?duì)象的 hashCode方法無(wú)時(shí)無(wú)刻不是在被調(diào)用,如果太多的屬性參與散列,那么需要的操作數(shù)時(shí)間將會(huì)大大增加,這將嚴(yán)重影響程序的性能。但是如果較少屬相參與 散列,散列的多樣性會(huì)削弱,會(huì)產(chǎn)生大量的散列“沖突”,除了不能夠很好的利用空間外,在某種程度也會(huì)影響對(duì)象的查詢效率。其實(shí)這兩者是一個(gè)矛盾體,散列的 多樣性會(huì)帶來(lái)性能的降低。

          那么如何對(duì)對(duì)象的hashCode進(jìn)行設(shè)計(jì),LZ也沒(méi)有經(jīng)驗(yàn)。從網(wǎng)上查到了這樣一種解決方案:設(shè)置一個(gè)緩存標(biāo)識(shí)來(lái)緩存當(dāng)前的散列碼,只有當(dāng)參與散列的對(duì)象改變時(shí)才會(huì)重新計(jì)算,否則調(diào)用緩存的hashCode,這樣就可以從很大程度上提高性能。

          在HashTable計(jì)算某個(gè)對(duì)象在table[]數(shù)組中的索引位置,其代碼如下:

    int index = (hash & 0x7FFFFFFF) % tab.length;

          為什么要&0x7FFFFFFF?因?yàn)槟承?duì)象的hashCode可能會(huì)為負(fù)值,與0x7FFFFFFF進(jìn)行與運(yùn)算可以確保index為一個(gè)正 數(shù)。通過(guò)這步我可以直接定位某個(gè)對(duì)象的位置,所以從理論上來(lái)說(shuō)我們是完全可以利用hashCode直接定位對(duì)象的散列表中的位置,但是為什么會(huì)存在一個(gè) key-value的鍵值對(duì),利用key的hashCode來(lái)存入數(shù)據(jù)而不是直接存放value呢?這就關(guān)系HashTable性能問(wèn)題的最重要的問(wèn) 題:Hash沖突!

          我們知道沖突的產(chǎn)生是由于不同的對(duì)象產(chǎn)生了相同的散列碼,假如我們?cè)O(shè)計(jì)對(duì)象的散列碼可以確保99.999999999%的不重復(fù),但是有一種絕對(duì)且?guī)缀醪?可能遇到的沖突你是絕對(duì)避免不了的。我們知道hashcode返回的是int,它的值只可能在int范圍內(nèi)。如果我們存放的數(shù)據(jù)超過(guò)了int的范圍呢?這 樣就必定會(huì)產(chǎn)生兩個(gè)相同的index,這時(shí)在index位置處會(huì)存儲(chǔ)兩個(gè)對(duì)象,我們就可以利用key本身來(lái)進(jìn)行判斷。所以具有相索引的對(duì)象,在該 index位置處存在多個(gè)對(duì)象,我們必須依靠key的hashCode和key本身來(lái)進(jìn)行區(qū)分。

    hashCode與equals

          在Java中hashCode的實(shí)現(xiàn)總是伴隨著equals,他們是緊密配合的,你要是自己設(shè)計(jì)了其中一個(gè),就要設(shè)計(jì)另外一個(gè)。當(dāng)然在多數(shù)情況下,這兩個(gè) 方法是不用我們考慮的,直接使用默認(rèn)方法就可以幫助我們解決很多問(wèn)題。但是在有些情況,我們必須要自己動(dòng)手來(lái)實(shí)現(xiàn)它,才能確保程序更好的運(yùn)作。

          對(duì)于equals,我們必須遵循如下規(guī)則:

          對(duì)稱性:如果x.equals(y)返回是“true”,那么y.equals(x)也應(yīng)該返回是“true”。

          反射性:x.equals(x)必須返回是“true”。

          類推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也應(yīng)該返回是“true”。

          一致性:如果x.equals(y)返回是“true”,只要x和y內(nèi)容一直不變,不管你重復(fù)x.equals(y)多少次,返回都是“true”。

          任何情況下,x.equals(null),永遠(yuǎn)返回是“false”;x.equals(和x不同類型的對(duì)象)永遠(yuǎn)返回是“false”。

          對(duì)于hashCode,我們應(yīng)該遵循如下規(guī)則:

          1. 在一個(gè)應(yīng)用程序執(zhí)行期間,如果一個(gè)對(duì)象的equals方法做比較所用到的信息沒(méi)有被修改的話,則對(duì)該對(duì)象調(diào)用hashCode方法多次,它必須始終如一地返回同一個(gè)整數(shù)。

          2. 如果兩個(gè)對(duì)象根據(jù)equals(Object o)方法是相等的,則調(diào)用這兩個(gè)對(duì)象中任一對(duì)象的hashCode方法必須產(chǎn)生相同的整數(shù)結(jié)果。

          3. 如果兩個(gè)對(duì)象根據(jù)equals(Object o)方法是不相等的,則調(diào)用這兩個(gè)對(duì)象中任一個(gè)對(duì)象的hashCode方法,不要求產(chǎn)生不同的整數(shù)結(jié)果。但如果能不同,則可能提高散列表的性能。

          至于兩者之間的關(guān)聯(lián)關(guān)系,我們只需要記住如下即可:

          如果x.equals(y)返回“true”,那么x和y的hashCode()必須相等。

          如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。

          理清了上面的關(guān)系我們就知道他們兩者是如何配合起來(lái)工作的。先看下圖:

    2014040701_thumb2

          整個(gè)處理流程是:

          1、判斷兩個(gè)對(duì)象的hashcode是否相等,若不等,則認(rèn)為兩個(gè)對(duì)象不等,完畢,若相等,則比較equals。

          2、若兩個(gè)對(duì)象的equals不等,則可以認(rèn)為兩個(gè)對(duì)象不等,否則認(rèn)為他們相等。

          實(shí)例:

    復(fù)制代碼
    public class Person {     private int age;     private int sex;    //0:男,1:女     private String name;      private final int PRIME = 37;      Person(int age ,int sex ,String name){         this.age = age;         this.sex = sex;         this.name = name;     }      /** 省略getter、setter方法 **/      @Override     public int hashCode() {         System.out.println("調(diào)用hashCode方法...........");          int hashResult = 1;         hashResult = (hashResult + Integer.valueOf(age).hashCode() + Integer.valueOf(sex).hashCode()) * PRIME;         hashResult = PRIME * hashResult + ((name == null) ? 0 : name.hashCode());          System.out.println("name:"+name +" hashCode:" + hashResult);          return hashResult;     }      /**      * 重寫(xiě)hashCode()      */     public boolean equals(Object obj) {         System.out.println("調(diào)用equals方法...........");          if(obj == null){             return false;         }         if(obj.getClass() != this.getClass()){             return false;         }         if(this == obj){             return true;         }          Person person = (Person) obj;          if(getAge() != person.getAge() || getSex()!= person.getSex()){             return false;         }          if(getName() != null){             if(!getName().equals(person.getName())){                 return false;             }         }         else if(person != null){             return false;         }         return true;     } }
    復(fù)制代碼

          該Bean為一個(gè)標(biāo)準(zhǔn)的Java Bean,重新實(shí)現(xiàn)了hashCode方法和equals方法。

    復(fù)制代碼
    public class Main extends JPanel {      public static void main(String[] args) {         Set<Person> set = new HashSet<Person>();          Person p1 = new Person(11, 1, "張三");         Person p2 = new Person(12, 1, "李四");         Person p3 = new Person(11, 1, "張三");         Person p4 = new Person(11, 1, "李四");          //只驗(yàn)證p1、p3         System.out.println("p1 == p3? :" + (p1 == p3));         System.out.println("p1.equals(p3)?:"+p1.equals(p3));         System.out.println("-----------------------分割線--------------------------");         set.add(p1);         set.add(p2);         set.add(p3);         set.add(p4);         System.out.println("set.size()="+set.size());     } }
    復(fù)制代碼

           運(yùn)行結(jié)果如下:

    2014040702_thumb

          從上圖可以看出,程序調(diào)用四次hashCode方法,一次equals方法,其set的長(zhǎng)度只有3。add方法運(yùn)行流程完全符合他們兩者之間的處理流程。

    posted @ 2014-05-04 06:23 ZT文萃 閱讀(276) | 評(píng)論 (0)編輯 收藏

    下文來(lái)自:
    http://www.cnblogs.com/chenssy/archive/2012/12/09/2809874.html
    版權(quán)歸作者所有。

          電子郵件用于網(wǎng)上的信心傳遞和交流,它是最重要的Internet服務(wù)之一。據(jù)統(tǒng)計(jì)Internet30%的業(yè)務(wù)是電子郵件有關(guān)的。同時(shí)我們也不可否認(rèn)它在我們的日常生活、工作辦公方面扮演著很重要的角色。譬如:許多辦公自動(dòng)化項(xiàng)目(OA)中都要附帶發(fā)送郵件的功能,如果還要使用OutLook等手工方式就不適合,在這個(gè)高速的時(shí)代,我們需要提供工作效率,讓工作能夠自動(dòng)化。同時(shí)在許多網(wǎng)站中也都需要附帶發(fā)送郵件的功能:給新注冊(cè)的用戶發(fā)送一封包含其注冊(cè)信息的歡迎E-Mail、將網(wǎng)站的最新活動(dòng)信息通過(guò)E-Mail發(fā)送給所有的注冊(cè)會(huì)員等等。

     

           在開(kāi)始電子郵件開(kāi)發(fā)前:我們需要明白一下幾個(gè)概念:電子郵件系統(tǒng)、郵件服務(wù)器、電子郵件、郵件客戶端軟件、郵件傳輸協(xié)議、電子郵件的傳輸過(guò)程。

     

           電子郵件系統(tǒng)

           與 傳統(tǒng)的郵政服務(wù)相類似,電子郵件系統(tǒng)由電子郵局、電子郵件發(fā)送、接收系統(tǒng)組成。發(fā)送者和接收者通過(guò)電子郵件發(fā)送、接收系統(tǒng)來(lái)發(fā)送和接收電子郵件,他們實(shí)際 上是運(yùn)行在計(jì)算機(jī)上的郵件客戶端程序。電子郵局起著一個(gè)橋梁的作用,它實(shí)際上是運(yùn)行在服務(wù)器上的郵件服務(wù)器程序。電子郵件的處理流程也和郵政服務(wù)相類似。

     

              

           郵件服務(wù)器

           郵件服務(wù)器是一種用來(lái)負(fù)責(zé)電子郵件收發(fā)管理的設(shè)備。在Internet上提供了大量的電子郵件服務(wù)器,如:126163hotmail…。

           電子郵件服務(wù)器主要提供的功能:

               1、  接收用戶投遞的郵件。

               2、  將用戶投遞進(jìn)來(lái)的郵件轉(zhuǎn)發(fā)給目標(biāo)郵件服務(wù)器。

               3、  接收其他電子郵件服務(wù)器轉(zhuǎn)發(fā)來(lái)的郵件并該郵件存儲(chǔ)到其管理的用戶郵中。

               4、  為前來(lái)讀取郵件的用戶提供讀取郵件的服務(wù)。

           郵 件服務(wù)器構(gòu)成了電子郵件系統(tǒng)的核心。每個(gè)收信人都有一個(gè)位于某個(gè)郵件服務(wù)器上的郵箱(mailbox)。Bob的郵箱用于管理和維護(hù)已經(jīng)發(fā)送給他的郵件消 息。一個(gè)郵件消息的典型旅程是從發(fā)信人的用戶代理開(kāi)始,郵件發(fā)信人的郵件服務(wù)器,中轉(zhuǎn)到收信人的郵件服務(wù)器,然后投遞到收信人的郵箱中。當(dāng)Bob想查看自 己的郵箱中的郵件消息時(shí),存放該郵箱的郵件服務(wù)器將以他提供的用戶名和口令認(rèn)證他。Alice的郵件服務(wù)器還得處理Bob的郵件服務(wù)器出故障的情況。如果 Alice的郵件服務(wù)器無(wú)法把郵件消息立即遞送到Bob的郵件服務(wù)器,Alice的服務(wù)器就把它們存放在消息隊(duì)列(message queue)中,以后再嘗試遞送。這種嘗試通常每30分鐘左右執(zhí)行一次:要是過(guò)了若干天仍未嘗試成功,該服務(wù)器就把這個(gè)消息從消息隊(duì)列中去除掉,同時(shí)以另 一個(gè)郵件消息通知發(fā)信人(即Alice)。

     

           電子郵件

           電子郵件是一種通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)相互傳送和接收信息的現(xiàn)代化通信方式。它是種用電子手段提供信息交換的通信方式,是Internet應(yīng)用最廣的服務(wù),通過(guò)網(wǎng)絡(luò)的電子郵件系統(tǒng),用戶可以用非常低廉的價(jià)格,以非??焖俚姆绞剑c世界上任何一個(gè)角落的網(wǎng)絡(luò)用戶聯(lián)系,這些電子郵件可以是文字、圖像、聲音等各種方式。同時(shí),用戶可以得到大量免費(fèi)的新聞、專題郵件,并實(shí)現(xiàn)輕松的信息搜索。

           電子郵件由信封和內(nèi)容兩個(gè)部分組成。信封又稱郵件頭,電子郵件服務(wù)器根據(jù)信封上的信心來(lái)傳遞郵件的。內(nèi)容稱為郵件體,它用于提供郵件的具體內(nèi)容。

           Internet上的電子郵件地址全球唯一,其格式為“郵箱名@郵件服務(wù)器域名”。域(郵件域)是電子郵件服務(wù)器的基本管理單位,郵件服務(wù)以域?yàn)榛A(chǔ),每個(gè)郵箱對(duì)應(yīng)一個(gè)用戶。其中郵件服務(wù)器域名必須是已注冊(cè)的DNS域名,并且必須要與MX(郵件交換機(jī))記錄匹配。DNS用于將域名、主機(jī)名解析為IP地址。MX記錄指向該域名的郵件服務(wù)器主機(jī)記錄,為郵件服務(wù)專用。

     

           郵件客戶端軟件

           郵件客戶端軟件負(fù)責(zé)與郵件服務(wù)器通訊,主要用于幫助用戶將郵件發(fā)送給SMTP服務(wù)器和POP3/IMAP郵件服務(wù)器讀取用戶的電子郵件。郵件客戶端軟件通常集撰寫(xiě)、發(fā)送、接收郵件于一體。

     

     

           電子郵箱

           每一個(gè)電子郵件服務(wù)器之上都可以開(kāi)始多個(gè)電子郵箱,電子郵箱也稱之為E-Mail地址。它類似于現(xiàn)實(shí)生活中的通訊地址,用戶通過(guò)它接受別人發(fā)來(lái)的電子郵件和向別人發(fā)送電子郵件。

           電子郵箱的獲得需要在電子郵件服務(wù)器上進(jìn)行申請(qǐng),確切的說(shuō),電子郵箱其實(shí)就是用戶在郵件服務(wù)器上申請(qǐng)的一個(gè)賬戶。郵件服務(wù)器把接收到的郵件保持到為某個(gè)賬戶所分配的郵箱空間中,用戶通過(guò)其申請(qǐng)的用戶名和密碼登陸到郵件服務(wù)器上查看該地址已經(jīng)收到的電子郵件。

     

           電子郵件的傳輸過(guò)程

           電子郵件系統(tǒng)采用客戶/服務(wù)器模式。電子郵件傳送需要用到以下3個(gè)重要模塊:

           MUAMail User Agent,郵件用戶代理):用戶通過(guò)它與電子郵件服務(wù)器打交道。MUA實(shí)際上就是郵件客戶端軟件。

           MTAMail Transfer Agent,郵件傳輸代理):它主要負(fù)責(zé)處理所有接收和發(fā)送的郵件,為MUA或者MTA提供郵件發(fā)送服務(wù),接收其他MTA發(fā)送過(guò)來(lái)的郵件。

           MDAMail Delivery Agent,郵件投遞代理):它負(fù)責(zé)郵件本地投遞。當(dāng)MTA決定某郵件發(fā)送本地用戶時(shí),MTA將郵件交給MDA程序進(jìn)行分發(fā),也就是說(shuō)投遞到用戶的。

           具體的傳遞過(guò)程如下:

                1、  發(fā)件人利用MUA將郵件發(fā)送給MTA。

                2、 MTA收到郵件后判斷收件人是不是本地賬戶,如果是本地賬戶,交由MDA投送到該賬戶的郵箱中,完成發(fā)送過(guò)程,跳到第5步。如果不是則執(zhí)行下一步驟。

                3、 MTA根據(jù)其郵件中繼轉(zhuǎn)發(fā)設(shè)置來(lái)決定如何轉(zhuǎn)發(fā)郵件。

                4、  最終目的的MTA將受到的交給他的MDA處理,有MDA將郵件投遞到收件人的郵箱中。

                5、  收件人利用MUA通過(guò)POP/IMAP協(xié)議連接到郵箱所在的服務(wù)器,請(qǐng)求查看自己的收件箱是否有郵件,如果有郵件,將會(huì)通過(guò)它傳送個(gè)收件人的MUA。

           注意:提示郵件訪問(wèn)服務(wù)的是POP或者IMAP服務(wù)器軟件,而并非當(dāng)初收下郵件的MTA,兩者的角色是分離的。

     

           郵件傳輸協(xié)議

           電子郵件服務(wù)傳輸主要是用到以下3中網(wǎng)絡(luò)協(xié)議

            SMTP(簡(jiǎn)單郵件傳輸協(xié)議)

           SMTPSimple Mail Transfer Protocol。標(biāo)準(zhǔn)TCP端口是25。MUA將郵件發(fā)送到MTAMTA將郵件發(fā)送給下一個(gè)MTA,都是要使用SMTP。SMTP的目標(biāo)是可靠高效地傳送郵件,它獨(dú)立于傳送子系統(tǒng)而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。

           SMTP是一個(gè)“單向”的協(xié)議,它不能用戶從其他郵件服務(wù)器收取郵件。它本身是采用客戶/服務(wù)器模式,負(fù)責(zé)發(fā)送郵件的SMTP進(jìn)程就是SMTP客戶端,負(fù)責(zé)接收郵件的SMTP進(jìn)程就是SMTP服務(wù)器。一個(gè)完整的SMTP通信過(guò)程主要包括建立連接、傳送郵件、釋放連接三個(gè)過(guò)程。

           建立連接:首先由發(fā)件人將要發(fā)送的郵件發(fā)送到郵件緩存,SMTP客戶端定期掃描郵件緩存,一旦發(fā)現(xiàn)有郵件,就與SMTP服務(wù)器建立TCP連接,然后發(fā)送HRLLO命令以附上發(fā)送方的主機(jī)名。

           傳送郵件:SMTP客戶端使用MAIL命令開(kāi)始傳送郵件,該命令提供發(fā)件人的地址;然后執(zhí)行RCPT命令,并提供收件人地址;最后執(zhí)行DATA命令傳送郵件內(nèi)容。

           釋放連接:郵件傳送完畢后,SMTP客戶端發(fā)送OUT命令請(qǐng)求關(guān)閉TCP連接。

             POP(郵局協(xié)議)

             POPPost Office Protocol。標(biāo)準(zhǔn)TCP端口為110。主要用于電子郵件的接收。MUA經(jīng)由POP協(xié)議連接到MTA的用戶收件箱,以讀取或下載用戶在收件箱中郵件。

        目前用的較多的POP協(xié)議是POP3。POP3使用 TCP 作為傳輸協(xié)議。

           IMAPInternet信息訪問(wèn)協(xié)議)

           IMAPInternet Message Access Protocol。標(biāo)準(zhǔn)TCP端口為143,它也是讓MUAMTA收取郵件。目標(biāo)球IMAP協(xié)議的版本為IMAP4。

           POPIMAP兩者都可以用于收取郵件,都是采用客戶/服務(wù)器模式,兩者最主要的區(qū)別就在于他們檢索郵件的方式不同。使用POP時(shí),郵件駐留在服務(wù)器中個(gè),一旦接收郵件,郵件都從服務(wù)器上下載到用戶計(jì)算機(jī)上。而IMAP則能夠然該用戶了解到服務(wù)器上存儲(chǔ)郵件的情況,已下載的郵件仍然滯留在服務(wù)器中,以便于實(shí)現(xiàn)郵件歸檔和共享。

    posted @ 2014-05-04 06:19 ZT文萃 閱讀(419) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)載自:
    http://www.cnblogs.com/chenssy/p/3308489.html
    版權(quán)歸作者所有。

          首先來(lái)看看淺拷貝和深拷貝的定義:

          淺拷貝:使用一個(gè)已知實(shí)例對(duì)新創(chuàng)建實(shí)例的成員變量逐個(gè)賦值,這個(gè)方式被稱為淺拷貝。

          深拷貝:當(dāng)一個(gè)類的拷貝構(gòu)造方法,不僅要復(fù)制對(duì)象的所有非引用成員變量值,還要為引用類型的成員變量創(chuàng)建新的實(shí)例,并且初始化為形式參數(shù)實(shí)例值。這個(gè)方式稱為深拷貝

          也就是說(shuō)淺拷貝只復(fù)制一個(gè)對(duì)象,傳遞引用,不能復(fù)制實(shí)例。而深拷貝對(duì)對(duì)象內(nèi)部的引用均復(fù)制,它是創(chuàng)建一個(gè)新的實(shí)例,并且復(fù)制實(shí)例。

          對(duì)于淺拷貝當(dāng)對(duì)象的成員變量是基本數(shù)據(jù)類型時(shí),兩個(gè)對(duì)象的成員變量已有存儲(chǔ)空間,賦值運(yùn)算傳遞值,所以淺拷貝能夠復(fù)制實(shí)例。但是當(dāng)對(duì)象的成員變量是引用數(shù)據(jù)類型時(shí),就不能實(shí)現(xiàn)對(duì)象的復(fù)制了。

          存在一個(gè)對(duì)象Person,代碼如下:

    復(fù)制代碼
    public class Person {     private String name;     private String sex;     private int age;          public Person(String name,String sex,int age){         this.name = name;         this.sex = sex;         this.age = age;     }          public Person(Person p){                   //拷貝構(gòu)造方法,復(fù)制對(duì)象         this.name = p.name;         this.sex = p.sex;         this.age = p.age;     } }
    復(fù)制代碼

          上面的對(duì)象Person有三個(gè)成員變量。name、sex、age。兩個(gè)構(gòu)造方法。第二個(gè)的參數(shù)為該對(duì)象,它稱為拷貝構(gòu)造方法,它將創(chuàng)建的新對(duì)象初始化為形式參數(shù)的實(shí)例值,通過(guò)它可以實(shí)現(xiàn)對(duì)象復(fù)制功能。

          又有一個(gè)對(duì)象Asian,如下:

    復(fù)制代碼
    public class Asian {     private String skin;     Person person;          public Asian(String skin,Person person){         this.skin = skin;         this.person = person;                    //引用賦值     }      public Asian(Asian asian){                 //拷貝構(gòu)造方法,復(fù)制對(duì)象         this(asian.skin,asian.person);                } }
    復(fù)制代碼

          上面對(duì)象也存在著兩個(gè)成員變量,skin 和Person對(duì)象

          對(duì)于person對(duì)象有如下:

    Person p1 = new Person("李四","mam",23);   Person p2 = new Person(P1);

          當(dāng)調(diào)用上面的語(yǔ)句時(shí)。P2對(duì)象將會(huì)對(duì)P1進(jìn)行復(fù)制。執(zhí)行情況如下如下圖:

          對(duì)于Asian對(duì)象有:

    Asian a1 = new Asian("yellow",new Person("李四","mam",23)); Asian a2 = new Asian(a1);

          New Asian(a1)執(zhí)行Asian類的拷貝構(gòu)造方法,由于對(duì)象賦值是引用賦值。使得a1和a2引用同一個(gè)對(duì)象

          如下圖:

          當(dāng)a1執(zhí)行某條可以改變?cè)撝档恼Z(yǔ)句時(shí),那么a1將會(huì)通過(guò)這個(gè)語(yǔ)句也可以改變a2對(duì)象的成員變量

          如果執(zhí)行以下語(yǔ)句:a2.name = new Person(a1.name)

          這時(shí)將會(huì)創(chuàng)建一個(gè)新的Person對(duì)象

          如下圖:


    posted @ 2014-05-04 06:15 ZT文萃 閱讀(379) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)帖:

    http://www.cnblogs.com/chenssy/p/3695271.html
    版權(quán)歸作者所有。


         今天朋友問(wèn)我String的內(nèi)容是真的不可變嗎?我肯定告訴他是的?因?yàn)樵谖业闹饔^意識(shí)里String就是一個(gè)不可變的對(duì)象。于是他給我發(fā)了這段程序:

    復(fù)制代碼
    public class StringTest {     public static void main(String[] args) throws Exception {         String a = "chenssy";         System.out.println("a = " + a);         Field a_ = String.class.getDeclaredField("value");         a.setAccessible(true);         char[] value=(char[])a.get(a);         value[4]='_';   //修改a所指向的值         System.out.println("a = " + a);     } }
    復(fù)制代碼

          看到這個(gè)簡(jiǎn)單的程序,我笑了,你這不是從底層來(lái)修改String的值么?從這里來(lái)理解String的值肯定是可以改變的啦(我們應(yīng)該始終相信String的不可變性)!接著他再給我一段程序:

    復(fù)制代碼
    public class StringTest {     public static void main(String[] args) throws Exception {         String a = "chenssy";         String b = "chenssy";         String c = new String("chenssy");         System.out.println("--------------修改前值-------------------");         System.out.println("a = " + a);         System.out.println("b = " + b);         System.out.println("c = " + c);         //修改String的值         Field a_ = String.class.getDeclaredField("value");         a_.setAccessible(true);         char[] value=(char[])a_.get(a);         value[4]='_';   //修改a所指向的值                  System.out.println("--------------修改后值-------------------");         System.out.println("a = " + a);         System.out.println("b = " + b);         System.out.println("chenssy");         System.out.println("c = " + c);     } }
    復(fù)制代碼

          乍看這程序是異常的簡(jiǎn)單,無(wú)非就是賦值、改值、輸出嘛!可能你現(xiàn)在就會(huì)毫不猶豫的說(shuō)太簡(jiǎn)單了結(jié)果就是……。但是??!你的毫不猶豫會(huì)害死你,而且你的結(jié)果很可能錯(cuò)誤。那么運(yùn)行結(jié)果是什么呢?

    復(fù)制代碼
    --------------修改前值------------------- a = chenssy b = chenssy c = chenssy --------------修改后值------------------- a = chen_sy b = chen_sy chen_sy c = chen_ssy
    復(fù)制代碼

          修改前值很容易理解,但是修改后值呢?是不是有點(diǎn)兒不理解呢?你可能會(huì)問(wèn):為什么System.out.println("chenssy");的結(jié)果會(huì)是chen_ssy,System.out.println("c = " + c);也是chen_ssy呢?

          要明白這個(gè)其實(shí)也比較簡(jiǎn)單,掌握一個(gè)知識(shí)點(diǎn):字符串常量池。

          我們知道字符串的分配和其他對(duì)象分配一樣,是需要消耗高昂的時(shí)間和空間的,而且字符串我們使用的非常多。JVM為了提高性能和減少內(nèi)存的開(kāi)銷(xiāo),在實(shí)例化字 符串的時(shí)候進(jìn)行了一些優(yōu)化:使用字符串常量池。每當(dāng)我們創(chuàng)建字符串常量時(shí),JVM會(huì)首先檢查字符串常量池,如果該字符串已經(jīng)存在常量池中,那么就直接返回 常量池中的實(shí)例引用。如果字符串不存在常量池中,就會(huì)實(shí)例化該字符串并且將其放到常量池中。由于String字符串的不可變性我們可以十分肯定常量池中一定不存在兩個(gè)相同的字符串(這點(diǎn)對(duì)理解上面至關(guān)重要)。

          我們?cè)賮?lái)理解上面的程序。

          String a = "chenssy";

          String b = "chenssy";

          a、b和字面上的chenssy都是指向JVM字符串常量池中的”chenssy”對(duì)象,他們指向同一個(gè)對(duì)象。

          String c = new String("chenssy");

          new關(guān)鍵字一定會(huì)產(chǎn)生一個(gè)對(duì)象chenssy(注意這個(gè)chenssy和上面的chenssy不同),同時(shí)這個(gè)對(duì)象是存儲(chǔ)在堆中。所以上面應(yīng)該產(chǎn)生了兩 個(gè)對(duì)象:保存在棧中的c和保存堆中chenssy。但是在Java中根本就不存在兩個(gè)完全一模一樣的字符串對(duì)象。故堆中的chenssy應(yīng)該是引用字符串 常量池中chenssy。所以c、chenssy、池chenssy的關(guān)系應(yīng)該是:c--->chenssy--->池chenssy。整個(gè) 關(guān)系如下:

          201404271001

          通過(guò)上面的圖我們可以非常清晰的認(rèn)識(shí)他們之間的關(guān)系。所以我們修改內(nèi)存中的值,他變化的是所有。

          總結(jié):雖然a、 b、c、chenssy是不同的對(duì)象,但是從String的內(nèi)部結(jié)構(gòu)我們是可以理解上面的。String c = new String("chenssy");雖然c的內(nèi)容是創(chuàng)建在堆中,但是他的內(nèi)部value還是指向JVM常量池的chenssy的value,它構(gòu)造 chenssy時(shí)所用的參數(shù)依然是chenssy字符串常量。

          為了讓各位充分理解常量池,特意準(zhǔn)備了如下一個(gè)簡(jiǎn)單的題目:

    String a = "chen"; String b = a + new String("ssy");
             創(chuàng)建了幾個(gè)String對(duì)象??

    posted @ 2014-05-04 06:10 ZT文萃 閱讀(218) | 評(píng)論 (0)編輯 收藏

    Class的getResource方法,實(shí)際上是靠調(diào)入這個(gè)類的ClassLoader的getResource方法來(lái)實(shí)現(xiàn)的,如果調(diào)入這個(gè)類的ClassLoader是原生的BootStrap ClassLoader,這個(gè)ClassLoader是用C++寫(xiě)成的,在Java中沒(méi)有相對(duì)應(yīng)的物件。這時(shí)候的實(shí)現(xiàn)靠的是ClassLoader的靜態(tài)方法getSystemResource。

    只有當(dāng)使用Class類的getResource方法的時(shí)候,才會(huì)有下面介紹的那種算法。

    這種算法就是說(shuō),如果你指定的路徑以/開(kāi)頭,那么就是從ClassPath的起點(diǎn)開(kāi)始尋找這個(gè)路徑。如果直接以某個(gè)名字開(kāi)頭,那么就是從當(dāng)前包名的目錄為起點(diǎn)開(kāi)始尋找。
    所以大家如果用過(guò)hibernate就知道,有些表示類到數(shù)據(jù)庫(kù)表的映射關(guān)系的xml文件就和這個(gè)類的class文件放在一起,這樣它就直接使用這個(gè)類.class.getResource方法來(lái)得到這個(gè)xml文件。

    而在使用ClassLoader的getResource方法的時(shí)候,永遠(yuǎn)是以Classpath為直接起點(diǎn)開(kāi)始尋找資源的。不用擔(dān)心從什么包開(kāi)始尋找的問(wèn)題。

    用Class.getResource不加/就是從當(dāng)前包開(kāi)始找,用ClassLoader.getResource不加/就是直接從Classpath的起點(diǎn)開(kāi)始尋找。

    當(dāng)然,如果覺(jué)得麻煩,你定位資源的時(shí)候全部都使用/開(kāi)頭的方式就好了

    posted @ 2014-05-02 15:48 ZT文萃 閱讀(550) | 評(píng)論 (0)編輯 收藏







    查找?guī)в薪o定名稱的資源,查找給定類相關(guān)的資源的規(guī)則是通過(guò)定義類的 class loader 實(shí)現(xiàn)的。此方法委托給此對(duì)象的類加載器。如果此對(duì)象通過(guò)引導(dǎo)類加載器加載,則此方法將委托給 ClassLoader.getSystemResource(java.lang.String)。

    在委托前,使用下面的算法從給定的資源名構(gòu)造一個(gè)絕對(duì)資源名:

    • 如果 name'/'  開(kāi)始,則絕對(duì)資源名是 '/' 后面的 name 的一部分。
    • 否則,絕對(duì)名具有以下形式:
         modified_package_name/name 

      其中 modified_package_name 是此對(duì)象的包名,該名用 '/' 取代了 '.' ('\u002e')。

    Class.getResource(""); 獲取classpath

     

    Class.getResource("JMF.class"); 代表獲取相于類路徑當(dāng)前包下的SendService.class的類路徑.

    /D:/bak/upload/upload/WebRoot/WEB-INF/classes/jmf/JMF.class-------->打印出的結(jié)果

    Class.getResource("/jmf/WebCamSwing.class"); /jmf/WebCamSwing.class->代表相于類路徑的絕對(duì)路徑

    file:/D:/bak/upload/upload/WebRoot/WEB-INF/classes/jmf/JMF.class  -------->打印出的結(jié)果

     

    我們?cè)趺传@得Object的類路徑:

    Class.getResource("/java/lang/Object.class") 因?yàn)镺bject是通過(guò)引導(dǎo)類加載器 (BootStrapClassLoader)加載的,所以此方法通過(guò)系統(tǒng)類加載器來(lái)查找資料, 所以我們要指定類的絕對(duì)路徑/java/lang /Object.class

    public java.net.URL getResource(String name) {
            name = resolveName(name);
            ClassLoader cl = getClassLoader0();
            if (cl==null) {
                // A system class.
                return ClassLoader.getSystemResource(name);
            }
            return cl.getResource(name);
        }

     

    我們來(lái)看看如何通過(guò)系統(tǒng)類加載器來(lái)查找Object:

    Class.getClassLoader().getSystemResource("java/lang/Object.class")

     

    打印出來(lái)的結(jié)果多是:

    jar:file:/E:/Program/Java/jdk1.5.0_15/jre/lib/rt.jar!/java/lang/Object.class

     

    為什么getResource("")前面要加"/",而getSystemResource("")前面不用加呢?

    private String resolveName(String name) {
            if (name == null) {
                return name;
            }
            if (!name.startsWith("/")) {
                Class c = this;
                while (c.isArray()) {
                    c = c.getComponentType();
                }
                String baseName = c.getName();
                int index = baseName.lastIndexOf('.');
                if (index != -1) {
                    name = baseName.substring(0, index).replace('.', '/')
                        +"/"+name;
                }
            } else {
                name = name.substring(1);
            }
            return name;
        }

     

    其實(shí)最后還是要把"/"去掉的...

    posted @ 2014-05-02 15:34 ZT文萃 閱讀(288) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)載自:

    1 JButton 圖片和文字按鈕的實(shí)現(xiàn)



    JButton btn1 = new JButton("打開(kāi)", new ImageIcon(ImageView.class.getResource("10.png"))) ;

    btn1.setHorizontalTextPosition(SwingConstants.CENTER);

    btn1.setVerticalTextPosition(SwingConstants.BOTTOM);

     

    效果圖 :

    clip_image003

    2 JButton 圖片透明按鈕的實(shí)現(xiàn)



    setLayout(new FlowLayout(FlowLayout.RIGHT, 30, 0));

    btn1.setIcon(UIConfig.getImgUrl("常用交易字.png"));

    btn1.setRolloverIcon(UIConfig.getImgUrl("常用交易.png"));

    btn1.setBorderPainted(false);

    btn1.setFocusPainted(false);

    btn1.setContentAreaFilled(false);

    btn1.setFocusable(true);

    btn1.setMargin(new Insets(0, 0, 0, 0));

    btn1.setText("常用交易");

     

    clip_image006

    3JRadioButton 圖片透明按鈕的實(shí)現(xiàn)

    JRadioButton radio = new JRadioButton(UIConfig.getImgUrl("常用交易字.png") );

    radio.setContentAreaFilled(false);

    radio.setRolloverIcon(UIConfig.getImgUrl("常用交易.png"));

    radio.setSelectedIcon(UIConfig.getImgUrl("常用交易.png"));

    clip_image006[1]

    posted @ 2014-04-27 11:12 ZT文萃 閱讀(505) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲精品无码少妇30P| 一级免费黄色毛片| 免费无码又爽又刺激网站直播| 在线观看人成网站深夜免费| 亚洲视频2020| 久久久久久av无码免费看大片| 免费视频中文字幕| 亚洲国产日韩在线| 国产免费无码AV片在线观看不卡| 亚洲AV蜜桃永久无码精品| 亚洲精品免费网站| **aaaaa毛片免费同男同女| 伊人久久综在合线亚洲91| 国产亚洲漂亮白嫩美女在线| 福利免费观看午夜体检区| 亚洲视频在线播放| 中文在线免费看视频| 亚洲高清无码综合性爱视频| 亚洲熟女综合色一区二区三区| **实干一级毛片aa免费| 亚洲天堂中文字幕| 精品国产麻豆免费人成网站| 免费人成视频x8x8入口| 亚洲精品国产首次亮相| 国产卡二卡三卡四卡免费网址| 久久久亚洲欧洲日产国码aⅴ| 永久在线观看免费视频| 亚洲熟妇无码AV在线播放| 四虎一区二区成人免费影院网址 | 亚洲老熟女五十路老熟女bbw| 亚洲网站免费观看| 久久久无码精品亚洲日韩按摩 | 亚洲AV无码一区二区三区系列| aa午夜免费剧场| 亚洲AV中文无码乱人伦| 美女被免费网站在线视频免费| 永久久久免费浮力影院| 亚洲第一综合天堂另类专| 天天干在线免费视频| 亚洲国产欧美国产综合一区| 免费看无码自慰一区二区|