




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面試必備的相關(guān)知識
目的:為了更好的認(rèn)識java體系,同時(shí)為了找更高的薪水。
1、java基礎(chǔ)知識
1.1基礎(chǔ)知識
i.i.i配置環(huán)境變量
新建java_home變量(安裝目錄),值為:C:\ProgramFiles\Java\jdkl.6.0_14;此值
為JDK的安裝位置。
新建classpath變量(類加載路徑),值
為:.;%java_home%\lib;%java_home%\lib\tools.jar
修改path變量(使得系統(tǒng)可以在任何路徑下識別java命令),值
為:%java_home%\bin;%java_home%\jre\bin
1.1.2訪問修飾符
Public:任何地方可以訪問
Private:只有自身可以訪問
Protected:同一個(gè)包和子類可以訪問
默認(rèn):只有同一個(gè)包內(nèi)可以訪問
1.2對象的清理
1.2.1認(rèn)識Java的自動(dòng)垃圾回收
垃圾回收是Java語言的一大特性,方便了編程,是以消耗性能為代價(jià)的。而垃圾
在這里只無用的對象。而C++是需要程序員自己寫析構(gòu)函數(shù)來釋放內(nèi)存的,麻煩,也有
可能忘記而導(dǎo)致內(nèi)存泄露。
Java語言對內(nèi)存的分配管理是通過JVM內(nèi)部機(jī)制決定的。程序員可以不關(guān)心其處
理。
1.2.2垃圾回收的原理和意義
Java虛擬機(jī)中有個(gè)稱之為垃圾回收器的東西,實(shí)際上這個(gè)東西也許真正不存在,或
者是已經(jīng)集成到JVM中了,但這無關(guān)緊要,我們?nèi)匀豢梢苑Q為為垃圾回收器。
垃圾回收器的作用是查找和回收(清理)無用的對象。以便讓JVM更有效的使用
內(nèi)存。
垃圾回收器的運(yùn)行時(shí)間是不確定的,由JVM決定,在運(yùn)行時(shí)是間歇執(zhí)行的。雖然
可以通過System.gc()來強(qiáng)制回收垃圾,但是這個(gè)命令下達(dá)后無法保證JVM會(huì)立即響
應(yīng)執(zhí)行,但經(jīng)驗(yàn)表明,下達(dá)命令后,會(huì)在短期內(nèi)執(zhí)行你的請求。JVM通常會(huì)感到內(nèi)存
緊缺時(shí)候去執(zhí)行垃圾回收操作。
垃圾回收過于頻繁會(huì)導(dǎo)致性能下降,過于稀疏會(huì)導(dǎo)致內(nèi)存緊缺。這個(gè)JVM會(huì)將其
控制到最好,不用程序員擔(dān)心。但有些程序在短期會(huì)吃掉大量內(nèi)存,而這些恐怖的對象
很快使用結(jié)束了,這時(shí)候也許有必要強(qiáng)制下達(dá)一條垃圾回命令,這是很有必要的,以便
有更多可用的物理內(nèi)存。
從上面了解到,沒有用的對象就是垃圾。準(zhǔn)確的說,當(dāng)沒有任何線程訪問一個(gè)對象
時(shí),該對象就符合垃圾回收的條件。
對于String,存在一個(gè)字符串池,這個(gè)不屬于本文討論的范圍,字符串池中的垃圾
回收,算法和這里所討論的垃圾回收完全是兩碼事。但是不得不說的是,字符串的胡亂
拼接,往往導(dǎo)致性能急劇下降,尤其是在龐大的循環(huán)語句中,拼接字符串就是在讓程序
慢性自殺。這也是很多Java程序員容易犯的毛病。
字符串既然是池,就是為了緩沖,為了有更高的命中率,因此垃圾回收的頻率也許
會(huì)比JVM對象垃圾回收器要低很多。
垃圾回收器僅僅能做的是盡可能保證可用內(nèi)存的使用效率,讓可用內(nèi)存得到高效的
管理。程序員可以影響垃圾回收的執(zhí)行,但不能控制。
1.2.3通過編程影響垃圾回收
雖然程序員無法控制JVM的垃圾回收機(jī)制。但是可以通過編程的手段來影響,影
響的方法是,讓對象符合垃圾回收條件。
分別說來有一下幾種:
1、將無用對象賦值為null.
2、重新為引用變量賦值。比如:
Personp=newPerson("aaa");
p=newPerson("bbb");
這樣,newPerson("aaa'O這個(gè)對象就是垃圾了一一符合垃圾回收條件了。
3、讓相互聯(lián)系的對象稱為“島”對象
Personpl=newPersonC'aaa");
Personp2=newPerson("bbb");
Personp3=newPerson("cccn);
pl=p2;p2=p3;p3=pl;
pl=null;p2=null;p3=null;
在沒有對pl、p2、p3置null之前,它們之間是一種三角戀關(guān)系。分別置null,三
角戀關(guān)系依然存在,但是三個(gè)變量不在使用它們了。三個(gè)Person對象就組成了一個(gè)孤
島,最后死在堆上一一被垃圾回收掉。
1.2.4強(qiáng)制的垃圾回收System.gc()
實(shí)際上這里的強(qiáng)制,是程序員的意愿、建議,什么時(shí)候執(zhí)行是JVM的垃圾回收器
說了算。
調(diào)用垃圾回收也不一定能保證未使用的對象一定能從內(nèi)存中刪除。
唯一能保證的是,當(dāng)你內(nèi)存在極少的情況,垃圾回收器在程序拋出
OutofMemaryException之前運(yùn)行一次。
1.3集合
:"■;"…一二..:Produces:Produces
;Iteratory■Collectionf;Map;
:…西飛」
…8'W"A
1.4文件流
1.4.1輸出字節(jié)流
1.4.2輸入字節(jié)流
1.4.3輸入輸出字符流
Critix-Ax*x*?iyKeu<ler-
PushhackReaciei"
1ItouLSLx-ouniKouclux-f7£1oRouclux'
P1clRotadex"
S±T'ir?£tRF??cic?T-
ObJoct
CliarAx-x'tiyWx-ltox'
Wi-ito?-Oi?t.ptit.Stj-<9ixmWt-i1.?=?r---—Fl1GWI-1上。r
PipeciWi'iter
PT-InrWi'iter
Stx-lrBHWr-ILox-
1.5網(wǎng)絡(luò)
1.5.1TCP和UDP的區(qū)另lj
TCP是面向連接的通信協(xié)議,TCP提供兩臺(tái)計(jì)算機(jī)之間的可靠的無差別錯(cuò)的數(shù)據(jù)傳輸。
UDP是無連接通信協(xié)議,UDP不保證可靠的數(shù)據(jù)的傳輸,但能夠向若干個(gè)目標(biāo)發(fā)送數(shù)
據(jù),接受發(fā)自若干個(gè)源的數(shù)據(jù)。
1.6多線程
1.6.1實(shí)現(xiàn)多線程
實(shí)現(xiàn)多線程:繼承自Thread類,可以重寫run()方法去覆蓋去Thread中的run()方法;
實(shí)現(xiàn)Runnable接口并實(shí)現(xiàn)它的run()方法。
線程的優(yōu)先級代表該線程的重要程度(不是絕對的),當(dāng)有多個(gè)線程同時(shí)處于可執(zhí)行狀
態(tài)并等待獲得CPU時(shí)間時(shí)?,線程調(diào)度系統(tǒng)根據(jù)各個(gè)線程的優(yōu)先級來決定給誰分配CPU時(shí)
間,優(yōu)先級高的線程有更大的機(jī)會(huì)獲得CPU時(shí)間,優(yōu)先級低的線程也不是沒有機(jī)會(huì),只是
機(jī)會(huì)要小一些罷了。
1.6.2多線程方法的解釋和區(qū)別
1.start。是啟動(dòng)一個(gè)線程。
2.join()是直到執(zhí)行完(或強(qiáng)制執(zhí)行一段時(shí)間)當(dāng)前的線程后才往下執(zhí)行主線程或其他的
線程
3.stop()是停止當(dāng)前的線程。
阻塞線程比較多
sleep()方法:sleep()允許指定以毫秒為單位的一段時(shí)間作為參數(shù),它使得線程在指定
的時(shí)間內(nèi)進(jìn)入阻塞狀態(tài),不能得到CPU時(shí)間,指定的時(shí)間一過,線程重新進(jìn)入可執(zhí)行狀態(tài)。
可能給其他線程執(zhí)行的機(jī)會(huì)(自私,睡著了,不釋放鎖,時(shí)間到了才放鎖)
suspend()和resume()方法:兩個(gè)方法配套使用,suspend。使得線程進(jìn)入阻塞狀態(tài),并
且不會(huì)自動(dòng)恢復(fù),必須其對應(yīng)的resume。被調(diào)用,才能使得線程重新進(jìn)入可執(zhí)行狀態(tài)。
yield()方法:yieldO使得線程放棄當(dāng)前分得的CPU時(shí)間,但是不使線程阻塞,即線
程仍處于可執(zhí)行狀態(tài),隨時(shí)可能再次分得CPU時(shí)間。調(diào)用yield()的效果等價(jià)于調(diào)度程序
認(rèn)為該線程已執(zhí)行了足夠的時(shí)間從而轉(zhuǎn)到另一個(gè)線程。不過yield。只能使同等級別的線程獲
取執(zhí)行的機(jī)會(huì)(公平競爭,釋放大家再次選舉)。而sleep(lOOO)使同級別或不同級別的都有
可能。
wait()和notifyO和notifyAll()方法是Object中定義的方法:
必須在synchronized代碼塊中使用,在synchronized代碼被執(zhí)行期間,線程可以調(diào)用對
象的wait()方法,釋放對象的鎖標(biāo)志,進(jìn)入等待的狀態(tài),并且可以調(diào)用notify?;蛘遪otifyAll()
方法通知正在等待的其他線程。notify。通知的是等待隊(duì)列中的第一個(gè)線程,notifyAH。通知
的是等待隊(duì)列中的所有數(shù)量。
幾個(gè)方法配套使用,wait。使得線程進(jìn)入阻塞狀態(tài),它有兩種形式,一種允許指定以
毫秒為單位的一段時(shí)間作為參數(shù),另一種沒有參數(shù),前者當(dāng)對應(yīng)的notifyO被調(diào)用或者超
出指定時(shí)間時(shí)線程重新進(jìn)入可執(zhí)行狀態(tài),后者則必須對應(yīng)的notifyO被調(diào)用。
1.6.3wait和sleep的區(qū)別
wait。在object類里定義;sleep。在Thread類里定義。
wait。方法只能放在同步方法或同步塊中,表示資源同步時(shí),線程需要等待。
sleep。方法可放在任何位置,表示當(dāng)前線程睡眠。
wait。方法會(huì)釋放對象鎖;sleep。不會(huì)釋放對象鎖。
wait。方法要等待喚醒之后,線程才會(huì)繼續(xù)執(zhí)行。
sleep。則是休眠一段時(shí)間,線程自動(dòng)恢復(fù)執(zhí)行.
sleep。必須捕獲異常,而wait。,notify。和notifyAll()不需要捕獲異常
1.6.4notify。和notifyAU()的區(qū)別
notifyO方法導(dǎo)致解除阻塞的線程是從因調(diào)用該對象的wait()方法而阻塞的線程中隨
機(jī)選取的,我們無法預(yù)料哪一個(gè)線程將會(huì)被選擇,所以編程時(shí)要特別小心,避免因這種不確
定性而產(chǎn)生問題。
notifyAll()方法將把因調(diào)用該對象的wait()方法而阻塞的所有線程一次性全部解除阻
塞。當(dāng)然,只有獲得鎖的那一個(gè)線程才能進(jìn)入可執(zhí)行狀態(tài)。
1.6.5run和start的區(qū)別
run()方法:在本線程內(nèi)調(diào)用該Runnable對象的run()方法,可以重復(fù)多次調(diào)用:
start。方法:啟動(dòng)一個(gè)線程,調(diào)用該Runnable對象的run()方法,不能多次啟動(dòng)一個(gè)線程;
start。方法是啟動(dòng)(即開辟)一個(gè)線程的方法,因此線程的啟動(dòng)必須通過此方法,
而run()方法,只是Thread類的一個(gè)方法,它本身并不能開辟線程。
1.7異常
運(yùn)行時(shí)異常和Error是catch不了的。
throw和throws的區(qū)別
throw是拋出一個(gè)具體的異常類,產(chǎn)生一個(gè)異常。
throws則是在方法名后標(biāo)出該方法會(huì)產(chǎn)生何種異常需要方法的使用者捕獲并處理。
自定義異常必須繼承Exception類。
1.8格式化
略
1.9數(shù)字運(yùn)算
1.10正則表達(dá)式
1.10.1次數(shù)限定符
*o次或多次
+至少i次
?0或1次
{n}指定n次
{n,)至少n次
{n,m}匹配n-m次
2、JAVA面向?qū)ο蟮幕A(chǔ)知識
2.1面向?qū)ο蟮娜齻€(gè)特征
2.1.1封裝
屬性是私有,方法的公開的。
自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏。
2.1.2繼承
它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對這
些功能進(jìn)行擴(kuò)展。
2.1.3多態(tài)
實(shí)現(xiàn)多態(tài)有2種方式:靜態(tài)多態(tài)(編譯時(shí)的多態(tài),在同一個(gè)類中)和動(dòng)態(tài)
多態(tài)(一個(gè)對象可以有多種類型)。
是允許你將父對象設(shè)置成為和一個(gè)或更多的他的子對象相等的技術(shù),賦值
之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運(yùn)作。
一句話:允許將子類對象賦值給父類的引用或父類指向子類的對象。
2.1.4總結(jié)
封裝可以隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼模塊化。
繼承可以擴(kuò)展已存在的代碼模塊(類)。
封裝和繼承屬于代碼重用。
多態(tài)是為了接口重用。
1封裝
面
實(shí)現(xiàn)繼承
向
對
象可視繼承
基
本接口繼承
特
征
純虛類
虛函數(shù)
多態(tài)
同名函數(shù)
2.1.5繼承、聚合、組合、關(guān)聯(lián)的區(qū)別
繼承很好理解,下圖表示(實(shí)線):
△
實(shí)現(xiàn)也很好理解,下圖表示(虛線):
依賴(代碼中通常表示的是局部變量、方法參數(shù)、返回值),下圖表示:
關(guān)聯(lián)(代碼中通常表示的類的屬性),下圖表示:
ClassB
0..1
聚合(關(guān)聯(lián)的一種,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周
期,部分可以屬于多個(gè)整體對象,也可以為多個(gè)整體對象共享;has-a,空心菱形),下圖
表示
組合(關(guān)聯(lián)的一種,表示更強(qiáng)的關(guān)系,整體與部分是不可分的,整體的生命周期結(jié)
束也就意味著部分的生命周期結(jié)束,contains-a,實(shí)心菱形),下圖表示
2.2抽象、接口定義及區(qū)別
抽象類里面可以有非抽象方法
但接口里只能有抽象方法
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽像類(abstractclass),它用于
要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)
該類的情況。不能創(chuàng)建abstract類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是
一個(gè)抽像類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜
態(tài)方法。Abstract類的子類為它們父類中的所有抽像方法提供實(shí)現(xiàn),否則它們
也是抽像類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在
類中實(shí)現(xiàn)這些方法。
接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼
承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒有一個(gè)
有程序體。接口只可以定義staticfinal成員變量。接口的實(shí)現(xiàn)與子類相似,除
了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將
程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何
對像上調(diào)用接口的方法。由于有抽像類,它允許使用接口名作為引用變量的類
型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,
instanceof運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。
2.3匿名類、內(nèi)部類、匿名內(nèi)部類
在一個(gè)類中定義另外一個(gè)類,這個(gè)類就叫做內(nèi)部類或內(nèi)置類(innerclass)。
內(nèi)部類分為成員內(nèi)部類、靜態(tài)嵌套類、方法內(nèi)部類、匿名內(nèi)部類。
內(nèi)部類仍然是一個(gè)獨(dú)立的類,在編譯之后會(huì)內(nèi)部類會(huì)被編譯成獨(dú)立的.class
文件,但是前面冠以外部類的類命和$符號。內(nèi)部類不能用普通的方式訪問。內(nèi)
部類是外部類的一個(gè)成員,因此內(nèi)部類可以自由地訪問外部類的成員變量,無
論是否是private的。
我們?yōu)槭裁词褂脙?nèi)部類?
A、在內(nèi)部類(innerclass)中,可以隨意的訪問外部類的成員,這可以讓
我們更好地組織管理我們的代碼,增強(qiáng)代碼的可讀性.
B、內(nèi)部類可以用于創(chuàng)建適配器類,適配器類是用于實(shí)現(xiàn)接口的類。使用
內(nèi)部類來實(shí)現(xiàn)接口,可以更好地定位與接口關(guān)聯(lián)的方法在代碼中的位置。
C、內(nèi)部類的更多用法(匿名innerclass實(shí)現(xiàn)一■個(gè)接口,不過切記最后那個(gè)
分號;實(shí)現(xiàn)繼承和接口實(shí)現(xiàn)時(shí)出現(xiàn)同名方法的問題;實(shí)現(xiàn)多重繼承的功能)
2.4反射
這種動(dòng)態(tài)的獲取信息及動(dòng)態(tài)調(diào)用方法的機(jī)制在Java中稱為“反射”
(reflection)<>
Reflection是Java被視為動(dòng)態(tài)(或準(zhǔn)動(dòng)態(tài))語言的一個(gè)關(guān)鍵性質(zhì)。
在JDK中,主要由以下類來實(shí)現(xiàn)Java反射機(jī)制,這些類都位于
java.lang.reflect包中:
Class類:代表一個(gè)類;
Field類:代表類的成員變量(成員變量也稱為類的屬性);
Method類:代表類的方法;
Constructor類:代表類的構(gòu)造方法;
Array類:提供了動(dòng)態(tài)創(chuàng)建數(shù)組,以及訪問數(shù)組的元素的靜態(tài)方法;
在java.lang.Object類中定義了getClass。方法,因此對于任意一個(gè)Java對
象,都可以通過此方法獲得對象的類型。Class類是ReflectionAPI中的核心
類,它有以下方法:
getName():獲得類的完整名字;
getFields():獲得類的public類型的屬性(包括繼承的類的public屬性);
getDeclaredFields():獲得類的所有屬性;
getMethods():獲得類的public類型的方法;(包括繼承的類的public方
法);
getDeclaredMethods():獲得類的所有方法;
getMethod(Stringname,Class[]parameterTypes):獲得類的特定方法,name
參數(shù)指定方法的名字,parameterTypes參數(shù)指定方法的參數(shù)類型;
getConstructors():獲得類的public類型的構(gòu)造方法;
getConstructor(Class[]parameterTypes):獲得類的特定構(gòu)造方法,
parameterTypes參數(shù)指定構(gòu)造方法的參數(shù)類型;
newlnstance():通過類的不帶參數(shù)的構(gòu)造方法創(chuàng)建這個(gè)類的一個(gè)對象;
通過默認(rèn)構(gòu)造方法創(chuàng)建一個(gè)新對象:
ObjectobjectCopy=classType.getConstructor(newClass[]{}),newlnstance(new
Object[]{});
以上代碼先調(diào)用Class類的getConstructor。方法獲得-一個(gè)Constructor對象,
它代表默認(rèn)的構(gòu)造方法,然后調(diào)用Constructor對象的newlnstance。方法構(gòu)造一
個(gè)實(shí)例。
獲得對象的所有屬性:
Fieldfields[l=classType.getDeclaredFields();
Class類的getDeclaredFields。方法返回類的所有屬性,包括public>
protected、默認(rèn)和private訪問級別的屬性。
Java允許我們從多種途徑為一個(gè)class生成對應(yīng)的Classobject
(一)運(yùn)用getClass。方法
(二)運(yùn)用Class.getSuperclass。方法
(三)運(yùn)用靜態(tài)方法Class.forName(),這個(gè)最常用
(四)運(yùn)用.class語法
(五)運(yùn)用原始包裝類的TYPE方法
2.5淺復(fù)制和深復(fù)制
淺負(fù)責(zé)也叫淺克隆,深復(fù)制也叫深克隆。
克隆一般通過實(shí)現(xiàn)Cloneable中的clone方法來實(shí)現(xiàn)淺克隆和深克隆,但是
深克隆有一個(gè)問題,如果引用對象有很多,或者說引用套引用很多重,那么太
麻煩了。
業(yè)界常用的方法是使用串行化然后反串行化的方法來實(shí)現(xiàn)深克隆。由于串
行化后,對象寫到流中,所有引用的對象都包含進(jìn)來了,所以反串行化后,等
于生成了一個(gè)完全克隆的對象。絕!這個(gè)方法的要求是對象(包括被引用對象)
必須事先了Serializable接口,否則就要用transient關(guān)鍵字將其排除在復(fù)制過程
中。
3、UML相關(guān)知識
3.1軟件工程的生命周期
3.1.1軟件工程的生命周期
需求捕獲、系統(tǒng)分析與設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)、測試、維護(hù)
3.2.UML(UnifiedModelingLanguage)概述
3.3UML組成
視圖(View)是一個(gè)或多個(gè)圖組成的對系統(tǒng)某個(gè)角度的抽象
圖(Diagram)是模型元素集的圖形表示
模型元素(ModelElement)代表面向?qū)ο笾械念?、對象、接口、消息和關(guān)系的概念
通用機(jī)制(GeneralMechanism)用于表示其他信息,如注釋、模型元素的語義等
3.4視圖
視圖由圖組成,UML提供9種不同的視圖,其中視圖的包括
用例視圖(強(qiáng)調(diào)系統(tǒng)功能)也稱用戶模型視圖
用例圖
邏輯視圖(展現(xiàn)系統(tǒng)的靜態(tài)或結(jié)構(gòu)組成特征)也稱為結(jié)構(gòu)模型視圖或靜態(tài)視圖
類圖、對象圖
并發(fā)視圖(體現(xiàn)系統(tǒng)的動(dòng)態(tài)或行為特征)也稱為行為模型視圖或動(dòng)態(tài)視圖
時(shí)序圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖
組件視圖(體現(xiàn)系統(tǒng)實(shí)現(xiàn)的結(jié)構(gòu)和行為特征)也成為實(shí)現(xiàn)模型視圖
組件圖
配置視圖(體現(xiàn)系統(tǒng)實(shí)現(xiàn)的環(huán)境的結(jié)構(gòu)和行為特征)也稱環(huán)境模型視圖或物理視圖
配置圖
3.5靜態(tài)建模機(jī)制和動(dòng)態(tài)建模機(jī)制
UML內(nèi)容歸納為2大類:靜態(tài)建模機(jī)制和動(dòng)態(tài)建模機(jī)制
靜態(tài)建模機(jī)制包括用例圖、類圖、對象圖、組件圖、配置圖、包等
動(dòng)態(tài)建模機(jī)制包括時(shí)序圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖、消息等
3.6UML用來描述模型內(nèi)容的有3種:事物、關(guān)系、圖(靜
態(tài)視圖和動(dòng)態(tài)視圖)
主要說說事物和關(guān)系
事物包括如下
結(jié)構(gòu)事物:用例(橢圓)、類(矩形)、接口(圓心)、協(xié)作(虛橢圓)、活動(dòng)類(粗線矩
形)、組件、節(jié)點(diǎn)(資源:電腦)
行為事物:交互(通常畫成帶箭頭的信息)、狀態(tài)機(jī)(對象的一個(gè)或多個(gè)狀態(tài)的集合)
組織事物:包
輔助事物:注釋
關(guān)系:關(guān)聯(lián)、依賴、泛化、實(shí)現(xiàn)
3.7類與類關(guān)系
類(矩形:名稱、屬性、操作、職責(zé))
其中表示+、-、#是public、private>protected
關(guān)系
依賴(有方向的虛線):使用依賴、抽象依賴、授權(quán)依賴、綁定依賴
泛化(父類和子類的關(guān)系):描述了類之間的“isakindof”的關(guān)系,用子類指向父類
的空心三角形箭頭(實(shí)線)表示該關(guān)系。泛
化使得多態(tài)成為可能。
關(guān)聯(lián):描述一組具有相同結(jié)構(gòu)特征、行為特征、關(guān)系和語義的鏈接。
關(guān)聯(lián)的修飾有:名稱(描述關(guān)系的性質(zhì))、角色(職責(zé))、多重性(O..n)、聚合(整體和
部分,即hasa的關(guān)系)、
組合(是更強(qiáng)的關(guān)系,是另外一種聚合,整體有管理部分特有的職責(zé)并且有一致的生命
周期)等。
實(shí)現(xiàn):實(shí)現(xiàn)規(guī)格說明和其實(shí)現(xiàn)間的關(guān)系。它表示不繼承結(jié)構(gòu)而只繼承行為。大多數(shù)情
況下,實(shí)現(xiàn)關(guān)系用來規(guī)定接口和實(shí)現(xiàn)接口的類或
組件之間的關(guān)系。(帶空心的箭頭表示,線是虛線)
3.8類圖
描述類、接口、協(xié)作以及它們之間關(guān)系的圖。
類圖包括7個(gè)元素:類、接口、協(xié)作、依賴關(guān)系、泛化關(guān)系、實(shí)現(xiàn)關(guān)系以及關(guān)聯(lián)關(guān)系
類圖的作用:對系統(tǒng)的詞匯建模、對簡單的協(xié)作建模、對邏輯數(shù)據(jù)庫模式建模
3.9對象圖
表示某一刻一組對象以及它們之間關(guān)系的圖
3.10包圖(略)
3.11用例視圖
用例(UseCase):對一個(gè)系統(tǒng)或一個(gè)應(yīng)用的一種單一的使用方式所作的描述。
參與者(Actor):系統(tǒng)外部的一個(gè)實(shí)體(可以說任何事物或人)
參與者之間的關(guān)系(泛化關(guān)系、包含關(guān)系、擴(kuò)展關(guān)系)
導(dǎo)出割按0知
?extend*
genecaHzaaon:
泛化?相當(dāng)于復(fù)承.如
子連聞里承了父查西?
extend:
?extend*幕用保星一個(gè)SS?的用
M.即使沒有子用■的
參號.也可以完成一個(gè)
起的功雷.如3出劑
理通知如*了查看室接
喙
Include:
基用例界車一個(gè)完整的
MM?斯llinciude美系
中的摹用例處筑和不用
<extend*力一起使用才W元建.
子用便也仍然被推行.
加發(fā)布包含了放您分
發(fā)布木曜通知
創(chuàng)建洌震厘如:extend:
?lndude?
?include?
4z
<indude?
其它業(yè)務(wù)用一
L
JMS*WebServite8UK
分發(fā)
312時(shí)序圖
描述對象之間傳遞消息的時(shí)間順序,他用來表示用例中的行為順序,是強(qiáng)調(diào)消息時(shí)間的
交互圖
包括4個(gè)元素:對象、生命線、激活、消息
3.13協(xié)作圖
強(qiáng)調(diào)參與交互的各對象結(jié)構(gòu)的信息。協(xié)作圖是一種類圖。
協(xié)作圖中包含3個(gè)元素:對象、鏈、消息。
如圖:
3.14狀態(tài)圖
通過類對象的生命周期建立模型來描述對象隨時(shí)間變化的動(dòng)態(tài)行為。
它包括:狀態(tài)和轉(zhuǎn)換
注意:初始狀態(tài):實(shí)圓心、終止?fàn)顟B(tài):半實(shí)圓心。
狀態(tài)機(jī)、狀態(tài)、轉(zhuǎn)化
其中狀態(tài)包括:名字、入口/出口動(dòng)作、內(nèi)部轉(zhuǎn)換、延遲事件、子狀態(tài)。
轉(zhuǎn)換包括:源狀態(tài)、目標(biāo)狀態(tài)、出發(fā)事件、監(jiān)護(hù)條件、動(dòng)作
______[退訂數(shù)=-預(yù)訂數(shù)]—
3.15活動(dòng)圖
描述一個(gè)過程或操作的步驟。描述狀態(tài)外,更突出活動(dòng)
動(dòng)作狀態(tài)、活動(dòng)狀態(tài)、動(dòng)作流、分支、分叉和匯合、泳道、對象流。
活動(dòng)狀態(tài)
3.16組件圖
描述軟件組件及組件之間的關(guān)系。
包括:組件、接口、關(guān)系(依賴、泛化、關(guān)聯(lián)、實(shí)現(xiàn))。
圖12*1粗件圖
3.17配置圖
顯示軟件系統(tǒng)運(yùn)行的物理硬件。
包括節(jié)點(diǎn)(單個(gè)物理對象)、組件和關(guān)系(依賴和關(guān)聯(lián))
Ofioywr*Vi?w/
N?m?D*pl?ym?ntVi?w
D*ploym?ntVi?w
V?KiOA1.0
4、熟悉LINUX
(略)
5、SSH框架的配置及相關(guān)知識
5.1MVC
5.1.1簡介
MVC模式的目的就是實(shí)現(xiàn)Web系統(tǒng)的職能分工。Model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)
邏輯,通??梢杂肑avaBean或EJB來實(shí)現(xiàn)。View層用于與用戶的交互,通常
用JSP來實(shí)現(xiàn)。Controller層是Model與View之間溝通的橋梁,它可以分派
用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示,同時(shí)它也可以解釋用戶的輸入并將它
們映射為模型層可執(zhí)行的操作。
5.1.2MVC的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):低耦合、高可復(fù)用性和可適用性、較低的生命周期成本、快速部署、可維護(hù)性、
有利于軟件工程化管理。
缺點(diǎn):原理較復(fù)雜花費(fèi)時(shí)間思考、程序分成三個(gè)部分需要管理更多的文件。
5.1.3MVC的現(xiàn)有框架
Struts:Apache的,最流行的MVC組件
Struts2:Apache用Struts和WebWork的組合出來的新產(chǎn)品,目前上升勢頭強(qiáng)勁
WebWork:這個(gè)可是老牌的MVC組件,后來組合成了Struts2,不過自身仍在發(fā)展
SpringMVC:SpringFramework自己整合自己Spring的優(yōu)勢推出的MVC組件,用戶也
不少。
JSF:這個(gè)是一個(gè)規(guī)范,Sun的和Apache的都有各自的實(shí)現(xiàn)。用戶量很大,被眾多IDE
支持。
5.1.4Modell和Modell
Modell是將業(yè)務(wù)、控制、視圖都放在jsp頁面、Model2是由業(yè)務(wù)(javaBean)、控制
(ActionServlet)^視圖(Jsp)組成。
5.2三個(gè)框架的作用
5.2.1Struts
簡介
Struts2是Struts的下一代產(chǎn)品,是在struts和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全
新的Struts2框架。其全新的Struts2的體系結(jié)構(gòu)與Struts1的體系結(jié)構(gòu)的差別巨大。Struts2
以WebWork為核心,采用攔截器的機(jī)制來處理用戶的請求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控
制器能夠與ServletAPI完全脫離開,所以Struts2可以理解為WebWork的更新產(chǎn)品。雖然
從Struts1到Struts2有著太大的變化,但是相對于WebWork,Struts2只有很小的變化。
目的:是為了幫助我們減少在運(yùn)用MVC設(shè)計(jì)模型來開發(fā)Web應(yīng)用的時(shí)間。
Struts2的體系與Struts1體系的差別非常大,因?yàn)镾truts?使用了WebWork的設(shè)計(jì)核心,
而不是Strutsl的設(shè)計(jì)核心。Struts2中大量使用攔截器來處理用戶的請求,從而允許用戶的
業(yè)務(wù)邏輯控制器與ServletAPI分離。
Struts2框架的大概處理流程如下:
1、加載類(FilterDispatcher)
2、讀取配置(struts配置文件中的Action)
3、派發(fā)請求(客戶端發(fā)送請求)
4、調(diào)用Action(FilterDispatcher從struts配置文件中讀取與之相對應(yīng)的Action)
5、啟用攔截器(WebWork攔截器鏈自動(dòng)對請求應(yīng)用通用功能,如驗(yàn)證)
6、處理業(yè)務(wù)(回調(diào)Action的execute。方法)
7、返回響應(yīng)(通過execute方法將信息返回到FilterDispatcher)
8、查找響應(yīng)(FilterDispatcher根據(jù)配置查找響應(yīng)的是什么信息如:SUCCESS、ERROER,
將跳轉(zhuǎn)到哪個(gè)jsp頁面)
9、響應(yīng)用戶(jsp-->客戶瀏覽器端顯示)
10、struts2標(biāo)簽庫(相比strutsl的標(biāo)簽庫,struts2是大大加強(qiáng)了,對數(shù)據(jù)的操作功能很
強(qiáng)大)。
Struts2和Strutsl的對比
在Action的實(shí)現(xiàn)方面:Strutsl要求必須統(tǒng)一擴(kuò)展自Action類,而Struls2中可以是一個(gè)
普通的POJOo
線程模型方面:Strutsl的Action工作在單例模式,一個(gè)Action的實(shí)例處理所有的請求。
Struts2的Action是一個(gè)請求對應(yīng)一個(gè)實(shí)例。沒有線程安全方面的問題。
Servlet依賴方面:Struts1的Action依賴于ServletAPL比如Action的execute方法的參
數(shù)就包括requestresponse對象。這使程序難于測試。Struts2中的Action不再依賴于Servlet
API,有利于測試,并且實(shí)現(xiàn)TDD。
封裝請求參數(shù):Strutsl中強(qiáng)制使用ActionForm對象封裝請求的參數(shù)。Struts2可以選擇
使用POJO類來封裝請求的參數(shù),或者直接使用Action的屬性。
表達(dá)式語言方面:Strutsl中整合了EL,但是EL對集合和索引的支持不強(qiáng),Struts2整
合了OGNL(ObjectGraphNavigationLanguage)(,
綁定值到視圖技術(shù):Strutsl使用標(biāo)準(zhǔn)的JSP,Struts2使用“ValueStack”技術(shù)。
參見文檔:http:〃/freeman1984/archive/2011/02/16/344447.html
類型轉(zhuǎn)換:Struts1中的ActionForm基本使用String類型的屬性。Struts2中使用OGNL
進(jìn)行轉(zhuǎn)換,可以更方便的使用。
數(shù)據(jù)校驗(yàn):Struts!中支持覆蓋validate方法或者使用Validator框架。Struts?支持重寫
validate方法或者使用XWork的驗(yàn)證框架。
Action執(zhí)行控制的對比:Struts1支持每一個(gè)模塊對應(yīng)一個(gè)請求處理,但是模塊中的所有
Action必須共享相同的生命周期。Struts?支持通過攔截器堆棧為每一個(gè)Action創(chuàng)建不同的
生命周期。
5.2.2Hibernate
5.2.3Spring
5.3如何集成三個(gè)框架
6、設(shè)計(jì)模式
6.1設(shè)計(jì)模式的目的
設(shè)計(jì)模式(Designpattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過
分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為「可重用代碼、讓代
碼更容易被他人理解、保證代碼可靠性、可維護(hù)性。毫無疑問,設(shè)計(jì)模式
于己于他人于系統(tǒng)都是多贏的,設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式
是軟件工程的基石,如同大廈的一塊塊磚石一樣。
6.2設(shè)計(jì)模式的原則
6.2.1開閉原則
開閉原則(對擴(kuò)展開放,對修改關(guān)閉)
如簡單工廠模式,只要再創(chuàng)建一個(gè)子類就可以了,然后在工廠的方法中
返回一個(gè)新的子類對象就可以了。
6.2.2里氏替換原則
里氏替換原則(任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn))
如果調(diào)用的是父類的話,那么換成子類也完全可以運(yùn)行。Java編譯程序
會(huì)檢查程序是否符合里氏代換原則。還記得java繼承的一個(gè)原則嗎?子類
override方法的訪問權(quán)限不能小于父類對應(yīng)方法的訪問權(quán)限??梢哉f:里氏
代換原則是繼承復(fù)用的一個(gè)基礎(chǔ)。
6.2.3合成復(fù)用原則
合成復(fù)用原則(少用繼承,多用合成/聚合)
在面向?qū)ο蟮脑O(shè)計(jì)里,有兩種基本的辦法可以在不同的環(huán)境中復(fù)用已有
的設(shè)計(jì)和實(shí)現(xiàn),即通過合成/聚合或通過繼承。
合成/聚合復(fù)用.
優(yōu)點(diǎn):支持包裝、黑箱復(fù)用看不見內(nèi)部的細(xì)節(jié)。依賴較少。這種復(fù)用可
以在運(yùn)行時(shí)間內(nèi)動(dòng)態(tài)進(jìn)行,新對象可以動(dòng)態(tài)地引用與成分對象類型相同的對
象。
缺點(diǎn):是通過使用這種復(fù)用建造的系統(tǒng)會(huì)有較多的對象需要管理
繼承復(fù)用:
優(yōu)點(diǎn):新的實(shí)現(xiàn)較為容易,因?yàn)槌惖拇蟛糠止δ芏伎梢酝ㄟ^繼承關(guān)系
自動(dòng)進(jìn)入子類,修改或擴(kuò)展繼承而來的實(shí)現(xiàn)較為容易。
缺點(diǎn):繼承復(fù)用破壞包裝,因?yàn)槔^承將超類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類。因
為超類的內(nèi)部細(xì)節(jié)常常是對子類透明的,因此這種復(fù)用是透明的復(fù)用,又稱
“白箱”復(fù)用。如果超類的實(shí)現(xiàn)發(fā)生改變,那么子類的實(shí)現(xiàn)也不得不發(fā)生改
變。從超類忌辰而來的實(shí)現(xiàn)是靜態(tài)的,不可能在運(yùn)行時(shí)間內(nèi)發(fā)生改變,因此
沒有足夠的靈活性。
一般來說,對違反里氏代換原則的設(shè)計(jì)進(jìn)行重構(gòu)時(shí),可以采取兩種辦法:
一是加入一個(gè)抽象超類;二是將繼承關(guān)系改寫為合成/聚合關(guān)系。
“IS-A”是嚴(yán)格的分類學(xué)意義上的定義,意思是一個(gè)類是另一個(gè)類的
“一種”。而“HAS-A”則不同,它表示某一個(gè)角色具有某一項(xiàng)責(zé)任。
6.2.4依賴倒置原則
依賴倒置原則(抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象)
要針對接口編程,而不是針對實(shí)現(xiàn)編程。
傳遞參數(shù),或者在組合聚合關(guān)系中,盡量引用層次高的類。
主要是在構(gòu)造對象時(shí)可以動(dòng)態(tài)的創(chuàng)建各種具體對象,當(dāng)然如果一些具體
類比較穩(wěn)定,就不必在弄一個(gè)抽象類做它的父類,這樣有畫蛇添足的感覺。
6.2.5接口隔離原則
接口隔離原則(使用多個(gè)專門的接口比使用單一的總接口要好)
一個(gè)類對另外一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小的接口上的。
一個(gè)接口代表一個(gè)角色,不應(yīng)當(dāng)將不同的角色都交給一個(gè)接口。沒有關(guān)
系的接口合并在一起,形成一個(gè)臃腫的大接口,這是對角色和接口的污染。
“不應(yīng)該強(qiáng)迫客戶依賴于它們不用的方法。接口屬于客戶,不屬于它所
在的類層次結(jié)構(gòu)?!边@個(gè)說得很明白了,再通俗點(diǎn)說,不要強(qiáng)迫客戶使用它
們不用的方法,如果強(qiáng)迫用戶使用它們不使用的方法,那么這些客戶就會(huì)面
臨由于這些不使用的方法的改變所帶來的改變。
6.2.6迪米特原則
迪米特原則(最少知識原則。不要和陌生人說話)
迪米特法則的各種表述
①只與你直接的朋友們通信;
②不要跟“陌生人”說話;
③每一個(gè)軟件單位對其他的單位都只有最少的知識,而且局限于那些與本
單位密切相關(guān)的軟件單位。
狹義的迪米特法則
☆如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互
作用。如果其中的一個(gè)類需要調(diào)用另外一個(gè)類的某一個(gè)方法,可以通過第三
者轉(zhuǎn)發(fā)這個(gè)調(diào)用。
FriendAbstractran?er
_stranger:AbstractStranger正叩eratjon3:voia
+operation2:void
+provide:AbstractStrangerX
Stranger
+operation3:void
在系統(tǒng)里造出大量的小方法,這些方法僅僅是傳遞間接的調(diào)用,與系統(tǒng)
的商務(wù)邏輯無關(guān)。
遵循類之間的迪米特法則會(huì)是一個(gè)系統(tǒng)的局部設(shè)計(jì)簡化,因?yàn)槊恳粋€(gè)局
部都不會(huì)和遠(yuǎn)距離的對象有直接的關(guān)聯(lián)。但是,這也會(huì)造成系統(tǒng)的不同模塊
之間的通信效率降低,也會(huì)使系統(tǒng)的不同模塊之間不容易協(xié)調(diào)。
門面模式和調(diào)停者模式實(shí)際上就是迪米特法則的應(yīng)用。
廣義的迪米特法則在類的設(shè)計(jì)上的體現(xiàn):
優(yōu)先考慮將一個(gè)類設(shè)置成不變類。
盡量降低一個(gè)類的訪問權(quán)限。
謹(jǐn)慎使用Serializable。
盡量降低成員的訪問權(quán)限。
注意:在進(jìn)行設(shè)計(jì)的時(shí)候,我們盡量從抽象類繼承,而不是從具體類繼承。
如果從繼承等級樹來看,所有葉子節(jié)點(diǎn)應(yīng)當(dāng)是具體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雞西市重點(diǎn)中學(xué)2025屆校高三第五次月考物理試題含解析
- 南開大學(xué)濱海學(xué)院《體育休閑娛樂導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 工程質(zhì)量控制中的風(fēng)險(xiǎn)識別與應(yīng)對策略
- 第8課 北宋的政治 教案2024-2025學(xué)年七年級歷史下冊新課標(biāo)
- 白領(lǐng)上班背包使用習(xí)慣問卷
- 金灣區(qū)溫室大棚施工方案
- 襄陽移動(dòng)木屋施工方案
- 燃燒器改造施工方案
- 噴灰漆施工方案
- 臨時(shí)用戶供電施工方案
- 生物質(zhì)燃料的資源開發(fā)與利用
- 《積極心理學(xué)》課件
- 食管胃底靜脈曲張出血的診治指南解讀
- 急性農(nóng)藥中毒護(hù)理查房
- 2024-2025北京高考英語作文及范文匯編
- 2024年八年級語文下冊《經(jīng)典常談》第一章《說文解字》練習(xí)題卷附答案
- 特殊環(huán)境焊接防護(hù)技術(shù)
- 通用電子嘉賓禮薄
- 學(xué)校輔導(dǎo)員安全培訓(xùn)課件
- 太陽能熱水器原理與應(yīng)用
- 左拇指近節(jié)指骨骨折護(hù)理查房課件
評論
0/150
提交評論