1. 程式人生 > >java 基礎常見面試題和答案

java 基礎常見面試題和答案

1.String類為什麼是final的。

主要是為了“效率”和“安全性”的緣故。若String允許被繼承,由於它的高度被使用率,可能會降低程式的效能,所以String被定義成final。

2.HashMap的原始碼,實現原理,底層結構。

總的來說,HashMap就是陣列+連結串列的組合實現,每個陣列元素儲存一個連結串列的頭結點,本質上來說是雜湊表“拉鍊法”的實現。

3.描述一下ArrayList和LinkedList的區別

1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。 
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。 

 3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。

4.string、stringbuilder、stringbuffer區別 

1.三者在執行速度方面的比較:StringBuilder >  StringBuffer  >  String                                                                                                        2.String 字串常量,StringBuffer 字串變數(執行緒安全),StringBuilder 字串變數(非執行緒安全)
簡要的說, String 型別和 StringBuffer 型別的主要效能區別其實在於 String 是不可變的物件, 因此在每次對 String 型別進行改變的時候其實都等同於生成了一個新的 String 物件,然後將指標指向新的 String 物件,所以經常改變內容的字串最好不要用 String ,因為每次生成物件都會對系統性能產生影響,特別當記憶體中無引用物件多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。而如果是使用 StringBuffer 類則結果就不一樣了,每次結果都會對 StringBuffer 物件本身進行操作,而不是生成新的物件,再改變物件引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字串物件經常改變的情況下。而在某些特別情況下, String 物件的字串拼接其實是被 JVM 解釋成了 StringBuffer 物件的拼接,所以這些時候 String 物件的速度並不會比 StringBuffer 物件慢,而特別是以下的字串物件生成中, String 效率是遠要比 StringBuffer 快的.

5.String 類的常用方法

1 替換字串 replace(); 2 分割字串 split("regex"); 3 equals 字串比較 4 length() 獲取長度.

6.java的基礎型別和位元組大小。

byte     1位元組                short    2位元組                int      4位元組                long     8位元組                char     2位元組(C語言中是1位元組)可以儲存一個漢字 float    4位元組                double   8位元組                boolean  false/true(理論上佔用1bit,1/8位元組,實際處理按1byte處理)       
JAVA是採用Unicode編碼。每一個位元組佔8位。你電腦系統應該是 32位系統,這樣每個int就是 4個位元組

7.講講IO裡面的常見類,位元組流、字元流、介面、實現類、方法阻塞。

輸入流就是從外部檔案輸入到記憶體,輸出流主要是從記憶體輸出到檔案。我們用Eclipse開發小程式在控制檯輸入資料就屬於輸入流,即從控制檯輸入到記憶體。

IO裡面常見的類,第一印象就只知道IO流中有很多類,IO流主要分為字元流和位元組流。字元流中有抽象類InputStream和OutputStream,它們的子類FileInputStream,FileOutputStream,BufferedOutputStream等。字元流BufferedReader和Writer等。都實現了Closeable, Flushable, Appendable這些介面。程式中的輸入輸出都是以流的形式儲存的,流中儲存的實際上全都是位元組檔案。

java中的阻塞式方法是指在程式呼叫改方法時,必須等待輸入資料可用或者檢測到輸入結束或者丟擲異常,否則程式會一直停留在該語句上,不會執行下面的語句。比如read()和readLine()方法。