欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
深入淺出軟件開(kāi)發(fā)技術(shù)名詞_1
     序:去年為了總結自己所學(xué)習/接觸過(guò)的技術(shù),而在CSDN上完成以下內容(已簡(jiǎn)單整理),也順便為初學(xué)者少走彎路指明一些方向,可惜后來(lái)諸事纏身未能繼續,十分遺憾,現放到自己的BLOG上來(lái)鼓勵自己將此繼續下去。

    注:以下概念皆是作者憑借自己腦海里對該技術(shù)的殘留印像即興而做,故不具備任何學(xué)術(shù)上的解釋精確性和正確性,有理由相信,一個(gè)久未接觸的技術(shù)在自己記憶里所留存的,會(huì )比較接近這項技術(shù)的本質(zhì)……

    "Win32編程
    很不幸,我從開(kāi)始學(xué)習編程到理解這個(gè)名詞中間隔了很長(cháng)的時(shí)間(上個(gè)世紀的學(xué)習環(huán)境可見(jiàn)一斑)。很長(cháng)時(shí)間里我都不明白32是指什么,我用過(guò)Dos,Win31,win95,win97...但好像沒(méi)用過(guò)名為Win32的操作系統???很久以后我才知道,32在這里并不是指操作系統的版本號,而是指32位。微軟操作系統在win31及其以前都是DOS系統,windows只是在dos下運行的一個(gè)大程序而已。在其后win95則稍有改變,windows除了DOS核心以外也真正成為了操作系統的一部分,提供著(zhù)各類(lèi)操作系統提供的服務(wù)。應該說(shuō),在win95之后的windows(新近的64位win系統以前)都可以稱(chēng)之為win32系統平臺(95/98實(shí)際上是16與32位混合)。所以在這樣的平臺上,直接或間接使用系統提供的API編程,就稱(chēng)之為Win32編程。對Visual Studio而言,Win32編程一般指SDK、MFC、ATL這幾類(lèi)開(kāi)發(fā)方法,其中ATL在國內應用不是很廣泛,一般應用于以COM組件為架構的中大型軟件產(chǎn)品。

    "SDK" :Software Development Kit,常譯為軟件開(kāi)發(fā)(工具)包
    在Win32編程領(lǐng)域一般指與MFC這類(lèi)框架編程相區別的,直接調用Windows提供的API的開(kāi)發(fā)方式,與字面原意有一些區別。另外一個(gè)經(jīng)常見(jiàn)到的說(shuō)法就是某軟件(硬件)帶有自己的一套SDK,這里其實(shí)一般是指一套API庫函數或者類(lèi)庫,供上一層的開(kāi)發(fā)者調用。又譬如常說(shuō)的DX的SDK,其實(shí)是微軟開(kāi)發(fā)的一套COM組件,供上層開(kāi)發(fā)者使用??傊?,供程序員使用的比較完備的代碼庫,就可以稱(chēng)之為SDK;

    “MFC”: Microsoft Fundation classes 微軟基礎類(lèi)庫
     大家都知道,使用SDK編程方式往往有很多每次都重復的固定不變的一些代碼,為了提高編程的效率,減少上千個(gè)API帶給開(kāi)發(fā)人員巨大的精神壓力,微軟開(kāi)發(fā)出了這么一個(gè)類(lèi)庫,注意,這個(gè)類(lèi)庫與操作系統本身無(wú)任何關(guān)系,它只是對API進(jìn)行了一個(gè)面向對象的封裝,當然,還給出了一系列編程的框架。使用SDK的方法,使用Visual Studio,通過(guò)調用Windows API,MFC你也可以做得出來(lái)。MFC把一些固定不變的代碼已經(jīng)寫(xiě)好了,只在編譯時(shí)候鏈上,所以我們的代碼里看不到WinMain(),而事實(shí)上整個(gè)程序的運行,和SDK的方式無(wú)任何區別,初學(xué)者請記住這一點(diǎn)。另,補充一點(diǎn)個(gè)人感想,MFC的初衷,帶給開(kāi)發(fā)人員更多的便利,我覺(jué)得并不太成功。學(xué)習MFC所費的力氣和最終的所得,并不太成正比。

    "API":Application Programming Interface,應用程序接口
    這個(gè)詞的出現頻率很高,從某種意義上來(lái)說(shuō),也可以看作是SDK的一個(gè)子集。這也是做給程序員的程序,不過(guò)一般指用導出函數的方式提供服務(wù)的函數庫,不包括類(lèi)庫和組件。

    “GDI”:Graphic Device Interface,圖形設備接口
    這個(gè)是Win32程序下最常用的顯示方式,與DirectX、OpenGL處于同一級。在DOS要顯示一些東東可不是容易的事,最簡(jiǎn)單的是調用一些C的圖形庫函數來(lái)實(shí)現顯示,不過(guò)一般也就是些畫(huà)線(xiàn),填色,輸出幾個(gè)文字,效果很弱(所以DOS程序界面一般都不怎么樣,且實(shí)現起來(lái)不是一般的復雜),要復雜一點(diǎn)的動(dòng)畫(huà)/圖片顯示什么的,經(jīng)常要用到的就是硬件中斷,調用一些顯卡自身的子程序(固化在顯卡內的)來(lái)做。因為每一個(gè)顯卡都不同,所以DOS的游戲兼容常常由于顯卡的差異而很糟糕。到Windows下大家就幸福多了,Windows將硬件這一層屏蔽起來(lái),用一個(gè)表格(Device Context)來(lái)代表一個(gè)顯示,我們要做的就是在這個(gè)表格上填好相關(guān)參數,然后畫(huà)上我們想畫(huà)的東東,然后操作系統會(huì )依照這個(gè)表格(DC),把相應的顯示內容(一般是一塊顯示內存)傳送到指定顯卡的指定的顯存,再由顯卡傳給顯示屏。我們不再需要與不同的顯卡打交通,這是一個(gè)十分偉大的勝利!GDI中最常用的是雙緩存技術(shù),就是說(shuō)你可以在內存中創(chuàng )建(也就是復制)一個(gè)DC,只不過(guò)在這個(gè)DC中顯示的不再被傳送到顯示器上。有什么用呢?因為它的各參數是與當前屏幕DC一致的(COPY嘛 ,當然是這個(gè)結果),所以它的顯示內容可以完整無(wú)失真地傳送到屏幕DC上。我們通常在內存DC上畫(huà)圖,譬如畫(huà)一圓,再畫(huà)一條直線(xiàn),畫(huà)完后一次性地傳送到屏幕DC上,這樣對用戶(hù)來(lái)說(shuō)屏幕只刷新了一次,可以解決你畫(huà)一點(diǎn)內容屏幕即刷新一次導致的閃爍問(wèn)題。當然,雙緩沖甚至多緩沖還有很多別的用處,那就要靠自己揣摩了。

    "DirectX"
    通常簡(jiǎn)稱(chēng)為DX(讀音:低叉)這是個(gè)很吸引人眼球的名詞,讀起來(lái)就很上口:)。Windows為我們作了許多屏蔽底層硬件的工作,其中DX是最知名的技術(shù)之一。操作系統要與各類(lèi)硬件打交道,特別是多媒體相關(guān)的,譬如顯卡、聲卡、手柄輸入、多媒體流的網(wǎng)絡(luò )傳輸等等,這些事情如果都自己來(lái)弄的話(huà),那就太要命了(這些一般都涉及系統底層,自己也很難做出來(lái))。而DX則正是這么一套操作系統提供的隔離多媒體硬件與程序員的間質(zhì),DX自身一般并不實(shí)現處理的能力,它是一個(gè)標準,要求硬件來(lái)滿(mǎn)足,好比DX提供一個(gè)函數名,硬件來(lái)實(shí)現函數內容一樣。通過(guò)它我們可以非常簡(jiǎn)單而快速地調用硬件提供的各類(lèi)服務(wù)。它主要包括DirectDraw(通過(guò)直接訪(fǎng)問(wèn)顯示硬件來(lái)提供快速的圖象處理能力),DirectSound(提供了軟硬件的低延遲聲音混頻和回放,以及直接訪(fǎng)問(wèn)音頻設備的能力),DirectPlay (它明確的提供了通用環(huán)境連接能力來(lái)簡(jiǎn)化你應用程序之間的通訊服務(wù)),Direct3D(DirectDraw的3D版),DirectInput(簡(jiǎn)化你的應用程序訪(fǎng)問(wèn)鼠標、鍵盤(pán)和操縱桿設備的能力),DX5.0之后又增加了一些(如DirectShow),不再詳述。DX一個(gè)重要的特點(diǎn)就是你可以通過(guò)它直接訪(fǎng)問(wèn)硬件而無(wú)需知道硬件的具體細節。譬如DirectDraw,就能夠越過(guò)內存而直接訪(fǎng)問(wèn)顯存,這樣的速度將比GDI快很多,不在一個(gè)數量級上。補充一點(diǎn):DX是以組件的方式提供的,而不是通常的導出API的形式。DX SDK的最新版本是9.0

    "COM”:component object model,組件對象模型,一般簡(jiǎn)稱(chēng)組件。
    這是微軟為了解決代碼重用的一個(gè)重要機制。重用代碼的最簡(jiǎn)單辦法是源代碼重用,把寫(xiě)好的函數和類(lèi)加到自己當前的代碼中,編譯即可。簡(jiǎn)單是簡(jiǎn)單,敝病卻顯然的多。另一個(gè)常用的方法是單獨做成模塊,以DLL的形式分發(fā),DLL導出函數或者類(lèi),客戶(hù)程序用動(dòng)態(tài)/靜態(tài)鏈接的方法將其加載,這顯然比前一種源代碼的方法好一些,難度也不大,最為常用。但DLL也有一些不足,最根本的,它不是二進(jìn)制兼容,DLL版本升級一次就需要與客戶(hù)程序代碼重鏈接一次,有些時(shí)候這幾乎是不可能的任務(wù)。為了更好地讓編程像“搭積木”一樣簡(jiǎn)單,讓模塊可以完美地配合,完美地替換,COM產(chǎn)生了。COM不是類(lèi)庫,不是代碼,不是操作系統的服務(wù),而是一套編程模型,理論上來(lái)說(shuō),它與語(yǔ)言無(wú)關(guān),與操作系統無(wú)關(guān),unix下同樣可以做COM。COM是一種程序結構模型標準,你做的DLL或EXE在結構上滿(mǎn)足這么一個(gè)標準,那這個(gè)DLL或EXE就是一個(gè)組件,它將在該平臺上成為二進(jìn)制兼容。COM主要利用了注冊表來(lái)登記本模塊的信息??蛻?hù)程序調用時(shí)首先查注冊表,找到所需組件的位置(這實(shí)現了位置透明),然后就用Loadlibrary把它加載進(jìn)來(lái),這和普通調用沒(méi)有本質(zhì)區別,區別在于由于組件特殊的實(shí)現方法使得整個(gè)過(guò)程中用戶(hù)程序都不知道組件的位置,組件的類(lèi)的實(shí)例化過(guò)程,如何銷(xiāo)毀,不能直接訪(fǎng)問(wèn)組件的任何實(shí)現細節,用戶(hù)只與組件的幾個(gè)public接口打交道。這將實(shí)現真正的模塊之間的獨立。對用戶(hù)程序而言,對于目標組件的認識,除了接口,一無(wú)所知。在接口不變的情況下,組件可任意替換而客戶(hù)程序不作任何改動(dòng),無(wú)需編譯,僅這一點(diǎn),在中大型程序的模塊集成的過(guò)程中就將節約相當多的時(shí)間。

    "STL":Standard Template Library,標準模板庫
    這是最早由Alexander Stepanov和Meng Lee(蠻像中國人的名字)完成,于1994年提交給ANSI/ISO 標準C++委員會(huì )并通過(guò)而成為標準C++的一部分。望文生義即可知這是一個(gè)代碼庫標準,不是語(yǔ)法標準。簡(jiǎn)單地說(shuō),STL是以C++中的模板語(yǔ)法為基礎建立起來(lái)的一套包含基礎數據結構和算法的代碼庫。STL的特點(diǎn)是實(shí)現了“類(lèi)型參數化”,即STL的代碼中可處理任意自定義類(lèi)型的對象,如果不使用模板技術(shù)的話(huà),這是一件相當困難的事。也因為這個(gè)原因,在最新的java及C#語(yǔ)法中均加入了對模板語(yǔ)法的支持,可見(jiàn)其重要性。另外一個(gè)有關(guān)STL重要的話(huà)題是GP(Generic Programming),泛型。這是與面向對象相并列的另外的一個(gè)編程模型,它以模板為基礎,弱化了實(shí)體類(lèi)型的差異,簡(jiǎn)化了編程時(shí)問(wèn)題抽象的模型,提供了更好的封裝性和彈性,對于繁雜的面向對象編程毫無(wú)疑問(wèn)是一種解脫,至少是精神上的。GP并不是用來(lái)取代面向對象的,而是作為一個(gè)有益的補充體,是面向對象很好的合作伙伴。GP是最近幾年軟件架構的一個(gè)研究熱點(diǎn),但國內真正的應用似乎并不多見(jiàn),這項技術(shù)本身還基本處于研究前沿。<<Modern C++ Design>>一書(shū)對C++中的GP應用有很好的詮釋?zhuān)@本書(shū)對腦細胞的殺傷力之大,也是其它C++書(shū)藉望塵莫及的。想知道C++的代碼技巧可以做到怎樣的出神入化嗎?不妨看看這本書(shū)。

    "ATL":Active Template Library,活動(dòng)模板庫

    這在VC編程下應該算是比較高級的話(huà)題了,它集COM和模板技術(shù)于一身,帶來(lái)了極方便的組件編寫(xiě)方法和極高的學(xué)習門(mén)檻??梢哉f(shuō),進(jìn)入ATL領(lǐng)域就算是進(jìn)入了中級以上的編程領(lǐng)域。ATL是為組件而生,它的目的是為了讓程序員更方便地編寫(xiě)組件(純用C++寫(xiě)一個(gè)最簡(jiǎn)單的組件實(shí)現一個(gè)“Hello World”對初學(xué)者來(lái)說(shuō)都是要命的),同時(shí)它使用模板技術(shù)來(lái)類(lèi)似于MFC一樣建立了一個(gè)開(kāi)發(fā)COM的框架代碼庫(模板庫),使用該框架及模板庫可以相對方便地進(jìn)行組件開(kāi)發(fā)。ATL中的一個(gè)特點(diǎn)就是你自己的類(lèi)將成為ATL代碼庫中某些類(lèi)的父類(lèi),這是一件很有趣的事(這也是模板技術(shù)的一個(gè)特點(diǎn))。

    "HANDLE": 句柄
    這是一個(gè)中文翻譯很古怪的字,對初學(xué)者來(lái)說(shuō)是百思不得其解的東東。這其實(shí)等價(jià)于void*(順便提一下,初學(xué)者往往對VC代碼中各種古怪的符號、類(lèi)型標記/宏等百思不得其解,其實(shí)它們大多來(lái)自基本類(lèi)型的#define或者typedef,請將光標移到這些符號上(譬如HANDLE),然后按下F12,編譯器自會(huì )把你帶到它的聲明處,反復使用幾次,你終會(huì )見(jiàn)到它的原貌,然后長(cháng)吁一口氣:原來(lái)不過(guò)如此而已。沒(méi)用過(guò)的初學(xué)者請牢記:F12)。很多初學(xué)者總想知道一個(gè)HANDLE代表一個(gè)什么對象,我的建議是不要去理解為某對象,而就是理解為訪(fǎng)問(wèn)某一個(gè)對象的入口,事實(shí)上HANDLE大多數時(shí)候是一個(gè)整數索引(標志該對象在操作系統的某表中的位置,就好像一個(gè)數組的下標一樣),Windows系統核心中主要是幾張大表,這樣一個(gè)整數索引就是標記目標在這個(gè)表中的位置,供操作系統訪(fǎng)問(wèn)時(shí)查詢(xún)用。偶而它的確是指向某對象的指針,有時(shí)它還攜帶一些額外輔助信息??傊?,我們不要去直接訪(fǎng)問(wèn)它,把訪(fǎng)問(wèn)HANDLE的任務(wù)交給操作系統好了,除非你還嫌寫(xiě)程序不累:)。

    "DLL": Dynamic Link Library 動(dòng)態(tài)鏈接庫
    DLL的一個(gè)特點(diǎn)就是可以動(dòng)態(tài)加載(顧名思義),即在主程序(我更喜歡稱(chēng)為客戶(hù)程序)需要該模塊時(shí)才由操作系統加載到內存。畢竟一個(gè)大型應用程序我們經(jīng)常使用到的功能并不多,這樣一些不常用的功能模塊(DLL)在程序運行時(shí)一般將不被載入,可極大節省內存開(kāi)銷(xiāo)。DLL同時(shí)也是目前最常用的分發(fā)模塊的方法,便于彼此協(xié)作。程序中對DLL的調用主要有兩種方法:1 針對使用DEF文件導出函數的DLL,使用API函數LoadLibrary(“DLLModuleName" )加載,然后使用GetProcAddress()得到函數指針,進(jìn)而調用  2 直接將類(lèi)、函數等導出,客戶(hù)程序使用同一份頭文件聲明,加入對應的lib鏈接庫,即可在客戶(hù)程序中直接使用DLL中的類(lèi)或函數,無(wú)需LoadLibrary。

    "Process": 進(jìn)程
    進(jìn)程是一個(gè)動(dòng)態(tài)的概念,包括從進(jìn)程的創(chuàng )建申請,PCB(Process Control Block進(jìn)程控制塊,一般操作系統實(shí)現為一個(gè)表格(struct))的創(chuàng )建,地址空間的內存分配,模塊代碼載入并執行,執行完以后進(jìn)行撤銷(xiāo),整個(gè)過(guò)程被稱(chēng)為"進(jìn)程"。在Win32下,一個(gè)進(jìn)程有4G的邏輯空間。但我們也常把它作為靜態(tài)概念來(lái)使用,在Win32下,一個(gè)EXE的執行就是一個(gè)進(jìn)程(如果它內部又開(kāi)了新進(jìn)程,另當別論)。

    "Thread":  線(xiàn)程
    為了更有效的提高CPU的利用率,更好地實(shí)現多任務(wù)并發(fā),微軟將進(jìn)程進(jìn)行進(jìn)一步分割,實(shí)現了CPU任務(wù)調度的新對像:線(xiàn)程。一個(gè)進(jìn)程擁有至少一個(gè)線(xiàn)程。我們在實(shí)現多任務(wù)并發(fā)的時(shí)候通常是建立一個(gè)新線(xiàn)程(建立線(xiàn)程的系統開(kāi)銷(xiāo)要小于進(jìn)程),線(xiàn)程以我們自己的一個(gè)函數作為入口,函數執行完畢自動(dòng)撤銷(xiāo)(當然你也可以在執行過(guò)程中強制結束該線(xiàn)程)。順便提一下,在UNIX下并沒(méi)有線(xiàn)程這個(gè)概念,想來(lái)是因為UNIX主要是以多進(jìn)程的并發(fā)服務(wù)為主(所以它更適合于做服務(wù)器),系統運行時(shí)通常已經(jīng)有了太多的進(jìn)程,所以沒(méi)有必要再對進(jìn)程進(jìn)行細化,因為這樣做甚至會(huì )降低系統效率(CPU調度不過(guò)來(lái)),當然,這是我個(gè)人的猜想:)
    "C語(yǔ)言"
    到目前為止,C語(yǔ)言應該是傳播最為廣泛的語(yǔ)言,特別在UNIX的世界里依然扮演著(zhù)主角的位置,在其余如硬件開(kāi)發(fā),嵌入式系統(如手機)皆有十分突出的表現,即便在win32平臺下SDK的開(kāi)發(fā)中也有一席之地。更主要的是它是大多數國內(國外我不敢說(shuō))程序員的啟蒙語(yǔ)言,通過(guò)它許多人才領(lǐng)會(huì )了程序的思維。C最大的特點(diǎn)就是快,除了匯編以外效率可以達到最高,而它的靈活性,對硬件的直訪(fǎng)性也完全符合程序員自由的天性。如果說(shuō)學(xué)習別的技術(shù)尚有猶豫和徘徊,那么學(xué)C只有一句話(huà):相信我,沒(méi)錯的!也有許多人主張可以直接學(xué)習面向對象語(yǔ)言,我不太同意。面向對象語(yǔ)言對機器模型的抽象十分容易讓程序員迷糊,心中難以建立準確的程序運行時(shí)的模型。畢竟我們是程序員,不是用戶(hù),我們不能把所有的問(wèn)題都想當然地交給編譯器和操作系統去解決,它們也解決不了。至少學(xué)習一門(mén)面向過(guò)程的語(yǔ)言,才能知其所以然。

    C++
    這是貝爾實(shí)驗室的又一杰作,同時(shí),也傷透了全球太多程序員的心,腦細胞殺傷力十分之大。C++比大多數初學(xué)者想像的都要復雜得多,它基本包括:一個(gè)類(lèi)化了的C語(yǔ)言,模板,標準模板庫.很多初學(xué)者掌握的C++僅僅只是一個(gè)類(lèi)化了的C語(yǔ)言的一個(gè)子集(不相信的話(huà),你不妨看一看<<Modern C++ Design>>中的C++代碼,看看能理解多少)。更麻煩的是使用C++不得不談到面向對象的編程風(fēng)格,這同樣比初學(xué)者想像的難很多,要有打持久戰的準備。而最讓我這類(lèi)C++愛(ài)好者憂(yōu)心的還是它目前在Win平臺中的前景,在.net平臺上很難找出不用C#而使用C++寫(xiě)新代碼的理由:(  。而它的復雜性和目前許多諸如java/C#及一些動(dòng)態(tài)語(yǔ)言(python/ruby)比起來(lái),開(kāi)發(fā)效率顯然的低,大有退出上層應用程序開(kāi)發(fā)的趨勢。這么一個(gè)包含了最多范式的近乎完美的語(yǔ)言,我實(shí)在不想放棄。我唯有祈禱在未來(lái)C++的路可以走得更遠更好一些。

    源代碼版本控制
    這是軟件開(kāi)發(fā)中一個(gè)十分重要的工程手段,幾乎是必須的一個(gè)Process(過(guò)程)。很多作坊式的開(kāi)發(fā)團隊在采用軟件工程的一些方法的時(shí)候,第一個(gè)要進(jìn)行改進(jìn)或增加的,往往就是這個(gè)過(guò)程。對初學(xué)者學(xué)習而言,建議在開(kāi)始進(jìn)行實(shí)踐小項目的階段即進(jìn)行源代碼版本控制,因為這在以后的工作中,是一定會(huì )用到的。

    源代碼版本控制的基本原理如下:
    在服務(wù)器端建立該項目的數據庫,并保存你選定的項目源文件的第一個(gè)版本??蛻?hù)端任一用戶(hù)要獲得某源文件的修改權利,需進(jìn)行check out操作。之后客戶(hù)端一般每完成一個(gè)無(wú)編譯錯誤的版本想保存的時(shí)候,進(jìn)行check in操作,將當前版本保存在服務(wù)器端上并成為最新版本(注意,不是覆蓋以前的喲)。任一客戶(hù)端可以方便地得到服務(wù)器上的文件的任意版本(如果有權限的話(huà))。一般還實(shí)現了一個(gè)重要的功能是版本比較,任一客戶(hù)端可以利用版本控制工具對某文件的不同版本進(jìn)行版本比較,它會(huì )標記出不同版本的同名文件的不同點(diǎn),可以輕易地看出版本內容的演化,這一招很常用。

下面介紹一下我接觸過(guò)的三種版本控制工具(也是國內用得比較多的):

    VSS: Visual Sourcesafe
    這是微軟Visual Studio自帶的源代碼版本控制工具,它最大的特點(diǎn)就是易安裝(與Visual Studio集成在一起,裝VC/VB的時(shí)候就順便搞定,不用別外費工夫),使用簡(jiǎn)單(服務(wù)器端設置相對容易,一般個(gè)人稍加摸索就可以輕松搞定,客戶(hù)端更是只管check in/out),基本功能完善,版本比較很直觀(guān)(我喜歡)。它的特點(diǎn)是某人check out了某版本以后,別人將無(wú)法對此版本check out,也就是說(shuō)同一時(shí)間只有一個(gè)可以修改某一個(gè)文件,這樣就避免了不同的人對同一文件的修改造成彼此沖突(注:可通過(guò)設置服務(wù)器端實(shí)現多人check out,但幾乎不會(huì )這樣做,因為那樣就失去了VSS的一個(gè)最重要的功能)。另,VSS可集成于VS環(huán)境,但根據我的經(jīng)驗,直接在VC里對版本的check操作,常常不生效,所以最好還是到VSS程序里去進(jìn)行check操作。補充:?jiǎn)螜C上也可以使用VSS,這樣的好處是在對當前某些文件進(jìn)行了誤操作或大規模地誤修改之后,可以恢復到最近的無(wú)錯誤的版本,最大程度地挽回損失。VSS實(shí)際應用較普遍,如果你是走Visual Studio路線(xiàn)的話(huà),一定要用一下。

    CVS: Concurrent Versions System
    這個(gè)也是一個(gè)大名鼎鼎的開(kāi)源的版本控制工具,主要活躍在UNIX世界。CVS我使用不多,一般而言好像功能比較偏向于命令行方式(UNIX下開(kāi)發(fā)很多人也都使用著(zhù)命令行方式)。當然,Windows下面也實(shí)現了幾個(gè)版本的CVS,也可以集成于VS,好像還有一個(gè)可以?huà)旖釉贗E上的,我沒(méi)試過(guò)。著(zhù)名的開(kāi)源項目管理網(wǎng)站sf.net也是用的CVS,如果你要和全世界的程序員一起協(xié)作開(kāi)發(fā),CVS是必須要安裝的。在JAVA的世界里,也是以CVS為主。

    Rational Clearcase
    這個(gè)工具就比較上檔次了,Rational公司(現在是IBM)的出品,價(jià)格昂貴。我最初參加工作的時(shí)候用過(guò)一小段時(shí)間,簡(jiǎn)單談一下。這個(gè)工具的特點(diǎn)是復雜,安裝及設置就十分復雜,我的印像中客戶(hù)端甚至不得不加入到NT域里面去,導致我在本機的權限都不夠,安裝新程序都很麻煩,很郁悶(不知道是不是我們公司的相關(guān)人員安裝設置錯了,想來(lái)應該是這樣,但其復雜性可見(jiàn)一斑)。對使用而言,它有一個(gè)功能挺有用的,就是它能夠根據你每次check的版本號,自動(dòng)生成版本樹(shù)(一個(gè)樹(shù)狀圖表),你可以清晰地看到版本的演化過(guò)程。所以嚴格地說(shuō),像CVS/Clearcase這樣的才真正稱(chēng)得上“版本”控制,VSS還太勉強。Clearcase的功能十分強大,我不詳述了(我還不想出書(shū)),較適于大型軟件公司實(shí)施軟件配置管理時(shí)采用。雖然它的名氣十分之響亮,但我不知道國內有多少公司在真正使用正版的Clearcase這樣的工具,想來(lái)應該是十分之少。

    OpenGL
    OpenGL至今頗有一點(diǎn)英雄落寞的味道,這一套標準是實(shí)現得如此之好,以至于曾經(jīng)一度成為游戲界面華麗的標準。它的低落也是一個(gè)必然,畢竟在微軟的強力打壓下鮮有不挫敗的。但它曾經(jīng)能夠給微軟帶來(lái)如此的壓力,至今也依然在工業(yè)界被廣泛使用,大多數游戲/顯卡依然保留著(zhù)對它的支持(CS里我喜歡的還是OpenGL)。而它的性能在某些方面與D3D比較,依然占著(zhù)上風(fēng)。不幸的是DirectX在不停地向前發(fā)展,而它,幾乎止步不前了,前景并不光明。OpenGL目前在工業(yè)領(lǐng)域應用較為廣泛,它的優(yōu)秀的矢量圖的操作性能,華麗的色彩,在專(zhuān)業(yè)的圖形圖像處理領(lǐng)域表現突出。游戲中使用相對以前而言則是越來(lái)越少。新近聽(tīng)說(shuō)微軟的最新操作系統Vista對OpenGL進(jìn)行了極大的打壓,不但性能上折扣,支持的版本也只到1.4(最新版本好像是2.0),不知道最后如何收場(chǎng),拭目以待。

    DirectDraw & D3D
    大凡像樣的2維Windows游戲,幾乎都是采用此技術(shù)來(lái)實(shí)現顯示的。DirectDraw有兩種模式:全屏和窗口。其中全屏應用更多一些。在全屏下,DirectDraw有一個(gè)十分著(zhù)名的“換頁(yè)”技術(shù),即在兩個(gè)顯示頁(yè)面之間用“交換”來(lái)實(shí)現顯示刷新,這個(gè)速度十分地快,只是一個(gè)顯存內一個(gè)指針的交換,比你用BitBlt復制一屏的像素快太多太多,游戲的高效的動(dòng)畫(huà)效果大多源于此技術(shù)。DirectDraw主要用于娛樂(lè )領(lǐng)域和一些實(shí)時(shí)顯示要求較高的場(chǎng)合,如醫療圖像。D3D是目前大多三維游戲的標準采用,我沒(méi)鉆研過(guò),不敢多言。它的效果嘛,玩玩游戲就知道了:)

    UML:Unified Modeling Language,多譯為統一建模語(yǔ)言
    這個(gè)語(yǔ)言是一種圖形語(yǔ)言,主要是作為設計時(shí)建模的一種標準的圖形模型,便于程序員與程序員、程序員與客戶(hù)、設計員與代碼員之間的溝通,同時(shí)它也幫助設計人員將頭腦中的基于程序代碼的對程序功能的理解形成文檔,便于理清頭緒,進(jìn)行下一步編碼的工作。換言之,設計過(guò)程的產(chǎn)品,可以表現為一些文本文檔,或者一些框架代碼,或者一些偽代碼,但比較標準通用的,是表現為一堆UML圖。UML包括動(dòng)態(tài)圖和靜態(tài)圖兩大類(lèi),其中靜態(tài)圖中的類(lèi)圖最為常用。很多人初學(xué)時(shí)不知道該怎么做設計,寫(xiě)小軟件時(shí)常常沒(méi)有設計過(guò)程,其實(shí)很簡(jiǎn)單,把軟件的類(lèi)圖畫(huà)出來(lái)就好了。學(xué)做設計時(shí)未必要找一個(gè)像Together或者Rational Rose一樣的巨無(wú)霸。用一些簡(jiǎn)單的可以做UML圖的工具就好,專(zhuān)門(mén)用來(lái)畫(huà)UML圖的小工具很多,網(wǎng)上容易找。補充一點(diǎn):畫(huà)UML圖不要面面俱到,不要什么都畫(huà),突出重點(diǎn)方便理解就好,甚至使用不規范的記號也不要緊(當UML的功能是草稿的時(shí)候)。

    RTTI: Runtime Type Information 運行時(shí)類(lèi)型信息
    在程序中,當我們得到某一個(gè)對象的實(shí)例或者指針時(shí),大多數時(shí)候并不能直接肯定它的類(lèi)型(都是繼承以及類(lèi)型轉換惹的禍),這個(gè)時(shí)候,依靠VC4.0或更高版本的編譯器提供的RTTI支持,調用庫函數typeid()即可在運行時(shí)獲取這個(gè)對象的“類(lèi)型信息”,在一些動(dòng)態(tài)處理中“類(lèi)型信息”很重要,獲取了類(lèi)型信息以后,你就可以有十分把握地調用該類(lèi)型的相關(guān)操作,或者類(lèi)型轉換,或動(dòng)態(tài)生成。因其重要性,在JAVA和.net庫中借助單根繼承和“虛擬機”對此有了更優(yōu)雅的做法,每一個(gè)自object繼承的類(lèi)天然就有了表述自己類(lèi)型信息的能力(繼承的好處),并且容易擴展,現在你需要類(lèi)型信息的時(shí)候,大可直接ask那個(gè)對象:tell me, what type are you?它就會(huì )告訴你答案。

   debug & release 調試 & 發(fā)行
   大家都知道,debug是調試版,release是發(fā)行版,區別在于debug版生成的程序中包含大量供調試用的場(chǎng)景代碼(不是真正運行需要的),而release一般去掉了這些信息,并進(jìn)行了某些代碼優(yōu)化,所以release版的程序會(huì )比debug版的程序小很多,運行速度也快一些。同時(shí),debug版為了便于調試,往往會(huì )對調試使用的診斷代碼加上DEBUG一類(lèi)的宏,使得在release下不對這些代碼進(jìn)行編譯。正由于兩種版本編譯使用的源代碼的差異(以及release糟糕的優(yōu)化),常常使得兩種版本運行時(shí)產(chǎn)生截然不同的效果,一個(gè)正常一個(gè)崩潰是大多數人都遇到過(guò)的。導致問(wèn)題的可能性很多,注意事項詳見(jiàn)各論壇的諸多精華貼。另,同一個(gè)程序如果DLL之間的鏈接使用了不同版本(譬如EXE是release版,dll是debug版),有時(shí)會(huì )無(wú)法正常運行,所以我一般的做法是每一個(gè)DLL針對不同版本使用兩個(gè)DEF文件,編譯生成不同名的兩個(gè)文件(debug版文件名后加d),調用時(shí)各個(gè)版本針對自己的版本調用,這在一定程度上可避免混亂。另,release也是可調試的,在工程設置里把調試信息打開(kāi)即可。

    XP:eXtreme Programming 極限編程
    這是近幾年才時(shí)興起來(lái)的開(kāi)發(fā)模型,國內大致是01/02年開(kāi)始有所宣傳。
    它主要是針對中小型開(kāi)發(fā)團隊在開(kāi)發(fā)時(shí)間要求緊、需求不穩定的中小項目(大多數軟件項目都是這個(gè)情況)時(shí)使用。它打破了傳統軟件工程的框架,非常新巧。譬如整個(gè)開(kāi)發(fā)過(guò)程中文檔很少,大量使用“卡片 (如CRC卡片)”來(lái)描述開(kāi)發(fā)計劃和內容;沒(méi)有真正意義上的軟件功能規格說(shuō)明書(shū),取而代之的是一系列可測試的用例;沒(méi)有獨立的設計和測試階段,它們總是在迭代中增量反復進(jìn)行;設計:盡可能小和簡(jiǎn)單;一般沒(méi)有代碼復審(code review),大家共同擁有代碼。而它的最顯著(zhù)的一個(gè)外在特征是它常使用“成對開(kāi)發(fā)”,即一臺機器前坐兩個(gè)開(kāi)發(fā)人員,共同開(kāi)發(fā)(一個(gè)看,一個(gè)寫(xiě)),這乍聽(tīng)起來(lái)真是蠻有趣的:),它的基本出發(fā)點(diǎn)是認為成對開(kāi)發(fā)的效率在一定條件下要高于兩個(gè)人獨立開(kāi)發(fā)的和。不要覺(jué)得天方夜譚,在很多項目中,這種做法的有效性已經(jīng)被證實(shí)。
    XP的特點(diǎn)可以用“快、小、靈”來(lái)概括,它和傳統瀑布模型(自頂向下)的區別在于它使用迭代增量(設計->代碼->測試->設計->代碼...)的方式。想法很簡(jiǎn)單:沒(méi)有什么目標是可以一開(kāi)始就容易確定的。用爬山來(lái)做一下比喻的話(huà),傳統的是在山下研究地圖,選好一條路線(xiàn),然后沿著(zhù)此路前進(jìn),XP則是走一走,停一停,看一看,對下一步的方向作出新的選擇,在很多時(shí)候,這樣做會(huì )讓你選擇到更好的捷徑。

    ICONIX:
    這個(gè)字相信很多人都沒(méi)見(jiàn)過(guò),我也不知道是什么字拼起來(lái)的,作為開(kāi)拓眼界,我還是提一下吧。這是一種界于XP和RUP(Rational Unified Process)之間的開(kāi)發(fā)模型,換言之,它比XP“大”,比“RUP”要小。它采用了UML的一個(gè)子集,特點(diǎn)是用例驅動(dòng),保持良好的進(jìn)度跟蹤能力。它的目標是用最短的時(shí)間來(lái)把用例變成代碼。具體來(lái)說(shuō),這種開(kāi)發(fā)模型相對精簡(jiǎn)的XP而言,更加強調用例的建立、分析和代碼化,用例是其中心地位。

    RUP:Rational Unified Process
    前面已經(jīng)提到了,相信你已經(jīng)感覺(jué)出它是一個(gè)豐富的軟件開(kāi)發(fā)模型。這是由IBM提出來(lái)的軟件工程模型,它使用完整的UML圖,對開(kāi)發(fā)的各階段(需求、設計、代碼、測試、維護)均有十分完善而復雜的標準,就不詳述了。RUP本質(zhì)上是迭代式開(kāi)發(fā),在每一次迭代中均完成以下四個(gè)階段:初始階段(inception)、詳述階段(elaboration)、構建階段(construction)、轉換階段(transition)。

    CMM:Capability Maturity Model 軟件成熟度模型
    這是卡內基*梅隆大學(xué)軟件工程研究所(我的專(zhuān)業(yè)正是軟件工程,所以這也成為我心目中的圣地)的一大力作,一度曾形成了席卷全球軟件開(kāi)發(fā)的CMM浪潮。CMM分為五級,大多數軟件企業(yè)都處于第一級,而得到第五級認證的全球也沒(méi)有多少,國內去除掉掛羊頭賣(mài)狗肉的,也是寥若星辰(嗯,比星辰是寥多了)。所以CMM實(shí)施一般是從第二級開(kāi)始,能做到第三級的都是頗有實(shí)力的軟件公司了。CMM是以Process(過(guò)程)為中心的模型,從二級始每一級都有幾個(gè)Key Process(關(guān)鍵過(guò)程),每一個(gè)KP又分為若干Key Active(關(guān)鍵活動(dòng))。CMM的實(shí)施一般不能越級實(shí)施,并且每一級的實(shí)施通常都要一年以上,所以要達到較高等級是一級很困難的事。另,CMM不僅可用于較大規模公司,同樣也可實(shí)施于小公司,小項目組(這是很多人所不知道的)。實(shí)施視具體情況等級之間可交叉,譬如實(shí)施時(shí)采用二級的某些KP再加上三級甚至四級的KP,但你只有實(shí)施了所有二級的KP,你才能也只能通過(guò)二級認證,即便你采用了某些四級的KP。CMM最新發(fā)展成果是CMMI(Integration),這主要是新考慮了軟件與非純軟件因素的關(guān)系(譬如系統),以及團隊之間的協(xié)作問(wèn)題。CMM在國內的發(fā)展似乎有點(diǎn)走向ISO同樣的道路,這實(shí)在不是一個(gè)好消息。

    Callback Function: 回調函數
    在侯sir的<<深入淺出>>中一開(kāi)始就提出了這個(gè)概念,大概的提法是說(shuō)回調函數是操作系統調用而你永遠不要去調用的函數。這個(gè)提法讓初學(xué)者有點(diǎn)望而生畏,以為是一種多么高深而難以領(lǐng)會(huì )的系統底層的核心技術(shù)。其實(shí)不然,這個(gè)技術(shù)本質(zhì)很簡(jiǎn)單,而且很常用。它實(shí)質(zhì)就是函數指針的基本運用(如果不知道什么是函數指針的話(huà),翻翻書(shū))。在一個(gè)模塊中,有時(shí)想讓一部分功能由其它模塊實(shí)現,譬如說(shuō)一個(gè)做顯示的模塊,它只想實(shí)現顯示的資源配備,畫(huà)面的刷新,縮放等控制功能,而把畫(huà)具體實(shí)體(譬如圓、多邊形,都可以有很多種不同效率的實(shí)現方法)的代碼由別的模塊來(lái)實(shí)現,怎么辦呢?用函數指針。在自己的類(lèi)中放一個(gè)畫(huà)圓的函數指針,使用時(shí)由外部為這個(gè)函數指針賦值(其實(shí)就是指向了一個(gè)外部的函數),在自己的代碼中直接調用這個(gè)函數指針來(lái)畫(huà)就可以了(本模塊完全不知道外部模塊是怎么畫(huà)圓的)。那個(gè)外部的函數在這里就是回調函數!
    在很多系統API中就使用了這種函數回調的方法,讓我們開(kāi)發(fā)的代碼實(shí)現可以嵌入到API的代碼實(shí)現當中,其實(shí)我們就是傳了一個(gè)函數地址給它而已。換句話(huà)說(shuō),這些API搭好了某些運行的代碼框架,我們來(lái)為它具體實(shí)現。

    XML: Extensible Markup Language  可擴充標記語(yǔ)言
    也許你還在為選擇.net和j2ee而徘徊不前,如果是這樣的話(huà),不妨先著(zhù)手學(xué)一下它們所共通的一個(gè)基礎:XML。有了HTML為什么我們還要XML?很簡(jiǎn)單,HTML重在表現文本/圖片以及一些多媒體內容,它很難表達數據,因為它的標記是固定的,而數據類(lèi)型千千萬(wàn),根本無(wú)法描述。.net和j2ee都要解決一個(gè)信息傳輸格式標準化的難題,這個(gè)格式要能承載文本/數據,最好還能描述程序接口,同時(shí)又應該像HTML一樣簡(jiǎn)單,具有通用性,能夠在HTTP下很好的運作。在這種要求下,XML產(chǎn)生了。它的特點(diǎn)正如其名,和HTTP一樣,它也是一種標記語(yǔ)言,但是它的標記不是固定的,是可自定義(也就可無(wú)限擴展)的,這些自定義標記能夠很好的描述數據類(lèi)型以及對應的數據內容(乍看起來(lái)很像數據庫表的定義)。除此以外,XML還可以描述程序接口,所以XML可以方便地與網(wǎng)絡(luò )程序構件(COM、EJB等)直接交互。由于它也是一種ASCII文本流,所以與當前的HTTP兼容,在當前的internet上暢通無(wú)阻(這很重要)。有了以上功能,XML就名副其實(shí)地成為了新一代互聯(lián)網(wǎng)技術(shù)的標準信息載體,在.net和j2ee的網(wǎng)絡(luò )架構中,各種“構件”的信息交互都交給了XML,可謂任重而道遠。
    XML我自己沒(méi)怎么寫(xiě)過(guò),單就學(xué)習上的經(jīng)驗而言,感覺(jué)語(yǔ)法上比HTML更瑣碎一些,小細節更多,沒(méi)那么容易速成:) 好在根本同源,有HTML基礎甚至WEB開(kāi)發(fā)基礎的,學(xué)起來(lái)也很輕松。

    Java2:
    這是近幾年最吸引大眾焦點(diǎn)的語(yǔ)言,在Web開(kāi)發(fā),網(wǎng)絡(luò )平臺,移動(dòng)開(kāi)發(fā)的世界里發(fā)光發(fā)熱。你可以不用java,但你不可以不了解java,畢竟這是一個(gè)極大且豐富的軟件開(kāi)發(fā)領(lǐng)域。有些沒(méi)使用過(guò)java的VS陣營(yíng)里的人可能還不明白java2里的那個(gè)2是什么意思,容我先解釋一下。Java最初正式推出1.0時(shí),并沒(méi)有受到如此多的好評,受到頗多責難,于是它不斷地推出新版本來(lái)完善自己,其中變化顯著(zhù)的一個(gè)版本是1.2(我沒(méi)記錯吧),Java的每一個(gè)新版本除了語(yǔ)法上的更新,還有一明顯的標志,那就是JDK(Java Development Kit,就是Java自帶的一套SDK)的更新,版本1.2以后的java為了在宣傳上與以前的java相區別,便被稱(chēng)為java2。目前用得比較多的jdk是1.3/1.4 ,最新的JDK是1.5(代號tiger)。java開(kāi)發(fā)的IDE國內主要以JBuilder為主,另外就是在開(kāi)源領(lǐng)域如雷貫耳的Eclipse,而sun也力推自己的開(kāi)源java IDE:Netbeans(從sun的網(wǎng)站上可下載,免費)。Java運行是虛擬機機制,相當于在操作系統上增加了一個(gè)軟操作系統,源碼被編譯成一種字節中間碼,由虛擬機解釋執行,只要有對應的虛擬機,java程序就可以在該操作系統上運行,這就是java號稱(chēng)的一次編譯,到處運行的由來(lái)。而附帶而來(lái)的不可避免的性能問(wèn)題也讓Java難以成為桌面程序開(kāi)發(fā)的主流。補充一下:對初學(xué)者學(xué)習而言最好的Java IDE我推薦使用JCreator,這是一個(gè)C++寫(xiě)成的IDE,幾MB的大小,比Eclipse快十倍以上的啟動(dòng)速度,對初學(xué)者帶來(lái)極大的便利。

    J2EE:
    Java實(shí)際上又被分為3類(lèi):J2EE/J2SE/J2ME,不同類(lèi)分別對應不同的JDK,J2EE針對企業(yè)平臺開(kāi)發(fā),J2SE是標準版,J2ME針對移動(dòng)平臺開(kāi)發(fā)。J2EE現在實(shí)在是熱得燙手,我前不久翻了一下程序員早期的雜志,發(fā)現在第一期創(chuàng )刊號里(2001.1)已經(jīng)有了j2EE方面的討論,現在已經(jīng)是2004.6了,你對它的認知又多了多少?J2EE不是一種單純的技術(shù),而是一種體系架構以及組成該架構的諸多標準。企業(yè)平臺開(kāi)發(fā)和桌面/簡(jiǎn)單Web數據庫開(kāi)發(fā)有很大的不同,它的程序規模往往很大(不是一個(gè)或者幾個(gè)EXE可以搞定的),用到的往往是海量的數據庫和海量的通信,并且常常是不可中斷的,這些特殊性都使得企業(yè)平臺開(kāi)發(fā)更多地去關(guān)注架構的問(wèn)題。而我們寫(xiě)一個(gè)熟悉的java客戶(hù)端程序,或者消息處理中間件,又或者數據庫處理程序,都只是這樣一個(gè)架構里的一小部分。J2EE是很寵大的,所以請不要寫(xiě)了幾個(gè)EJB(這是java世界里的構件,概念上大概是類(lèi)似于COM)的例子程序就感覺(jué)自己精通j2EE。
    J2EE中傳遞消息時(shí)往往引入了一個(gè)被稱(chēng)作消息管理器的中間件,在服務(wù)器端使用EJB的容器來(lái)管理和調用EJB。在J2EE中一個(gè)重要的概念是Transaction(事務(wù))處理,事務(wù)的概念最早廣泛應用于數據庫技術(shù)。這實(shí)際上是一個(gè)封裝了很多操作的單元,它的作用是中間任何一個(gè)操作失敗,可以自動(dòng)依次整體撤銷(xiāo),所以一個(gè)transaction就是操作成功/失敗的最小單元,不存在一個(gè)transaction只成功了部分操作的情況。
    在企業(yè)服務(wù)平臺開(kāi)發(fā)中比較知名的有一個(gè)叫BEA公司(這是一家不錯的公司,應該知道它的名字),它的產(chǎn)品是Weblogic。

    .net
    .net是微軟為下一個(gè)十年準備的技術(shù),你呢?.net也是一種平臺技術(shù),而不是單一技術(shù)。它主要分為.net運行時(shí)平臺(對應java的虛擬機)和.net類(lèi)庫(對應java的jdk)。目前只有Windows2003是天然集成了.net運行時(shí)平臺的操作系統,所以如是你寫(xiě)的.net程序想要在別的操作系統上運行,該操作系統必須先安裝.net平臺,這是一件蠻煩人的事,也是為什么到目前為止,還沒(méi)有太多的人改用.net來(lái)寫(xiě)程序(盡管可極大提高開(kāi)發(fā)效率)。希望Longhorn的出現可以扭轉這一現狀。那我們就終于可以和MFC這樣過(guò)時(shí)的框架類(lèi)庫說(shuō)再見(jiàn)了,一大快事。
    .net采用了很多最新的技術(shù)和思想,對走VS路線(xiàn)的人來(lái)說(shuō)(特別是有COM概念的),學(xué)起來(lái)相對輕松且很過(guò)癮,前人推薦的“.net框架程序設計“和”.net本質(zhì)論“都是很好的書(shū)。當然,看它們之前你最好基本掌握一門(mén).net語(yǔ)言,譬如C#,掌握語(yǔ)言對我們來(lái)說(shuō)是最easy的。


    聊了這么多技術(shù),下面讓我們來(lái)放松一下:)

    公共密鑰: (也常被譯為公開(kāi)密鑰)
    "密碼"已經(jīng)是一個(gè)老少皆知的詞,想從銀行里把錢(qián)取出來(lái)嗎?沒(méi)密碼可萬(wàn)萬(wàn)不行。不知從什么時(shí)候開(kāi)始,這么一個(gè)軍事級的詞匯已經(jīng)走進(jìn)了千家萬(wàn)戶(hù),婦孺皆知。不過(guò)知道“密鑰”這個(gè)詞的人就少多了,知道“公共密鑰”的人就更少了,不但知道而且了解其原理的人則少之又少,當然,如果你以前不清楚的話(huà),那么你即將加入這少之又少的行列:)
    long long ago,隨著(zhù)軍事的日益發(fā)展,情報的重要性日益提高,如何獲得準確的情報成為軍事上的一大重點(diǎn),伴隨而來(lái)的另一個(gè)問(wèn)題則是如何盡量保證自己的情報在被敵人截獲后(這總是無(wú)可避免的)敵人依然無(wú)法獲得該情報的信息,防止情報外泄。不妨讓我們以今人的智慧來(lái)設身處地的想一想,有什么好的解決方法……首先想到的當然是用密文不要用明文,把明文按某種規則打亂為密文、或者讓明文與密文有某種一一對應的規則 ,這樣即使密文泄露,只要敵人不知道我的明文與密文之間轉換的規則,它將一無(wú)所獲。這是一種簡(jiǎn)單且行之有效的方法,即便到了近代一戰二戰中,還被廣泛使用著(zhù),當然它的這個(gè)規則往往是動(dòng)態(tài)的,甚至可能相當復雜。然而這樣的方案在理論上有一個(gè)重大的缺陷,那就是你如何安全地傳遞“規則”??jì)傻刂g要確保能互相將密文變成明文,必須有共同的規則,那么就至少需要"一次"安全地將“規則”從一地傳到另一地,這在理論上是無(wú)法保證的,所以整個(gè)的安全體系也就無(wú)法讓人完全地放心,一旦規則泄露,對密文體系的打擊則是致命的。有沒(méi)有什么更好的辦法呢?嗯,如果你以前沒(méi)有接觸過(guò)的話(huà),我估計你是想不出了。解決的方法正是公共密鑰體系。
    讓我們再回頭來(lái)看一看我們是如何將明文變成密文的,最簡(jiǎn)單的是將它重新打亂,或者進(jìn)行某種線(xiàn)性或非線(xiàn)性變換,立刻就讓人難以閱讀,但這也是最容易破譯的,因為這種自身的變換在數學(xué)上相對容易求解,在現在的計算機的幫助下,通過(guò)一定量密文明文的統計分析,很容易找到其變化的規則。高級一點(diǎn)的,可以再用一組密碼(可以是動(dòng)態(tài)改變的,譬如隨日期而改變),讓明文與這組密碼進(jìn)行某種組合變化,從而得到一組密文,這樣,由于這個(gè)“組合變化”可能是非常復雜的一種數學(xué)變換,僅通過(guò)密文或者加上一定量的明文也很難找出這組密碼以及這個(gè)“組合變化”的規則。這就是目前絕大多數加/解密的根本原理。而這里的這組密碼,我們就把它稱(chēng)作密鑰。
    但是這只是提高了獲得密文者的對密文的破譯難度,并沒(méi)有解決我們前面提出的問(wèn)題?,F在就要來(lái)看看“共公(共開(kāi))”的含義了。在數學(xué)上有一種運算是單向的(在數學(xué)理論上截止目前為止),從一個(gè)方向算過(guò)去很簡(jiǎn)單,但是它的逆運算當缺少正向運算時(shí)加入的一些信息時(shí),就會(huì )變得幾乎不可能(譬如大素數的分解,分解是困難到幾乎不可能的,分解后的兩個(gè)數乘回去是簡(jiǎn)單的,小學(xué)生就會(huì ),這就是著(zhù)名的RSA的原理)。這就構成了我們的“共公密鑰”的理論基礎。具體使用如下:我們首先產(chǎn)生一對密鑰,一把稱(chēng)為加密密鑰,一把稱(chēng)為解密密鑰,它們是相關(guān)但不相同的。加密時(shí)我們把明文與加密密鑰一起采取“不可逆”數學(xué)運算進(jìn)行“組合變化”,形成密文,解密時(shí)把密文與解密密鑰一起采取類(lèi)似的運算進(jìn)行解密,注意,這處因為加密密鑰與解密密鑰產(chǎn)生時(shí)即是相關(guān)連的,所以解密密鑰能夠完成這樣一個(gè)“逆運算”。同時(shí),解密密鑰也可以用來(lái)加密,相應的,加密密解也可以用來(lái)解“用解密密鑰加密的密文”。具體使用的時(shí)候很簡(jiǎn)單,把加密密鑰當作公共密鑰,分發(fā)給任何想要獲取的人,解密密鑰由自己妥善保管作為私鑰。當擁有加密密鑰的人要傳遞密文給自己時(shí),他只要使用自由獲取的我的公共密鑰來(lái)加密該明文即可,當然,他加密以后他自己也是不能解的,但是傳到我手里以后,我則可以用解密密鑰來(lái)解密,這樣就很好地解決了前面提出的無(wú)法安全傳輸“規則”的問(wèn)題,現在我的公共密鑰是公開(kāi)的,你要拿就拿去好了:) 而私鑰我自己好好保存,不用把它放出來(lái)。
    公共密鑰另一個(gè)重要作用就是用來(lái)簽名。我使用私鑰對自己的文件加密后,你來(lái)使用我發(fā)放的公鑰來(lái)解密,如果解密成功,則可證明這的確是我發(fā)出來(lái)的文件。
    在現在網(wǎng)絡(luò )信息安全常常使用的證書(shū)體系中,“證書(shū)”的背后其實(shí)也是這樣的一種公共密鑰體系。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
api、sdk、dll的區別
.net程序集強名稱(chēng)簽名實(shí)踐
1.3.3 SDK目錄結構
在java中實(shí)現調用簡(jiǎn)單的c程序
【CAD 批量打圖精靈 6.4】帶授權文件&多文檔多格式打印
WINDOWS API 程序設計(第一章:開(kāi)始) | 博客網(wǎng)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久