版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JAVA程序員面試題
Java基研1方面
1、作用域public,private,protected,以及不寫時(shí)的區(qū)別
答:區(qū)別如下:
作用域當(dāng)前類同一package子孫類其他package
public7777
protected7V7X
friendlyVVXX
privateVXXX
不寫時(shí)默認(rèn)為friendly
2>AnonymousInnerClass(匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實(shí)
現(xiàn))interface(接口)
答:匿名的內(nèi)部類是沒(méi)有名字的內(nèi)部類。不能extends(繼承)其它類,但一個(gè)內(nèi)部類可以作為一個(gè)接口,由另
一個(gè)內(nèi)部類實(shí)現(xiàn)
3、StaticNestedClass和InnerClass的不同
答:NestedClass(一般是C++的說(shuō)法),InnerClass(一般是JAVA的說(shuō)法)。Java內(nèi)部類與C++嵌套類最大
的不同就在于是否有指向外部的引用上。注:靜態(tài)內(nèi)部類(InnerClass)意味著1創(chuàng)建一個(gè)static內(nèi)部類的
對(duì)象,不需要一個(gè)外部類對(duì)象,2不能從一個(gè)static內(nèi)部類的一個(gè)對(duì)象訪問(wèn)一個(gè)外部類對(duì)象
4、&和&&的區(qū)別
答:&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)
5、Collection和Collections的區(qū)別
答:Collection是集合類的上級(jí)接口,繼承與他的接口主要有Set和List.
Collections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操
作
6、什么時(shí)候用assert
答:assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語(yǔ)言中都支持這種機(jī)制。在實(shí)現(xiàn)中,
assertion就是在程序中的一條語(yǔ)句,它對(duì)一個(gè)boolean表達(dá)式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean
表達(dá)式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來(lái)說(shuō),
assertion用于保證程序最基木、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測(cè)試時(shí)開啟。為了提高性能,在
軟件發(fā)布后,assertion檢查通常是關(guān)閉的
7、Strings=newString("xyz");創(chuàng)建了幾個(gè)StringObject
答:兩個(gè),一個(gè)字符對(duì)象,一個(gè)字符對(duì)象引用對(duì)象
8、Math.round(11.5)等於多少?Math.round(-11.5)等於多少
答:Math.round(11.5)==12;Math.round(-l1.5)==-11;round方法返回與參數(shù)最接近的長(zhǎng)整數(shù),參數(shù)加
1/2后求其floor
9、shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò)
答:shortsi=1;si=si+1;(sl+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)shortsi=1;si+=1;
(可以正確編譯)
10、Java有沒(méi)有g(shù)oto
答:java中的保留字,現(xiàn)在沒(méi)有在java中使用
11、數(shù)組有沒(méi)有l(wèi)ength。這個(gè)方法?String有沒(méi)有l(wèi)ength()這個(gè)方法
答:數(shù)組沒(méi)有l(wèi)ength。這個(gè)方法,有l(wèi)ength的屬性。String有l(wèi)ength。這個(gè)方法
12、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型
答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類叮了類之
間多態(tài)性的?種表現(xiàn),重載Overloading是?個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相
同的名稱和參數(shù),我們說(shuō)該方法被重寫(Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)
它而言,父類中的定義如同被"屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有
不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型
13、Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用==還是equals。?它們有何區(qū)
別
答:Set里的元素是不能重復(fù)的*那么用iterator()方法來(lái)區(qū)分重復(fù)勺否。equals()是判讀兩個(gè)Set是否相等
equals()和==方法決定引用值是否指向同一對(duì)象equals。在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容
和類型相配的話,返回真值
14^給我一個(gè)你最常見(jiàn)到的runtimeexception
答:常見(jiàn)的運(yùn)行時(shí)異常有如下這些
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderf1owException,Cann
otRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationExc
eption,DOMException,EmptyStackException,IllegalArgumentException,11legalMonitorStateException
,11legalPathStateException,11legalStateException,ImagingOpException,IndexOutOfBoundsException
,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NulIPointerExcept
ion,Profi1eDataException,ProviderException,RasterFormatException,SecurityException,SystemExc
eption,UndeclaredThrowableException,Unmodifiab1eSetException,UnsupportedOperationException
15error和exception有什么區(qū)別
答:error表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指里程序能處理這
樣的情況
exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況
16^List,Set,Map是否繼承自Collection接口
答:List,Set是,Map不是
17、abstractclass和interface有什么區(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)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。
接口中的所有方法都是抽象的,沒(méi)有?個(gè)有程序體。接I」只可以定義staticfinal成員變量。接口的實(shí)現(xiàn)與子類
相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接
口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名
作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instance"運(yùn)算
符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口
18abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized
答:都不能
19、接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承實(shí)體類(concrete
class)
答:接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但前提是實(shí)體類必須
有明確的構(gòu)造函數(shù)
20、構(gòu)造器Constructor是否可被override
答:構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading
21、是否可以繼承String類
答:String類是final類故不可以繼承
22、try{}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)
候被執(zhí)行,在return前還是后
答:會(huì)執(zhí)行,在return前執(zhí)行
23、用最有效率的方法算出2乘以8等於幾
答:2<<3
24^兩個(gè)對(duì)象值相同(x.equals(y)==true),但卻可有不同的hashcode,這句話對(duì)不對(duì)
答:不對(duì),有相同的hashcode
25、當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么
這里到底是值傳遞還是引用傳遞
答:是值傳遞。Java編程語(yǔ)言只有值傳遞參數(shù)。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就
是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用是永遠(yuǎn)不會(huì)改變的
26^swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expri)中,exprl是一個(gè)整數(shù)表達(dá)式。因此傳遞給switch和case語(yǔ)句的參數(shù)應(yīng)該
是int、short,char或者byte。long,string都不能作用于swtich
27、ArrayList和Vector的區(qū)別,HashMap和HashtabIe的區(qū)別
答:就ArrayList與Vector主要從二方面來(lái)說(shuō).
.同步性:Vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是線程序不安全的,不是同步的
二.數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半
就HashMap與HashTable主要從三方面來(lái)說(shuō)。
歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)
二.同步性:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value
28、char型變量中能不能存貯一個(gè)中文漢字?為什么?
答:是能夠定義成為一個(gè)中文的,因?yàn)閖ava中以u(píng)nicode編碼,一個(gè)char占16個(gè)字節(jié),所以放一個(gè)中文是
沒(méi)問(wèn)題的
29、GC是什么?為什么要有GC
答:GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人員容易出現(xiàn)問(wèn)題的地方,忘記或者錯(cuò)誤的
內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)
到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內(nèi)存的顯示操作方法。
30、float型floatf=3.4是否正確?
答:不正確。精度不準(zhǔn)確,應(yīng)該用強(qiáng)制類型轉(zhuǎn)換,如下所示:floatf=(float)3.4
31、介紹JAVA中的CollectionFrameWork(包括如何寫自己的數(shù)據(jù)結(jié)構(gòu))?
答:CollectionFrameWork如下:
Collection
卜List
IFLinkedList
|1-ArrayList
I「Vector
ILStack
LSet
Map
|-Hashtable
|-HashMap
LWeakHashMap
Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素(Elements)
Map提供key至ijvalue的映射
32、抽象類與接口?
答:抽象類與接口都用于抽象,但是抽象類。AVA中)可以有自己的部分實(shí)現(xiàn),而接口則完全是一個(gè)標(biāo)識(shí)(同時(shí)有
多重繼承的功能)。
JAVA類實(shí)現(xiàn)序例化的方法是實(shí)現(xiàn)java.io.Serializable接11
Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)Comparable接口和Comparator接口
33、STRING與STRINGBUFFER的區(qū)別。
答:STRING的長(zhǎng)度是不可變的,STRINGBUFFER的長(zhǎng)度是可變的。如果你對(duì)'工符串中的內(nèi)容經(jīng)常進(jìn)行操作,
特別是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString。
方法
34^談?wù)刦inal,finally,finalize的區(qū)別
答:final一修飾符(關(guān)犍字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼
承。因此一個(gè)類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們
在使用中不被改變。被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被
聲明為final的方法也同樣只能使用,不能重載
finally—在異常處理時(shí)提供finally塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的catch子句就
會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入finally塊(如果有的話)
finalize一方法名。Java技術(shù)允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清
理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在Object類中定義
的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize。方
法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的
35、面向?qū)ο蟮奶卣饔心男┓矫?/p>
答:主要有以下四方面:
1.抽象:
抽象就是忽略?個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算
了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽
象。
2.繼承:
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類
可以從現(xiàn)有的類中派生,這個(gè)過(guò)程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),
而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新
的方法使之更適合特殊的需要。
3.封裝:
封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)
世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。
4.多態(tài)性:
多態(tài)性是指允許不同類的對(duì)象為同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈
活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題。
36、String是最基本的數(shù)據(jù)類型嗎
答:基本數(shù)據(jù)類型包括byte、int、char>long,float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我
們應(yīng)該用StringBuffer類
37、int和Integer有什么區(qū)別
答:Java提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer
是java為int提供的封裝類。Java為每個(gè)原始類型提供了封裝類。
原始類型封裝
類,booleanBoolean,charCharacter,byteByte,shortShort,intlnteger,longLong,floatFloat,doubleDouble
引用類型和原始類型的行為完全不同,并且它們具有不同的語(yǔ)義。引用類型和原始類型具有不同的特征和用法,
它們包括:大小和速度問(wèn)題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)
據(jù)時(shí)所指定的缺省值。對(duì)象引用實(shí)例變量的缺省值為null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)
38、運(yùn)行時(shí)異常與一般異常有何異同
答:異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是
一種常見(jiàn)運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出
未被捕獲的運(yùn)行時(shí)異常。
39說(shuō)出ArrayList,Vector,LinkedList的存儲(chǔ)性能和特性
答:ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,
它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,
Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈
表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插
入速度較快。
40HashMap和Hashtable的區(qū)另ij
答:HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的文現(xiàn)),他們都完成了Map接口,匕要區(qū)別在FHashMap
允許空(null)健值(key),由于非線程安全,效率上可能高于Hashlable。
HashMap允許將nul1作為一個(gè)entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey?因?yàn)閏ontains方法容易
讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Javal.2引進(jìn)的Mapinterface的一個(gè)實(shí)現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要
自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。
41heap和stack有什么區(qū)別
答:棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的
一個(gè)組成元素
42、Java的接口和C++的虛類的相同和不同處
答:由于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在兒個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩?,現(xiàn)有的單
繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因?yàn)榻覫I中沒(méi)有任何實(shí)現(xiàn)代碼。當(dāng)個(gè)類實(shí)現(xiàn)了
接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是publicstatic,
所有方法默認(rèn)情況下是public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
43、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用
答:當(dāng)JAVA程序違反了JAVA的語(yǔ)義規(guī)則時(shí),JAVA虛擬機(jī)就會(huì)將發(fā)生.的錯(cuò)誤表不為個(gè)異常。違反語(yǔ)義規(guī)則包
括2種情況。-種是JAVA類庫(kù)內(nèi)置的語(yǔ)義檢查。例如數(shù)組下標(biāo)越界,會(huì)引發(fā)IndexOutOfBoundsException;訪問(wèn)
nul1的對(duì)象時(shí)會(huì)引發(fā)NullPointerException。另一種情況就是JAVA允許程斤:員擴(kuò)展這種語(yǔ)義檢查,程序員可以
創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。
43、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制
答:Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使C++程序員最頭疼的內(nèi)存管理的問(wèn)題迎刃而解,它
使得Java程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)垃圾回收機(jī)制,Java中的對(duì)象不再有''作
用域”的概念,只有對(duì)象的引用才有"作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。
垃圾回收器通常是作為一個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒(méi)有
使用的對(duì)象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收?;厥諜C(jī)制
有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
44、你所知道的集合類都有哪些?主要方法?
答:最常用的集合類是List和Map。List的具體實(shí)現(xiàn)包括ArrayList和Vector,它們是可變大小的列表,
比較適合構(gòu)建、存儲(chǔ)和操作任何類型對(duì)象的元素列表。List適用于按數(shù)值索引訪問(wèn)元素的情形。
Map提供了一個(gè)更通用的元素存儲(chǔ)方法。Map集合類用于存儲(chǔ)元素對(duì)(稱作〃鍵"和"值"),其中每個(gè)鍵映射到
一個(gè)值。
45、描述一下JVM加載class文件的原理機(jī)制?
答:JVM中類的裝載是由ClassLoader和它的子類來(lái)實(shí)現(xiàn)的,JavaClassLoader是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)
組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件的類。
46、排序都有哪幾種方法?請(qǐng)列舉
答:排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直
接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數(shù)排序)
快速排序的偽代碼。
//使用快速排序方法對(duì)a[0:n-1]排序
從@[0:n-1]中選擇一個(gè)元素作為midd1e,該元素為支點(diǎn)
把余下的元素分割為兩段left和right,使得1eft中的元素都小于等于支點(diǎn),而right中的元素都大
于等于支點(diǎn)
遞歸地使用快速排序方法對(duì)left進(jìn)行排序
遞歸地使用快速排序方法對(duì)right進(jìn)行排序
所得結(jié)果為left+middle+right
47>JAVA語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try
塊中可以拋出異常嗎?
答:Java通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在Java中,
每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類或其它子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該
對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過(guò)5個(gè)關(guān)
鍵詞來(lái)實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來(lái)執(zhí)行一段程序,如果出現(xiàn)異常,
系統(tǒng)會(huì)拋出(throws)一個(gè)異常,這時(shí)候你可以通過(guò)它的類型來(lái)捕捉(catch)它,或最后(finally)由缺省處
理器來(lái)處理。
用try來(lái)指定一塊預(yù)防所有“異?!钡某绦颉>o跟在try程序后面,應(yīng)包含一個(gè)catch子句來(lái)指定你想要捕捉的”
異?!钡念愋?。
throw語(yǔ)句用來(lái)明確地拋出一個(gè)"異常"。
throws用來(lái)標(biāo)明一個(gè)成員函數(shù)可能拋出的各種''異常"。
Finally為確保一段代碼不管發(fā)生什么"異常"都被執(zhí)行一段代碼。
可以在一個(gè)成員函數(shù)調(diào)用的外面寫一個(gè)try語(yǔ)句,在這個(gè)成員函數(shù)內(nèi)部寫另一個(gè)try語(yǔ)句保護(hù)其他代碼。每當(dāng)遇
到一個(gè)try語(yǔ)句,"異常"的框架就放到堆棧上面,直到所有的try語(yǔ)句都完成。如果下一級(jí)的try語(yǔ)句沒(méi)有對(duì)某
種"異常"進(jìn)行處理,堆棧就會(huì)展開,直到遇到有處理這種"異常"的try語(yǔ)句。
48、一個(gè)"Java”源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?
答:可以。必須只有一個(gè)類名與文件名相同。
49、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說(shuō)出他們分別是哪些類?
答:字節(jié)流,字符流。字節(jié)流繼承于InputStreamOutputStream,字符流繼承于
InputStreamReaderOutputStreamWriter。在java,io包中還有許多其他的流,主要是為了提高性能和使用方便。
50、java中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述。
答:會(huì)。自己實(shí)現(xiàn)堆載的數(shù)據(jù)結(jié)構(gòu)時(shí)有可能會(huì)出現(xiàn)內(nèi)存泄露,可參看effectivejava.
51、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?
答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類ij子類之
間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。
52、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回
收
答:對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開始監(jiān)控這個(gè)對(duì)象的地址、大小以及使用情況。通常,GC采用有
向圖的方式記錄和管理堆(heap)中的所有對(duì)象。通過(guò)這種方式確定哪些對(duì)象是〃可達(dá)的“,哪些對(duì)象是〃不可達(dá)的
當(dāng)GC確定一些對(duì)象為“不可達(dá)"時(shí),GC就有責(zé)任回收這些內(nèi)存空間。可以。程序員可以手動(dòng)執(zhí)行System.gc(),
通知GC運(yùn)行,但是Java語(yǔ)言規(guī)范并不保證GC一定會(huì)執(zhí)行。
53、靜態(tài)變量和實(shí)例變量的區(qū)別?
答:statici=10;〃常量classAa;a.i=10;〃可變
54、什么是java序列化,如何實(shí)現(xiàn)java序列化?
答:序列化就是一種用來(lái)處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化.可以對(duì)流化后的對(duì)象進(jìn)
行讀寫操作,也可將流化后的對(duì)象傳輸「網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫操作時(shí)所引發(fā)的問(wèn)題。
序列化的實(shí)現(xiàn):將需要被序列化的類實(shí)現(xiàn)Serializable接口,該接口沒(méi)有需要實(shí)現(xiàn)的方法,
implementsSerializable只是為了標(biāo)注該對(duì)象是可被序列化的,然后使用一個(gè)輸出流(如:FileOutputStream)
來(lái)構(gòu)造一個(gè)ObjectOulputStream(對(duì)象流)對(duì)象,接著,使用ObjectOutputStream對(duì)象的writeObject(Objectobj)
方法就可以將參數(shù)為obj的對(duì)象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流。
55、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?
答:不可以,如果其中包含對(duì)象的method。;不能保證對(duì)象初始化.
56、寫clone。方法時(shí),通常都有一行代碼,是什么?
答:Clone有缺省行為,super,clone。;他負(fù)責(zé)產(chǎn)生正確大小的空間,并逐位復(fù)制。
57、在JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)?
答:用break;return方法。
58、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?
答:List以特定次序來(lái)持有元索,可仃重復(fù)元素。Set無(wú)法擁有重復(fù)元索,內(nèi)部排序。Map保存key-value值,
value可多值。
59、說(shuō)出一些常用的類,包,接口,請(qǐng)各舉5個(gè)
答:常用的類:BufferedReaderBufferedWriterEi1eReaderFileWirterStringInteger
常用的包:java,langjava,awtjava,iojava,utiljava,sql
常用的接口:RemoteListMapDocumentNodeList
線程編程方面
60Java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法?stop。和suspend。方法為何不推薦使
用?
答:有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
用synchronized關(guān)鍵字修飾同步方法
反對(duì)使用stop。,是因?yàn)樗话踩?。它?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那
么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問(wèn)題所在。suspend。方法容易發(fā)生死鎖。
調(diào)用suspend。的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪
問(wèn)鎖定的資源,除非被〃掛起〃的線程恢復(fù)運(yùn)行。對(duì)任何線程來(lái)說(shuō),如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任
何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend。,而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指
出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢
復(fù),則用一個(gè)notify。重新啟動(dòng)線程。
61、sleep。和wait。有什么區(qū)別?
答:sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)
依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。
wait是Object類的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只
有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。
62、同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明。
答:如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能己經(jīng)被另
一個(gè)線程寫過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。
當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該
使用異步編程,在很多情況下采用異步途徑往往更有效率。
63、啟動(dòng)一個(gè)線程是用run()還是start。?
答:?jiǎn)?dòng)?個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)
度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。
64、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
答:不能,一個(gè)對(duì)象的一?個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。
65、請(qǐng)說(shuō)出你所知道的線程同步的方法。
答:wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。
sleep。:使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是??個(gè)靜態(tài)方法,調(diào)用此方法要捕捉Intei'ruptedExceplion異
常。
notify。:?jiǎn)拘?個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某?個(gè)等待狀態(tài)的
線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。
notityAll():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。
66、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify
67、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系
答:線程指在程序執(zhí)行過(guò)程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都分?個(gè)線FK也就是程月;木
身。
Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束
68、簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同?
答:主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能
主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock
一定要求程序員手工釋放,并且必須在finally從句中釋放。
Jsp方面
69sforward和redirect的區(qū)別
答:forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問(wèn)目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過(guò)來(lái),然后把這
些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來(lái)的,所以它的地址欄中還是原來(lái)的地址。
redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來(lái)說(shuō)瀏覽器會(huì)用剛
才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request參數(shù)都可以獲取。
70、jsp有哪些內(nèi)置對(duì)象?作用分別是什么?
答:JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對(duì)應(yīng)):
request用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù)
response網(wǎng)頁(yè)傳回用戶端的回應(yīng)
pageContext網(wǎng)頁(yè)的屬性是在這里管理
session與請(qǐng)求有關(guān)的會(huì)話期
applicationservlet正在執(zhí)行的內(nèi)容
out用來(lái)傳送回應(yīng)的輸出
configservlet的構(gòu)架部件
pageJSP網(wǎng)頁(yè)本身
exception針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外
71、jsp有哪些動(dòng)作?作用分別是什么?
答:JSP共有以下6種基本動(dòng)作
jsp:include:在頁(yè)面被請(qǐng)求的時(shí)候引入一個(gè)文件。
jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。
jsp:setProperty:設(shè)置JavaBean的屬性。
jsp:getProperty:輸出某個(gè)JavaBean的屬性。
jsp:forward:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁(yè)面。
jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記
72、JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
答:動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現(xiàn)
<jsp:includepage="included.jsp"flush="true"/>它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)
態(tài)頁(yè)面,并且可以帶參數(shù)
靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面
<%@includefile="included.htm"%>
73、兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別?
答:有兩種,分別為:
<jsp:includepage="included.jsp"flush="true">
<jsp:forwardpage="nextpage.jsp"/>
前者頁(yè)面不會(huì)轉(zhuǎn)向include所指的頁(yè)面,只是顯示該頁(yè)的結(jié)果,主頁(yè)面還是原來(lái)的頁(yè)面。執(zhí)行完后還會(huì)回來(lái),相
當(dāng)于函數(shù)調(diào)用。并且可以帶參數(shù).后者完全轉(zhuǎn)向新頁(yè)面,不會(huì)再回來(lái)。相當(dāng)于got。語(yǔ)句。
74、JSP的內(nèi)置對(duì)象及方法。
答:request表示HttpServletRequest對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息,并且提供了兒個(gè)用于獲取
cookie,header,和session數(shù)據(jù)的有用的方法。
response表示HttpServletResponse對(duì)象,并提供了兒個(gè)用于設(shè)置送回瀏覽器的響應(yīng)的方法(如cookies,頭
信息等)
out對(duì)象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了兒個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。
pageContext表示一個(gè)javax.servlet.jsp.PageContext對(duì)象。它是用于方便存取各種范圍的名字空間、servlet
相關(guān)的對(duì)象的API,并且包裝了通用的servlet相關(guān)功能的方法。
session表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象。Session可以存貯用戶的狀態(tài)信息
applicator)表示一個(gè)javax.servle.ServletContext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一■個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。
page表示從該頁(yè)面產(chǎn)生的一個(gè)servlet實(shí)例
Servlet方面
75、說(shuō)一說(shuō)Servlet的生命周期?
答:servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理請(qǐng)求以及服務(wù)結(jié)束。這個(gè)生存期由
javax.servlet.Servlet接口的init,service和destroy方法表達(dá)。Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init
方法,請(qǐng)求到達(dá)時(shí)運(yùn)行其service方法,service方法自動(dòng)派遣運(yùn)行與請(qǐng)求對(duì)應(yīng)的doXXX方法(doGet,doPost)
等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。
與cgi的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過(guò)多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)
請(qǐng)求,并且其實(shí)例一般不會(huì)銷毀,而CGI對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。
76,JAVASERVLETAPI中forward。與redirect)的區(qū)別?
答:前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),
瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所
以,前者更加高效,在前者可以滿足需要時(shí),盡量使用forward。方法,并且,這樣也有助于隱藏實(shí)際的鏈接。
在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect。方法。
77、Servlet的基本架構(gòu)
答:
publicclassServletNameextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,lOException{
)
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,lOException{
)
)
78、什么情況下調(diào)用doGet()和doPost。?
答:Jsp頁(yè)面中的form標(biāo)簽里的method屬性為get時(shí)調(diào)用doGet().為post時(shí)調(diào)用doPost()?
79、servlet的生命周期
答:web容器加載servlet,生命周期開始。通過(guò)調(diào)用servlet的init()方法進(jìn)行servlet的初始化。通過(guò)調(diào)用service()
方法實(shí)現(xiàn),根據(jù)請(qǐng)求的不同調(diào)用不同的do***()方法。結(jié)束服務(wù),web容器調(diào)用servlet的destroy。方法。
80、如何現(xiàn)實(shí)servlet的單線程模式
答:<%@pageisThreadSafe="false"%>
81、頁(yè)面間對(duì)象傳遞的方法
答:request,session,application,cookie等
82、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?
答:JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡(jiǎn)易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是"類servlet".
Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分
離開來(lái)。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為Jsp的文件。JSP側(cè)重于視圖,Servlet主要
用于控制邏輯。
83、四種會(huì)話跟蹤技術(shù)
答:會(huì)話作用域ServletsJSP頁(yè)面描述
page否是代表與一-個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。一個(gè)頁(yè)面由?個(gè)編譯好的Javaservlet類(可以帶有任何
的include指令,但是沒(méi)有include動(dòng)作)表示。這既包括servlet又包括被編譯成servlet的JSP頁(yè)面
request是是代表與Web客戶機(jī)發(fā)出的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性。一個(gè)請(qǐng)求可能跨越多個(gè)頁(yè)面,涉及多
個(gè)Web組件(由于forward指令和include動(dòng)作的關(guān)系)
session是是代表與用于某個(gè)Web客戶機(jī)的一個(gè)用戶體驗(yàn)相關(guān)的對(duì)象和屬性。一個(gè)Web會(huì)話可以也經(jīng)常會(huì)跨越
多個(gè)客戶機(jī)請(qǐng)求
application是是代表與整個(gè)Web應(yīng)用程序相關(guān)的對(duì)象和屬性。這實(shí)質(zhì)上是跨越整個(gè)Web應(yīng)用程序,包括多個(gè)
頁(yè)面、請(qǐng)求和會(huì)話的一個(gè)全局作用域
84、Request對(duì)象的主要方法
答:
setAttribute(Stringname,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(Stringname):返回由name指定的屬性值
getAttributeNames():返回request對(duì)象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例
getCookies():返回客戶端的所有Cookie對(duì)象,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請(qǐng)求中的字符編碼方式
getContentLength():返回請(qǐng)求的Body的長(zhǎng)度
getHeader(Stringname):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(Stringname):返回指定名字的requestHeader的所有值,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以requestHeader的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getlnputStream():返回請(qǐng)求的輸入流,用于獲得請(qǐng)求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(Stringname):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNamesO:獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getParameterValues(Stringname):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請(qǐng)求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Booleancreate]):返回和請(qǐng)求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請(qǐng)求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號(hào)
removeAttribute(Stringname):刪除請(qǐng)求中的一個(gè)屬性
85、我們?cè)趙eb應(yīng)用開發(fā)過(guò)程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼
的字符串?
答:
PublicStringtranslate(Stringstr){
StringtempStr=
try{
tempStr=newString(str.getBytes("ISO-8859-1"),"GBKn);
tempStr=tempStr.trim();
)
catch(Exceptione){
System.err.println(e.getMessage());
}
returntempStr;
)
86、Servlet執(zhí)行時(shí)一般實(shí)現(xiàn)哪幾個(gè)方法?
答:
publicvoidinit(ServletConfigconfig)
publicServletConfiggetServletConfig()
publicStringgetServletlnfo()
publicvoidservice(ServletRequestrequest,ServletResponseresponse)
publicvoiddestroy()
Jdbc、Jdo方面
87、Class.forName的作用?為什么要用?
答:調(diào)用該訪問(wèn)返回一個(gè)以字符串指定類名的類的對(duì)象。
88、Jdo是什么?
答:JDO是Java對(duì)象持久化的新的規(guī)范,為javadataobject的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的對(duì)
象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如
JDBCAPI的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來(lái),從而集中
時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(kù)
(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫(kù)、文件、XML以及對(duì)象數(shù)據(jù)庫(kù)
(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。
89、說(shuō)出數(shù)據(jù)連接池的工作機(jī)制是什么?
答:J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接??蛻舳顺绦蛐枰B接時(shí),
池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒(méi)有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的
連接,新建連接的數(shù)量有配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)
用就可以使用這個(gè)連接。
90>Jdo是什么?
答:JDO是Java對(duì)象持久化的新的規(guī)范,為javadataobject的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的對(duì)象
的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如
JDBCAPI的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來(lái),從而集中
時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(kù)
(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫(kù)、文件、XML以及對(duì)象數(shù)據(jù)庫(kù)
(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。
Xml方面
91、xml有哪些解析技術(shù)?區(qū)別是什么?
答:有DOM,SAX,STAX等
DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問(wèn)題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較
多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問(wèn)SAX:不現(xiàn)于DOM,SAX是事
件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)
束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過(guò)在其回調(diào)事件中寫入處理代碼來(lái)處理XML文件,
適合對(duì)XML的順序訪問(wèn)
STAXStreamingAPIforXML(StAX)
92、你在項(xiàng)目中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的?
答:用到了數(shù)據(jù)存貯,信息配置兩方面。在做數(shù)據(jù)交換平臺(tái)時(shí),將不能數(shù)據(jù)源的數(shù)據(jù)組裝成XML文件,然后將
XML文件壓縮打包加密后通過(guò)網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再同XML文件中還原相關(guān)信息進(jìn)行處理。
在做軟件配置時(shí),利用XML可以很方便的進(jìn)行,軟件的各種配置參數(shù)都存貯在XML文件中。
93、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?
答:a:兩種形式dtdschema,b:本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上
發(fā)展schema的根本Fl的),c:有DOM,SAX,STAX等
DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問(wèn)題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存
較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問(wèn)
SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。
當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過(guò)在其回調(diào)事件中寫入
處理代碼來(lái)處理XML文件,適合對(duì)XML的順序訪問(wèn)
STAX:StreamingAPIforXML(StAX)
EJB方面
94、EJB2.0有哪些內(nèi)容?分別用在什么場(chǎng)合?EJB2.0和EJB1.1的區(qū)別?
答:規(guī)范內(nèi)容包括Bean提供者,應(yīng)用程序裝配者,EJB容器,EJB配置工具,EJB服務(wù)提供者,系統(tǒng)管理員。
這里面,EJB容器是EJB之所以能夠運(yùn)行的核心。EJB容器管理著EJB的創(chuàng)建,撤消,激活,去活,與數(shù)據(jù)庫(kù)
的連接等等重要的核心工作。JSP,Servlet,EJBJNDI,JDBC,JMS…
95、EJB與JAVABEAN的區(qū)另ij?
答:JavaBean是可復(fù)用的組件,對(duì)JavaBean并沒(méi)有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java類都可以是
一個(gè)Bean。但通常情況下,由于JavaBean是被容器所創(chuàng)建(如Tomcat)的,所以JavaBean應(yīng)具有一個(gè)
無(wú)參的構(gòu)造器,另夕卜,通常JavaBean還要實(shí)現(xiàn)Serializable接口用于實(shí)現(xiàn)Bean的持久性。JavaBean實(shí)
際上相當(dāng)于微軟COM模型中的本地進(jìn)程內(nèi)COM組件,它是不能被跨進(jìn)程訪問(wèn)的。EnterpriseJavaBean
相當(dāng)于DCOM,即分布式組件。它是基于Java的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB可以被遠(yuǎn)程訪問(wèn)(跨
進(jìn)程、跨計(jì)算機(jī))。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問(wèn)
真正的EJB組件,而是通過(guò)其容器訪問(wèn)。EJB容器是EJB組件的代理,EJB組件由容器所創(chuàng)建和管理??蛻敉?/p>
過(guò)容器來(lái)訪問(wèn)真正的EJB組件。
96、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說(shuō)出SessionBean和EntityBean的區(qū)別,StatefulBean和Stat
elessBean的區(qū)別。
答:EJB包括SessionBean、EntityBean.MessageDrivenBean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。
SessionBean在J2EE應(yīng)用程序中被用來(lái)完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問(wèn)數(shù)據(jù)庫(kù)、調(diào)用其他EJB組件。
EntityBean被用來(lái)代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。
對(duì)于客戶機(jī),SessionBean是一種非持久性對(duì)象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。
對(duì)于客戶機(jī),EntityBean是一種持久性對(duì)象,它代表一個(gè)存儲(chǔ)在持久性存儲(chǔ)器中的實(shí)體的對(duì)象視圖,或是一個(gè)由
現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。
SessionBean還可以再細(xì)分為StatefulSessionBean與StatelessSessionBean,這兩種的SessionBean者R
可以將系統(tǒng)邏輯放在method之中執(zhí)行,不同的是StatefulSessionBean可以記錄呼叫者的狀態(tài),因此通常來(lái)
說(shuō),一個(gè)使用者會(huì)有一個(gè)相對(duì)應(yīng)的StatefulSessionBean的實(shí)體。StatelessSessionBean雖然也是邏輯組件,
但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說(shuō)當(dāng)使用者呼叫StatelessSessionBean的時(shí)候,EJBContainer并不
會(huì)找尋特定的StatelessSessionBean的實(shí)體來(lái)執(zhí)行這個(gè)method。換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè)Stat
elessSessionBean的methods時(shí),會(huì)是同一個(gè)Bean的Instance在執(zhí)行。從內(nèi)存方面來(lái)看,StatefulSessio
nBean與StatelessSessionBean比較,StatefulSessionBean會(huì)消耗J2EEServer較多的內(nèi)存,然而State
fulSessionBean的優(yōu)勢(shì)卻在于他可以維持使用者的狀態(tài)。
97、EJB與JAVABEAN的區(qū)別?
答:JavaBean是可復(fù)用的組件,對(duì)JavaBean并沒(méi)有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java類都可以是一個(gè)
Bean。但通常情況卜.,由于JavaBean是被容器所創(chuàng)建(如Tomcat)的,所以JavaBean應(yīng)具有一個(gè)無(wú)參的
構(gòu)造器,另外,通常JavaBean還要實(shí)現(xiàn)Se
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)職業(yè)經(jīng)理人考試營(yíng)養(yǎng)與食品安全知識(shí)與試題答案
- 2025年考研西醫(yī)綜合真題答案及解析大
- 電大土木工程本科《工程地質(zhì)》在線形考(作業(yè)1至4)試題及答案
- 醫(yī)學(xué)人文考試試題及答案
- 2026字節(jié)跳動(dòng)校招試題及答案
- 初級(jí)園林綠化試題及答案
- 2026黑龍江農(nóng)業(yè)職業(yè)技術(shù)學(xué)院公開招聘博士3人參考題庫(kù)附答案
- 中國(guó)火箭公司2026校園招聘考試備考題庫(kù)附答案
- 北京市公安局輔警崗位招聘300人備考題庫(kù)附答案
- 吉安市2025年度市直事業(yè)單位公開選調(diào)工作人員【70人】備考題庫(kù)必考題
- 甲狀腺乳腺外科診療規(guī)范
- 退換貨方案及措施
- 麻醉科常用耗材分類與管理要點(diǎn)
- 材料力學(xué)性能檢驗(yàn)工安全教育培訓(xùn)手冊(cè)
- 小說(shuō)影視化改編的深度解析
- JJF 2214-2025 機(jī)動(dòng)車檢測(cè)用氣象單元校準(zhǔn)規(guī)范
- 嚴(yán)格招標(biāo)需求管理制度
- 外科洗手操作標(biāo)準(zhǔn)與流程
- 2024年注會(huì)考試《財(cái)務(wù)管理》真題及答案
- 種植樹木協(xié)議合同協(xié)議
- 2024~2025學(xué)年安徽省銅陵市銅官區(qū)第一學(xué)期期末質(zhì)量監(jiān)測(cè) 八年級(jí)英語(yǔ)試卷(含答案無(wú)聽(tīng)力原文及音頻)
評(píng)論
0/150
提交評(píng)論