不少人都知道Java開發(fā)崗位的工資比較高,但是你們可能不知道想要找到Java開發(fā)工作同樣不是一件簡單的事情,不僅需要我們有著扎實的開發(fā)技術(shù),還需要我們對于面試題有一定的了解,這樣才能在面試期間有更好的變現(xiàn),今天就給大家?guī)砹薺ava面試題及答案整理(java面試題基礎(chǔ)題)
1.在 Java 中如何跳出當(dāng)前的多重嵌套循環(huán)?
答案:在外層循環(huán)前加一個標(biāo)記如outfor,然后用break outfor;可以跳出多重循環(huán)。例如以下代碼:
public class TestBreak {
public static void main(String[] args) {
outfor: for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
if (j == 5){
break outfor;
}
System.out.println("j = " + j);
}
}
}
}
運行結(jié)果如下所示:
j = 0
j = 1
j = 2
j = 3
j = 4
2.HashSet 里的元素是不能重復(fù)的, 那用什么方法來區(qū)分重復(fù)與否呢?
答案:往集合在添加元素時,調(diào)用 add(Object)方法的時候,首先會調(diào)用Object的 hashCode()方法判斷hashCode 是否已經(jīng)存在,如不存在則直接插入元素;如果已存在則調(diào)用Object對象的 equals()方法判斷是否返回 true,如果為true則說明元素已經(jīng)存在,如為false則插入元素。
3.請寫出幾個常見的運行時異常?
答案:NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉(zhuǎn)換異常。
IndexOutOfBoundsException - 下標(biāo)越界異常
NumberFormatException - 數(shù)字格式異常
4.為什么Java語言的開發(fā)者,把String類定義為final的呢?
答案:因為只有當(dāng)字符串是不可變的,字符串池才有可能實現(xiàn)。字符串池的實現(xiàn)可以在運行時節(jié)約很多heap空間,因為不同的字符串變量都指向池中的同一個字符串。但如果字符串是可變的,那么String interning將不能實現(xiàn),因為這樣的話,如果變量改變了它的值,那么其它指向這個值的變量的值也會一起改變。如果字符串是可變的,那么會引起很嚴(yán)重的安全問題。譬如,數(shù)據(jù)庫的用戶名、密碼都是以字符串的形式傳入來獲得數(shù)據(jù)庫的連接,或者在socket編程中,主機名和端口都是以字符串的形式傳入。因為字符串是不可變的,所以它的值是不可改變的,否則黑客們可以鉆到空子,改變字符串指向的對象的值,造成安全漏洞。
因為字符串是不可變的,所以是多線程安全的,同一個字符串實例可以被多個線程共享。這樣便不用因為線程安全問題而使用同步。字符串自己便是線程安全的。
因為字符串是不可變的,所以在它創(chuàng)建的時候HashCode就被緩存了,不需要重新計算。這就使得字符串很適合作為Map中的鍵,字符串的處理速度要快過其它的鍵對象。這就是HashMap中的鍵往往都使用字符串。
5.抽象類(abstract class)和接口(interface)有什么異同?
答案:不同點:
● 抽象類中可以定義構(gòu)造器,接口不能;
● 抽象類可以有抽象方法和具體方法,接口不能有具體方法;
● 接口中的成員全都是 public 的,抽象類中的成員可以使用private、public、protected、默認(rèn)等修飾;
● 抽象類中可以定義成員變量,接口中只能是常量;
● 有抽象方法的類必須被聲明為抽象類,而抽象類未必要有抽象方法;
● 抽象類中可以包含靜態(tài)方法,接口中不能有靜態(tài)方法;
● 一個類只能繼承一個抽象類,一個類可以實現(xiàn)多個接口;
相同點:
● 不能夠?qū)嵗?
● 可以將抽象類和接口類型作為引用類型;
● 一個類如果繼承了某個抽象類或者實現(xiàn)了某個接口都需要對其中的抽象方法全部進(jìn)行實現(xiàn),否則該類仍然需要被聲明為抽象類;
6.Java 出現(xiàn) OutOfMemoryError(OOM)的原因有那些?出現(xiàn) OOM 錯誤后,怎么解決?
答案:觸發(fā) java.lang.OutOfMemoryError:常見的原因就是應(yīng)用程序需要的堆空間是大的,但是 JVM 提供的卻小。這個的解決方法就是提供大的堆空間即可。
除此之外還有復(fù)雜的原因:內(nèi)存泄露:特定的編程錯誤會導(dǎo)致你的應(yīng)用程序不停的消耗更多的內(nèi)存,每次使用有內(nèi)存泄漏風(fēng)險的功能就會留下一些不能被回收的對象到堆空間中,隨著時間的推移,泄漏的對象會消耗所有的堆空間,觸發(fā)java.lang.OutOfMemoryError: Java heap space 錯誤。
解決方案:你應(yīng)該確保有足夠的堆空間來正常運行你的應(yīng)用程序,在 JVM 的啟動配置中增加如下配置:-Xmx1024m,流量/數(shù)據(jù)量峰值:應(yīng)用程序在設(shè)計之初均有用戶量和數(shù)據(jù)量的限制,某一時刻,當(dāng)用戶數(shù)量或數(shù)據(jù)量突然達(dá)到一個 峰 值 , 并 且 這 個 峰 值 已 經(jīng) 超 過 了 設(shè) 計 之 初 預(yù) 期 的 閾 值 , 那 么 以 前 正 常 的 功 能 將 會 停 止 , 并 觸 發(fā)java.lang.OutOfMemoryError: Java heap space 異常解決方案,如果你的應(yīng)用程序確實內(nèi)存不足,增加堆內(nèi)存會解決 GC overhead limit 問題,就如下面這樣,給你的應(yīng)用程序 1G 的堆內(nèi)存:java -Xmx1024m com.yourcompany.YourClass。
以上就是對于Java面試題的介紹,當(dāng)然這只是我們在面試中經(jīng)過會出現(xiàn)的幾個問題,如果你想自己能夠有一個更好的面試結(jié)果,可以參加南京北大青鳥的Java培訓(xùn)課程,不僅有著實戰(zhàn)項目練習(xí),而且我們還有著專業(yè)的就業(yè)老師為您提供模擬面試,帶你體驗面試中的每個流程。