Java 面試題

一、JAVA中的幾種基本類型,各占用多少字節(jié)。


二、String能被繼承嗎?為什么?

不可以,因為String類有final修飾符,而final修飾的類是不能被繼承的,實現(xiàn)細節(jié)不允許改變。

三、String, Stringbuffer, StringBuilder 的區(qū)別。

String: 字符串常量(final修飾,不可被繼承),String是常量,當創(chuàng)建之后即不能更改。線程安全

StringBuffer:可變,使用了synchronized 關(guān)鍵字加了同步鎖證,線程安全

StringBuilder:可變,線程不安全

四、ArrayList 和 LinkedList 有什么區(qū)別。

ArrayList和LinkedList都實現(xiàn)了List接口,有以下的不同點:

1、ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)(1)時間復(fù)雜度對元素進行隨機訪問。與此對應(yīng),LinkedList是以元素列表的形式存儲它的數(shù)據(jù),每一個元素都和它的前一個和后一個元素鏈接在一起,在這種情況下,查找某個元素的時間復(fù)雜度是O(n)。

2、相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數(shù)組那樣重新計算大小或者是更新索引。

3、LinkedList比ArrayList更占內(nèi)存,因為LinkedList為每一個節(jié)點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。

五、類的實例化順序,比如父類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù),字段,子類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù),字段,當 new 的時候, 他們的執(zhí)行順序。

此題考察的是類加載器實例化時進行的操作步驟(加載–>連接->初始化)。

父類靜態(tài)變量、

父類靜態(tài)代碼塊、

子類靜態(tài)變量、

子類靜態(tài)代碼塊、

父類非靜態(tài)變量(父類實例成員變量)、

父類構(gòu)造函數(shù)、

子類非靜態(tài)變量(子類實例成員變量)、

子類構(gòu)造函數(shù)。

六、 Map 類都有什么區(qū)別;HashMap 是線程安全的嗎,并發(fā)下使用的 Map 是什么,他們內(nèi)部原理分別是什么,比如存儲方式, hashcode,擴容, 默認容量等。

hashMap是線程不安全的,HashMap是數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現(xiàn)的,采用哈希表來存儲的,

HashMap<K,V>:存儲數(shù)據(jù)采用的哈希表結(jié)構(gòu),元素的存取順序不能保證一致。由于要保證鍵的唯一、不重復(fù),需要重寫鍵的hashCode()方法、equals()方法。

LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,存儲數(shù)據(jù)采用的哈希表結(jié)構(gòu)+鏈表結(jié)構(gòu)。通過鏈表結(jié)構(gòu)可以保證元素的存取順序一致;通過哈希表結(jié)構(gòu)可以保證的鍵的唯一、不重復(fù),需要重寫鍵的hashCode()方法、equals()方法。


七、有沒有有順序的 Map 實現(xiàn)類, 如果有, 他們是怎么保證有序的。

TreeMap和LinkedHashMap是有序的(TreeMap默認升序,LinkedHashMap則記錄了插入順序)。

八、抽象類和接口的區(qū)別,類可以繼承多個類么,接口可以繼承多個接口么,類可以實現(xiàn)多個接口么。

1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象。

2、抽象類要被子類繼承,接口要被類實現(xiàn)。

3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現(xiàn)

4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量。

5、抽象類里的抽象方法必須全部被子類所實現(xiàn),如果子類不能全部實現(xiàn)父類抽象方法,那么該子類只能是抽象類。同樣,一個實現(xiàn)接口的時候,如不能全部實現(xiàn)接口方法,那么該類也只能為抽象類。

6、抽象方法只能申明,不能實現(xiàn)。abstract void abc();不能寫成abstract void abc(){}。

7、抽象類里可以沒有抽象方法

8、如果一個類里有抽象方法,那么這個類只能是抽象類

9、抽象方法要被實現(xiàn),所以不能是靜態(tài)的,也不能是私有的。

10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。

九、final 的用途

類、變量、方法

final 修飾的類叫最終類,該類不能被繼承。

final 修飾的方法不能被重寫。

final 修飾的變量叫常量,常量必須初始化,初始化之后值就不能被修改。

十、訪問修飾符 public、private、protected、default 在應(yīng)用設(shè)計中的作用。

十一、在自己的代碼中,如果創(chuàng)建一個 java.lang.String 對象,這個對象是否可以被類加載器加載?為什么

類加載無須等到“首次使用該類”時加載,jvm允許預(yù)加載某些類。。。





?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容