1. 程式人生 > >《阿裏巴巴編碼規範(JAVA)》認證考後感

《阿裏巴巴編碼規範(JAVA)》認證考後感

eap 即使 高度 很多 判定覆蓋 art 介紹 引擎 今後

2018.02.15除夕拿下了阿裏雲認證的《阿裏巴巴編碼規範(JAVA)》認證,寫下這篇考後感,記錄考試中碰到的一些考點。

先總體介紹下這個考試規則,50道選擇題,大部分是多選題,有少部分單選,滿分100分,達到80分即可拿到證書。

傳送門:https://edu.aliyun.com/certification/cldt02

絕大部分的考題涉及到的知識點都能在《阿裏巴巴JAVA開發手冊》上找到,這些都是比較基礎的考點,相信對大多數有工作經驗的猿們來說,不是難題,這一部分筆者就不再多提了,書上都有的。

下面重點記錄幾個重要的考點,有些可能只在書上略微提及且自己工作中不常涉及:

JAVA:

1.考點:所有的相同類型的包裝類對象之間值的比較,全部使用equals方法比較。

對於Integer var = ? 在-128至127範圍內的賦值,Integer對象是在IntegerCache.cache產生,會復用已有對象,這個區間內的Integer值可以直接使用==進行判斷,但是這個區間之外的所有數據,都會在堆上產生,並不會復用已有對象,這是一個大坑,推薦使用equals方法進行判斷。這個點在很多書上都有提及,特別需要註意。

2.考點:集合處理這個章節,特別是數組與集合相互轉換,涉及考題較多。

subList 返回的是 ArrayList 的內部類 SubList,並不是 ArrayList ,而是 ArrayList 的一個視圖,對於SubList子列表的所有操作最終會反映到原列表上(在sublist中添加/刪除元素,不只影響sublist本身,同時會影響原ArrayList)

在subList場景中,高度註意對原集合元素個數的修改,會導致子列表的遍歷、增加、刪除均會產生ConcurrentModificationException 異常(切記,這個場景是不被允許的,不要和上一點記混淆)

sublist沒有實現序列化,查看源碼就可以發現其沒有實現Serializable接口,這點必須註意,在大多數寫入緩存容器、RPC調用等場景需要做一些調整。

使用工具類Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方法,它的add/remove/clear方法會拋出UnsupportedOperationException異常。

說明:asList的返回對象是一個Arrays內部類,並沒有實現集合的修改方法。Arrays.asList體現的是適配器模式,只是轉換接口,後臺的數據仍是數組(如果數組中的數據改變,那麽list視圖也將受到影響)。

數據庫:

1.考點:NULL與任何值比較的結果都為NULL。~記住這點很重要。

2.考點:Mysql涉及的索引從數據結構角度來看涉及到 B-Tree、Hash、R-Tree、Full-text,從物理存儲角度,聚集索引(clustered)、非聚集索引(non-clustered)。

在MySQL中,InnoDB引擎表是(聚集)索引組織表(clustered index organize table),而MyISAM引擎表則是堆組織表(heap organize table)。

InnoDB的數據文件本身就是索引文件,B+Tree的葉子節點上的data就是數據本身,key為主鍵,這是聚簇索引。非聚簇索引,葉子節點上的data是主鍵(所以聚簇索引的key,不能過長)。為什麽存放的主鍵,而不是記錄所在地址呢,理由相當簡單,因為記錄所在地址並不能保證一定不會變,但主鍵可以保證。

3.考點:索引規約中相關的點,考到的題比較多,比如索引中有範圍查找,那麽索引有序性無法利用,如:WHERE a>10 ORDER BY b; 索引a_b無法排序。

日誌:

1.考點:應用中不可直接使用日誌系統(Log4j、Logback)中的API,而應依賴使用日誌框架SLF4J中的API,使用門面模式的日誌框架,有利於維護和各個類的日誌處理方式統一。

平時常用的日誌適配框架是SLF4J,重點提一下JCL(Jakarta Commons Logging),網上查詢了資源它也是一種日誌適配框架,~考試的時候漏選了這個。。用這些日誌框架的好處是降低與具體日誌框架的耦合,可以靈活改變使用的具體日誌框架。

單元測試:

1.考點:白盒測試中的代碼覆蓋率相關概念,語句覆蓋、分支覆蓋(判定覆蓋)、條件覆蓋、路徑覆蓋。

語句覆蓋是最弱的一種度量方式,即使是路徑覆蓋也不能保證程序完全沒問題。這些相關概念還是看下專業的書籍或者博客等資料,筆者在這裏就不多描述了。

網絡:

1.考點:高並發服務器建議調小TCP協議的time_wait超時時間。

重點需要理解tcp協議,三次握手、四次揮手相關概念及狀態轉換。

總結:自己對於數據庫這塊及單元測試相關的知識點了解相對薄弱,這也是今後需要補充知識的一個方向。筆者希望這篇文章希能鞏固自己一些薄弱的知識點,同時也希望給準備去考這個認證的小夥伴一個參考,帶來一定幫助。

《阿裏巴巴編碼規範(JAVA)》認證考後感