1、Collection 和 Collections的區別。
 
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
 
Collection是個java.util下的介面,它是各種集合結構的父介面。
 
第八,GC是什麼? 為什麼要有GC? (基礎)。
 
GC是垃圾收集器。Java 程式設計師不用擔心記憶體管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以呼叫下面的方法之一:
 
System.gc()
 
Runtime.getRuntime().gc()
 
2、String s = new String("xyz");建立了幾個String Object?
 
兩個物件,一個是"xyx",一個是指向"xyx"的引用物件s。
 
3、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
 
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
 
4、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
 
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
 
5、sleep() 和 wait() 有什麼區別? 搞執行緒的最愛
 
sleep()方法是使執行緒停止一段時間的方法。在sleep 時間間隔期滿後,執行緒不一定立即恢復執行。這是因為在那個時刻,其它執行緒可能正在執行而且沒有被排程為放棄執行,除非(a)"醒來"的執行緒具有更高的優先順序
 
(b)正在執行的執行緒因為其它原因而阻塞。
 
wait()是執行緒互動時,如果執行緒對一個同步物件x 發出一個wait()呼叫,該執行緒會暫停執行,被調物件進入等待狀態,直到被喚醒或等待時間到。
 
6、Java有沒有goto?
 
Goto—java中的保留字,現在沒有在java中使用。
 
7、陣列有沒有length()這個方法? String有沒有length()這個方法?
 
陣列沒有length()這個方法,有length的屬性。
 
String有有length()這個方法。
 
8、Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?
 
方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被"遮蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overloading)。Overloaded的方法是可以改變返回值的型別。
 
9、Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
 
Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
 
equals()和==方法決定引用值是否指向同一物件equals()在類中被覆蓋,為的是當兩個分離的物件的內容和型別相配的話,返回真值。
 
10、給我一個你最常見到的runtime exception。
 
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
 
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
 
11、error和exception有什麼區別?
 
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。
 
exception 表示一種設計或實現問題。也就是說,它表示如果程式執行正常,從不會發生的情況。
 
12、List, Set, Map是否繼承自Collection介面?
 
List,Set是
 
Map不是
 
13、abstract class和interface有什麼區別?
 
宣告方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立一個變數,其型別是一個抽象類,並讓它指向具體子類的一個例項。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
 
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何物件上呼叫介面的方法。由於有抽象類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。
 
14、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
 
都不能
 
15、介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
 
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的建構函式。
 
16、構造器Constructor是否可被override?
 
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被過載Overloading。
 
17、啟動一個執行緒是用run()還是start()?
 
啟動一個執行緒是呼叫start()方法,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由JVM排程並執行。這並不意味著執行緒就會立即執行。run()方法可以產生必須退出的標誌來停止一個執行緒。
 
18、是否可以繼承String類?
 
String類是final類故不可以繼承。
 
19、當一個執行緒進入一個物件的一個synchronized方法後,其它執行緒是否可進入此物件的其它方法?
 
不能,一個物件的一個synchronized方法只能由一個執行緒訪問。
 
20、try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?
 
會執行,在return前執行。
 
21、程式設計題: 用最有效率的方法算出2乘以8等於幾?
 
有C背景的程式設計師特別喜歡問這種問題。
 
2 << 3
 
22、兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
 
不對,有相同的hash code。
 
23、當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
 
是值傳遞。Java 程式語言只由值傳遞引數。當一個物件例項作為一個引數被傳遞到方法中時,引數的值就是對該物件的引用。物件的內容可以在被呼叫的方法中改變,但物件的引用是永遠不會改變的。
 
24、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
 
switch(expr1)中,expr1是一個整數表示式。因此傳遞給 switch 和 case 語句的引數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
 
25、Hashtable和HashMap
 
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
 
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
 
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
 
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
 
多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap
 
就必須為之提供外同步。
 
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。