记录下今年的给公司内部中间件团队还有公司外部开源项目修代码的两次经历

最近做了两个事情相比在项目里面写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提交地址: https://github.com/alibaba/nacos/pull/2729/files,截图如下,相信大家看了后很好理解,List.addAll方法是基于内存拷贝的所以相比来说效率更优

 最后简单总结下,上面两个是都是java集合里面的基础知识,发现工作一段时间后回看下java基础知识还是很有必要的。

posted @ 2020-06-07 18:36  Brian_Huang  阅读(322)  评论(1编辑  收藏  举报