記錄下今年的給公司內部中間件團隊還有公司外部開源項目修程式碼的兩次經歷
最近做了兩個事情相比在項目裡面寫CRUD有意思些,就是看一些優秀框架的源代嗎,然後發現問題並修改提交PR。因為SpringCloud組件Eureka的閉源,所有我們項目有必要看看其他相關的優秀開源的項目,剛好Alibaba Nacos這個開源項目現在比較火熱,所以我也花時間簡單的看了看他們的框架,有意思的是我在看源碼的過程也發現了一些問題,加上我本人有程式碼潔癖,所以把我最不能忍的一個問題拎出來給修改了,並提交的PR給到Alibaba Nacos團隊review,最後Alibaba Nacos 團隊採用的我的修改建議併合並了程式碼。中間還有個小插曲,因為不知道給開源項目貢獻程式碼需要簽訂CLA,而有過幾次溝通。然而比較碰巧的是,我在查看公司內部中間件團隊的程式碼時也發現的類似的可能會造成性能問題的程式碼,這也是促成我這今天隨筆的原因。
先說下我爭對公司中間件團隊的項目程式碼修改經歷,因為不太方便放項目的程式碼,所以只能簡單描述下,修改了什麼
偽程式碼大概如下: xxxx()..stream().forEach(e-> { addApi(e.getxxx())});
addApi(Api api) { versionMap.put(api.getVersionNumber(), new ArrayList<>(Arrays.asList(api))); } 主要修改的的是把 addApi() 方法裡面的 Arrays.asList 改為了 Collections.singletonList,原因Arrays.asList方法裡面走的是 new ArrayList()方法,而Collections.singletonList返回容量為1
的List,所以在這裡後者性能會更好。
另外一個就是Alibaba Nacos修改的程式碼,PR提交地址: //github.com/alibaba/nacos/pull/2729/files,截圖如下,相信大家看了後很好理解,List.addAll方法是基於記憶體拷貝的所以相比來說效率更優
最後簡單總結下,上面兩個是都是java集合裡面的基礎知識,發現工作一段時間後回看下java基礎知識還是很有必要的。