2023年Java基礎(chǔ)知識(shí)及面試題_第1頁(yè)
2023年Java基礎(chǔ)知識(shí)及面試題_第2頁(yè)
2023年Java基礎(chǔ)知識(shí)及面試題_第3頁(yè)
2023年Java基礎(chǔ)知識(shí)及面試題_第4頁(yè)
2023年Java基礎(chǔ)知識(shí)及面試題_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java基礎(chǔ)

1.什么是類(lèi)?類(lèi)是某一種事物的一般性的集合體,是相同的或相似的各個(gè)事物共同特性的一種抽象。

2.什么是對(duì)象?在面向?qū)ο蟾拍钪?,?duì)象是類(lèi)的實(shí)例。對(duì)象與類(lèi)的關(guān)系就像變量與數(shù)據(jù)類(lèi)型的關(guān)系同樣。

3.類(lèi)的核心特性

封裝性:類(lèi)的封裝性為類(lèi)的成員提供公有的、缺省的、保護(hù)的、私有的等多級(jí)訪問(wèn)權(quán)限。目的是隱藏類(lèi)中的私有變量和類(lèi)

中方法的實(shí)現(xiàn)細(xì)節(jié)。

繼承性:類(lèi)的繼承性提供從已存在的類(lèi)創(chuàng)建新類(lèi)的機(jī)制,繼承使一個(gè)新類(lèi)自動(dòng)擁有被繼承類(lèi)的所有可繼承的成員。

多態(tài)性:類(lèi)的多態(tài)性提供類(lèi)中方法執(zhí)行的多樣性,有兩種表現(xiàn)形式:重載和覆蓋。

4.方法:對(duì)象中方法表達(dá)了對(duì)象所具有的行為。

5.屬性:一個(gè)對(duì)象的屬性是可以被外界或?qū)ο笏幍沫h(huán)境所感知或操縱的數(shù)據(jù)或狀態(tài)。

6.什么是Java?Java是一門(mén)易于編程的跨平臺(tái)編程語(yǔ)言,同時(shí)又是一個(gè)開(kāi)發(fā)、應(yīng)用、執(zhí)行和部署的平臺(tái)。

7.為什么要有Java?Java與平臺(tái)無(wú)關(guān)、一次編譯處處運(yùn)營(yíng)、以及他的易于編程的特性。

8.Java開(kāi)發(fā)程序的環(huán)節(jié)?編寫(xiě)源代碼(2)編譯(3)執(zhí)行

9.Java的環(huán)境變量

1)JAVA-HOMEjdk的安裝途徑

2)CLASSPATHjvm轉(zhuǎn)載class字節(jié)碼文獻(xiàn)時(shí)的搜索途徑

3)PATH是系統(tǒng)的環(huán)境變量、命令的搜索途徑

10.JVM:JavaVirtualMachine是一個(gè)邏輯的操作系統(tǒng)、它屏蔽了硬件和平臺(tái)的信息、jvm能將字節(jié)碼文獻(xiàn)解釋并執(zhí)行、

正是這種獨(dú)立執(zhí)行的方式是Java具有與平臺(tái)無(wú)關(guān)的特性。

11.類(lèi)的加載過(guò)程:類(lèi)加載器加載字節(jié)碼文獻(xiàn)到內(nèi)存、jvm內(nèi)存數(shù)據(jù)區(qū)將對(duì)象狀態(tài)放置在堆區(qū)、各線(xiàn)程使用的變量放在棧區(qū)、

類(lèi)的特性放在方法區(qū)、然后進(jìn)行字節(jié)碼驗(yàn)證再執(zhí)行。

12.常用的Java命令:Javac、java、javadoc、jar

13.類(lèi)的語(yǔ)法與規(guī)范

一個(gè)源文獻(xiàn)只能有一個(gè)public的類(lèi)

Public源文獻(xiàn)可以有多個(gè)類(lèi)定義

源文獻(xiàn)名必須與public類(lèi)名保持一致

包名必須放在第行

包名可以有0個(gè)或1個(gè)但不能有多個(gè)

源文獻(xiàn)假如帶包的話(huà)最佳存放在包結(jié)構(gòu)相應(yīng)的目錄下

標(biāo)記符程序語(yǔ)言用于標(biāo)記變量名類(lèi)名方法名的字符串就是標(biāo)記符。

標(biāo)記符必須字母下劃線(xiàn)美元符開(kāi)頭大小寫(xiě)敏感。

類(lèi)名規(guī)定首字母大寫(xiě)

方法名首字母小寫(xiě)每個(gè)單詞首字母大寫(xiě)

常量名所有字母大寫(xiě)假如有兩個(gè)或幾個(gè)字母的聯(lián)合用下劃線(xiàn)連接

關(guān)鍵字:程序語(yǔ)言中、程序已經(jīng)所有用戶(hù)不能再使用的單詞一般關(guān)鍵字都是小寫(xiě)

14.數(shù)據(jù)類(lèi)型:基本數(shù)據(jù)類(lèi)型:整型(byte、short,int>long)默認(rèn)是int

浮點(diǎn)型(float、double)、默認(rèn)是double

布爾型(boolean)

字符型(char)

引用類(lèi)型:類(lèi)、接口、數(shù)組

15.main<)方法執(zhí)行過(guò)程

1)先到方法區(qū)搜索student、假如搜索不到則去加載student的字節(jié)碼文獻(xiàn)

2)通過(guò)classpath查找相應(yīng)的sludent字節(jié)碼文獻(xiàn)找不到就返回錯(cuò)誤(ClassNotFound)

3)將字節(jié)碼文獻(xiàn)的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為class對(duì)象放置于方法區(qū)(class對(duì)象描述了student類(lèi)的方法特性及靜態(tài)成員等)

加載完畢

4)驗(yàn)證字節(jié)碼文獻(xiàn)

5)在堆區(qū)中劃分空間放置student對(duì)象

6)在棧區(qū)放置應(yīng)用類(lèi)型變量stu、stu指向student對(duì)象的地址

7)student對(duì)象存放了class對(duì)象的地址

8)通過(guò)studentstu引用類(lèi)型變量的值找到student對(duì)象、通過(guò)student對(duì)象

存放class對(duì)象的地址找到相應(yīng)的study()方法然后執(zhí)行。

9)釋放資源jvm運(yùn)營(yíng)結(jié)束

16.基本類(lèi)型和引用類(lèi)型的區(qū)別

引用類(lèi)型存放的是對(duì)象的地址、基本類(lèi)型存放的是變量的實(shí)際值

引用類(lèi)型變量可用指向復(fù)雜的數(shù)據(jù)結(jié)構(gòu)

引用類(lèi)型變量可使用”操作來(lái)訪問(wèn)它所指向的方法或?qū)傩?/p>

17.表達(dá)式

運(yùn)算符和操作數(shù)按照一定的規(guī)則組成的語(yǔ)句.

賦值運(yùn)算符

比較運(yùn)算符">”“<="“>=”

相等運(yùn)算符“=="

位運(yùn)算符~:取反、.:異或、|:或、&:與

邏輯運(yùn)算符“&&”“II”

條件運(yùn)算符a?b:c

18.變量的作用域

(1)類(lèi)的成員變量:

靜態(tài)成員變量:生命周期從類(lèi)加載開(kāi)始到類(lèi)被卸載結(jié)束初始化后被放在方法區(qū)

實(shí)例成員變量:變量初始化放在堆區(qū)、生命周期從生成對(duì)象開(kāi)始到對(duì)象被I回收時(shí)結(jié)束

(2)局部變量:方法或代碼塊中定義的變量、局部變量從棧區(qū)彈出結(jié)束、局部變量在使用前必須初始化

(3)方法的參數(shù)

(4)異常的參數(shù)

19.數(shù)組:是相同類(lèi)型元素的線(xiàn)性集合是一個(gè)指向數(shù)組的引用對(duì)象

20.集合框架

CollectjonIMap

△K

TreeMap

A△

UnkedHashMap

I|LinkedList|jHashSet|

Utilities

Cdlecticns

UnkedHashSet

Arrays

Comparable—Comparator

Iterator是一個(gè)迭代器接口

ListIterator繼承自Iterator是子接口只能用于1ist接口

Collection是集合框架的頂層接口

List有序可反復(fù)

ArrayList實(shí)現(xiàn)了可變數(shù)組的數(shù)據(jù)結(jié)構(gòu)

LinkedList實(shí)現(xiàn)了雙向鏈表的數(shù)據(jù)結(jié)構(gòu)

Set無(wú)序不可反復(fù)

HashSet實(shí)現(xiàn)了無(wú)序不可反復(fù)

LinkedHashSet有序不可反復(fù)(插入的順序)

TreeSet升序不可反復(fù)

Map是一個(gè)key、value對(duì)映射

HashMap按照key無(wú)序

LinkedHashMap按照key有序

TreeMap按照key升序

Collections是集合框架的輔助類(lèi)(工具類(lèi))里邊的所有方法都是static的

Arrays是對(duì)數(shù)組的工具類(lèi)

ComparableComparator是做比較排序的

21.Vector和ArrayList的區(qū)別:

1)Vector是線(xiàn)程安全的(同步的)ArrayList不是ArrayList的效率高一些

2)當(dāng)初始容量滿(mǎn)的時(shí)候Vecto「增長(zhǎng)本來(lái)的一倍、ArrayList增長(zhǎng)本來(lái)的一半

22.HashTable和HashMap的區(qū)別:

1)HashTable是線(xiàn)程安全HashMap不是HashMap的效率會(huì)高一些

2)HashMap允許null的key存在HashTable不允許

23.Setset=Map.keySet();

Iteratorit=set.iterator();

While(it.hasnext()){

24.類(lèi)的結(jié)構(gòu)

類(lèi)名、屬性名(靜態(tài)屬性、實(shí)例屬性)、方法(靜態(tài)方法、實(shí)例方法)、構(gòu)造器(缺省構(gòu)造器、帶參構(gòu)造器)

靜態(tài)代碼塊static、實(shí)例代碼塊this.

25.參數(shù)傳遞

對(duì)于基本類(lèi)型將實(shí)際的變量的值原樣的賦值以便傳值

對(duì)于引用類(lèi)型將引用類(lèi)型變量的地址賦值給實(shí)參

26.this關(guān)鍵字都在什么地方使用

1)實(shí)例變量與局部變量同名用this區(qū)分實(shí)例變量名與局部變量名

2)在構(gòu)造器重載時(shí)、用this調(diào)用其它構(gòu)造器

3)在實(shí)例方法中用來(lái)當(dāng)作當(dāng)前對(duì)象的引用傳給其它方法

27.方法的重載

方法名要相同、在同一類(lèi)中多個(gè)方法有不同的方法署名方法署名具有參數(shù)類(lèi)型參數(shù)個(gè)數(shù)和參數(shù)順序、返回類(lèi)型不做規(guī)定

28.類(lèi)的初始化過(guò)程

1)在堆區(qū)分派空間new的過(guò)程

2)給對(duì)象屬性賦默認(rèn)值

3)調(diào)用構(gòu)造方法進(jìn)一步賦值

29.構(gòu)造器

類(lèi)中提供的用于初始化對(duì)象的特殊的方法、這個(gè)方法于類(lèi)同名無(wú)返回值、類(lèi)中沒(méi)有提供構(gòu)造器jvm會(huì)提供一個(gè)不帶參的缺

省構(gòu)造器、類(lèi)中有帶參的構(gòu)造器jvm就不提供了

30.具體說(shuō)明封裝、繼承、和多態(tài)

封裝:將類(lèi)的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái)、對(duì)外提供一致的接口、提高系統(tǒng)的維護(hù)性

繼承:定義:一個(gè)類(lèi)自動(dòng)獲得另一個(gè)類(lèi)的屬性或者方法的過(guò)程

使用方面:extends關(guān)鍵字、單根繼承、所有類(lèi)都是Object類(lèi)的子類(lèi)、構(gòu)造器不能被繼承、子類(lèi)初始化時(shí)會(huì)默認(rèn)

情況下調(diào)用父類(lèi)缺省的構(gòu)造器、子類(lèi)調(diào)用父類(lèi)帶參的構(gòu)造器則父類(lèi)可以不提供缺省的構(gòu)造器否則一定要

有個(gè)缺省的構(gòu)造器

如何使用繼承?1)區(qū)分has-a和is-a

2)子類(lèi)要擴(kuò)充父類(lèi)的功能

3)子類(lèi)需要大量置換父類(lèi)的功能時(shí)不能使用繼承

4)不要從工具類(lèi)中繼承

優(yōu)缺陷:優(yōu)點(diǎn):繼承是最容易復(fù)用代碼的形式、修改父類(lèi)的功能時(shí)子類(lèi)可以自動(dòng)獲得新的功能

缺陷:打破了封裝、只是類(lèi)型復(fù)用

多態(tài):

編譯時(shí)編譯器檢查聲明類(lèi)型和方法信息

運(yùn)營(yíng)時(shí)jvm對(duì)實(shí)例方法和引用變量和實(shí)際引用對(duì)象動(dòng)態(tài)綁定,對(duì)靜態(tài)方法和引用變量聲明的類(lèi)型靜態(tài)綁定

類(lèi)的屬性在編譯階段綁定

31.instanceof:判斷實(shí)例是否為某個(gè)類(lèi)型或子類(lèi)型

(1)只能在父子類(lèi)進(jìn)行比較

(2)Null可以進(jìn)行比較結(jié)果為false

(3)判斷實(shí)例類(lèi)型時(shí),一般從子類(lèi)開(kāi)始,然后父類(lèi)

32.override:方法覆蓋。子類(lèi)重寫(xiě)父類(lèi)中的方法

子類(lèi)重寫(xiě)父類(lèi)中的方法的條件:

(1)方法名相同

(2)方法署名相同(參數(shù))

(3)返回值相同

(4)子類(lèi)的修飾符要大于等于父類(lèi)的修飾符

(5)子類(lèi)拋出的異常要小于等于父類(lèi)拋出的異常

33.依賴(lài)關(guān)系

(1)一個(gè)類(lèi)中的方法,其局部變量類(lèi)型是另一個(gè)類(lèi),則這兩個(gè)類(lèi)具有依賴(lài)關(guān)系

(2)一個(gè)類(lèi)中的方法調(diào)用另一個(gè)類(lèi)中的靜態(tài)方法,則這兩個(gè)類(lèi)具有依賴(lài)關(guān)系

(3)一個(gè)類(lèi)中的方法中參數(shù)是另一個(gè)類(lèi)的靜態(tài)方法,則這兩個(gè)類(lèi)具有依賴(lài)關(guān)系

34.多態(tài)的運(yùn)營(yíng)機(jī)制

(1)在類(lèi)編譯階段,編譯器會(huì)檢查類(lèi)型是否匹配

(2)在運(yùn)營(yíng)階段,jvm會(huì)調(diào)用實(shí)例的相應(yīng)方法,先檢查父類(lèi)方法,然后檢查子類(lèi)方法,然后會(huì)檢查實(shí)例聲明的類(lèi)型

35.Super

調(diào)用父類(lèi)的屬性和方法、子類(lèi)和父類(lèi)有同名的方法時(shí),子類(lèi)可用super區(qū)分是父類(lèi)的方法

36.final

(1)final修飾的類(lèi)不能被繼承

(2)final修飾的方法不能被覆蓋

(3)final修飾的變量是常量,常量不可修改但有例外

實(shí)例常量:若定義時(shí)沒(méi)有賦值,則可以在構(gòu)造器或?qū)嵗a塊中賦值,構(gòu)造器或者代碼塊賦值只能有一個(gè)

靜態(tài)常量:若定義時(shí)沒(méi)有賦值,則可以在靜態(tài)代碼塊中賦值,

37.抽象類(lèi)

具有部分實(shí)現(xiàn)的類(lèi)。

使用時(shí)的注意事項(xiàng):

(1)不能實(shí)例化

(2)可有0到多個(gè)抽象方法

(3)可有構(gòu)造器

(4)具體類(lèi)繼承抽象類(lèi)時(shí)必須實(shí)現(xiàn)所有的抽象方法

(5)抽象類(lèi)可以間接的被子類(lèi)調(diào)用其構(gòu)造器,并在內(nèi)存中分派空間,間接實(shí)例化

(6)抽象類(lèi)可以有靜態(tài)方法,可以返回其子類(lèi)的實(shí)例

如何使用抽象類(lèi)?

(1)把各個(gè)類(lèi)中可以共用的方法和邏輯放到抽象的父類(lèi)中,越多越好

(2)屬性應(yīng)盡也許放到子類(lèi)中

38.接口

定義:從宏觀角度說(shuō)是一個(gè)規(guī)范,從面向?qū)ο蠼嵌日f(shuō),接口是一種抽象類(lèi)型

(1)屬性是常量,一定要賦值

(2)方法是抽象方法

(3)沒(méi)有構(gòu)造器

(4)接口支持casting(強(qiáng)制類(lèi)型轉(zhuǎn)換)

(5)接口可以繼承自多個(gè)接口

(6)實(shí)現(xiàn)接口的類(lèi)必須要實(shí)現(xiàn)所有的方法,假如是抽象類(lèi)可以選擇實(shí)現(xiàn)部分的方法

為什么要使用接口?

(1)可插拔性的保證,可以隨意更換接口的實(shí)現(xiàn)類(lèi)

(2)接口可以解決多繼承的問(wèn)題

(3)接口使規(guī)范的制定者、實(shí)現(xiàn)者、使用者分開(kāi)

39.接口和抽象類(lèi)的區(qū)別

(1)接口沒(méi)有任何實(shí)現(xiàn),而抽象類(lèi)可以有部分實(shí)現(xiàn)也可以沒(méi)有

(2)假如需要復(fù)用或者共享代碼,應(yīng)當(dāng)用抽象類(lèi)而不是接口

(3)繼承無(wú)法解決的類(lèi)型轉(zhuǎn)換問(wèn)題,接口是為解決這問(wèn)題而產(chǎn)生的

40.訪問(wèn)控制

作用域當(dāng)前類(lèi)R-package子孫類(lèi)其他package

publicVVJJ

protectedVJJX

defaultJVXX

privateJXXX

41.static修飾符

(1)可以修飾屬性,稱(chēng)為靜態(tài)屬性,全類(lèi)公有常叫做類(lèi)變量,和具體對(duì)象無(wú)關(guān),無(wú)多態(tài),類(lèi)名去訪問(wèn),類(lèi)加載的時(shí)候

初始化

(2)修飾方法,靜態(tài)方法中只能訪問(wèn)靜態(tài)成員,非靜態(tài)方法可以訪問(wèn)靜態(tài)成員,工具類(lèi)的對(duì)象都是static的

(3)修飾代碼塊,初始代碼塊是在類(lèi)中,而不在任何方法之內(nèi)的代碼塊,被static修飾的代碼塊稱(chēng)為靜態(tài)代碼塊,

靜態(tài)代碼塊在類(lèi)加載的時(shí)候運(yùn)營(yíng)一次

42.異常

定義:jvm將程序運(yùn)營(yíng)中的不正常情況的現(xiàn)場(chǎng)信息打包成一個(gè)對(duì)象,這個(gè)對(duì)象就是異常類(lèi)對(duì)象。并且將此對(duì)象拋出,交由

相應(yīng)的方法或?qū)ο蠼鉀Q。

異常信息記錄了錯(cuò)誤的因素,指出了錯(cuò)誤的位置,打印錯(cuò)誤的棧信息。

異常解決機(jī)制是責(zé)任鏈機(jī)制即子類(lèi)取默認(rèn)值不解決,交由父類(lèi)解決直到追究到j(luò)vm然后拋給用戶(hù)

43.為什么解決異常?

最本質(zhì)的因素是讓程序執(zhí)行完畢

44.異常類(lèi)的層次結(jié)構(gòu)

Throwable:

Error:是錯(cuò)誤,程序運(yùn)營(yíng)中發(fā)生的系統(tǒng)異常,此種異常當(dāng)前程序一般無(wú)法解決

Exeption:checked()編譯器逼迫必須捕獲并解決的異常

Unchecked(RuntimeExeption>)

對(duì)于此種異常編譯器不規(guī)定捕獲

因素是:低檔錯(cuò)誤(low-grademistake)、程序員可以避免的錯(cuò)誤

當(dāng)錯(cuò)誤發(fā)生時(shí)、捕獲異常也無(wú)濟(jì)于事

45.如何解決異常

(1)交給自己解決、交由當(dāng)前方法解決

(2)交給別人解決、由調(diào)用該方法的方法來(lái)解決

(3)自己解決一部分、然后調(diào)用系統(tǒng)的異常方法

方法(2)的環(huán)節(jié):

(1)在方法后聲明也許發(fā)生的異常類(lèi)型(throwsExceptiontype)

(2)該方法不用在做其它異常解決

(3)調(diào)用方法必須解決被調(diào)用方法的異常

46.throw的注意事項(xiàng)

(1)throw可以?huà)伭硪环N類(lèi)型的異常

(2)throw語(yǔ)句后不能再有其它代碼、throw后的代碼永遠(yuǎn)不會(huì)被執(zhí)行

47.異常的捕獲

try(

}catch(Exceptiontype1){

methodbodyl

}catch(Exceptiontype2){

methodbody2

)

(1)在try{}catch{^^句中也許拋出不止一個(gè)異常、但是每個(gè)時(shí)刻只能拋出一個(gè)異常

(2)對(duì)也許拋出的每一種異常分別用catch{)來(lái)解決

(3)Catch語(yǔ)句解決多重異常應(yīng)遵從從子類(lèi)到父類(lèi)的順序

48.finally

用于資源的釋放、在異常解決中finally一定會(huì)被執(zhí)行到、Finally語(yǔ)句中假如有return語(yǔ)句、正常運(yùn)營(yíng)先執(zhí)行finally再

執(zhí)行return語(yǔ)句返回當(dāng)發(fā)生異常時(shí)、先執(zhí)行catch語(yǔ)句捕獲異常、假如沒(méi)有catch語(yǔ)句、則執(zhí)行finally語(yǔ)句及其后語(yǔ)句

49.自定義異常

為什么要自定義異常?

Java程序員可定義更多的方法來(lái)解決異常、自定義異常可以提供更復(fù)雜更具體的方法、這樣能極大的加強(qiáng)軟件的健

壯性、代碼更加清楚

如何自定義異常

(1)繼承Exeption使你的自定義異常變成checked異常

(2)繼承RuntimeExeption使你的自定義異常變成unchecked異常

50.10:流是數(shù)據(jù)輸入輸出的通道、流中的數(shù)據(jù)是有序的

流的分類(lèi):

按數(shù)據(jù)流動(dòng)方向:輸入流、輸出流

輸入流:只能從中讀取字節(jié)數(shù)據(jù)、而不能向其寫(xiě)出數(shù)據(jù)

輸出流:只能從中寫(xiě)出字節(jié)數(shù)據(jù)、而不能向其讀取數(shù)據(jù)

按流所解決的數(shù)據(jù)類(lèi)型:

字節(jié)流:解決字節(jié)數(shù)據(jù)

字符流:解決字符數(shù)據(jù)

按流所解決的源:

節(jié)點(diǎn)流:從一個(gè)特定的10設(shè)備讀寫(xiě)數(shù)據(jù)的流

解決流:對(duì)已存在的流進(jìn)行連接和封裝的流

intread():讀取一個(gè)字節(jié),并將它返回。

intread(byte[]buffer):將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,同時(shí)返回讀取的字節(jié)數(shù)。voidclose():關(guān)閉流。

■BufferedWiiter

□節(jié)點(diǎn)流

□處理流

\Wnter\

PuntWntei|

-I*il>e?IAViitei

-FilteiWiitei

51.線(xiàn)程

線(xiàn)程和進(jìn)程的區(qū)別:

(1)每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間、進(jìn)程間的切換會(huì)有較大的開(kāi)銷(xiāo)

(2)線(xiàn)程可以當(dāng)作是輕量級(jí)的進(jìn)程、同一類(lèi)線(xiàn)程共享代碼和數(shù)據(jù)空間、每個(gè)線(xiàn)程有獨(dú)立的運(yùn)營(yíng)棧和程序計(jì)數(shù)器、線(xiàn)程

切換的開(kāi)銷(xiāo)小。

(3)多線(xiàn)程是在同一應(yīng)用程序中有多個(gè)順序流同時(shí)執(zhí)行。

(4)多進(jìn)程是在操作系統(tǒng)中能同時(shí)運(yùn)營(yíng)多個(gè)任務(wù)。

52.創(chuàng)建線(xiàn)程的兩種方式:

(1)定義一個(gè)線(xiàn)程類(lèi)它繼承Thread并重寫(xiě)其中的run()方法,方法run()稱(chēng)為線(xiàn)程體

(2)提供一個(gè)實(shí)現(xiàn)接口runable的類(lèi)作為線(xiàn)程的目的對(duì)象、在初始化一個(gè)thread類(lèi)或者thread子類(lèi)的線(xiàn)程對(duì)象時(shí)把目的對(duì)

象傳遞給這個(gè)線(xiàn)程實(shí)例、由該目的對(duì)象提供線(xiàn)程體

53.比較創(chuàng)建線(xiàn)程的兩種方式:

使用runable接口可以

(1)將cpu、代碼、數(shù)據(jù)分開(kāi)、形成清楚的模型

(2)可以從其它類(lèi)繼承

(3)保持程序風(fēng)格一致性

直接繼承Thread類(lèi)不能從其它類(lèi)繼承、編寫(xiě)簡(jiǎn)樸可以直接操縱線(xiàn)程

54.線(xiàn)程狀態(tài)

**GM“

線(xiàn)程狀態(tài)

New:創(chuàng)建狀態(tài)。當(dāng)創(chuàng)建一個(gè)新的線(xiàn)程時(shí)、它就處在創(chuàng)建狀態(tài)、此時(shí)它僅僅是一個(gè)空的線(xiàn)程對(duì)象、系統(tǒng)不為它分派資源

Runnable:可運(yùn)營(yíng)狀態(tài)。當(dāng)線(xiàn)程處在創(chuàng)建狀態(tài)時(shí)、可調(diào)用start()方法來(lái)啟用它、產(chǎn)生運(yùn)營(yíng)這個(gè)線(xiàn)程所需的系統(tǒng)資源、安排其

運(yùn)營(yíng)

Dead:死亡狀態(tài)。線(xiàn)程終止(1)自然撤消。線(xiàn)程的run()正常退出

(2)強(qiáng)制停止。調(diào)用線(xiàn)程實(shí)例的stop??梢詮?qiáng)制停止當(dāng)前線(xiàn)程

Blocked:停滯狀態(tài)。(1)通過(guò)sleep()讓線(xiàn)程進(jìn)入休眠狀態(tài)

(2)通過(guò)wait()暫停線(xiàn)程

(3)線(xiàn)程正等待某個(gè)10設(shè)備動(dòng)作完畢

(4)線(xiàn)程試著調(diào)用另一個(gè)對(duì)象的synchronized函數(shù)、并且尚未取到對(duì)象的機(jī)鎖

55.守護(hù)線(xiàn)程(daemonThread)

是為其它線(xiàn)程提供服務(wù)的線(xiàn)程、一般應(yīng)是一個(gè)獨(dú)立的線(xiàn)程、它的run()是一個(gè)無(wú)限循環(huán)

56.守護(hù)線(xiàn)程與其它線(xiàn)程的區(qū)別

假如守護(hù)線(xiàn)程是唯一運(yùn)營(yíng)著的線(xiàn)程、程序會(huì)自動(dòng)退出。

57.互斥鎖(對(duì)象鎖)

保證共享數(shù)據(jù)的完整性

每個(gè)對(duì)象都相應(yīng)于一個(gè)可稱(chēng)為互斥鎖的標(biāo)記、這個(gè)標(biāo)記用于保證在任意時(shí)候只能有一個(gè)線(xiàn)程訪問(wèn)該對(duì)象

58.使用synchronized的時(shí)機(jī)

(1)這個(gè)函數(shù)是否修改對(duì)象內(nèi)關(guān)鍵變量的狀態(tài)、(關(guān)鍵變量是能被其它線(xiàn)程讀取或修改的變量)

(2)這個(gè)函數(shù)是否和關(guān)鍵變量的狀態(tài)有依存關(guān)系

(3)基類(lèi)的方法為synchronized時(shí)、synchronized不能被繼承、復(fù)寫(xiě)時(shí)重新采用synchronized

59.釋放鎖

假如一個(gè)線(xiàn)程一個(gè)占用一個(gè)對(duì)象的鎖、則其它線(xiàn)程將永遠(yuǎn)無(wú)法訪問(wèn)該對(duì)象、因此需要在適當(dāng)?shù)臅r(shí)候?qū)?duì)象的鎖歸還

(1)當(dāng)線(xiàn)程執(zhí)行到synchronized的塊結(jié)束時(shí)、釋放對(duì)象鎖

(2)當(dāng)在synchronized塊中碰到break、return或拋出異常、則自動(dòng)釋放對(duì)象鎖

(3)當(dāng)一個(gè)線(xiàn)程調(diào)用wait()時(shí)、它放棄擁有的對(duì)象鎖并進(jìn)入等待隊(duì)列

60.死鎖

是指兩個(gè)線(xiàn)程都互相等待對(duì)方釋放鎖、是不可預(yù)知或避開(kāi)的、應(yīng)采用措施避免死鎖的出現(xiàn)。

61.sleep()和wait()的區(qū)別

(1)Sleep()是Thread類(lèi)的方法、wait()是Object類(lèi)的方法

(2)Sleep()可以在非synchronized函數(shù)中被調(diào)用、wail()只能在synchronized函數(shù)或同步塊中被調(diào)用

(3)Sleep()不會(huì)釋放對(duì)象機(jī)鎖、wait()會(huì)釋放對(duì)象鎖

(4)使用場(chǎng)景不同、sleep()方法同一個(gè)線(xiàn)程內(nèi)間隔多長(zhǎng)時(shí)間后再次執(zhí)行此任務(wù)、wait()是多個(gè)線(xiàn)程之間

JDBC

1.JDBC連接數(shù)據(jù)庫(kù)的基本環(huán)節(jié):

(1)注冊(cè)驅(qū)動(dòng)程序

(2)建立連接

(3)發(fā)送和執(zhí)行sql語(yǔ)句

(4)解決結(jié)果

(5)釋放資源

2.常用對(duì)象

(1)connection建立與數(shù)據(jù)庫(kù)的連接DriverManager類(lèi)的getConnection()將建立數(shù)據(jù)庫(kù)的連接

(2)statement將sql語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中存在三種statement對(duì)象

Statement

PreparedStatement

CallableStatement

(3)Result包含符號(hào)sql語(yǔ)句執(zhí)行結(jié)果集、并且通過(guò)一套get方法提供了對(duì)這些行中的數(shù)據(jù)的訪問(wèn)

3.事務(wù)的基本概念及如何在JDBC中實(shí)現(xiàn)事務(wù)

事務(wù)是一些事件的集合、執(zhí)行一條sql語(yǔ)句可以理解成一個(gè)事務(wù)、事務(wù)中包含多個(gè)事件、假如每一個(gè)事件都能執(zhí)行成功的時(shí)

候、事務(wù)才執(zhí)行、假如任何一個(gè)事務(wù)不能成功執(zhí)行、事務(wù)的其它事件也不能被執(zhí)行。

JDBC解決事務(wù)的代碼:

booleandefaultCommit-conn.getAutoCommit();

conn.setAutoCommit(false);

try(stmt.executeUpdate(strSQLl);

stmt.executeUpdate(strSQL2);

conn,commit();

)catch(Exceptione){

conn,rollback();

e.printStackTrace();

}finally{

if(stmt!=null){

stmt.closeO;

}

if(conn!=nul1){

conn,close();}

)

conn.setAutoCommit(defaultCommit);

Servlet和JSP

1.servlet和JSP的關(guān)系

JSP是以此外一種方式實(shí)現(xiàn)了servlet、servlet是JSP的初期版本、在JSP中更加注重頁(yè)面的表現(xiàn)、而在servlel中更加注重業(yè)

務(wù)邏輯的實(shí)現(xiàn)。因此當(dāng)編寫(xiě)的頁(yè)面顯示效果比較復(fù)雜時(shí)、首選JSP、或者在開(kāi)發(fā)過(guò)程中、html代碼經(jīng)常發(fā)生變化而Java代碼相對(duì)

比較固定期可以選擇JSP、而我們?cè)诮鉀Q業(yè)務(wù)邏輯時(shí)首選則是servlet、同時(shí)JSP只能解決瀏覽器的請(qǐng)求、而servlet可以解決一

個(gè)客戶(hù)端的應(yīng)用程序請(qǐng)求、因此servlet加強(qiáng)了web服務(wù)器的功能

2.servlet的生命周期

(1)服務(wù)器加載servlet

(2)創(chuàng)建servlet實(shí)例

(3)調(diào)用servlet實(shí)例的init()

(4)收到請(qǐng)求

(5)調(diào)用service()

(6)service()解決請(qǐng)求并將輸出結(jié)果返回客戶(hù)端

(7)servlet等待下一個(gè)請(qǐng)求、轉(zhuǎn)到(4)繼續(xù)向下執(zhí)行

(8)servlet在服務(wù)器調(diào)用destory()然后卸載

3.init()調(diào)用時(shí)機(jī)

(1)服務(wù)器第一次訪問(wèn)servlet的時(shí)候被調(diào)用

(2)在web.xml中設(shè)立load-on-starlup>=0情況下、服務(wù)器啟動(dòng)的時(shí)候調(diào)用

4.Destroy()調(diào)用時(shí)機(jī)

(1)servlet在被卸載前

(2)servlet很長(zhǎng)時(shí)間沒(méi)有被使用

5.HttpSession接口的功能和使用方法

這是一個(gè)java,servelt.http包中的接口、它封裝了會(huì)話(huà)的概念它的定義為publicinterfaceHttpSession可以使用

HttpSessionsession=request.getSessionO;

來(lái)這種類(lèi)型的對(duì)象、語(yǔ)法為HttpSessionsession=request.getSessionO;

6.什么是組件、使用組件有什么優(yōu)點(diǎn)

現(xiàn)代件開(kāi)發(fā)都已轉(zhuǎn)向基于組件的開(kāi)發(fā)、目前代表性的組件技術(shù)有微軟的com和com+、有sun的javabean和EJB、此外尚有

CORBA(CommonObjectRequestBrokerArchitecture,公共對(duì)象代理結(jié)構(gòu))、javabean規(guī)范將軟件組件的概念引入到了java編

程里面、組件是自包含的、可重用的軟件單元、而javabean組件則可使用可視的應(yīng)用程序開(kāi)發(fā)工具、可視的將他們編寫(xiě)到j(luò)ava

程序中、javabean規(guī)范為java開(kāi)發(fā)人員提供了一種組件化其java類(lèi)的方法、其最大優(yōu)點(diǎn)是代碼的復(fù)用。

7.編寫(xiě)javabean時(shí)需要注意哪些?

(1)假如類(lèi)的成員變量的名字是xxx、為了更改和獲得其成員變量的值、在類(lèi)中使用兩個(gè)方法:getXxx()是用來(lái)獲取屬

性、setXxx()是用來(lái)修改屬性

(2)類(lèi)中的方法訪問(wèn)屬性必須是public的

(3)必須放在一個(gè)包中

(4)類(lèi)中要有public(公有的)無(wú)參的構(gòu)造函數(shù)

8.簡(jiǎn)述JSP的設(shè)計(jì)模式

Modle1JSP+Javabean

在這種模式中JSP頁(yè)面獨(dú)自響應(yīng)請(qǐng)求并將解決結(jié)果返回客戶(hù)、所有的數(shù)據(jù)庫(kù)操作通過(guò)javabean來(lái)實(shí)現(xiàn)、大量的使用

這種設(shè)計(jì)模式常會(huì)導(dǎo)致在jsp頁(yè)面中嵌入大量的java代碼、當(dāng)需要解決的業(yè)務(wù)邏輯非常復(fù)雜時(shí)、這種情況就變得很

糟糕、大量的java代碼使得jsp頁(yè)面變得非常臃腫、前端的頁(yè)面設(shè)計(jì)人員稍有不慎就有也許破壞關(guān)系到業(yè)務(wù)邏輯的

代碼

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)樸、適合快速的開(kāi)發(fā)小型項(xiàng)目

Modle2MVC設(shè)計(jì)模式

采用只包含控制邏輯的servlel作為前端控制器接受客戶(hù)請(qǐng)求、再轉(zhuǎn)發(fā)到相應(yīng)的jsp頁(yè)面解決顯示邏輯、并輔以

javabean實(shí)現(xiàn)相關(guān)的業(yè)務(wù)邏輯、合用于大規(guī)模系統(tǒng)的開(kāi)發(fā)和管理

缺陷:增長(zhǎng)了應(yīng)用開(kāi)發(fā)的復(fù)雜限度

9.在javaservletAPI中forward()和redirect()的區(qū)別

前者僅是容器中控制權(quán)的轉(zhuǎn)向、在客戶(hù)端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址

后者則是完全跳轉(zhuǎn)、瀏覽器將會(huì)得到跳轉(zhuǎn)的地址、并重新發(fā)送請(qǐng)求連接、從瀏覽器地址欄中可以看到跳轉(zhuǎn)后的連接地址、

所以前者更加高效、在前者可以滿(mǎn)足需要時(shí)盡量使用foeard()并且這樣也有助于隱藏實(shí)際的連接、比如需要跳

轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源、則必須使用sendRedirect()

10.JSP的內(nèi)置對(duì)象

request—客戶(hù)端請(qǐng)求

response—網(wǎng)頁(yè)傳回客戶(hù)端的【可應(yīng)

pageContext—管理頁(yè)面屬性

session—與請(qǐng)求有關(guān)的會(huì)話(huà)期

application應(yīng)用程序級(jí)變量

out—用來(lái)傳送回應(yīng)傳送的輸出

configservlelConfig的一個(gè)實(shí)例

page—代表jsp頁(yè)面自身

exeption—針對(duì)錯(cuò)誤網(wǎng)頁(yè)未捕獲的例外

11.Jsp的標(biāo)準(zhǔn)動(dòng)作

Jsp:include—在頁(yè)面請(qǐng)求的時(shí)候引入一個(gè)文獻(xiàn)

Jsp:usebean—尋找或?qū)嵗粋€(gè)javabean

Jsp:setproperty--設(shè)立javabean的屬性

Jsp:getProperty—輸出javabean的屬性

Jsp:forward把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁(yè)面

12.Jsp中的動(dòng)態(tài)include與靜態(tài)include的區(qū)別

語(yǔ)法上、靜態(tài)<%@includefile二"嚶)動(dòng)態(tài)〈jsp:includepage

狀態(tài)上、靜態(tài)的是編譯時(shí)包含、動(dòng)態(tài)的是運(yùn)營(yíng)時(shí)包含

針對(duì)對(duì)象來(lái)說(shuō)、靜態(tài)包含的是靜態(tài)頁(yè)面、動(dòng)態(tài)的包含靜態(tài)頁(yè)面和動(dòng)態(tài)頁(yè)面均可包含

靜態(tài)的是jsp引擎對(duì)所包含的文獻(xiàn)進(jìn)行語(yǔ)法分析

動(dòng)態(tài)的是jsp引擎不對(duì)所包含的文獻(xiàn)進(jìn)行語(yǔ)法分析、只獲得解決結(jié)果、

假如包含的內(nèi)容是靜態(tài)內(nèi)容、那么使用include指令、由于它的運(yùn)營(yíng)速度快

Struts

1.struts的運(yùn)營(yíng)機(jī)制

struts架構(gòu)從本質(zhì)上MVC設(shè)計(jì)模式的具體實(shí)現(xiàn)、表達(dá)層一般使用試圖組件實(shí)現(xiàn)、控制器使用控制器組件實(shí)現(xiàn)、而應(yīng)用邏輯層使用

模型組件實(shí)現(xiàn)、作為表達(dá)層和應(yīng)用層之間的中介、控制器解決模型和視圖之間、起到了橋梁的溝通作用

2.控制器組件的相關(guān)類(lèi)

ActionServlet是struts架構(gòu)中的中央控制器

RequestProcessor—包含了struts控制器解決servlet請(qǐng)求時(shí)所遵循的控制邏輯

Action—解決業(yè)務(wù)邏輯

ActionForm--保存用戶(hù)表單數(shù)據(jù)、以便于在不同頁(yè)面間傳遞

ActionMapping—用于控制在狀態(tài)數(shù)據(jù)改變后的事件解決方式

ActionForward用戶(hù)指向或者視圖選擇

3.struts標(biāo)簽庫(kù)

struts-html.tld擴(kuò)展htmlform的jsp標(biāo)記

struts-bean.tld—擴(kuò)展解決javabean的jsp標(biāo)記

struts-logic.tld擴(kuò)展測(cè)試屬性值的jsp標(biāo)記

4.struts1的Action是否是線(xiàn)程安全的

StrutslAclion是單例模式并且必須是線(xiàn)程安全的、由于僅有Action的一個(gè)實(shí)例來(lái)解決所有請(qǐng)求、單例策略限制了strulsl

Action能做的事、并且要在開(kāi)發(fā)是特別小心、Action資源必須是線(xiàn)程安全或同步的

5.struts的工作流程

在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化actionServlet、actionServlet從struts-config.xml文獻(xiàn)中讀取配置信息、把他們存放到

各種配置對(duì)象中、當(dāng)ActionServlet接受到一個(gè)客戶(hù)請(qǐng)求時(shí)將執(zhí)行如下流程

(1)檢索和用戶(hù)請(qǐng)求匹配的ActionMapping實(shí)例、假如不存在就返回請(qǐng)求途徑無(wú)效信息

(2)假如actionForm實(shí)例不存在、就創(chuàng)建一個(gè)ActionForm對(duì)象、把客戶(hù)提交的表單數(shù)據(jù)保存到ActionForm對(duì)象中

(3)根據(jù)配置信息決定是否需要表單驗(yàn)證、假如需要驗(yàn)證就會(huì)調(diào)用ActionForm的validate。

(4)假如ActionForm的validate()返|口]nul]或返|可一個(gè)不包含ActionYessage的ActionErrors對(duì)象就表達(dá)表單驗(yàn)證

成功

(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action、假如相應(yīng)的Action實(shí)例不

存在、就先創(chuàng)建這個(gè)實(shí)例、然后調(diào)用Action的execute()

(6)Action的execute()返|可?個(gè)ActionForward對(duì)象、ActionServlet再把客戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象所

指向的jsp組件

(7)ActionForward對(duì)象指向jsp組件生成動(dòng)態(tài)網(wǎng)頁(yè)、返回給客戶(hù)

6.struts1的優(yōu)缺陷

優(yōu)點(diǎn):是開(kāi)源軟件、使開(kāi)發(fā)者能更進(jìn)一步的了解其內(nèi)部的機(jī)制、業(yè)界標(biāo)準(zhǔn)學(xué)習(xí)資源豐富、標(biāo)簽和頁(yè)面導(dǎo)航

(1)運(yùn)用struts提供的標(biāo)簽可以大大節(jié)約開(kāi)發(fā)時(shí)間

(2)維護(hù)擴(kuò)展比較方便、通過(guò)一個(gè)配置文獻(xiàn)即可把握整個(gè)系統(tǒng)個(gè)部分之間的聯(lián)系、這對(duì)于后期的維護(hù)有莫大的好處

(3)表現(xiàn)與邏輯分離

(4)便于團(tuán)隊(duì)開(kāi)發(fā)

缺陷:(1)大量使用標(biāo)簽對(duì)于初學(xué)者難度很大

(2)ActionForm使用不便無(wú)法進(jìn)行單元測(cè)試

7.Tiles框架是什么?

Tiles框架為創(chuàng)建web頁(yè)面提供了一種模板機(jī)制、它能將網(wǎng)頁(yè)的布局和內(nèi)容分離

8.struts的MVC框架

Modlestruts沒(méi)有提供modle類(lèi)、這個(gè)業(yè)務(wù)邏輯必須由web應(yīng)用程序的開(kāi)發(fā)者以javabean或EJB的形式提供、

Viewstruts提供AclionForm創(chuàng)建FormBean、用于在conlroler和view間傳輸數(shù)據(jù)、此外、struts提供了自定義jsp標(biāo)簽庫(kù)、

輔助開(kāi)發(fā)者用jsp創(chuàng)建交互式的以表單為基礎(chǔ)的應(yīng)用程序、應(yīng)用程序資源文獻(xiàn)(.property文獻(xiàn))保存了一些文本常量

和錯(cuò)誤信息、可轉(zhuǎn)變成其它語(yǔ)言用于jsp中

Controler

提供了一個(gè)核心控制器ActionServlet、通過(guò)這個(gè)核心控制器來(lái)調(diào)用其它用戶(hù)注冊(cè)的自定義控制器Action、自定義

Action需要符號(hào)Strutsl的自定義Action的規(guī)范、還需要在struts-config.xml特定配置文獻(xiàn)中進(jìn)行配置、接受jsp輸

入字段形成ActionForm、然后調(diào)用?個(gè)Action控制器、

Strutsl和struts2的比較

(1)Action類(lèi):

strutsl規(guī)定Action類(lèi)要擴(kuò)展自一個(gè)抽象基類(lèi)、struts1的?個(gè)共有的問(wèn)題是面向抽象類(lèi)編程而不是面向接口編程

struts2的Action類(lèi)實(shí)現(xiàn)了一個(gè)Action接口、連同其它接口一起實(shí)現(xiàn)可選擇和自定義服務(wù)、提供了一個(gè)名叫

ActionSupport的基類(lèi)實(shí)現(xiàn)一般使用的接口、Action接口不是必須的、任何使用execute()的普通java

對(duì)象可以被當(dāng)作5“仇$2的2(:宜011對(duì)象使用

(2)線(xiàn)程模型:strutslAction是單例的、因只有一個(gè)實(shí)例控制所有的請(qǐng)求、單例策略導(dǎo)致了一定的限制、Action

資源必須是線(xiàn)程安全或者同步的

Struts2對(duì)象對(duì)每一個(gè)請(qǐng)求都實(shí)例化對(duì)象所有沒(méi)有線(xiàn)程安全問(wèn)題

(3)Servlet依賴(lài):strutsl的Action類(lèi)的依賴(lài)于ServletAPI以HttpServletRequest和HttpServletResponse作為參數(shù)傳

遞給execute()Struts2的Action不和容器有關(guān)、Servlet上下文被表現(xiàn)成簡(jiǎn)樸的maps

(4)易測(cè)性:測(cè)試strutsl的重要障礙是execute()方法暴露了API、stuts2的Action

可以通過(guò)實(shí)例化Action測(cè)試、設(shè)立屬性然后調(diào)用方法

(5)接受輸入

Strutsl使用actionform對(duì)象捕獲輸入,向action同樣,actionform必須擴(kuò)展基類(lèi)。因其他的javabean不能做

actionform使用,開(kāi)發(fā)者經(jīng)常創(chuàng)建多余的類(lèi)捕獲輸入。Struls2的action屬性做為輸入屬性。排除第2個(gè)輸入對(duì)象的

需要,輸入屬性也許有豐富的對(duì)象類(lèi)型,這些屬性有他們自己的屬性。Action的屬性可以通過(guò)標(biāo)簽庫(kù)訪問(wèn)

(6)表達(dá)式語(yǔ)言:

Strutsl整合jstl所以使用jstl的表達(dá)式語(yǔ)言、表達(dá)式語(yǔ)言有基本的圖形對(duì)象移動(dòng)、但是相對(duì)很弱的集合

和被索引的屬性支持、

Struts2使用jstl、但是框架也支持更大更靈活的表達(dá)式、叫做“對(duì)象圖形符號(hào)語(yǔ)言"(0GNL)

(7)將值綁定到視圖上

Struts使用標(biāo)準(zhǔn)jsp機(jī)制來(lái)綁定對(duì)象到頁(yè)面上下文、struts2使用ValueStack技術(shù)、標(biāo)簽庫(kù)可以不用連接你的

視圖到對(duì)象的表現(xiàn)類(lèi)型訪問(wèn)值

(8)類(lèi)型轉(zhuǎn)換

Strutsl的ActionForm屬性經(jīng)常都是String的、Strutsl使用Commons-Beanuti1s類(lèi)型轉(zhuǎn)換、轉(zhuǎn)換每一個(gè)類(lèi)而不是

每一個(gè)實(shí)例配置

Struts2使用ognl類(lèi)型轉(zhuǎn)換、框架包含轉(zhuǎn)換器基本的和共同的對(duì)象類(lèi)型和原始類(lèi)型

(9)驗(yàn)證:strutsl支持手動(dòng)驗(yàn)證、憑借ActionForm的validate?;蛘咄ㄟ^(guò)擴(kuò)展公用驗(yàn)證器

Struts2支持手動(dòng)驗(yàn)證、憑借validate。和Xwork驗(yàn)證框架

(10)Action執(zhí)行控制:

strutsl支持獨(dú)立的請(qǐng)求解決器對(duì)于每一個(gè)模型、但是所有在模型中的Action必須共享同一個(gè)生命周期

Slruls2支持在每一個(gè)Action基礎(chǔ)上憑借攔截器棧創(chuàng)建不同的生命周期

Hibernate

1.ORM:(Object/RelationalMapping)對(duì)象關(guān)系映射

2.基本概念:面向java環(huán)境的對(duì)象映射工具、開(kāi)源持久層框架、連接java應(yīng)用和數(shù)據(jù)庫(kù)的中間件、對(duì)jdbc進(jìn)行簡(jiǎn)樸封裝、負(fù)

責(zé)對(duì)java對(duì)象的持久化、在分層結(jié)構(gòu)中處在持久層、封裝對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)細(xì)節(jié)、使業(yè)務(wù)邏輯層更專(zhuān)注于實(shí)現(xiàn)業(yè)務(wù)

邏輯。

3.工作原理:

(1)讀取并接配置文獻(xiàn)

(2)讀取并解析映射信息創(chuàng)建sessionFactory

(3)打開(kāi)session

(4)創(chuàng)建事務(wù)Transaction

(5)持久化操作

(6)提交事務(wù)

(7)關(guān)閉session

(8)關(guān)閉sessionFactory

4.優(yōu)缺陷:

優(yōu)點(diǎn):Hibernate使用java反射機(jī)制而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性、hibernate性能非常好、由于它是個(gè)輕量級(jí)框

架、映射的靈活性很杰出。支持各種關(guān)系數(shù)據(jù)庫(kù)、從一對(duì)多到多對(duì)多的各種復(fù)雜關(guān)系

缺陷:它限制了你所使用對(duì)象模型、一個(gè)持久化類(lèi)不能映射到多個(gè)表

5.load()和get()的區(qū)別

(1)查找數(shù)據(jù)庫(kù)中一個(gè)不存在的對(duì)象假如通過(guò)get()加載則返回一個(gè)null、假如通過(guò)load()加載則返回一個(gè)代理

對(duì)象、后面代碼假如調(diào)用該對(duì)象的某個(gè)屬性會(huì)拋出異常org.hibernate.ObjectNotFoundExeption

(2)Load支持延遲加載、get不支持延遲加載

6.hibernate的緩存機(jī)制

內(nèi)部緩存存在hibernate中又叫一級(jí)緩存屬于應(yīng)用事務(wù)級(jí)緩存

二級(jí)緩存分為應(yīng)用級(jí)緩存、分布式緩存、第三方緩存事件

7.如何優(yōu)化hibernate

(1)使用雙向一對(duì)多關(guān)聯(lián)不使用單向一對(duì)多關(guān)聯(lián)

(2)靈活使用單向一對(duì)多關(guān)聯(lián)

(3)不用一對(duì)一關(guān)聯(lián)、而用多對(duì)一取代

(4)配置對(duì)象緩存不使用集合緩存

(5)一對(duì)多集合使用bag、多對(duì)多集合使用set

(6)表字段要少、表關(guān)聯(lián)不用怕多

TransientObject(臨時(shí)對(duì)象):

使用new操作符初始化的對(duì)象不是立刻就持久的、他們的狀態(tài)是瞬時(shí)的也就是說(shuō)他們沒(méi)有任何跟數(shù)據(jù)庫(kù)表相關(guān)聯(lián)的行

為、只要應(yīng)用不再引用這些對(duì)象他們的狀態(tài)會(huì)丟失、并由垃圾回收機(jī)制回收

PersistentObject(持久化對(duì)象)

持久實(shí)例是任何具有數(shù)據(jù)庫(kù)標(biāo)記的實(shí)例、它由持久化管理器Session統(tǒng)一管理、持

久實(shí)例是在事務(wù)中進(jìn)行操作的、它們的狀態(tài)在事務(wù)結(jié)束時(shí)、同數(shù)據(jù)庫(kù)進(jìn)行同步、

當(dāng)事務(wù)提交時(shí)通過(guò)執(zhí)行SQL的insert、update和delete語(yǔ)句、把內(nèi)存中的狀態(tài)同步

到數(shù)據(jù)庫(kù)中

DetachedObject(托管對(duì)象)

Session關(guān)閉之后、持久化就變?yōu)橥泄軐?duì)象、表達(dá)這個(gè)對(duì)象不能再與數(shù)據(jù)庫(kù)保持同

步、它們不再受hibernate管理

Spring

1.什么是Spring、它有什么特點(diǎn)

Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)和面向切面的容器框架。

特點(diǎn):輕量:從大小和開(kāi)銷(xiāo)兩方面而言、Spring都是輕量的、完整的Spring框架可以在一個(gè)大小只有1M多的jar文獻(xiàn)中發(fā)

布、并且Spring所需解決開(kāi)銷(xiāo)也是微局限性道的、此外、Spring是非侵入式的、典型的是Spring應(yīng)用中的對(duì)

象不依賴(lài)于Spring的特定類(lèi)

控制反轉(zhuǎn):Spring通過(guò)一種稱(chēng)作控制反轉(zhuǎn)的技術(shù)促進(jìn)了松耦合、當(dāng)應(yīng)用了IOC一個(gè)對(duì)象依賴(lài)的其它對(duì)象會(huì)通過(guò)被動(dòng)的

方式傳遞進(jìn)來(lái)、而不是這個(gè)對(duì)象自己創(chuàng)建或查找依賴(lài)對(duì)象、你可以認(rèn)為IOC與JNDI相反不是對(duì)象從容器中查

找依賴(lài)而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就積極將依賴(lài)傳遞給他

面向切面:Spring提供了面向切面編程的豐富支持、允許通過(guò)度離應(yīng)用程序的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開(kāi)

發(fā)、應(yīng)用對(duì)象只實(shí)現(xiàn)他們應(yīng)當(dāng)做的、完畢業(yè)務(wù)邏輯僅此而己、他們并不負(fù)責(zé)其它的系統(tǒng)級(jí)關(guān)注點(diǎn)、例如日記和

事務(wù)支

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論