這些題目是近期我參加過的筆試題和一些我在網上選的部分題,在這裏作筆記,認真去學習,更好的應對後面的招聘。有錯誤歡迎指出。java
1、Java基礎部分程序員
一、指針在任何狀況下均可進行>,<,>=,<=,==運算。數組
答案:正確。
解析:指針用來表示內存地址;若是僅僅是指針之間的比較,其實也就是整型變量比較,這樣的話任何狀況都進行比較運算。可是指針的比較通常沒有實際意義。ide
二、關於 JAVA 堆,下面說法錯誤的是( )函數
A.全部類的實例和數組都是在堆上分配內存的 B.對象所佔的堆內存是由自動內存管理系統回收post
C.堆內存由存活和死亡的對象,空閒碎片區組成 D.數組是分配在棧中的學習
答案:Dspa
解析:首先數組是分配在堆中的,故D的說法不正確。.net
Java堆的結構:JVM的堆是運行時數據區,全部類的實例和數組都是在堆上分配內存。它在JVM啓動的時候被建立。對象所佔的堆內存是由自動內存管理系統也就是垃圾收集器回收。堆內存是由存活和死亡的對象組成的。存活的對象是應用能夠訪問的,不會被垃圾回收。死亡的對象是應用不可訪問尚且尚未被垃圾收集器回收掉的對象。一直到垃圾收集器把這些對象回收掉以前,他們會一直佔據堆內存空間。指針
三、下面關於java.lang.Exception類的說法正確的是()
A 繼承自Throwable B 繼承自Serialable
答案:A
解析:Java異常的基類爲java.lang.Throwable,java.lang.Error和java.lang.Exception繼承 Throwable,RuntimeException和其它的Exception等繼承Exception,具體的RuntimeException繼承RuntimeException。
擴展:錯誤和異常的區別(Error vs Exception)
1) java.lang.Error: Throwable的子類,用於標記嚴重錯誤。合理的應用程序不該該去try/catch這種錯誤。絕大多數的錯誤都是非正常的,就根本不應出現的。
java.lang.Exception: Throwable的子類,用於指示一種合理的程序想去catch的條件。即它僅僅是一種程序運行條件,而非嚴重錯誤,而且鼓勵用戶程序去catch它。
2) Error和RuntimeException 及其子類都是未檢查的異常(unchecked exceptions),而全部其餘的Exception類都是檢查了的異常(checked exceptions).
checked exceptions: 一般是從一個能夠恢復的程序中拋出來的,而且最好可以從這種異常中使用程序恢復。好比FileNotFoundException, ParseException等。檢查了的異常發生在編譯階段,必需要使用try…catch(或者throws)不然編譯不經過。
unchecked exceptions: 一般是若是一切正常的話本不應發生的異常,可是的確發生了。發生在運行期,具備不肯定性,主要是因爲程序的邏輯問題所引發的。 好比ArrayIndexOutOfBoundException, ClassCastException等。從語言自己的角度講,程序不應去catch這類異常,雖然可以從諸如RuntimeException這樣的異常中catch並恢復,可是並不鼓勵終端程序員這麼作,由於徹底不必。由於這類錯誤自己就是bug,應該被修復,出現此類錯誤時程序就應該當即中止執 行。 所以,面對Errors和unchecked exceptions應該讓程序自動終止執行,程序員不應作諸如try/catch這樣的事情,而是應該查明緣由,修改代碼邏輯。
RuntimeException:RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。
處理RuntimeException的原則是: 若是出現 RuntimeException,那麼必定是程序員的錯誤。例如,能夠經過檢查數組下標和數組邊界來避免數組越界訪問異常。其餘 (IOException等等)checked異常通常是外部錯誤,例如試圖從文件尾後讀取數據等,這並非程序自己的錯誤,而是在應用環境中出現的外部 錯誤。
四、分析下面程序,求輸出結果,並簡單列出執行過程。
public class Test{ static boolean foo(char c) { System.out.print(c); return true; } public static void main(String[] argv) { int i=0; for (foo('A'); foo('B') && i < 2; foo('C')) { i++; foo('D'); } } }
答案:ABDCBDCB
解析:①第一輪循環:foo('A')是初始條件,只執行一次,故先輸出A,接着判斷foo('B')&&i<2,由於此時i=0,故知足條件,再輸出B,接着進入循環內,首先執行i++, 此時i=1, 再執行foo('D'),輸出D,再執行foo('C'),輸出C。 在這一輪中,依次輸出ABDC;
②第二輪循環:初始條件foo('A')不執行,故開始執行判斷條件foo('B') && i < 2,知足1<2,故先輸出B,同上,接着執行i++,i=2,輸出D,輸出C。在這一輪中,依次輸出BDC;
③第三輪循環:仍是直接從判斷條件語句開始,先執行了判斷語句foo('B'),故輸出B,但此時不知足i<2,後面的語句再也不執行,這一輪中輸出B。程序也到此結束。
五、下列說法正確的是:
A.一個文件裏能夠同時存在兩個public修飾的類
B.構造函數能夠被重寫(override)
C.子類不能訪問父類非public和protected修飾的屬性
D.final修飾的類能夠被繼承
答案:C
解析:一個Java源文件中最多隻能有一個public類,當有一個public類時,源文件名必須與之一致,不然沒法編譯,若是源文件中沒有一個public類,則文件名與類中沒有一致性要求。至於main()不是必需要放在public類中才能運行程序。《詳解連接》
重寫是子類繼承父類對父類的方法進行修改。方法名,參數,返回值必須同樣。 不能重寫被標示爲final的方法。若是不能繼承一個方法,則不能重寫這個方法。
擴展:重寫override,重載overload的區別:
java的方法重載:就是在類中能夠建立多個方法,它們具備相同的名字,但具備不一樣的參數和不一樣的定義。調用方法時經過傳遞給它們的不一樣參數個數和參數類型來決定具體使用哪一個方法,並且返回值類型能夠相同也能夠不相同,這也是面向對象的多態性。
java的方法重寫:
1)父類與子類之間的多態性,對父類的函數進行從新定義。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不須要從新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想做必定的修改,這就須要採用方法的重寫。方法重寫又稱方法覆蓋。
2)若子類中的方法與父類中的某一方法具備相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可以使用super關鍵字,該關鍵字引用了當前類的父類。
3)子類函數的訪問修飾權限不能少於父類的;
4)重寫方法只能存在於具備繼承關係中,重寫方法只能重寫父類非私有的方法。
六、Java接口的修飾符能夠爲()
A private B protected C final D abstract
答案:CD
解析:接口很重要,爲了說明狀況,這裏稍微囉嗦點:
(1)接口用於描述系統對外提供的全部服務,所以接口中的成員常量和方法都必須是公開(public)類型的,確保外部使用者能訪問它們;
(2)接口僅僅描述系統能作什麼,但不指明如何去作,因此接口中的方法都是抽象(abstract)方法;
(3)接口不涉及和任何具體實例相關的細節,所以接口沒有構造方法,不能被實例化,沒有實例變量,只有靜態(static)變量;
(4)接口的中的變量是全部實現類共有的,既然共有,確定是不變的東西,由於變化的東西也不可以算共有。因此變量是不可變(final)類型,也就是常量了。
(5) 接口中不能夠定義變量?若是接口能夠定義變量,可是接口中的方法又都是抽象的,在接口中沒法經過行爲來修改屬性。有的人會說了,沒有關係,能夠經過 實現接口的對象的行爲來修改接口中的屬性。這固然沒有問題,可是考慮這樣的狀況。若是接口 A 中有一個public 訪問權限的靜態變量 a。按照 Java 的語義,咱們能夠不經過實現接口的對象來訪問變量 a,經過 A.a = xxx; 就能夠改變接口中的變量 a 的值了。正如抽象類中是能夠這樣作的,那麼實現接口 A 的全部對象也都會自動擁有這一改變後的 a 的值了,也就是說一個地方改變了 a,全部這些對象中 a 的值也都跟着變了。這和抽象類有什麼區別呢,怎麼體現接口更高的抽象級別呢,怎麼體現接口提供的統一的協議呢,那還要接口這種抽象來作什麼呢?因此接口中 不能出現變量,若是有變量,就和接口提供的統一的抽象這種思想是抵觸的。因此接口中的屬性必然是常量,只能讀不能改,這樣才能爲實現接口的對象提供一個統 一的屬性。
通俗的講,你認爲是要變化的東西,就放在你本身的實現中,不能放在接口中去,接口只是對一類事物的屬性和行爲更高層次的抽象。對修改關閉,對擴展(不一樣的實現 implements)開放,接口是對開閉原則的一種體現。
因此:
接口的方法默認是public abstract;
接口中不能夠定義變量即只能定義常量(加上final修飾就會變成常量)。因此接口的屬性默認是public static final 常量,且必須賦初值。
注意:final和abstract不能同時出現。
七、如下for循環的執行次數是:____
for(int x=0,y=0;(y!=0)&&(x<4);x++)
A.無限次 B.執行4次 C.執行3次 D.一次也不執行
參考答案:D
解析:y初始值爲0,在整個for循環中,y的值不變,故判斷語句中的(y!=0)不成立,故一次也不執行。
八、有哪些經常使用的MAP類型。
解析:有如下三種類型:
九、Java匿名類。