java中级开发工程师_Java中级开发工程师知识点归纳
Java中級開發(fā)工程師知識點歸納
為方便考生們備考java認證相關(guān)知識點,yjbys小編為同學(xué)們帶來最新java認證考試知識點歸納,希望同學(xué)們好好復(fù)習(xí)!
1.接口和抽象類的區(qū)別
①抽象類里可以有構(gòu)造方法,而接口內(nèi)不能有構(gòu)造方法。
②抽象類中可以有普通成員變量,而接口中不能有普通成員變量。
③抽象類中可以包含非抽象的普通方法,而接口中所有的方法必須是抽象的,不能有非抽象的普通方法。
④抽象類中的抽象方法的訪問類型可以是public ,protected和默認類型,但接口中的抽象方法只有public和默認類型。
⑤ 抽象類中可以包含靜態(tài)方法,接口內(nèi)不能包含靜態(tài)方法。
⑥抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static類型,并且默認為public static類型。
⑦一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。
⑧接口更多的是在系統(tǒng)框架設(shè)計方法發(fā)揮作用,主要定義模塊之間的通信,而抽象類在代碼實現(xiàn)方面發(fā)揮作用,可以實現(xiàn)代碼的重用。
2.Java虛擬機的運行時數(shù)據(jù)區(qū)有幾塊?線程私有和線程共享區(qū)域有哪些?
①程序計數(shù)器:線程私有,當前縣城執(zhí)行的字節(jié)碼的行號指示器。
②虛擬機棧:線程私有,存放基本數(shù)據(jù)類型、對象引用和returnAddress類型。
③本地方法棧:為虛擬機使用到的Native方法服務(wù)。
④Java堆:線程共享,存放對象的實例,也是GC回收器管理的主要區(qū)域。
⑤方法區(qū):線程共享,存放已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯后的代碼等數(shù)據(jù)。
⑥運行時常量池:方法區(qū)的一部分,存放編譯期生成的各種字面量和符號引用。
⑦直接內(nèi)存:不是虛擬機運行時數(shù)據(jù)區(qū)的一部分,也不是Java虛擬機規(guī)范中定義的內(nèi)存區(qū)域,容易引起OOM異常,NIO會調(diào)用,不受Java堆大小的限制。
3.HashMap和HashTable區(qū)別?
①Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現(xiàn)。
②Hashtable的方法是同步的,而HashMap的方法不是,因此HashTable是線程安全的,但是代碼的執(zhí)行效率上要慢于HashMap。
③HashMap允許空值和空鍵,但是HashTable不可以。
④HashMap非同步實現(xiàn)Map接口,是一個“鏈表數(shù)組”的數(shù)據(jù)結(jié)構(gòu),最大承載量是16,可以自動變長,由Entry[]控制(key,value,next),hashCode()判斷key是否重復(fù)。
⑤建議需要做同步,使用ConcurrentHashMap,降低了鎖的粒度。在hashMap的基礎(chǔ)上,ConcurrentHashMap將數(shù)據(jù)分為多個segment,默認16個(concurrency level),然后每次操作對一個segment加鎖,避免多線程鎖得幾率,提高并發(fā)效率。這里在并發(fā)讀取時,除了key對應(yīng)的value為null之外,并沒有使用鎖。
4.ArrayList和LinkedList區(qū)別?
ArrayList基于數(shù)組實現(xiàn),LinkedList基于鏈表實現(xiàn),ArrayList增加和刪除比LinkedList慢,但是LinkedList在查找的時需要遞歸查找,效率比ArrayList慢。關(guān)于多線程方面,如果要求線程安全的,有一個Vector,不過比較多的使用的是CopyOnWriteArrayList替代ArrayList,CopyOnWriteArrayList適合使用在讀操作遠遠大于寫操作的場景里,比如緩存。發(fā)生修改時候做copy,新老版本分離,保證讀的高性能,適用于以讀為主的情況。
5.Set接口
①HashSet是Set接口的典型實現(xiàn),HashSet按hash算法來存儲元素,因此具有很好的存取和查找性能。特點:不能保證元素的排列順序,順序有可能發(fā)生變化;HashSet是異步的;集合元素值可以是null;當向HashSet集合中存入一個元素時,HashSet會調(diào)用該對象的hashCode()方法來得到該對象的hashCode值,然后根據(jù)該HashCode值來確定該對象在HashSet中存儲的位置。HashSet還有一個子類LinkedHashSet,其集合也是根據(jù)元素hashCode值來決定元素的存儲位置,但它同時用鏈表來維護元素的次序,這樣使得元素看起來是以插入的順序保存的,也就是說,當遍歷LinkedHashSet集合元素時,它將會按元素的添加順序來訪問集合里的元素。所以LinkedHashSet的性能略低于HashSet,但在迭代訪問全部元素時將有很好的性能,因為它以鏈表來維護內(nèi)部順序。
②TreeSet是SortSet接口的唯一實現(xiàn),TreeSet可以確保集合元素處于排序狀態(tài)。TreeSet不是根據(jù)元素插入順序進行排序的,而是根據(jù)元素的值來排序的。TreeSet支持兩種排序方法:自然排序和定制排序。
③EnumSet中所有值都必須是指定枚舉類型的值,它的元素也是有序的,以枚舉值在枚舉類的定義順序來決定集合元素的順序。EnumSet集合不允許加入null元素,否則會拋出NullPointerException異常。EnumSet類沒有暴露任何構(gòu)造器來創(chuàng)建該類的實例,程序應(yīng)該通過它提供的static方法來創(chuàng)建EnumSet對象。
④總結(jié):A、HashSet的性能比Treeset好,因為TreeSet需要額外的紅黑樹算法來維護集合元素的次序,只有當需要一個保持排序的Set時,才會用TreeSet。B、EnumSet是性能最好的,但它只能保存枚舉值。
C、它們都是線程不安全的。
注:Set是一種不包含重復(fù)的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。
關(guān)于HashSet,條目數(shù)和容量之和來講,迭代是線性的。因此,如果迭代性能很重要,那就應(yīng)該慎重選擇一個適當?shù)某跏既萘俊H萘窟x得太大,既浪費空間,也浪費時間。默認的初試容量是101,一般來講,它比你所需要的要多。可以使用int構(gòu)造函數(shù)來指定初始容量。要分配HashSet的初始容量為17:
Set s=new HashSet(17);
HashSet另有一個稱作裝載因數(shù)(load factor)的"調(diào)整參數(shù)(tuning parameter)"。
區(qū)別:
1. HashSet是通過HashMap實現(xiàn)的,TreeSet是通過TreeMap實現(xiàn)的,只不過Set用的只是Map的key。
2. Map的key和Set都有一個共同的特性就是集合的唯一性.TreeMap更是多了一個排序的功能.
3. hashCode和equal()是HashMap用的, 因為無需排序所以只需要關(guān)注定位和唯一性即可.
總結(jié)
以上是生活随笔為你收集整理的java中级开发工程师_Java中级开发工程师知识点归纳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux客户端无法绑定端口号,为什么L
- 下一篇: mysql使用手册_mysql使用手册