干貨來了!| 125 條常見的 java 面試筆試題大匯總 |(50/125)| 日更中!
21、heap和 stack有什么區(qū)別。
棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式 進(jìn)行處理。堆是棧的一個組成元素
22、forward 和 redirect 的區(qū)別?
forward 是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的 URL,把那個 URL 的響應(yīng)內(nèi) 容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒 來的,所以它的地址欄中還是原來的地址。 redirect 就是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,一般來 說瀏覽器會用剛才請求的所有參數(shù)重新請求,所以 session,request參數(shù)都可以獲取。?
23、EJB 與 JAVA BEAN 的區(qū)別?
Java Bean 是可復(fù)用的組件,對Java Bean 并沒有嚴(yán)格的規(guī)范,理論上講,任何一個 Java 類都可以是一個 Bean。但通常情況下,由于 Java Bean 是被容器所創(chuàng)建(如 Tomcat)的, 所以 Java Bean 應(yīng)具有一個無參的構(gòu)造器,另外,通常 Java Bean 還要實(shí)現(xiàn) Serializable 接口 用于實(shí)現(xiàn) Bean 的持久性。Java Bean 實(shí)際上相當(dāng)于微軟 COM 模型中的本地進(jìn)程內(nèi) COM 組 件,它是不能被跨進(jìn)程訪問的。Enterprise Java Bean 相當(dāng)于 DCOM,即分布式組件。它是 基于 Java 的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB 可以被遠(yuǎn)程訪問(跨進(jìn)程、跨計算機(jī))。 但 EJB 必須被布署在諸如 Webspere、WebLogic 這樣的容器中,EJB 客戶從不直接訪問真正 的 EJB 組件,而是通過其容器訪問。EJB 容器是 EJB 組件的代理, EJB 組件由容器所創(chuàng)建 和管理??蛻敉ㄟ^容器來訪問真正的 EJB 組件。
24、Static Nested Class 和 Inner Class 的不同。
Static Nested Class 是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被 實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。
25、JSP中動態(tài) INCLUDE 與靜態(tài) INCLUDE的區(qū)別??
動態(tài) INCLUDE 用 jsp:include 動作實(shí)現(xiàn) <jsp:include page="included.jsp" flush="true" /> 它總是會檢查所含文件中的變化,適合用于包含動態(tài)頁面,并且可以帶參數(shù)。靜態(tài)INCLUDE 用 include 偽碼實(shí)現(xiàn) ,定不會檢查所含文件的變化,適用于包含靜態(tài)頁面 <%@ include file="included.htm" %>26、什么時候用assert。 assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機(jī)制。 在實(shí)現(xiàn)中,assertion 就是在程序中的一條語句,它對一個 boolean 表達(dá)式進(jìn)行檢查,一個正 確程序必須保證這個 boolean 表達(dá)式的值為 true;如果該值為 false,說明程序已經(jīng)處于不正 確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來說,assertion 用于保證程序最基本、關(guān)鍵的正 確性。assertion 檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布后,assertion 檢 查通常是關(guān)閉的。
27、GC 是什么? 為什么要有GC??
GC 是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方, 忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java 提供的 GC 功能可以自 動監(jiān)測對象是否超過作用域從而達(dá)到自動回收內(nèi)存的目的,Java 語言沒有提供釋放已分配內(nèi) 存的顯示操作方法。?
28、short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么 錯?
short s1 = 1; s1 = s1 + 1; (s1+1 運(yùn)算結(jié)果是 int 型,需要強(qiáng)制轉(zhuǎn)換類型) short s1 = 1; s1 += 1;(可以正確編譯)
29、Math.round(11.5)等於多少? Math.round(-11.5)等於多少??
Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回與參數(shù)最接近的長整數(shù),參數(shù)加 1/2 后求其 floor.?
30、String s = new String("xyz");創(chuàng)建了幾個String Object??
兩個
31、EJB 包括(SessionBean,EntityBean)說出他們的生命周期,及 如何管理事務(wù)的? SessionBean: Stateless Session Bean 的生命周期是由容器決定的,當(dāng)客戶機(jī)發(fā)出請求 要建立一個 Bean 的實(shí)例時,EJB 容器不一定要創(chuàng)建一個新的 Bean 的實(shí)例供客戶機(jī)調(diào)用,而 是隨便找一個現(xiàn)有的實(shí)例提供給客戶機(jī)。當(dāng)客戶機(jī)第一次調(diào)用一個 Stateful SessionBean 時, 容器必須立即在服務(wù)器中創(chuàng)建一個新的 Bean 實(shí)例,并關(guān)聯(lián)到客戶機(jī)上,以后此客戶機(jī)調(diào)用 Stateful Session Bean 的方法時容器會把調(diào)用分派到與此客戶機(jī)相關(guān)聯(lián)的 Bean 實(shí)例。 EntityBean:Entity Beans 能存活相對較長的時間,并且狀態(tài)是持續(xù)的。只要數(shù)據(jù)庫中的 數(shù)據(jù)存在,Entity beans 就一直存活。而不是按照應(yīng)用程序或者服務(wù)進(jìn)程來說的。即使 EJB 容器崩潰了,Entity beans 也是存活的。Entity Beans 生命周期能夠被容器或者 Beans 自己管 理。 EJB 通過以下技術(shù)管理實(shí)務(wù):對象管理組織(OMG)的對象實(shí)務(wù)服務(wù)(OTS),Sun Microsystems 的 Transaction Service(JTS)、 Java Transaction API(JTA),開發(fā)組( X/Open) 的 XA 接口。
32、應(yīng)用服務(wù)器有那些??
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server, jBoss,Tomcat
33、給我一個你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException,IndexOutOfBoundsException, MissingResourceException, NegativeArraySize Exception, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException?
34、接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類 (concrete class)??
接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但 前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。 35、List, Set, Map是否繼承自Collection 接口? List,Set 是,Map 不是 36、說出數(shù)據(jù)連接池的工作機(jī)制是什么? J2EE 服務(wù)器啟動時會建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接???戶端程序需要連接時,池驅(qū)動程序會返回一個未使用的池連接并將其表記為忙。如果當(dāng)前沒 有空閑連接,池驅(qū)動程序就新建一定數(shù)量的連接,新建連接的數(shù)量由配置參數(shù)決定。當(dāng)使用 的池連接調(diào)用完成后,池驅(qū)動程序?qū)⒋诉B接表記為空閑,其他調(diào)用就不可以使用這個連接。
37、abstract 的 method 是否可同時是 static,是否可同時是 native, 是否可同時是synchronized?
都不能
38、數(shù)組有沒有l(wèi)ength()這個方法? String 有沒有 length()這個方法?
數(shù)組沒有 length()這個方法,有 length 的屬性。String 有有 length()這個方法。
39、Set 里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是 equals()? 它們有何區(qū)別?
Set 里的元素是不能重復(fù)的,那么用 iterator()方法來區(qū)分重復(fù)與否。 equals()是判讀兩個 Set 是否相等。 equals()和==方法決定引用值是否指向同一對象 equals()在類中被覆蓋,為的是當(dāng)兩個分 離的對象的內(nèi)容和類型相配的話,返回真值。
40、構(gòu)造器Constructor是否可被 override??
構(gòu)造器 Constructor 不能被繼承,因此不能重寫 Overriding,但可以被重載 Overloading。
41、是否可以繼承String 類?
String 類是 final 類故不可以繼承。 42、swtich是否能作用在 byte 上,是否能作用在 long 上,是否能作 用在 String 上? switch(expr1)中,expr1 是一個整數(shù)表達(dá)式。因此傳遞給 switch 和 case 語句的參數(shù) 應(yīng)該是 int、 short、 char 或者 byte。long,string 都不能作用于 swtich。?
43、try {}里有一個 return 語句,那么緊跟在這個 try 后的 finally {}里的 code 會不會被執(zhí)行, 什么時候被執(zhí)行,在 return前還是后??
會執(zhí)行,在 return前執(zhí)行。?
44、編程題: 用最有效率的方法算出2 乘以 8 等於幾?
2 << 3
45、兩個對象值相同(x.equals(y) == true),但卻可有不同的 hash code, 這句話對不對??
不對,有相同的 hash code。
46、當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變 化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞??
是值傳遞。Java 編程語言只有值傳遞參數(shù)。當(dāng)一個對象實(shí)例作為一個參數(shù)被傳遞到方 法中時,參數(shù)的值就是對該對象的引用。對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的 引用是永遠(yuǎn)不會改變的。
47、當(dāng)一個線程進(jìn)入一個對象的一個 synchronized 方法后,其它線程是否可進(jìn)入此對象的其 它方法??
不能,一個對象的一個 synchronized 方法只能由一個線程訪問。
48、編程題: 寫一個 Singleton出來。
Singleton 模式主要作用是保證在 Java 應(yīng)用程序中,一個類 Class 只有一個實(shí)例存在。一 般 Singleton 模式通常有幾種種形式: 第一種形式: 定義一個類,它的構(gòu)造函數(shù)為 private 的,它有一個 static 的 private 的該類 變量,在類初始化時實(shí)例話,通過一個 public 的 getInstance 方法獲取對它的引用,繼而調(diào)用 其中的方法。 public class Singleton { private Singleton(){} //在自己內(nèi)部定義自己一個實(shí)例,是不是很奇怪? //注意這是 private 只供內(nèi)部調(diào)用 private static Singleton instance = new Singleton(); //這里提供了一個供外部訪問本 class 的靜態(tài)方法,可以直接訪問 public static Singleton getInstance() { return instance; } } 第二種形式: public class Singleton { private static Singleton instance = null;public static synchronized Singleton getInstance() { //這個方法比上面有所改進(jìn),不用每次都進(jìn)行生成對象,只是第一次 //使用時生成實(shí)例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } 其他形式: 定義一個類,它的構(gòu)造函數(shù)為 private 的,所有方法為 static 的。一般認(rèn)為第一種形式要 更加安全些?
49、Java的接口和 C++的虛類的相同和不同處。
由于 Java 不支持多繼承,而有可能某個類或?qū)ο笠褂梅謩e在幾個類或?qū)ο罄锩娴姆?法或?qū)傩裕F(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因為接 口中沒有任何實(shí)現(xiàn)代碼。當(dāng)一個類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性 , 并且接口里面的屬性在默認(rèn)狀態(tài)下面都是 public static,所有方法默認(rèn)情況下是 public.一個類 可以實(shí)現(xiàn)多個接口。
50、Java中的異常處理機(jī)制的簡單原理和應(yīng)用。
當(dāng) JAVA 程序違反了 JAVA 的語義規(guī)則時,JAVA 虛擬機(jī)就會將發(fā)生的錯誤表示為一個 異常。違反語義規(guī)則包括 2 種情況。一種是 JAVA類庫內(nèi)置的語義檢查。例如數(shù)組下標(biāo)越界, 會引發(fā) IndexOutOfBoundsException;訪問 null 的對象時會引發(fā) NullPointerException。另一種 情況就是 JAVA允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在 何時用 throw 關(guān)鍵字引發(fā)異常。所有的異常都是 java.lang.Throwable 的子類。