IT技術(shù)人員面試基礎(chǔ)知識結(jié)合_第1頁
IT技術(shù)人員面試基礎(chǔ)知識結(jié)合_第2頁
IT技術(shù)人員面試基礎(chǔ)知識結(jié)合_第3頁
IT技術(shù)人員面試基礎(chǔ)知識結(jié)合_第4頁
IT技術(shù)人員面試基礎(chǔ)知識結(jié)合_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論