當前位置:才華齋>IT認證>JAVA認證>

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

JAVA認證 閲讀(2.79W)

為方便考生們備考java認證相關知識點,yjbys小編為同學們帶來最新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用的, 因為無需排序所以只需要關注定位和唯一性即可.