1. 程式人生 > >java面試題集

java面試題集

  
1.	選擇語句case中,允許使用的值有哪些?  答案:int,short,char,byte(都在int範圍之內,且是整數)
12.Collection與Collections的區別?
答案:Collection是一個介面,但 Collections卻是一個輔助類,裡面有很多靜態的工具方法。而且很有用的。如:reverse(List list);sort(List list, Comparator c)等。Collections沒有實現任何介面。它直接繼承了Object。
17.普通內部類不可以擁有靜態變數,但靜態內部類可以。
	 File類沒有 任何 處理檔案內容的方法。
InputStream 和 OutputStream 是 抽象類, DataInput 和 DataOutput是 介面。DataInputStream實現了DataInput介面。
18.面向物件的特徵有哪些方面 ?
	答案:最基本特徵:封裝,繼承,多型。
		其他特徵:抽象關聯,聚合,組合,內聚,耦合
19.String是最基本的資料型別嗎? String 和StringBuffer的區別?
	答案:String不是一最基本的資料型別。
	STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字串中的內容經常
進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法 
20.int 和 Integer 有什麼區別 
	答案:int是基本型別。Integer是引用型別。Integer可以把String轉換成int。
21.執行時異常與一般異常有何異同? 
答案:異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。
22.說出一些常用的類,包,介面,請各舉5個?
答案:常用類-System,ArrayList,FileInputStream,Thread,Socket.
		常用的包-java.io,java.util,java.sql,java.javax.naming,java.net
	常用介面-Collection,Connection, Cloneable, Comparable, Serializable
23.說出ArrayList,Vector, LinkedList的儲存效能和特性.
答案:ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。  
25.陣列轉換問題。
	Object[] object  =  new Person[2];
	Person [] person  =  new Person [3];
	person  =  (Person [])object;//可以轉換
	int[] i = new int[2];
	long[] l = new int[3];
	i = (long[])l;//不可以轉換
 
27.談談final, finally, finalize的區別。
答案:final 用於宣告屬性,方法和類,分別表示屬性不可變,注意:如果是基本型別說明變
量本身不能改變,如果是引用型別,說明它不能指向其他的物件了。但物件還是可以改變
的。方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示無論是否出現異常總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。
28.Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)? 
    答案:可以繼承其他類或完成其他介面,在swing程式設計中常用此方式。
29.Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。 
    答案:Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項       
被例項化。而通常的內部類需要在外部類例項化後才能例項化。
30.&和&&的區別。 
    答案:&是位運算子,表示按位與運算,&&是邏輯運算子,表示邏輯與(and).
另外,&也可以用於邏輯運算,與&&的區別在於&是非短路運算子,&&是短路運算子
31.HashMap和Hashtable的區別。 
    答案:HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都實現了Map介面,  
主要區別在於HashMap允許空(null)鍵值(key)與空值(value),由於非執行緒安全,效率上可能高於Hashtable,Hashtable不允許有空(null)鍵值(key)與空值(value)。
32.什麼時候用assert? 
答案:1.4新增關鍵字(語法),用於測試boolean表示式狀態,可用於除錯程式。使用方法 assert <boolean表示式>,表示如果表示式為真(true),則下面的語句執行,否則丟擲AssertionError。
33.GC是什麼? 為什麼要有GC? 
答案:GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,Java語言沒有提供釋放已分配記憶體的顯式操作方法。 
34.String s = new String("xyz");建立了幾個String Object? 
答案:兩個,一個是物件,一個是物件的引用。
35.Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 
答案:Math.round(11.5)==12
Math.round(-11.5)==-11,總是返回接近0的數。
36.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;(沒有錯,s1==2)
37.sleep() 和 wait() 有什麼區別? 
答案:sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間(休息),把執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復,時間到了會繼續執行。呼叫sleep不會釋放物件鎖。
wait是Object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。
38.Java有沒有goto語句? 
答案:沒有
39.陣列有沒有length()這個方法? String有沒有length()這個方法?
答案:陣列沒有length()這個方法,有length的屬性。
String有length()這個方法。
40.陣列是不是基本型別?
	答案:不是。
41.Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?
答案:方法的重寫Overriding和過載Overloading是Java多型性的不同表現。
過載Overload是一個類中多型性的一種表現,方法名必需相同,引數列表必需不同.(長度不同或型別不同),與返回值型別沒有關係. 構造器也可以過載.方法名和引數列表都相同,只有返回型別不相同則是方法重複定義.編譯出錯. Overloaded的方法是可以改變返回值的型別。
重寫Override是父類與子類之間多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被“遮蔽”了。
42.Set裡的元素能重複嗎?那麼用什麼方法區分是否重複?
    答案:Set裡的元素是不能重複的,如果重複就重複的就不加到裡面。用iterator()方法來區分      
重複與否。應該覆蓋equals()判斷兩個Set是否相等。

43.”==”與equal有何區別?
答案:“==”比較的是記憶體地址,equal比較的是內容本身。
44.給我一個你最常見到的runtime exception。
	答案:IndexOutOfBoundsException 陣列越界
	NullPointerException 空指標異常
	SystemException 系統異常
45.error和exception有什麼區別?
答案:Error表示系統級的錯誤和程式不必處理的異常,我們無法處理它。 
Exception表示是可以捕捉或者需要程式進行處理的異常。 
46.List, Set, Map是否繼承自Collection介面?
答案:List,Set是。Map不是
47.abstract class和interface有什麼區別?
答案:一個只能繼承一個抽象類,但卻可以實現多個介面。抽象類中可以有也可以沒有抽
象方法。並且可以定義和常規類一樣的變數和方法。而介面中所有的方法都是抽象的,所
有的變數都是靜態不可修改的。
48.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
	答案:都不能。
49.介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類答(concrete class)?
答案:介面可以繼承介面。介面間繼承(extends),不能實現(implements)。
抽象類可以實現(implements)介面,但介面不能實現抽象類。抽象類間也用繼承(extends)。
抽象類是否可繼承實體類,但前提是實體類必須有無參的建構函式。

50.啟動一個執行緒是用run()還是start()?有什麼區別?
答案:啟動一個執行緒是呼叫start()方法,這並不意味著執行緒就會立即執行,只是進入了可執行狀態。直接呼叫run()方法不會產生執行緒,而是把它當作普通的方法呼叫,馬上執行。
51.Constructor是否可被override?
	答案:不可以,但可以過載。
52. Class.forName的作用?
答:呼叫該訪問返回一個類名為指定字串的類的物件。
53.檔案讀寫的基本類有哪些?
		答案:FileInputStream,FileOutputStread,File,IOException等。 
65.ArrayList和Vector的區別?
	答案:就ArrayList與Vector主要從二方面來說. 
同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的 
資料增長:當需要增長時,Vector預設增長為原來一倍,而ArrayList卻是原來的一半。
66.char型變數中能不能存貯一箇中文漢字?為什麼? 
答:是能夠定義成為一箇中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一箇中文是沒問題的。
67.多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 
答:多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面 
同步的實現方面有兩種,分別是synchronized,wait與notify 
 
73.當一個執行緒進入一個物件的一個synchronized方法後,其它執行緒是否可進入此物件的其它方法? 
    答案:能,一個物件的synchronized方法只能由一個執行緒訪問。但其他執行緒可以同時訪問這個物件的非synchronized方法 
74.try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後? 
    答案:會執行,在return前執行。 
75.程式設計題: 用最有效率的方法算出2乘以8等於幾? 有C背景的程式設計師特別喜歡問這種問題。 
答案:2 << 3 。如果是2的10次方則是:1<<10.
76.兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對? 
答案:兩個物件的值是否相同,根據的是equals方法,而hash code是由hashCode()方法決定。因此值相同的物件hash code可能不同。 
77.當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞? 
    答案:是值傳遞。Java 程式語言只由值傳遞引數。當一個物件例項作為一個引數被傳遞到方法
中時,引數的值就是對該物件的引用。物件的內容可以在被呼叫的方法中改變,但物件的引用
是永遠不會改變的。 
78。程式設計題: 寫一個Singleton出來。
方式一:醉漢式
public class Singleton
{
private static Singleton test  = new Singleton();//靜態的。保留自身的引用。
//必須是私有的建構函式
private Singleton(){}
public static Singleton getInstance()//公共的靜態的方法。
{
return test;
}
}
方式二:懶漢式
public class Singleton
{
private static Singleton test  =  null;//靜態的。保留自身的引用。
//必須是私有的建構函式
private Singleton(){}
public static Singleton getInstance()//公共的靜態的方法。
{
if(test == null)
{
	test = new Singleton();
}
return test;
}
}
 
101.C++或Java中的異常處理機制的簡單原理和應用。 
答案:當JAVA程式違反了JAVA的語義規則時,JAVA虛擬機器就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內建的語義檢查。例如陣列下標越界,會引發IndexOutOfBoundsException;訪問null的物件時會引發NullPointerException。另一種情況就是JAVA允許程式設計師擴充套件這種語義檢查,程式設計師可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。 
102.Java的介面和C++的虛類的相同和不同處。 
答案:由於Java不支援多繼承,而有可能某個類或物件要使用分別在幾個類或物件裡面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現程式碼。當一個類實現了介面以後,該類要實現接口裡面所有的方法和屬性,並且接口裡面的屬性在預設狀態下面都是public static,所有方法預設情況下是public.一個類可以實現多個介面。 
103.垃圾回收的優點和原理。並考慮2種回收機制。 
答案:Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程式設計師最頭疼的記憶體管理的問題迎刃而解,它使得Java程式設計師在編寫程式的時候不再需要考慮記憶體管理。由於有個垃圾回收機制,Java中的物件不再有“作用域”的概念,只有物件的引用才有“作用域”。垃圾回收可以有效的防止記憶體洩露,有效的使用可以使用的記憶體。垃圾回收器通常是作為一個單獨的低級別的執行緒執行,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的物件進行清楚和回收,程式設計師不能實時的呼叫垃圾回收器對某個物件或所有物件進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。 
105.heap和stack有什麼區別。 
答案:棧是一種線形集合,其新增和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。 
堆是棧的一個組成元素
106.Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。 
答案:Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++巢狀類最大的不同就在於是否有指向外部的引用上。
注: 靜態內部類(Inner Class)意味著1建立一個static內部類的物件,不需要一個外部類物件,2不能從一個static內部類的一個物件訪問一個外部類物件 
107.JAVA類實現序列化的方法?在collection中,實現比較要實現什麼樣的介面?
	答案:java類實現序列化需要實現java.io.Serializable介面。
	在collection中實現比較要實現java.lang.Comparable介面或java.util.Comparator介面。
、jsp有哪些內建物件?作用分別是什麼?
答:JSP共有以下9種基本內建元件(可與ASP的6種內部元件相對應): 
 request 使用者端請求,此請求會包含來自GET/POST請求的引數 
   response 網頁傳回使用者端的迴應 
   pageContext 網頁的屬性是在這裡管理 
   session 與請求有關的會話期 
   application servlet 正在執行的內容 
   out 用來傳送回應的輸出
   config servlet的構架部件 
   page JSP網頁本身 
   exception 針對錯誤網頁,未捕捉的例外 s
一般來說,我會習慣使用PreparedStatement對資料庫進行操作。PreparedStatement是預編譯方式的,在執行SQL語句的時候效率就要高一些,還有就是PreparedStatement可以更好地避免SQL注入問題;在拼接sql語句時,採用PreparedStatement可以有效地減少出錯的機率;PreparedStatement是Statement的一個子類,理所當然地PreparedStatement對Statement有一定的擴充套件,在效能方面有一定的提高。瞭解的就這些了,希望能對樓主有所幫助
片斷2和片斷1的區別在於,後者使用了PreparedStatement物件,而前者是普通的Statement物件。PreparedStatement物件不僅包含了SQL語句,而且大多數情況下這個語句已經被預編譯過,因而當其執行時,只需DBMS執行SQL語句,而不必先編譯。當你需要執行Statement物件多次的時候,PreparedStatement物件將會大大降低執行時間,當然也加快了訪問資料庫的速度。 
這種轉換也給你帶來很大的便利,不必重複SQL語句的句法,而只需更改其中變數的值,便可重新執行SQL語句。選擇PreparedStatement物件與否,在於相同句法的SQL語句是否執行了多次,而且兩次之間的差別僅僅是變數的不同。如果僅僅執行了一次的話,它應該和普通的物件毫無差異,體現不出它預編譯的優越性
JDBC連線資料庫的步驟
1.	載入驅動(Load Driver)
2.	建立Connection物件(getConnection())
3.	建立Statement物件(createStatement(..))
4.	執行executeQuery(SQL)語句進行查詢