1. 程式人生 > >Java基礎面試題,你會幾個?

Java基礎面試題,你會幾個?

JAVA面試題相關基礎知識

1、面向物件的特徵有哪些方面

①抽象:

抽象是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。

②繼承:

繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。

③封裝:

封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。

④多型性:

多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,很好的解決了應用程式函式同名問題。

2、String是最基本的資料型別嗎?

基本資料型別包括byte、int、char、long、float、double、boolean和short。

java.lang.String類是final型別的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類

3、int 和 Integer 有什麼區別?

Java 提供兩種不同的型別:引用型別和原始型別(或內建型別)。Int是java的原始資料型別,Integer是java為int提供的封裝類。

4、String 和StringBuffer的區別?

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元資料。

5、執行時異常與一般異常有何異同?

異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。

6、說出Servlet的生命週期,並說出Servlet和CGI的區別?

Servlet被伺服器例項化後,容器執行其init方法,請求到達時執行其service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將例項銷燬的時候呼叫其destroy方法。

與cgi的區別在於servlet處於伺服器程序中,它通過多執行緒方式執行其service方法,一個例項可以服務於多個請求,並且其例項一般不會銷燬,而CGI對每個請求都產生新的程序,服務完成後銷燬,所以效率上低於servlet。

7、說出ArrayList,Vector, LinkedList的儲存效能和特性

ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。

8、EJB是基於哪些技術實現的?

EJB包括Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JAT等技術實現。

SessionBean在J2EE應用程式中被用來完成一些伺服器端的業務操作,例如訪問資料庫、呼叫其他EJB元件。EntityBean被用來代表應用系統中用到的資料。

對於客戶機,SessionBean是一種非永續性物件,它實現某些在伺服器上執行的業務邏輯。

對於客戶機,EntityBean是一種永續性物件,它代表一個儲存在永續性儲存器中的實體的物件檢視,或是一個由現有企業應用程式實現的實體。

Session Bean 還可以再細分為 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean都可以將系統邏輯放在 method之中執行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體。

9、Collection 和 Collections的區別?

Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.

Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作。

10、&和&&的區別?

&是位運算子,表示按位與運算,&&是邏輯運算子,表示邏輯與(and)。

11、HashMap和Hashtable的區別?

HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable。

HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 必須為之提供外同步。

12、final, finally, finalize的區別?

final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

13、sleep() 和 wait() 有什麼區別?

sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。

wait是Object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。

14、Overload和Override的區別?Overloaded的方法是否可以改變返回值的型別?

方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被“遮蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overloading)。Overloaded的方法是可以改變返回值的型別。

15、error和exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。

exception 表示一種設計或實現問題。也是說,它表示如果程式執行正常,從不會發生的情況。

16、同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明。

如果資料將線上程間共享。例如正在寫的資料以後可能被另一個執行緒讀到,或者正在讀的資料可能已經被另一個執行緒寫過了,那麼這些資料是共享資料,必須進行同步存取。

當應用程式在物件上呼叫了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,應該使用非同步程式設計,在很多情況下采用非同步途徑往往更有效率。

17、heap和stack有什麼區別?

棧是一種線形集合,其新增和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。堆是棧的一個組成元素

18、forward 和redirect的區別?

forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器傳送的內容是從哪兒來的,所以它的位址列中還是原來的地址。

redirect是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有引數重新請求,所以session,request引數都可以獲取。

19、Static Nested Class 和 Inner Class的不同?

Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項被例項化。而通常的內部類需要在外部類例項化後才能例項化。

20、JSP中動態INCLUDE與靜態INCLUDE的區別?

動態INCLUDE用jsp:include動作實現 它總是會檢查所含檔案中的變化,適合用於包含動態頁面,並且可以帶引數。

靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面<%@ include file="included.htm" %>

21、什麼時候用assert?

assertion(斷言)在軟體開發中是一種常用的除錯方式,很多開發語言中都支援這種機制。在實現中,assertion是在程式中的一條語句,它對一個boolean表示式進行檢查,一個正確程式必須保證這個boolean表示式的值為true;如果該值為false,說明程式已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程式最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高效能,在軟體釋出後,assertion檢查通常是關閉的。

22、GC是什麼? 為什麼要有GC?

GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,Java語言沒有提供釋放已分配記憶體的顯示操作方法。

23、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換型別)

short s1 = 1; s1 += 1;(可以正確編譯)

24、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回與引數最接近的長整數,引數加1/2後求其floor.

25、String s = new String("xyz");建立了幾個String Object?

兩個

小編是一個有著5年工作經驗的java程式設計師,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裡有很多學習java的小夥伴,我創立了一個2000人學習扣群,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!

26、設計4個執行緒,其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減少1。寫出程式。

以下程式使用內部類實現執行緒,對j增減的時候沒有考慮順序問題。

public class ThreadTest1{

private int j;

public static void main(String args[]){

ThreadTest1 tt=new ThreadTest1();

Inc inc=tt.new Inc();

Dec dec=tt.new Dec();

for(int i=0;i<2;i++){

Thread t=new Thread(inc);

t.start();

t=new Thread(dec);

t.start();

}

}

private synchronized void inc(){

j++;

System.out.println(Thread.currentThread().getName()+"-inc:"+j);

}

private synchronized void dec(){

j--;

System.out.println(Thread.currentThread().getName()+"-dec:"+j);

}

class Inc implements Runnable{

public void run(){

for(int i=0;i<100;i++){

inc();

}

}

}

class Dec implements Runnable{

public void run(){

for(int i=0;i<100;i++){

dec();

}

}

}

}

27、Java有沒有goto?

java中的保留字,現在沒有在java中使用。

28、啟動一個執行緒是用run()還是start()?

啟動一個執行緒是呼叫start()方法,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由JVM排程並執行。這並不意味著執行緒會立即執行。run()方法可以產生必須退出的標誌來停止一個執行緒。

29、應用伺服器有那些?

BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat

30、介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?

介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的建構函式。

31、說出資料連線池的工作機制是什麼?

J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回一個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅動程式將此連線表記為空閒,其他呼叫可以使用這個連線。

32、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

都不能

33、陣列有沒有length()這個方法? String有沒有length()這個方法?

陣列沒有length()這個方法,有length的屬性。String有有length()這個方法。

34、Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?

Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。

equals()和==方法決定引用值是否指向同一物件equals()在類中被覆蓋,為的是當兩個分離的物件的內容和型別相配的話,返回真值。

35、構造器Constructor是否可被override?

構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被過載Overloading。

36、是否可以繼承String類?

String類是final類故不可以繼承。

37、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一個整數表示式。因此傳遞給 switch 和 case 語句的引數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。

38、try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,在return前還是後?

會執行,在return前執行。

39、程式設計題: 寫一個Singleton出來。

Singleton模式主要作用是保證在Java應用程式中,一個類Class只有一個例項存在。

一般Singleton模式通常有幾種種形式:

種形式: 定義一個類,它的建構函式為private的,它有一個static的private的該類變數,在類初始化時例項話,通過一個public的getInstance方法獲取對它的引用,繼而呼叫其中的方法。

public class Singleton {

private Singleton(){}

//在自己內部定義自己一個例項,是不是很奇怪?

//注意這是private 只供內部呼叫

private static Singleton instance = new Singleton();

//這裡提供了一個供外部訪問本class的靜態方法,可以直接訪問

public static Singleton getInstance() {

return instance;

}

}

第二種形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

//這個方法比上面有所改進,不用每次都進行生成物件,只是次

//使用時生成例項,提高了效率!

if (instance==null)

instance=new Singleton();

return instance;   }

}

40、Java的介面和C++的虛類的相同和不同處

由於Java不支援多繼承,而有可能某個類或物件要使用分別在幾個類或物件裡面的方法或屬性,現有的單繼承機制不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現程式碼。當一個類實現了介面以後,該類要實現接口裡面所有的方法和屬性,並且接口裡面的屬性在預設狀態下面都是public static,所有方法預設情況下是public.一個類可以實現多個介面。

41、Java中的異常處理機制的簡單原理和應用

當JAVA程式違反了JAVA的語義規則時,JAVA虛擬機器會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內建的語義檢查。例如陣列下標越界,會引發IndexOutOfBoundsException;訪問null的物件時會引發NullPointerException。另一種情況是JAVA允許程式設計師擴充套件這種語義檢查,程式設計師可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。

42、請說出你所知道的執行緒同步的方法

wait():使一個執行緒處於等待狀態,並且釋放所持有的物件的lock。

sleep():使一個正在執行的執行緒處於睡眠狀態,是一個靜態方法,呼叫此方法要捕捉InterruptedException異常。

notify():喚醒一個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某一個等待狀態的執行緒,而是由JVM確定喚醒哪個執行緒,而且不是按優先順序。

Allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒一個物件的鎖,而是讓它們競爭。

43、你所知道的集合類都有哪些?主要方法?

最常用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、儲存和操作任何型別物件的元素列表。 List 適用於按數值索引訪問元素的情形。

Map 提供了一個更通用的元素儲存方法。 Map 集合類用於儲存元素對(稱作“鍵”和“值”),其中每個鍵對映到一個值。

44、描述一下JVM載入class檔案的原理機制?

JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java執行時系統元件。它負責在執行時查詢和裝入類檔案的類。

45、char型變數中能不能存貯一箇中文漢字?為什麼?

能夠定義成為一箇中文的,因為java中以unicode編碼,一個char佔2個位元組,所以放一箇中文是沒問題的

46、多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?

多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面

同步的實現方面有兩種,分別是synchronized,wait與notify

47、JSP的內建物件及方法

request表示HttpServletRequest物件。它包含了有關瀏覽器請求的資訊,並且提供了幾個用於獲取cookie, header, 和session資料的有用的方法。

response表示HttpServletResponse物件,並提供了幾個用於設定送回 瀏覽器的響應的方法(如cookies,頭資訊等)

out物件是javax.jsp.JspWriter的一個例項,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。

pageContext表示一個javax.servlet.jsp.PageContext物件。它是用於方便存取各種範圍的名字空間、servlet相關的物件的API,並且包裝了通用的servlet相關功能的方法。

session表示一個請求的javax.servlet.http.HttpSession物件。Session可以存貯使用者的狀態資訊

applicaton 表示一個javax.servle.ServletContext物件。這有助於查詢有關servlet引擎和servlet環境的資訊

config表示一個javax.servlet.ServletConfig物件。該物件用於存取servlet例項的初始化引數。

page表示從該頁面產生的一個servlet例項

48、執行緒的基本概念、執行緒的基本狀態以及狀態之間的關係

執行緒指在程式執行過程中,能夠執行程式程式碼的一個執行單位,每個程式至少都有一個執行緒,也是程式本身。

Java中的執行緒有四種狀態分別是:執行、緒、掛起、結束。

49、servlet的生命週期

web容器載入servlet,生命週期開始。通過呼叫servlet的init()方法進行servlet的初始化。通過呼叫service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器呼叫servlet的destroy()方法。

50、如何現實servlet的單執行緒模式

<%@ page isThreadSafe=”false”%>

51、頁面間物件傳遞的方法

request,session,application,cookie等

52、JSP和Servlet有哪些相同點和不同點,他們之間的聯絡是什麼?

JSP是Servlet技術的擴充套件,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java檔案中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。JSP側重於檢視,Servlet主要用於控制邏輯。

52、J2EE是技術還是平臺還是框架?

J2EE本身是一個標準,一個為企業分散式應用的開發提供的標準平臺。

J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。

53、我們在web應用開發過程中經常遇到輸出某種編碼的字元,如iso8859-1等,如何輸出一個某種編碼的字串?

Public String translate (String str) {

String tempStr = "";

try {

tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

tempStr = tempStr.trim();

}

catch (Exception e) {

System.err.println(e.getMessage());

}

return tempStr;

}

54、EJB的幾種型別

會話(Session)Bean ,實體(Entity)Bean 訊息驅動的(Message Driven)Bean

會話Bean又可分為有狀態(Stateful)和無狀態(Stateless)兩種

實體Bean可分為Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種

55、如何給weblogic指定大小的記憶體?

在啟動Weblogic的指令碼中(位於所在Domian對應伺服器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調整最小記憶體為32M,200M

56、如何啟動時不需輸入使用者名稱與密碼?

修改服務啟動檔案,增加 WLS_USER和WLS_PW項。也可以在boot.properties檔案中增加加密過的使用者名稱和密碼.

57、在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或連線池等相關資訊進行配置後,實際儲存在什麼檔案中?

儲存在此Domain的config.xml檔案中,它是伺服器的核心配置檔案。

58、如何檢視在weblogic中已經發布的EJB?

可以使用管理控制檯,在它的Deployment中可以檢視所有已釋出的EJB

59、CORBA是什麼?用途是什麼?

CORBA 標準是公共物件請求代理結構(Common Object Request Broker Architecture),由物件管理組織 (Object Management Group,縮寫為 OMG)標準化。它的組成是介面定義語言(IDL), 語言繫結(binding:也譯為聯編)和允許應用程式間互操作的協議。 其目的為:用不同的程式設計語言書寫在不同的程序中執行,為不同的作業系統開發。

60、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法?

Session Facade Pattern:使用SessionBean訪問EntityBean

Message Facade Pattern:實現非同步呼叫

EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問

Data Transfer Object Factory:通過DTO Factory簡化EntityBean資料提供特性

Generic Attribute Access:通過AttibuteAccess介面簡化EntityBean資料提供特性

Business Interface:通過遠端(本地)介面和Bean類實現相同介面規範業務邏輯一致性

EJB架構的設計好壞將直接影響系統的效能、可擴充套件性、可維護性、元件可重用性及開發效率。專案越複雜,專案隊伍越龐大則越能體現良好設計的重要性。

61、Servlet執行時一般實現哪幾個方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

62、j2ee常用的設計模式?說明工廠模式

Java中的23種設計模式:

Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),

Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),

Adapter(介面卡模式), Bridge(橋樑模式), Composite(合成模式),

Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),

Command(命令模式), Interpreter(直譯器模式), Visitor(訪問者模式),

Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),

Observer(觀察者模式), State(狀態模式), Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)

工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某一個類的例項,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類例項。當得到子類的例項後,開發人員可以呼叫基類中的方法而不必考慮到底返回的是哪一個子類的例項。

63、EJB需直接實現它的業務介面或Home介面嗎,請簡述理由。

遠端介面和Home介面不需要直接實現,他們的實現程式碼是由伺服器產生的,程式執行中對應實現類會作為對應介面型別的例項被使用。

64、排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序。

排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(氣泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)

快速排序的虛擬碼。

/ /使用快速排序方法對a[ 0 :n- 1 ]排序

從a[ 0 :n- 1 ]中選擇一個元素作為m i d d l e,該元素為支點

把餘下的元素分割為兩段left 和r i g h t,使得l e f t中的元素都小於等於支點,而right 中的元素都大於等於支點

遞迴地使用快速排序方法對left 進行排序

遞迴地使用快速排序方法對right 進行排序

所得結果為l e f t + m i d d l e + r i g h t

65、一個“.java”原始檔中是否可以包括多個類(不是內部類)?有什麼限制?

可以,必須只有一個類名與檔名相同。

66、MVC的各個部分都有那些技術來實現?如何實現?

MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB元件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的元件實現。這些元件可以進行互動和重用。

67、java中有幾種型別的流?JDK為每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

位元組流,字元流。位元組流繼承於InputStream OutputStream,字元流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高效能和使用方便。

68、java中會存在記憶體洩漏嗎,請簡單描述。

會,如:int i,i2; return (i-i2); //when i為足夠大的正數,i2為足夠大的負數。結果會造成溢位,導致錯誤。

69、java中實現多型的機制是什麼?

方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。

70、靜態變數和例項變數的區別?

static i = 10; //常量

class A a; a.i =10;//可變

71、什麼是java序列化,如何實現java序列化?

序列化是一種用來處理物件流的機制,所謂物件流也是將物件的內容進行流化。可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。序列化是為了解決在對物件流進行讀寫操作時所引發的問題。

序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是為了標註該物件是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(物件流)物件,接著,使用ObjectOutputStream物件的writeObject(Object obj)方法可以將引數為obj的物件寫出(即儲存其狀態),要恢復的話則用輸入流。

72、是否可以從一個static方法內部發出對非static方法的呼叫?

不可以,如果其中包含物件的method();不能保證物件初始化.

73、J2EE是什麼?

J2EE是Sun公司提出的多層(multi-diered),分散式(distributed),基於元件(component-base)的企業級應用模型(enterpriese application model).在這樣的一個應用系統中,可按照功能劃分為不同的元件,這些元件又可在不同計算機上,並且處於相應的層次(tier)中。所屬層次包括客戶層(clietn tier)元件,web層和元件,Business層和元件,企業資訊系統(EIS)層。

74、說出一些常用的類,包,介面,請各舉5個

常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer

常用的包:java.lang java.awt java.io java.util java.sql

常用的介面:Remote List Map Document NodeList

75、jsp有哪些動作?作用分別是什麼?

JSP共有以下6種基本動作 jsp:include:在頁面被請求的時候引入一個檔案。 jsp:useBean:尋找或者例項化一個JavaBean。 jsp:setProperty:設定JavaBean的屬性。 jsp:getProperty:輸出某個JavaBean的屬性。 jsp:forward:把請求轉到一個新的頁面。 jsp:plugin:根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記。

JAVA程式碼查錯

1.

abstract class Name {

private String name;

public abstract boolean isStupidName(String name) {}

}

答案: 錯。abstract method必須以分號結尾,且不帶花括號。

2.

public class Something {

void doSomething () {

private String s = "";

int l = s.length();

}

}

答案: 錯。區域性變數前不能放置任何訪問修飾符 (private,public,和protected)。final可以用來修飾區域性變數

(final如同abstract和strictfp,都是非訪問修飾符,strictfp只能修飾class和method而非variable)。

3.

abstract class Something {

private abstract String doSomething ();

}

答案: 錯。abstract的methods不能以private修飾。abstract的methods是讓子類implement(實現)具體細節的,怎麼可以用private把abstract

method封鎖起來呢? (同理,abstract method前不能加final)。

4.

public class Something {

public int addOne(final int x) {

return ++x;

}

}

答案: 錯。int x被修飾成final,意味著x不能在addOne method中被修改。

5.

public class Something {

public static void main(String[] args) {

Other o = new Other();

new Something().addOne(o);

}

public void addOne(final Other o) {

o.i++;

}

}

class Other {

public int i;

}

答案: 正確。在addOne method中,引數o被修飾成final。如果在addOne method裡我們修改了o的reference

(比如: o = new Other();),那麼如同上例這題也是錯的。但這裡修改的是o的member vairable

(成員變數),而o的reference並沒有改變。

6.

class Something {

int i;

public void doSomething() {

System.out.println("i = " + i);

}

}

答案: 正確。輸出的是"i = 0"。int i屬於instant variable (例項變數,或叫成員變數)。instant variable有default value。int的default value是0。

7.

class Something {

final int i;

public void doSomething() {

System.out.println("i = " + i);

}

}

答案: 錯。final int i是個final的instant variable (例項變數,或叫成員變數)。final的instant variable沒有default value,必須在constructor (構造器)結束之前被賦予一個明確的值。可以修改為"final int i = 0;"。

8.

public class Something {

public static void main(String[] args) {

Something s = new Something();

System.out.println("s.doSomething() returns " + doSomething());

}

public String doSomething() {

return "Do something ...";

}

}

答案: 錯。看上去在main裡call doSomething沒有什麼問題,畢竟兩個methods都在同一個class裡。但仔細看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能訪問non-static instant variable。

小編是一個有著5年工作經驗的java程式設計師,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裡有很多學習java的小夥伴,我創立了一個2000人學習扣群,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!

9.

此處,Something類的檔名叫OtherThing.java

class Something {

private static void main(String[] something_to_do) {

System.out.println("Do something ...");

}

}

答案: 正確。從來沒有人說過Java的Class名字必須和其檔名相同。但public class的名字必須和檔名相同。

10.

interface A{

int x = 0;

}

class B{

int x =1;

}

class C extends B implements A {

public void pX(){

System.out.println(x);

}

public static void main(String[] args) {

new C().pX();

}

}

答案:錯誤。在編譯時會發生錯誤(錯誤描述不同的JVM有不同的資訊,意思是未明確的x呼叫,兩個x都匹配(象在同時import java.util和java.sql兩個包時直接宣告Date一樣)。對於父類的變數,可以用super.x來明確,而介面的屬性預設隱含為 public static final.所以可以通過A.x來明確。