JAVA學習之路:不走彎路,就是捷徑(轉(zhuǎn)載)
成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、新洲網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5響應式網(wǎng)站、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為新洲等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
引言
軟件開發(fā)之路是充滿荊棘與挑戰(zhàn)之路,也是充滿希望之路。Java學習也是如此,沒有捷徑可走。夢想像《天龍八部》中虛竹一樣被無崖子醍醐灌頂而輕松獲得一甲子功力,是很不現(xiàn)實的。每天仰天大叫"天神啊,請賜給我一本葵花寶典吧",殊不知即使你獲得了葵花寶典,除了受自宮其身之苦外,你也不一定成得了"東方不敗",倒是成"西方失敗"的幾率高一點。
"不走彎路,就是捷徑",佛經(jīng)說的不無道理。
1.如何學習程序設(shè)計?
Java是一種平臺,也是一種程序設(shè)計語言,如何學好程序設(shè)計不僅僅適用于Java,對C++等其他程序設(shè)計語言也一樣管用。有編程高手認為,Java也好C也好沒什么分別,拿來就用。為什么他們能達到如此境界?我想是因為編程語言之間有共通之處,領(lǐng)會了編程的精髓,自然能夠做到一通百通。如何學習程序設(shè)計理所當然也有許多共通的地方。
1.1 培養(yǎng)興趣
興趣是能夠讓你堅持下去的動力。如果只是把寫程序作為謀生的手段的話,你會活的很累,也太對不起自己了。多關(guān)心一些行業(yè)趣事,多想想蓋茨。不是提倡天天做白日夢,但人要是沒有了夢想,你覺得有味道嗎?可能像許多深圳本地農(nóng)民一樣,打打麻將,喝喝功夫茶,拜拜財神爺;每個月就有幾萬十幾萬甚至更多的進帳,憑空多出個"食利階層"。你認為,這樣有味道嗎?有空多到一些程序員論壇轉(zhuǎn)轉(zhuǎn),你會發(fā)現(xiàn),他們其實很樂觀幽默,時不時會冒出智慧的火花。
1.2 慎選程序設(shè)計語言
男怕入錯行,女怕嫁錯郎。初學者選擇程序設(shè)計語言需要謹慎對待。軟件開發(fā)不僅僅是掌握一門編程語言了事,它還需要其他很多方面的背景知識。軟件開發(fā)也不僅僅局限于某幾個領(lǐng)域,而是已經(jīng)滲透到了各行各業(yè)幾乎每一個角落。
如果你對硬件比較感興趣,你可以學習C語言/匯編語言,進入硬件開發(fā)領(lǐng)域。如果你對電信的行業(yè)知識及網(wǎng)絡(luò)比較熟悉,你可以在C/C++等之上多花時間,以期進入電信軟件開發(fā)領(lǐng)域。如果你對操作系統(tǒng)比較熟悉,你可以學習C/Linux等等,為Linux內(nèi)核開發(fā)/驅(qū)動程序開發(fā)/嵌入式開發(fā)打基礎(chǔ)。
如果你想介入到應用范圍最廣泛的應用軟件開發(fā)(包括電子商務(wù)電子政務(wù)系統(tǒng))的話,你可以選擇J2EE或.NET,甚至LAMP組合。每個領(lǐng)域要求的背景知識不一樣。做應用軟件需要對數(shù)據(jù)庫等很熟悉??傊?,你需要根據(jù)自己的特點來選擇合適你的編程語言。
1.3 要腳踏實地,快餐式的學習不可取
先分享一個故事。
有一個小朋友,他很喜歡研究生物學,很想知道那些蝴蝶如何從蛹殼里出來,變成蝴蝶便會飛。有一次,他走到草原上面看見一個蛹,便取了回家,然后看著,過了幾天以后,這個蛹出了一條裂痕,看見里面的蝴蝶開始掙扎,想抓破蛹殼飛出來。 這個過程達數(shù)小時之久,蝴蝶在蛹里面很辛苦地拼命掙扎,怎么也沒法子走出來。這個小孩看著看著不忍心,就想不如讓我?guī)蛶退?,便隨手拿起剪刀在蛹上剪開,使蝴蝶破蛹而出。 但蝴蝶出來以后,因為翅膀不夠力,變得很臃腫,飛不起來。
這個故事給我們的啟示是:欲速則不達。
浮躁是現(xiàn)代人最普遍的心態(tài),能怪誰?也許是貧窮落后了這么多年的緣故,就像當年的大躍進一樣,都想大步跨入***主義社會?,F(xiàn)在的軟件公司、客戶、政府、學校、培訓機構(gòu)等等到處彌漫著浮躁之氣。就拿我比較熟悉的大連大工IT職業(yè)培訓來說吧,居然打廣告宣稱"20多年的計算機職業(yè)教育,遼寧省十佳學校",殊不知中國計算機發(fā)展才幾年,軟件發(fā)展才幾年,居然去報名的學生不少,簡直是藐視天下程序員。培訓出來的“程序員”大多不知道OO,OP為何物?社會環(huán)境如是,我們不能改變,只能改變自己,鬧市中的安寧,彌足珍貴。許多初學者C++/Java沒開始學,立馬使用VC/JBuilder,會使用VC/JBuilder開發(fā)一個Hello World程序,就忙不迭的向世界宣告,"我會軟件開發(fā)了",簡歷上也大言不慚地寫上"精通VC/Java"。結(jié)果到軟件公司面試時要么被三兩下打發(fā)走了,要么被駁的體無完膚,無地自容。到處碰壁之后才知道捧起《C++編程思想》《Java編程思想》仔細鉆研,早知如此何必當初呀。
"你現(xiàn)在講究簡單方便,你以后的路就長了",好象也是佛經(jīng)中的勸戒。
1.4 多實踐,快實踐
彭端淑的《為學一首示子侄》中有窮和尚與富和尚的故事。
從前,四川邊境有兩個和尚,一個貧窮,一個有錢。一天,窮和尚對富和尚說:"我打算去南海朝圣,你看怎么樣?"富和尚說:"這里離南海有幾千里遠,你靠什么去呢?"窮和尚說:"我只要一個水缽,一個飯碗就夠了。"富和尚為難地說:"幾年前我就打算買條船去南海,可至今沒去成,你還是別去吧!" 一年以后,富和尚還在為租賃船只籌錢,窮和尚卻已經(jīng)從南海朝圣回來了。
這個故事可解讀為:任何事情,一旦考慮好了,就要馬上上路,不要等到準備周全之后,再去干事情。假如事情準備考慮周全了再上路的話,別人恐怕捷足先登了。軟件開發(fā)是一門工程學科,注重的就是實踐,"君子動口不動手"對軟件開發(fā)人員來講根本就是錯誤的,他們提倡"動手至上",但別害怕,他們大多溫文爾雅,沒有暴力傾向,雖然有時候蓬頭垢面的一副"比爾蓋茨"樣。有前輩高人認為,學習編程的秘訣是:編程、編程、再編程,筆者深表贊同。不僅要多實踐,而且要快實踐。我們在看書的時候,不要等到你完全理解了才動手敲代碼,而是應該在看書的同時敲代碼,程序運行的各種情況可以讓你更快更牢固的掌握知識點。
1.5 多參考程序代碼
程序代碼是軟件開發(fā)最重要的成果之一,其中滲透了程序員的思想與靈魂。許多人被《仙劍奇?zhèn)b傳》中凄美的愛情故事感動,悲劇的結(jié)局更有一種缺憾美。為什么要以悲劇結(jié)尾?據(jù)說是因為寫《仙劍奇?zhèn)b傳》的程序員失戀而安排了這樣的結(jié)局,他把自己的感覺融入到游戲中,卻讓眾多的仙劍迷扼腕嘆息。
多多參考代碼例子,對Java而言有參考文獻[4.3],有API類的源代碼(JDK安裝目錄下的src.zip文件),也可以研究一些開源的軟件或框架。
1.6 加強英文閱讀能力
對學習編程來說,不要求英語, 但不能一點不會,。最起碼像Java API文檔(參考文獻[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開啟一個"金山詞霸"??炊嗔司蜁絹碓绞炀?。在學Java的同時學習英文,一箭雙雕多好。另外好多軟件需要到英文網(wǎng)站下載,你要能夠找到它們,這些是最基本的要求。英語好對你學習有很大的幫助??谡Z好的話更有機會進入管理層,進而可以成為剝削程序員的"周扒皮"。
1.7 萬不得已才請教別人
筆者在Martix與Java論壇的在線輔導系統(tǒng)中解決學生問題時發(fā)現(xiàn),大部分的問題學生稍做思考就可以解決。請教別人之前,你應該先回答如下幾個問題。
你是否在google中搜索了問題的解決辦法?
你是否查看了Java API文檔?
你是否查找過相關(guān)書籍?
你是否寫代碼測試過?
如果回答都是"是"的話,而且還沒有找到解決辦法,再問別人不遲。要知道獨立思考的能力對你很重要。要知道程序員的時間是很寶貴的。
1.8 多讀好書
書中自有顏如玉。比爾蓋茨是一個飽讀群書的人。雖然沒有讀完大學,但九歲的時候比爾蓋茨就已經(jīng)讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學科,可以說比爾?茨不僅是當今世界上金錢的首富,而且也可以稱得上是知識的巨富。
筆者在給學生上課的時候經(jīng)常會給他們推薦書籍,到后來學生實在忍無可忍開始抱怨,"天吶,這么多書到什么時候才能看完了","學軟件開發(fā),感覺上了賊船"。這時候,我的回答一般是,"別著急,什么時候帶你們?nèi)タ纯次业臅浚浆F(xiàn)在每月花在技術(shù)書籍上的錢400元,這在軟件開發(fā)人員之中還只能夠算是中等的",學生當場暈倒。(注:這一部分學生是剛學軟件開發(fā)的)
1.9 使用合適的工具
工欲善其事必先利其器。軟件開發(fā)包含各種各樣的活動,需求收集分析、建立用例模型、建立分析設(shè)計模型、編程實現(xiàn)、調(diào)試程序、自動化測試、持續(xù)集成等等,沒有工具幫忙可以說是寸步難行。工具可以提高開發(fā)效率,使軟件的質(zhì)量更高BUG更少。組合稱手的武器。到飛花摘葉皆可傷人的境界就很高了,無招勝有招,手中無劍心中有劍這樣的境界幾乎不可企及。
2.軟件開發(fā)學習路線
兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守并非中庸之道,而是找尋學習軟件開發(fā)的正確路線與規(guī)律。
從軟件開發(fā)人員的生涯規(guī)劃來講,我們可以大致分為三個階段,軟件工程師→軟件設(shè)計師→架構(gòu)設(shè)計師或項目管理師。不想當元帥的士兵不是好士兵,不想當架構(gòu)設(shè)計師或項目管理師的程序員也不是好的程序員。我們應該努力往上走。讓我們先整理一下開發(fā)應用軟件需要學習的主要技術(shù)。
A.基礎(chǔ)理論知識,如操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法、計算機原理等,它們并非不重要。如不想成為計算機科學家的話,可以采取"用到的時候再來學"的原則。
B.一門編程語言,現(xiàn)在基本上都是面向?qū)ο蟮恼Z言,Java/C++/C#等等。如果做WEB開發(fā)的話還要學習HTML/javascript等等。
C.一種方法學或者說思想,現(xiàn)在基本都是面向?qū)ο笏枷耄∣OA/OOD/設(shè)計模式)。由此而衍生的基于組件開發(fā)CBD/面向方面編程AOP等等。
D.一種關(guān)系型數(shù)據(jù)庫,ORACLE/SqlServer/DB2/MySQL等等
E.一種提高生產(chǎn)率的IDE集成開發(fā)環(huán)境JBuilder/Eclipse/VS.NET等。
F.一種UML建模工具,用ROSE/VISIO/鋼筆進行建模。
G.一種軟件過程,RUP/XP/CMM等等,通過軟件過程來組織軟件開發(fā)的眾多活動,使開發(fā)流程專業(yè)化規(guī)范化。當然還有其他的一些軟件工程知識。
H.項目管理、體系結(jié)構(gòu)、框架知識。
正確的路線應該是:B→C→E→F→G→H。
還需要補充幾點:
1).對于A與C要補充的是,我們應該在實踐中逐步領(lǐng)悟編程理論與編程思想。新技術(shù)雖然不斷涌現(xiàn),更新速度令人眼花燎亂霧里看花;但萬變不離其宗,編程理論與編程思想的變化卻很慢。掌握了編程理論與編程思想你就會有撥云見日之感。面向?qū)ο蟮乃枷朐谀壳皝碇v是相當關(guān)鍵的,是強勢技術(shù)之一,在上面需要多投入時間,給你的回報也會讓你驚喜。
2).對于數(shù)據(jù)庫來說是獨立學習的,這個時機就由你來決定吧。
3).編程語言作為學習軟件開發(fā)的主線,而其余的作為輔線。
4).軟件工程師著重于B、C、E、D;軟件設(shè)計師著重于B、C、E、D、F;架構(gòu)設(shè)計師著重于C、F、H。
3.如何學習Java?
3.1 Java學習路線
3.1.1 基礎(chǔ)語法及Java原理
基礎(chǔ)語法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習Java也是如此,必須要有扎實的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。參加SCJP(SUN公司認證的Java程序員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費,你會更努力學習,原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識;但是你千萬不要認為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的。獲得"真正"的SCJP只能證明你的基礎(chǔ)還過得去,但離實際開發(fā)還有很長的一段路要走。
3.1.2 OO思想的領(lǐng)悟
掌握了基礎(chǔ)語法和Java程序運行原理后,我們就可以用Java語言實現(xiàn)面向?qū)ο蟮乃枷肓?。面向?qū)ο?,是一種方法學;是獨立于語言之外的編程思想;是CBD基于組件開發(fā)的基礎(chǔ);屬于強勢技術(shù)之一。當以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z言的時候,你會感到特別的熟悉親切,學起來像喝涼水這么簡單。
使用面向?qū)ο蟮乃枷脒M行開發(fā)的基本過程是:
●調(diào)查收集需求。
●建立用例模型。
●從用例模型中識別分析類及類與類之間的靜態(tài)動態(tài)關(guān)系,從而建立分析模型。
●細化分析模型到設(shè)計模型。
●用具體的技術(shù)去實現(xiàn)。
●測試、部署、總結(jié)。
3.1.3 基本API的學習
進行軟件開發(fā)的時候,并不是什么功能都需要我們?nèi)崿F(xiàn),也就是經(jīng)典名言所說的"不需要重新發(fā)明輪子"。我們可以利用現(xiàn)成的類、組件、框架來搭建我們的應用,如SUN公司編寫好了眾多類實現(xiàn)一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調(diào)用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,Java DOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔。
基本API指的是實現(xiàn)了一些底層功能的類,通用性較強的API,如字符串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查Java DOC文檔(參考文獻4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。
3.1.4 特定API的學習
Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發(fā),那么你需要學習Swing/AWT/SWT等API;如果你進行網(wǎng)絡(luò)游戲開發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開發(fā),就需要熟悉Servlet等API啦??傊?,需要根據(jù)工作的需要或你的興趣發(fā)展方向去選擇學習特定的API。
3.1.5 開發(fā)工具的用法
在學習基礎(chǔ)語法與基本的面向?qū)ο蟾拍顣r,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急于上手JBuilder/Eclipse等集成開發(fā)環(huán)境,以免過于關(guān)注IDE的強大功能而分散對Java技術(shù)本身的注意力。過了這一階段你就可以開始熟悉IDE了。
程序員日常工作包括很多活動,編輯、編譯及構(gòu)建、調(diào)試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項活動都有專門的工具,如果獨立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經(jīng)自動集成編輯器、編譯器、調(diào)試器、單元測試工具JUnit、自動構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開發(fā)變得更輕松。應該說IDE發(fā)展的趨勢就是集成軟件開發(fā)中要用到的幾乎所有工具。
從開發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個學生到一個職業(yè)程序員轉(zhuǎn)變的里程碑。
Java開發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場份額是最大的。JBuilder在近幾年來一直是Java集成開發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開發(fā),在硝煙彌漫的Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。IBM在Visual Age for Java上已經(jīng)無利可圖之下,干脆將之貢獻給開源社區(qū),成為Eclipse的前身,真所謂"柳暗花明又一村"。浴火重生的Eclipse以其開放式的插件擴展機制、免費開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發(fā)展?jié)摿Α?/p>
3.1.6 學習軟件工程
對小型項目而言,你可能認為軟件工程沒太大的必要。隨著項目的復雜性越來越高,軟件工程的必要性才會體現(xiàn)出來。參見"軟件開發(fā)學習路線"小節(jié)。
3.2學習要點
確立的學習路線之后,我們還需要總結(jié)一下Java的學習要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽啊。
3.2.1勤查API文檔
當程序員編寫好某些類,覺得很有成就感,想把它貢獻給各位苦難的同行。這時候你要使用"Javadoc"工具(包含在JDK中)生成標準的Java DOC文檔,供同行使用。J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址:,你可以到google搜索CHM版本下載。也可以在線查看:。
對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。
當需要某項功能的時候,你應該先查相應的DOC文檔看看有沒有現(xiàn)成的實現(xiàn),有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現(xiàn)。使用步驟一般如下:
●找特定的包,包一般根據(jù)功能組織。
●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二。
●選擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對象。
●選擇你需要的方法。
3.2.2 查書/google-寫代碼測試-查看源代碼-請教別人
當我們遇到問題的時候該如何解決?
這時候不要急著問別人,太簡單的問題,沒經(jīng)過思考的問題,別人會因此而瞧不起你??梢韵日艺視?,到google中搜一下看看,絕大部分問題基本就解決了。而像"某些類/方法如何使用的問題",DOC文檔就是答案。對某些知識點有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看API的源代碼驗證你的想法。萬不得已才去請教別人。
3.2.3學習開源軟件的設(shè)計思想
Java領(lǐng)域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進行分析,領(lǐng)會其中的設(shè)計思想,有朝一日說不定你也能寫一個XXX框架什么的,風光一把。分析開源軟件其實是你提高技術(shù)、提高實戰(zhàn)能力的便捷方法。
3.2.4 規(guī)范的重要性
沒有規(guī)矩,不成方圓。這里的規(guī)范有兩層含義。第一層含義是技術(shù)規(guī)范,多到下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準確最新的教材。第二層含義是編程規(guī)范,如果你使用了大量的獨特算法,富有個性的變量及方法的命名方式;同時,沒給程序作注釋,以顯示你的編程功底是多么的深厚。這樣的代碼別人看起來像天書,要理解談何容易,更不用說維護了,必然會被無情地掃入垃圾堆。Java編碼規(guī)范到此查看或下載,中文的也有,啊,還要問我在哪,請參考3.2.2節(jié)。
3.2.5 不局限于Java
很不幸,很幸運,要學習的東西還有很多。不幸的是因為要學的東西太多且多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致抑郁癥。幸運的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達成心愿。
Java不要孤立地去學習,需要綜合學習數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫技術(shù)等知識,用橫向縱向的比較聯(lián)想的方式去學習會更有效。如學習Java集合的時候找數(shù)據(jù)結(jié)構(gòu)的書看看;學JDBC的時候復習數(shù)據(jù)庫技術(shù);采取的依然是"需要的時候再學"的原則。
4.結(jié)束語
需要強調(diào)的是,學習軟件開發(fā)確實有一定的難度,也很辛苦,需要付出很多努力,但千萬不要半途而廢。本文如果能對一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。哈哈,怎么聽起來老氣橫秋呀?沒辦法,在電腦的長期輻射之下,都快變成小老頭了。最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠離電腦,據(jù)《胡播亂報》報道,電腦輻射會在白皙的皮膚上面點綴一些小黑點,看起來鮮艷無比…… (文章提到的大連大工IT培訓。本人沒有任何攻擊的意思)
2004年,已經(jīng)被山東大學的王小云教授破解了。
以下是她在國際密碼學會上發(fā)表的破解原理論文。
Collisions for Hash Functions
Collisions for Hash Functions
MD4, MD5, HAVAL-128 and RIPEMD
Xiaoyun Wang1, Dengguo Feng2, Xuejia Lai3, Hongbo Yu1
The School of Mathematics and System Science, Shandong University, Jinan250100, China1
Institute of Software, Chinese Academy of Sciences, Beijing100080, China2
Dept. of Computer Science and Engineering, Shanghai Jiaotong University, Shanghai, China3
xywang@sdu.edu.cn1
revised on August 17, 2004
1 Collisions for MD5
MD5 is the hash function designed by Ron Rivest [9] as a strengthened version of MD4 [8]. In 1993 Bert den
Boer and Antoon Bosselaers [1] found pseudo-collision for MD5 which is made of the same message with two
different sets of initial value. H. Dobbertin[3] found a free-start collision which consists of two different 512-bit
messages with a chosen initial value 0 V I .
ED BA x C B F x C B AC x A V I 763 4 0 D , 97 62 5 0 , 341042 3 0x B , 2375 12 0 : 0 0 0 0 0
Our attack can find many real collisions which are composed of two 1024-bit messages with the original
initial value 0 IV of MD5:
10325476 0 , 98 0 , 89 0 67452301 0 : 0 0 0 0 0 x D badcfe x C xefcdab ,B x A IV
) 0 , 2 ,..., 2 ,..., 2 , 0 , 0 , 0 , 0 ( , 31 15 31
1 1 C C M M
) 0 , 2 ,..., 2 ,..., 2 , 0 , 0 , 0 , 0 ( , 31 15 31
2 2 C C N N i i
(non-zeros at position 4,11 and 14)
such that
) , ( 5 ) , ( 5 i i N M MD N M MD .
On IBM P690, it takes about one hour to find such M and M , after that, it takes only 15 seconds to 5
minutes to find i N and i N , so that ) , ( i N M and ) , ( i N M will produce the same hash same value. Moreover,
our attack works for any given initial value.
The following are two pairs of 1024-bit messages producing collisions, the two examples have the same 1-st
half 512 bits.
M
2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8
634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780
X1
N1
d11d0b96 9c7b41dc f497d8e4 d555655a c79a7335 cfdebf0 66f12930 8fb109d1
797f2775 eb5cd530 baade822 5c15cc79 ddcb74ed 6dd3c55f d80a9bb1 e3a7cc35
M0
2dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8
634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780
X1
N1
d11d0b96 9c7b41dc f497d8e4 d555655a 479a7335 cfdebf0 66f12930 8fb109d1
797f2775 eb5cd530 baade822 5c154c79 ddcb74ed 6dd3c55f 580a9bb1 e3a7cc35
H 9603161f f41fc7ef 9f65ffbc a30f9dbf
M
2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8
634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780
X2
N2
313e82d8 5b8f3456 d4ac6dae c619c936 b4e253dd fd03da87 6633902 a0cd48d2
42339fe9 e87e570f 70b654ce 1e0da880 bc2198c6 9383a8b6 2b65f996 702af76f
M0
2dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8
634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780
313e82d8 5b8f3456 d4ac6dae c619c936 34e253dd fd03da87 6633902 a0cd48d2
42339fe9 e87e570f 70b654ce 1e0d2880 bc2198c6 9383a8b6 ab65f996 702af76f
H 8d5e7019 6324c015 715d6b58 61804e08
Table 1 Two pairs of collisions for MD5
2 Collisions for HAVAL-128
HAVAL is proposed in [10]. HAVAL is a hashing algorithm that can compress messages of any length in 3,4
or 5 passes and produce a fingerprint of length 128, 160, 192 or 224 bits.
Attack on a reduced version for HAVAL was given by P. R. Kasselman and W T Penzhorn [7], which
consists of last rounds for HAVAL-128. We break the full HAVAL-128 with only about the 26 HAVAL
computations. Here we give two examples of collisions of HAVAL-128, where
) 0 ,..., 0 , 2 ,.... 2 , 0 , 0 , 0 , 2 ( , 8 12 1 i i i C C M M
with non-zeros at position 0,11,18, and 31 ,... 2 , 1 , 0 i , such that ) ( ) ( M HAVAL M HAVAL .
M1
6377448b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f
a67a8a42 8d3adc8b b6e3d814 5630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36
38183c9a b67a9289 c47299b2 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632
fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f4307f87
M1
6377488b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f
a67a8a42 8d3adc8b b6e3d814 d630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36
38183c9a b67a9289 c47299ba 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632
fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f4307f87
H 95b5621c ca62817a a48dacd8 6d2b54bf
M2
6377448b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f
a67a8a42 8d3adc8b b6e3d814 5630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36
38183c9a b67a9289 c47299b2 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632
fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f5b16963
6377488b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4f
a67a8a42 8d3adc8b b6e3d814 d630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b36
38183c9a b67a9289 c47299ba 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632
fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f5b16963
H b0e99492 d64eb647 5149ef30 4293733c
Table 2 Two pairs of collision, where i=11 and these two examples differ only at the last word
3 Collisions for MD4
MD4 is designed by R. L. Rivest[8] . Attack of H. Dobbertin in Eurocrypto'96[2] can find collision with
probability 1/222. Our attack can find collision with hand calculation, such that
) 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 2 , 2 , 0 ( , 16 31 28 31 C C M M
and ) ( 4 ) ( 4 M MD M MD .
M1
4d7a9c83 56cb927a b9d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f
c69d71b3 f9e99198 d79f805e a63bb2e8 45dd8e31 97e31fe5 2794bf08 b9e8c3e9
M1
4d7a9c83 d6cb927a 29d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f
c69d71b3 f9e99198 d79f805e a63bb2e8 45dc8e31 97e31fe5 2794bf08 b9e8c3e9
H 5f5c1a0d 71b36046 1b5435da 9b0d807a
M2
4d7a9c83 56cb927a b9d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f
c69d71b3 f9e99198 d79f805e a63bb2e8 45dd8e31 97e31fe5 f713c240 a7b8cf69
4d7a9c83 d6cb927a 29d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9f
c69d71b3 f9e99198 d79f805e a63bb2e8 45dc8e31 97e31fe5 f713c240 a7b8cf69
H e0f76122 c429c56c ebb5e256 b809793
Table 3 Two pairs of collisions for MD4
4 Collisions for RIPEMD
RIPEMD was developed for the RIPE project (RACE Integrrity Primitives Evalustion, 1988-1992). In
1995, H. Dobbertin proved that the reduced version RIPEMD with two rounds is not collision-free[4]. We show
that the full RIPEMD also isnOt collision-free. The following are two pairs of collisions for RIPEMD:
) 2 , 0 , 0 , 0 , 0 , 2 2 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 ( , 31 31 18 20 ' C C M M i i
M1
579faf8e 9ecf579 574a6aba 78413511 a2b410a4 ad2f6c9f b56202c 4d757911
bdeaae7 78bc91f2 47bc6d7d 9abdd1b1 a45d2015 817104ff 264758a8 61064ea5
M1
579faf8e 9ecf579 574a6aba 78513511 a2b410a4 ad2f6c9f b56202c 4d757911
bdeaae7 78bc91f2 c7c06d7d 9abdd1b1 a45d2015 817104ff 264758a8 e1064ea5
H 1fab152 1654a31b 7a33776a 9e968ba7
M2
579faf8e 9ecf579 574a6aba 78413511 a2b410a4 ad2f6c9f b56202c 4d757911
bdeaae7 78bc91f2 47bc6d7d 9abdd1b1 a45d2015 a0a504ff b18d58a8 e70c66b6
579faf8e 9ecf579 574a6aba 78513511 a2b410a4 ad2f6c9f b56202c 4d757911
bdeaae7 78bc91f2 c7c06d7d 9abdd1b1 a45d2015 a0a504ff b18d58a8 670c66b6
H 1f2c159f 569b31a6 dfcaa51a 25665d24
Table 4 The collisions for RIPEMD
5 Remark
Besides the above hash functions we break, there are some other hash functions not having ideal security. For
example, collision of SHA-0 [6] can be found with about 240 computations of SHA-0 algorithms, and a collision
for HAVAL-160 can be found with probability 1/232.
Note that the messages and all other values in this paper are composed of 32-bit words, in each 32-bit word
the most left byte is the most significant byte.
1 B. den Boer, Antoon Bosselaers, Collisions for the Compression Function of MD5, Eurocrypto,93.
2 H. Dobbertin, Cryptanalysis of MD4, Fast Software Encryption, LNCS 1039, D. , Springer-Verlag, 1996.
3 H. Dobbertin, Cryptanalysis of MD5 compress, presented at the rump session of EurocrZpt'96.
4 Hans Dobbertin, RIPEMD with Two-round Compress Function is Not Collision-Free, J. Cryptology 10(1),
1997.
5 H. Dobbertin, A. Bosselaers, B. Preneel, "RIPMEMD-160: A Strengthened Version of RIPMMD," Fast
Software EncrZption, LNCS 1039, D.Gollmann, Ed., Springer-Verlag, 1996, pp. 71-82.
6 FIPS 180-1, Secure hash standard, NIST, US Department of Commerce, Washington D. C., April 1995.
7 P. R. Kasselman, W T Penzhorn , Cryptananlysis od reduced version of HAVAL, Vol. 36, No. 1, Electronic
Letters, 2000.
8 R. L. Rivest, The MD4 Message Digest Algorithm, Request for Comments (RFC)1320, Internet Activities
Board, Internet Privacy Task Force, April 1992.
9 R. L Rivest, The MD5 Message Digest Algorithm, Request for Comments (RFC)1321, Internet Activities
Board, Internet PrivacZ Task Force, April 1992.3RIPEMD-1281
10 Y. Zheng, J. Pieprzyk, J. Seberry, HAVAL--A One-way Hashing Algorithm with Variable Length of Output,
Auscrypto'92.
理最有效的手段。
數(shù)據(jù)庫設(shè)計是指:對于一個給定的應用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應用系統(tǒng),有效存儲數(shù)據(jù),滿足用戶信息要求和處理要求。
數(shù)據(jù)庫設(shè)計的各階段:
A、需求分析階段:綜合各個用戶的應用需求(現(xiàn)實世界的需求)。
B、在概念設(shè)計階段:形成獨立于機器和各DBMS產(chǎn)品的概念模式(信息世界模型),用E-R圖來描述。
C、在邏輯設(shè)計階段:將E-R圖轉(zhuǎn)換成具體的數(shù)據(jù)庫產(chǎn)品支持的數(shù)據(jù)模型,如關(guān)系模型,形成數(shù)據(jù)庫邏輯模式。然后根據(jù)用戶處理的要求,安全性的考慮,在基本表的基礎(chǔ)上再建立必要的視圖(VIEW)形成數(shù)據(jù)的外模式。
D、在物理設(shè)計階段:根據(jù)DBMS特點和處理的需要,進行物理存儲安排,設(shè)計索引,形成數(shù)據(jù)庫內(nèi)模式。
1. 需求分析階段
需求收集和分析,結(jié)果得到數(shù)據(jù)字典描述的數(shù)據(jù)需求(和數(shù)據(jù)流圖描述的處理需求)。
需求分析的重點:調(diào)查、收集與分析用戶在數(shù)據(jù)管理中的信息要求、處理要求、安全性與完整性要求。
需求分析的方法:調(diào)查組織機構(gòu)情況、各部門的業(yè)務(wù)活動情況、協(xié)助用戶明確對新系統(tǒng)的各種要求、確定新系統(tǒng)的邊界。
常用的調(diào)查方法有: 跟班作業(yè)、開調(diào)查會、請專人介紹、詢問、設(shè)計調(diào)查表請用戶填寫、查閱記錄。
分析和表達用戶需求的方法主要包括自頂向下和自底向上兩類方法。自頂向下的結(jié)構(gòu)化分析方法(Structured Analysis,簡稱SA方法)從最上層的系統(tǒng)組織機構(gòu)入手,采用逐層分解的方式分析系統(tǒng),并把每一層用數(shù)據(jù)流圖和數(shù)據(jù)字典描述。
數(shù)據(jù)流圖表達了數(shù)據(jù)和處理過程的關(guān)系。系統(tǒng)中的數(shù)據(jù)則借助數(shù)據(jù)字典(Data Dictionary,簡稱DD)來描述。
2. 概念結(jié)構(gòu)設(shè)計階段
通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型,可以用E-R圖表示。
概念模型用于信息世界的建模。概念模型不依賴于某一個DBMS支持的數(shù)據(jù)模型。概念模型可以轉(zhuǎn)換為計算機上某一DBMS支持的特定數(shù)據(jù)模型。
概念模型特點:
(1) 具有較強的語義表達能力,能夠方便、直接地表達應用中的各種語義知識。
(2) 應該簡單、清晰、易于用戶理解,是用戶與數(shù)據(jù)庫設(shè)計人員之間進行交流的語言。
概念模型設(shè)計的一種常用方法為IDEF1X方法,它就是把實體-聯(lián)系方法應用到語義數(shù)據(jù)模型中的一種語義模型化技術(shù),用于建立系統(tǒng)信息模型。
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
2.1 第零步——初始化工程
這個階段的任務(wù)是從目的描述和范圍描述開始,確定建模目標,開發(fā)建模計劃,組織建模隊伍,收集源材料,制定約束和規(guī)范。收集源材料是這階段的重點。通過調(diào)查和觀察結(jié)果,業(yè)務(wù)流程,原有系統(tǒng)的輸入輸出,各種報表,收集原始數(shù)據(jù),形成了基本數(shù)據(jù)資料表。
2.2 第一步——定義實體
實體集成員都有一個共同的特征和屬性集,可以從收集的源材料——基本數(shù)據(jù)資料表中直接或間接標識出大部分實體。根據(jù)源材料名字表中表示物的術(shù)語以及具有 “代碼”結(jié)尾的術(shù)語,如客戶代碼、代理商代碼、產(chǎn)品代碼等將其名詞部分代表的實體標識出來,從而初步找出潛在的實體,形成初步實體表。
2.3 第二步——定義聯(lián)系
IDEF1X模型中只允許二元聯(lián)系,n元聯(lián)系必須定義為n個二元聯(lián)系。根據(jù)實際的業(yè)務(wù)需求和規(guī)則,使用實體聯(lián)系矩陣來標識實體間的二元關(guān)系,然后根據(jù)實際情況確定出連接關(guān)系的勢、關(guān)系名和說明,確定關(guān)系類型,是標識關(guān)系、非標識關(guān)系(強制的或可選的)還是非確定關(guān)系、分類關(guān)系。如果子實體的每個實例都需要通過和父實體的關(guān)系來標識,則為標識關(guān)系,否則為非標識關(guān)系。非標識關(guān)系中,如果每個子實體的實例都與而且只與一個父實體關(guān)聯(lián),則為強制的,否則為非強制的。如果父實體與子實體代表的是同一現(xiàn)實對象,那么它們?yōu)榉诸愱P(guān)系。
2.4 第三步——定義碼
通過引入交叉實體除去上一階段產(chǎn)生的非確定關(guān)系,然后從非交叉實體和獨立實體開始標識侯選碼屬性,以便唯一識別每個實體的實例,再從侯選碼中確定主碼。為了確定主碼和關(guān)系的有效性,通過非空規(guī)則和非多值規(guī)則來保證,即一個實體實例的一個屬性不能是空值,也不能在同一個時刻有一個以上的值。找出誤認的確定關(guān)系,將實體進一步分解,最后構(gòu)造出IDEF1X模型的鍵基視圖(KB圖)。
2.5 第四步——定義屬性
從源數(shù)據(jù)表中抽取說明性的名詞開發(fā)出屬性表,確定屬性的所有者。定義非主碼屬性,檢查屬性的非空及非多值規(guī)則。此外,還要檢查完全依賴函數(shù)規(guī)則和非傳遞依賴規(guī)則,保證一個非主碼屬性必須依賴于主碼、整個主碼、僅僅是主碼。以此得到了至少符合關(guān)系理論第三范式的改進的IDEF1X模型的全屬性視圖。
2.6 第五步——定義其他對象和規(guī)則
定義屬性的數(shù)據(jù)類型、長度、精度、非空、缺省值、約束規(guī)則等。定義觸發(fā)器、存儲過程、視圖、角色、同義詞、序列等對象信息。
3. 邏輯結(jié)構(gòu)設(shè)計階段
將概念結(jié)構(gòu)轉(zhuǎn)換為某個DBMS所支持的數(shù)據(jù)模型(例如關(guān)系模型),并對其進行優(yōu)化。設(shè)計邏輯結(jié)構(gòu)應該選擇最適于描述與表達相應概念結(jié)構(gòu)的數(shù)據(jù)模型,然后選擇最合適的DBMS。
將E-R圖轉(zhuǎn)換為關(guān)系模型實際上就是要將實體、實體的屬性和實體之間的聯(lián)系轉(zhuǎn)化為關(guān)系模式,這種轉(zhuǎn)換一般遵循如下原則:一個實體型轉(zhuǎn)換為一個關(guān)系模式。實體的屬性就是關(guān)系的屬性。實體的碼就是關(guān)系的碼。
數(shù)據(jù)模型的優(yōu)化,確定數(shù)據(jù)依賴,消除冗余的聯(lián)系,確定各關(guān)系模式分別屬于第幾范式。確定是否要對它們進行合并或分解。一般來說將關(guān)系分解為3NF的標準,即:
表內(nèi)的每一個值都只能被表達一次。
表內(nèi)的每一行都應該被唯一的標識(有唯一鍵)。
表內(nèi)不應該存儲依賴于其他鍵的非鍵信息。
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
4. 數(shù)據(jù)庫物理設(shè)計階段
為邏輯數(shù)據(jù)模型選取一個最適合應用環(huán)境的物理結(jié)構(gòu)(包括存儲結(jié)構(gòu)和存取方法)。根據(jù)DBMS特點和處理的需要,進行物理存儲安排,設(shè)計索引,形成數(shù)據(jù)庫內(nèi)模式。
5. 數(shù)據(jù)庫實施階段
運用DBMS提供的數(shù)據(jù)語言(例如SQL)及其宿主語言(例如C),根據(jù)邏輯設(shè)計和物理設(shè)計的結(jié)果建立數(shù)據(jù)庫,編制與調(diào)試應用程序,組織數(shù)據(jù)入庫,并進行試運行。 數(shù)據(jù)庫實施主要包括以下工作:用DDL定義數(shù)據(jù)庫結(jié)構(gòu)、組織數(shù)據(jù)入庫 、編制與調(diào)試應用程序、數(shù)據(jù)庫試運行 ,(Data Definition Language(DDL數(shù)據(jù)定義語言)用作開新數(shù)據(jù)表、設(shè)定字段、刪除數(shù)據(jù)表、刪除字段,管理所有有關(guān)數(shù)據(jù)庫結(jié)構(gòu)的東西)
●Create (新增有關(guān)數(shù)據(jù)庫結(jié)構(gòu)的東西,屬DDL)
●Drop (刪除有關(guān)數(shù)據(jù)庫結(jié)構(gòu)的東西,屬DDL)
●Alter (更改結(jié)構(gòu),屬DDL)
6. 數(shù)據(jù)庫運行和維護階段
在數(shù)據(jù)庫系統(tǒng)運行過程中必須不斷地對其進行評價、調(diào)整與修改。內(nèi)容包括:數(shù)據(jù)庫的轉(zhuǎn)儲和恢復、數(shù)據(jù)庫的安全性、完整性控制、數(shù)據(jù)庫性能的監(jiān)督、分析和改進、數(shù)據(jù)庫的重組織和重構(gòu)造。
7. 建模工具的使用
為加快數(shù)據(jù)庫設(shè)計速度,目前有很多數(shù)據(jù)庫輔助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的oracle Designer等。
ERwin主要用來建立數(shù)據(jù)庫的概念模型和物理模型。它能用圖形化的方式,描述出實體、聯(lián)系及實體的屬性。ERwin支持IDEF1X方法。通過使用 ERwin建模工具自動生成、更改和分析IDEF1X模型,不僅能得到優(yōu)秀的業(yè)務(wù)功能和數(shù)據(jù)需求模型,而且可以實現(xiàn)從IDEF1X模型到數(shù)據(jù)庫物理設(shè)計的轉(zhuǎn)變。ERwin工具繪制的模型對應于邏輯模型和物理模型兩種。在邏輯模型中,IDEF1X工具箱可以方便地用圖形化的方式構(gòu)建和繪制實體聯(lián)系及實體的屬性。在物理模型中,ERwin可以定義對應的表、列,并可針對各種數(shù)據(jù)庫管理系統(tǒng)自動轉(zhuǎn)換為適當?shù)念愋汀?/p>
設(shè)計人員可根據(jù)需要選用相應的數(shù)據(jù)庫設(shè)計建模工具。例如需求分析完成之后,設(shè)計人員可以使用Erwin畫ER圖,將ER圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型,生成數(shù)據(jù)庫結(jié)構(gòu);畫數(shù)據(jù)流圖,生成應用程序。
二、數(shù)據(jù)庫設(shè)計技巧
1. 設(shè)計數(shù)據(jù)庫之前(需求分析階段)
1) 理解客戶需求,包括用戶未來需求變化。
2) 了解企業(yè)業(yè)務(wù)類型,可以在開發(fā)階段節(jié)約大量的時間。
3) 重視輸入(要記錄的數(shù)據(jù))、輸出(報表、查詢、視圖)。
4) 創(chuàng)建數(shù)據(jù)字典和ER 圖表
數(shù)據(jù)字典(Data Dictionary,簡稱DD)是各類數(shù)據(jù)描述的集合,是關(guān)于數(shù)據(jù)庫中數(shù)據(jù)的描述,即元數(shù)據(jù),不是數(shù)據(jù)本身。(至少應該包含每個字段的數(shù)據(jù)類型和在每個表內(nèi)的主外鍵)。
數(shù)據(jù)項描述: 數(shù)據(jù)項名,數(shù)據(jù)項含義說明,別名,數(shù)據(jù)類型,長度,取值范圍,取值含義,與其他數(shù)據(jù)項的邏輯關(guān)系
數(shù)據(jù)結(jié)構(gòu)描述: 數(shù)據(jù)結(jié)構(gòu)名,含義說明,組成:[數(shù)據(jù)項或數(shù)據(jù)結(jié)構(gòu)]
數(shù)據(jù)流描述: 數(shù)據(jù)流名,說明,數(shù)據(jù)流來源,數(shù)據(jù)流去向, 組成:[數(shù)據(jù)結(jié)構(gòu)],平均流量,高峰期流量
數(shù)據(jù)存儲描述: 數(shù)據(jù)存儲名,說明,編號,流入的數(shù)據(jù)流,流出的數(shù)據(jù)流,組成:[數(shù)據(jù)結(jié)構(gòu)],數(shù)據(jù)量,存取方式
處理過程描述: 處理過程名,說明,輸入:[數(shù)據(jù)流],輸出:[數(shù)據(jù)流],處理:[簡要說明]
ER 圖表和數(shù)據(jù)字典可以讓任何了解數(shù)據(jù)庫的人都明確如何從數(shù)據(jù)庫中獲得數(shù)據(jù)。ER圖對表明表之間關(guān)系很有用,而數(shù)據(jù)字典則說明了每個字段的用途以及任何可能存在的別名。對SQL 表達式的文檔化來說這是完全必要的。
5) 定義標準的對象命名規(guī)范
數(shù)據(jù)庫各種對象的命名必須規(guī)范。
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
2. 表和字段的設(shè)計(數(shù)據(jù)庫邏輯設(shè)計)
表設(shè)計原則
1) 標準化和規(guī)范化
數(shù)據(jù)的標準化有助于消除數(shù)據(jù)庫中的數(shù)據(jù)冗余。標準化有好幾種形式,但Third Normal Form(3NF)通常被認為在性能、擴展性和數(shù)據(jù)完整性方面達到了最好平衡。簡單來說,遵守3NF 標準的數(shù)據(jù)庫的表設(shè)計原則是:“One Fact in One Place”即某個表只包括其本身基本的屬性,當不是它們本身所具有的屬性時需進行分解。表之間的關(guān)系通過外鍵相連接。它具有以下特點:有一組表專門存放通過鍵連接起來的關(guān)聯(lián)數(shù)據(jù)。
2) 數(shù)據(jù)驅(qū)動
采用數(shù)據(jù)驅(qū)動而非硬編碼的方式,許多策略變更和維護都會方便得多,大大增強系統(tǒng)的靈活性和擴展性。
舉例,假如用戶界面要訪問外部數(shù)據(jù)源(文件、XML 文檔、其他數(shù)據(jù)庫等),不妨把相應的連接和路徑信息存儲在用戶界面支持的表里。如果用戶界面執(zhí)行工作流之類的任務(wù)(發(fā)送郵件、打印信箋、修改記錄狀態(tài)等),那么產(chǎn)生工作流的數(shù)據(jù)也可以存放在數(shù)據(jù)庫里。角色權(quán)限管理也可以通過數(shù)據(jù)驅(qū)動來完成。事實上,如果過程是數(shù)據(jù)驅(qū)動的,你就可以把相當大的責任推給用戶,由用戶來維護自己的工作流過程。
3) 考慮各種變化
在設(shè)計數(shù)據(jù)庫的時候考慮到哪些數(shù)據(jù)字段將來可能會發(fā)生變更。
4) 表名、報表名和查詢名的命名規(guī)范
(采用前綴命名)檢查表名、報表名和查詢名之間的命名規(guī)范。你可能會很快就被這些不同的數(shù)據(jù)庫要素的名稱搞糊涂了。你可以統(tǒng)一地命名這些數(shù)據(jù)庫的不同組成部分,至少你應該在這些對象名字的開頭用 Table、Query 或者 Report 等前綴加以區(qū)別。如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符號來標識對象(比如 tbl_Employees)。用 sp_company 標識存儲過程,用 udf_ (或者類似的標記)標識自定義編寫的函數(shù)。
字段設(shè)計原則:
1) 每個表中都應該添加的3 個有用的字段。
dRecordCreationDate,在SQL Server 下默認為GETDATE()
sRecordCreator,在SQL Server 下默認為NOT NULL DEFAULT USER
nRecordVersion,記錄的版本標記;有助于準確說明記錄中出現(xiàn)null 數(shù)據(jù)或者丟失數(shù)據(jù)的原因
時效性數(shù)據(jù)應包括“最近更新日期/時間”字段。時間標記對查找數(shù)據(jù)問題的原因、按日期重新處理/重載數(shù)據(jù)和清除舊數(shù)據(jù)特別有用。
2) 對地址和電話采用多個字段
描述街道地址就短短一行記錄是不夠的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的靈活性。還有,電話號碼和郵件地址最好擁有自己的數(shù)據(jù)表,其間具有自身的類型和標記類別。
3) 表內(nèi)的列[字段]的命名規(guī)則(采用前綴/后綴命名)、采用有意義的字段名
對列[字段]名應該采用標準的前綴和后綴。如鍵是數(shù)字類型:用 _N 后綴;字符類型:_C 后綴;日期類型:_D 后綴。再如,假如你的表里有好多“money”字段,你不妨給每個列[字段]增加一個 _M 后綴。
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
假設(shè)有兩個表:
Customer 和 Order。Customer 表的前綴是 cu_,所以該表內(nèi)的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前綴是 or_,所以子段名是:
or_order_id、or_cust_name_id、or_quantity 和 or_description 等。
這樣從數(shù)據(jù)庫中選出全部數(shù)據(jù)的 SQL 語句可以寫成如下所示:
Select * From Customer, Order Where cu_surname = "MYNAME" ;
and cu_name_id = or_cust_name_id and or_quantity = 1
在沒有這些前綴的情況下則寫成這個樣子(用別名來區(qū)分):
Select * From Customer, Order Where Customer.surname = "MYNAME" ;
and Customer.name_id = Order.cust_name_id and Order.quantity = 1
第 1 個 SQL 語句沒少鍵入多少字符。但如果查詢涉及到 5 個表乃至更多的列[字段]你就知道這個技巧多有用了。
5) 選擇數(shù)字類型和文本類型的長度應盡量充足
假設(shè)客戶ID 為10 位數(shù)長。那你應該把數(shù)據(jù)庫表字段的長度設(shè)為12 或者13 個字符長。但這額外占據(jù)的空間卻無需將來重構(gòu)整個數(shù)據(jù)庫就可以實現(xiàn)數(shù)據(jù)庫規(guī)模的增長了。
6) 增加刪除標記字段
在表中包含一個“刪除標記”字段,這樣就可以把行標記為刪除。在關(guān)系數(shù)據(jù)庫里不要單獨刪除某一行;最好采用清除數(shù)據(jù)程序而且要仔細維護索引整體性。
7) 提防大小寫混用的對象名和特殊字符
采用全部大寫而且包含下劃符的名字具有更好的可讀性(CUSTOMER_DATA),絕對不要在對象名的字符之間留空格。
8) 小心保留詞
要保證你的字段名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用訪問方法沖突,比如,用 DESC 作為說明字段名。后果可想而知!DESC 是 DESCENDING 縮寫后的保留詞。表里的一個 SELECT * 語句倒是能用,但得到的卻是一大堆毫無用處的信息。
9) 保持字段名和類型的一致性
在命名字段并為其指定數(shù)據(jù)類型的時候一定要保證一致性。假如字段在表1中叫做“agreement_number”,就別在表2里把名字改成 “ref1”。假如數(shù)據(jù)類型在表1里是整數(shù),那在表2里可就別變成字符型了。當然在表1(ABC)有處鍵ID,則為了可讀性,在表2做關(guān)聯(lián)時可以命名為 ABC_ID。
10) 避免使用觸發(fā)器
觸發(fā)器的功能通??梢杂闷渌绞綄崿F(xiàn)。在調(diào)試程序時觸發(fā)器可能成為干擾。假如你確實需要采用觸發(fā)器,你最好集中對它文檔化。
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
3. 選擇鍵和索引(數(shù)據(jù)庫邏輯設(shè)計)
參考:《SQL優(yōu)化-索引》一文
4. 數(shù)據(jù)完整性設(shè)計(數(shù)據(jù)庫邏輯設(shè)計)
1) 完整性實現(xiàn)機制:
實體完整性:主鍵
參照完整性:
父表中刪除數(shù)據(jù):級聯(lián)刪除;受限刪除;置空值
父表中插入數(shù)據(jù):受限插入;遞歸插入
父表中更新數(shù)據(jù):級聯(lián)更新;受限更新;置空值
DBMS對參照完整性可以有兩種方法實現(xiàn):外鍵實現(xiàn)機制(約束規(guī)則)和觸發(fā)器實現(xiàn)機制用戶定義完整性:
NOT NULL;CHECK;觸發(fā)器
2) 用約束而非商務(wù)規(guī)則強制數(shù)據(jù)完整性
采用數(shù)據(jù)庫系統(tǒng)實現(xiàn)數(shù)據(jù)的完整性。這不但包括通過標準化實現(xiàn)的完整性而且還包括數(shù)據(jù)的功能性。不要依賴于商務(wù)層保證數(shù)據(jù)完整性;它不能保證表之間(外鍵) 的完整性所以不能強加于其他完整性規(guī)則之上。如果你在數(shù)據(jù)層確實采用了約束,你要保證有辦法把更新不能通過約束檢查的原因采用用戶理解的語言通知用戶界面。
3) 強制指示完整性
在有害數(shù)據(jù)進入數(shù)據(jù)庫之前將其剔除。激活數(shù)據(jù)庫系統(tǒng)的指示完整性特性。這樣可以保持數(shù)據(jù)的清潔而能迫使開發(fā)人員投入更多的時間處理錯誤條件。
4) 使用查找控制數(shù)據(jù)完整性
控制數(shù)據(jù)完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數(shù)據(jù)的一致性。某些公共數(shù)據(jù)特別適合查找:國家代碼、狀態(tài)代碼等。
5) 采用視圖
為了在數(shù)據(jù)庫和應用程序代碼之間提供另一層抽象,可以為應用程序建立專門的視圖而不必非要應用程序直接訪問數(shù)據(jù)表。這樣做還等于在處理數(shù)據(jù)庫變更時給你提供了更多的自由。
6) 分布式數(shù)據(jù)系統(tǒng)
對分布式系統(tǒng)而言,在你決定是否在各個站點復制所有數(shù)據(jù)還是把數(shù)據(jù)保存在一個地方之前應該估計一下未來 5 年或者 10 年的數(shù)據(jù)量。當你把數(shù)據(jù)傳送到其他站點的時候,最好在數(shù)據(jù)庫字段中設(shè)置一些標記,在目的站點收到你的數(shù)據(jù)之后更新你的標記。為了進行這種數(shù)據(jù)傳輸,請寫下你自己的批處理或者調(diào)度程序以特定時間間隔運行而不要讓用戶在每天的工作后傳輸數(shù)據(jù)。本地拷貝你的維護數(shù)據(jù),比如計算常數(shù)和利息率等,設(shè)置版本號保證數(shù)據(jù)在每個站點都完全一致。
7) 關(guān)系
如果兩個實體之間存在多對一關(guān)系,而且還有可能轉(zhuǎn)化為多對多關(guān)系,那么你最好一開始就設(shè)置成多對多關(guān)系。從現(xiàn)有的多對一關(guān)系轉(zhuǎn)變?yōu)槎鄬Χ嚓P(guān)系比一開始就是多對多關(guān)系要難得多。
8) 給數(shù)據(jù)保有和恢復制定計劃
考慮數(shù)據(jù)保存策略并包含在設(shè)計過程中,預先設(shè)計你的數(shù)據(jù)恢復過程。采用可以發(fā)布給用戶/開發(fā)人員的數(shù)據(jù)字典實現(xiàn)方便的數(shù)據(jù)識別同時保證對數(shù)據(jù)源文檔化。編寫在線更新來“更新查詢”供以后萬一數(shù)據(jù)丟失可以重新處理更新。
9) 用存儲過程讓系統(tǒng)做重活
提供一整套常規(guī)的存儲過程來訪問各組以便加快速度和簡化客戶程序代碼的開發(fā)。數(shù)據(jù)庫不只是一個存放數(shù)據(jù)的地方,它也是簡化編碼之地。
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
5. 其他設(shè)計技巧
1) 避免使用觸發(fā)器
觸發(fā)器的功能通??梢杂闷渌绞綄崿F(xiàn)。在調(diào)試程序時觸發(fā)器可能成為干擾。假如你確實需要采用觸發(fā)器,你最好集中對它文檔化。
2) 使用常用英語(或者其他任何語言)而不要使用編碼
在創(chuàng)建下拉菜單、列表、報表時最好按照英語名排序。假如需要編碼,可以在編碼旁附上用戶知道的英語。
3) 保存常用信息
讓一個表專門存放一般數(shù)據(jù)庫信息非常有用。在這個表里存放數(shù)據(jù)庫當前版本、最近檢查/修復(對Access)、關(guān)聯(lián)設(shè)計文檔的名稱、客戶等信息。這樣可以實現(xiàn)一種簡單機制跟蹤數(shù)據(jù)庫,當客戶抱怨他們的數(shù)據(jù)庫沒有達到希望的要求而與你聯(lián)系時,這樣做對非客戶機/服務(wù)器環(huán)境特別有用。
4) 包含版本機制
在數(shù)據(jù)庫中引入版本控制機制來確定使用中的數(shù)據(jù)庫的版本。時間一長,用戶的需求總是會改變的。最終可能會要求修改數(shù)據(jù)庫結(jié)構(gòu)。把版本信息直接存放到數(shù)據(jù)庫中更為方便。
5) 編制文檔
對所有的快捷方式、命名規(guī)范、限制和函數(shù)都要編制文檔。
采用給表、列、觸發(fā)器等加注釋的 數(shù)據(jù)庫工具。對開發(fā)、支持和跟蹤修改非常有用。
對數(shù)據(jù)庫文檔化,或者在數(shù)據(jù)庫自身的內(nèi)部或者單獨建立文檔。這樣,當過了一年多時間后再回過頭來做第2 個版本,犯錯的機會將大大減少。
6) 測試、測試、反復測試
建立或者修訂數(shù)據(jù)庫之后,必須用用戶新輸入的數(shù)據(jù)測試數(shù)據(jù)字段。最重要的是,讓用戶進行測試并且同用戶一道保證選擇的數(shù)據(jù)類型滿足商業(yè)要求。測試需要在把新數(shù)據(jù)庫投入實際服務(wù)之前完成。
7) 檢查設(shè)計
在開發(fā)期間檢查數(shù)據(jù)庫設(shè)計的常用技術(shù)是通過其所支持的應用程序原型檢查數(shù)據(jù)庫。換句話說,針對每一種最終表達數(shù)據(jù)的原型應用,保證你檢查了數(shù)據(jù)模型并且查看如何取出數(shù)據(jù)。
三、數(shù)據(jù)庫命名規(guī)范
1. 實體(表)的命名
1) 表以名詞或名詞短語命名,確定表名是采用復數(shù)還是單數(shù)形式,此外給表的別名定義簡單規(guī)則(比方說,如果表名是一個單詞,別名就取單詞的前4 個字母;如果表名是兩個單詞,就各取兩個單詞的前兩個字母組成4 個字母長的別名;如果表的名字由3 個單詞組成,從頭兩個單詞中各取一個然后從最后一個單詞中再取出兩個字母,結(jié)果還是組成4 字母長的別名,其余依次類推)
對工作用表來說,表名可以加上前綴WORK_ 后面附上采用該表的應用程序的名字。在命名過程當中,根據(jù)語義拼湊縮寫即可。注意:將字段名稱會統(tǒng)一成大寫或者小寫中的一種,故中間加上下劃線。
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
舉例:
定義的縮寫 Sales: Sal 銷售;
Order: Ord 訂單;
Detail: Dtl 明細;
則銷售訂單明細表命名為:Sal_Ord_Dtl;
2) 如果表或者是字段的名稱僅有一個單詞,那么建議不使用縮寫,而是用完整的單詞。
舉例:
定義的縮寫 Material Ma 物品;
物品表名為:Material, 而不是 Ma.
但是字段物品編碼則是:Ma_ID;而不是Material_ID
3) 所有的存儲值列表的表前面加上前綴Z
目的是將這些值列表類排序在數(shù)據(jù)庫最后。
4) 所有的冗余類的命名(主要是累計表)前面加上前綴X
冗余類是為了提高數(shù)據(jù)庫效率,非規(guī)范化數(shù)據(jù)庫的時候加入的字段或者表
5) 關(guān)聯(lián)類通過用下劃線連接兩個基本類之后,再加前綴R的方式命名,后面按照字母順序羅列兩個表名或者表名的縮寫。
關(guān)聯(lián)表用于保存多對多關(guān)系。
如果被關(guān)聯(lián)的表名大于10個字母,必須將原來的表名的進行縮寫。如果沒有其他原因,建議都使用縮寫。
舉例:表Object與自身存在多對多的關(guān)系,則保存多對多關(guān)系的表命名為:R_Object;
作者: 小靈, 出處:論壇, 責任編輯: 李書琴, 2007-09-27 15:17
本文詳細解析了數(shù)據(jù)庫設(shè)計過程、設(shè)計技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
2. 屬性(列)的命名
1) 采用有意義的列名
表內(nèi)的列要針對鍵采用一整套設(shè)計規(guī)則。每一個表都將有一個自動ID作為主健,邏輯上的主健作為第一組候選主健來定義;
A、如果是數(shù)據(jù)庫自動生成的編碼,統(tǒng)一命名為:ID
B、如果是自定義的邏輯上的編碼則用縮寫加“ID”的方法命名,即“XXXX_ID”
C、如果鍵是數(shù)字類型,你可以用_NO 作為后綴;
D、如果是字符類型則可以采用_CODE 后綴
E、對列名應該采用標準的前綴和后綴。
舉例:銷售訂單的編號字段命名:Sal_Ord_ID;如果還存在一個數(shù)據(jù)庫生成的自動編號,則命名為:ID。
2) 所有的屬性加上有關(guān)類型的后綴
注意,如果還需要其它的后綴,都放在類型后綴之前。
注: 數(shù)據(jù)類型是文本的字段,類型后綴TX可以不寫。有些類型比較明顯的字段,可以不寫類型后綴。
3) 采用前綴命名
給每個表的列名都采用統(tǒng)一的前綴,那么在編寫SQL表達式的時候會得到大大的簡化。這樣做也確實有缺點,比如破壞了自動表連接工具的作用,后者把公共列名同某些數(shù)據(jù)庫聯(lián)系起來。
3. 視圖的命名
1) 視圖以V作為前綴,其他命名規(guī)則和表的命名類似;
2) 命名應盡量體現(xiàn)各視圖的功能。
4. 觸發(fā)器的命名(盡量不使用)
觸發(fā)器以TR作為前綴,觸發(fā)器名為相應的表名加上后綴,Insert觸發(fā)器加'_I',Delete觸發(fā)器加'_D',Update觸發(fā)器加'_U',如:TR_Customer_I,TR_Customer_D,TR_Customer_U。
5. 存儲過程名
存儲過程應以'UP_'開頭,和系統(tǒng)的存儲過程區(qū)分,后續(xù)部分主要以動賓形式構(gòu)成,并用下劃線分割各個組成部分。如增加代理商的帳戶的存儲過程為'UP_Ins_Agent_Account'。
6. 變量名
變量名采用小寫,若屬于詞組形式,用下劃線分隔每個單詞,如@my_err_no。
7. 命名中其他注意事項
1) 以上命名都不得超過30個字符的系統(tǒng)限制。變量名的長度限制為29(不包括標識字符@)。
2) 數(shù)據(jù)對象、變量的命名都采用英文字符,禁止使用中文命名。絕對不要在對象名的字符之間留空格。
3) 小心保留詞,要保證你的字段名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用訪問方法沖突
4) 保持字段名和類型的一致性,在命名字段并為其指定數(shù)據(jù)類型的時候一定要保證一致性。假如數(shù)據(jù)類型在一個表里是整數(shù),那在另一個表里可就別變成字符型了。
1、語法:必須比較熟悉,在寫代碼的時候,IDE(Integrated Development Environment,集成開發(fā)環(huán)境)的編輯器對某一行報錯應該能夠根據(jù)報錯信息知道是什么樣的語法錯誤,并且知道任何修正。
2、命令:必須熟悉JDK(Java Development Kit,Java開發(fā)工具箱——JDK 是整個Java的核心,包括了Java運行環(huán)境,Java工具和Java基礎(chǔ)的類庫。JDK是學好Java的第一步。)帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設(shè)置、插件的安裝配置以及進行調(diào)試。
4、API(Application Programming Interface,應用程序編程接口):Java的核心API是非常龐大的,但是有一些內(nèi)容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
◆java.lang包下的80%以上的類的功能的靈活運用;
◆java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer;
◆java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合;
◆java.math包下的100%的內(nèi)容;
◆java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉;
◆java.text包下的60%以上的內(nèi)容,特別是各種格式化類;
◆熟練運用JDBC. 80%、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java;
◆AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打?。?/p>
◆Swing的基本內(nèi)容,和AWT的要求類似;
◆XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。
5、測試:Junit測試是程序員測試,即所謂白盒測試。一位合格的Java開發(fā)工程師必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:必須熟悉使用Ant(中文譯為螞蟻,是一種基于Java的build工具。)完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP(Object Oriented Programming,面向?qū)ο缶幊蹋┑闹饕?,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。
9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
10、博學:掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技術(shù),掌握軟件架構(gòu)設(shè)計思想、搜索引擎優(yōu)化、緩存系統(tǒng)設(shè)計、網(wǎng)站負載均衡、系統(tǒng)性能調(diào)優(yōu)等實用技術(shù)。
網(wǎng)站題目:java編輯代碼在線測試 java 代碼測試
文章起源:http://www.rwnh.cn/article14/dosipge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、品牌網(wǎng)站建設(shè)、響應式網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站營銷、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)