Java中級開發工程師知識點歸納

才智咖 人氣:6.55K

為方便考生們備考java認證相關知識點,本站小編為同學們帶來最新java認證考試知識點歸納,希望同學們好好複習!

Java中級開發工程師知識點歸納

1.介面和抽象類的區別

①抽象類裡可以有構造方法,而介面內不能有構造方法。

②抽象類中可以有普通成員變數,而介面中不能有普通成員變數。

③抽象類中可以包含非抽象的普通方法,而介面中所有的方法必須是抽象的,不能有非抽象的普通方法。

④抽象類中的抽象方法的訪問型別可以是public ,protected和預設型別,但介面中的抽象方法只有public和預設型別。

⑤ 抽象類中可以包含靜態方法,介面內不能包含靜態方法。

⑥抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是public static型別,並且預設為public static型別。

⑦一個類可以實現多個介面,但只能繼承一個抽象類。

⑧介面更多的是在系統框架設計方法發揮作用,主要定義模組之間的通訊,而抽象類在程式碼實現方面發揮作用,可以實現程式碼的重用。

虛擬機器的執行時資料區有幾塊?執行緒私有和執行緒共享區域有哪些?

①程式計數器:執行緒私有,當前縣城執行的位元組碼的行號指示器。

②虛擬機器棧:執行緒私有,存放基本資料型別、物件引用和returnAddress型別。

③本地方法棧:為虛擬機器使用到的Native方法服務

④Java堆:執行緒共享,存放物件的例項,也是GC回收器管理的主要區域。

⑤方法區:執行緒共享,存放已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯後的程式碼等資料。

⑥執行時常量池:方法區的一部分,存放編譯期生成的各種字面量和符號引用。

⑦直接記憶體:不是虛擬機器執行時資料區的一部分,也不是Java虛擬機器規範中定義的記憶體區域,容易引起OOM異常,NIO會呼叫,不受Java堆大小的限制。

Map和HashTable區別?

①Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現。

②Hashtable的方法是同步的,而HashMap的方法不是,因此HashTable是執行緒安全的,但是程式碼的執行效率上要慢於HashMap。

③HashMap允許空值和空鍵,但是HashTable不可以。

④HashMap非同步實現Map介面,是一個“連結串列陣列”的資料結構,最大承載量是16,可以自動變長,由Entry[]控制(key,value,next),hashCode()判斷key是否重複。

⑤建議需要做同步,使用ConcurrentHashMap,降低了鎖的粒度。在hashMap的基礎上,ConcurrentHashMap將資料分為多個segment,預設16個(concurrency level),然後每次操作對一個segment加鎖,避免多執行緒鎖得機率,提高併發效率。這裡在併發讀取時,除了key對應的value為null之外,並沒有使用鎖。

yList和LinkedList區別?

ArrayList基於陣列實現,LinkedList基於連結串列實現,ArrayList增加和刪除比LinkedList慢,但是LinkedList在查詢的時需要遞迴查詢,效率比ArrayList慢。關於多執行緒方面,如果要求執行緒安全的,有一個Vector,不過比較多的使用的是CopyOnWriteArrayList替代ArrayList,CopyOnWriteArrayList適合使用在讀操作遠遠大於寫操作的場景裡,比如快取。發生修改時候做copy,新老版本分離,保證讀的高效能,適用於以讀為主的情況。

介面

①HashSet是Set介面的典型實現,HashSet按hash演算法來儲存元素,因此具有很好的存取和查詢效能。特點:不能保證元素的排列順序,順序有可能發生變化;HashSet是非同步的;集合元素值可以是null;當向HashSet集合中存入一個元素時,HashSet會呼叫該物件的hashCode()方法來得到該物件的hashCode值,然後根據該HashCode值來確定該物件在HashSet中儲存的位置。HashSet還有一個子類LinkedHashSet,其集合也是根據元素hashCode值來決定元素的儲存位置,但它同時用連結串列來維護元素的次序,這樣使得元素看起來是以插入的順序儲存的,也就是說,當遍歷LinkedHashSet集合元素時,它將會按元素的新增順序來訪問集合裡的元素。所以LinkedHashSet的效能略低於HashSet,但在迭代訪問全部元素時將有很好的效能,因為它以連結串列來維護內部順序。

②TreeSet是SortSet介面的唯一實現,TreeSet可以確保集合元素處於排序狀態。TreeSet不是根據元素插入順序進行排序的,而是根據元素的值來排序的。TreeSet支援兩種排序方法:自然排序和定製排序。

③EnumSet中所有值都必須是指定列舉型別的值,它的元素也是有序的,以列舉值在列舉類的定義順序來決定集合元素的順序。EnumSet集合不允許加入null元素,否則會丟擲NullPointerException異常。EnumSet類沒有暴露任何構造器來建立該類的例項,程式應該通過它提供的static方法來建立EnumSet物件。

④總結:A、HashSet的效能比Treeset好,因為TreeSet需要額外的紅黑樹演算法來維護集合元素的次序,只有當需要一個保持排序的Set時,才會用TreeSet。B、EnumSet是效能最好的,但它只能儲存列舉值。

C、它們都是執行緒不安全的。

注:Set是一種不包含重複的元素的Collection,即任意的兩個元素e1和e2都有ls(e2)=false,Set最多有一個null元素。

關於HashSet,條目數和容量之和來講,迭代是線性的。因此,如果迭代效能很重要,那就應該慎重選擇一個適當的初始容量。容量選得太大,既浪費空間,也浪費時間。預設的初試容量是101,一般來講,它比你所需要的要多。可以使用int建構函式來指定初始容量。要分配HashSet的初始容量為17:

Set s=new HashSet(17);

HashSet另有一個稱作裝載因數(load factor)的"調整引數(tuning parameter)"。

區別:

1. HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的,只不過Set用的只是Map的key。

2. Map的key和Set都有一個共同的特性就是集合的唯一性Map更是多了一個排序的功能.

3. hashCode和equal()是HashMap用的, 因為無需排序所以只需要關注定位和唯一性即可.