关于参与阿里巴巴编程之夏asoc-nacos的感悟

adventure.Li adventure.Li     2022-12-08     273

关键词:

今天,阿里巴巴编程之夏答辩结束并顺利通过!经过近两个月的方案设计、导师沟通及代码实现,从零开始参与顶级开源项目并且得到导师的认可,还是十分开心的,心情和考研上岸一样的十分激动。为了更好的提升与更多的人参与到这样的项目,我在此分享一下自己的心得感悟,也算是为此段经历画上圆满的句号,为后续的继续参与打上开启的感叹号。


一、背景

为了更好地了解参与项目的情况,我介绍了个人背景,如果想直接了解参与的过程方面,则可直接跳至第二部分。

  1. 个人背景

学历:南京信息工程大学,信管专业转至软件工程;今年考研至南软

校园经历:

  • 阿里巴巴编程之夏学员(2022年暑假)
  • 参与华信互联公司(创业公司)实习(2022上半年)
  • 参与全国高数竞赛预赛获一等奖(2021上半年)
  • 参与蓝桥杯Java组获全国三等奖(2021上半年)
  • 参与导师的地图二次开发项目(2020下半年)
  • 参与省级大创项目,做脑电波存储管理后台(2020下半年)
  • 参与省级大创项目,做企业员工健康管理系统(2020年暑假)
  • 参与江苏省高数竞赛获二等奖(2019年)
  • 参与公益社的创办与管理(2018下半年)
  1. 参与背景

在2022年上半年,是我人生中最大转折点半年。从二月份开始大概是大年初二,为了保证考研复试的顺利通过以及防止复试被刷,我只身一人来到了南京并租房,准备实习和考研复试。经过近一个月的实习后查初试成绩,发现擦边进复试,便辞掉了实习,全心投入考研复试,并陆续投递简历至一些中大厂(美团,携程,小红书,华为等)。在此过程中,我进行了一个个人项目的复盘与面试表达的准备以及八股文的背诵,也养成了诸多好习惯(例如excel每天去计划事项,xmind去分析思考总结),便在日复一日地提升中,复试得到逆袭,也顺利拿下携程的offer(五月通知的)。

五月份时,考虑到不能给企业添堵(考上研还去就职)就谢绝了携程。然后想着暑假很长,不能荒废,需要做一些有意义的事情,于是就开始物色一下南京的还不错的小公司去打打工,在此过程中也发现几乎没有公司愿意在这个情况要考上研的人去实习,因此我转换了思路。思考有没有线上实习的项目,便在六月初发现了开源之夏和编程之夏的项目,经过和项目的筛选和导师的沟通,便确定了下来。


二、参与的初衷

  1. 参与开源,了解企业项目

首先,我十分渴望知道大厂里面进行项目管理、开发等流程和机制并且参与进去。虽然有过一段实习经历,但是在小公司基本上追求快速上线,在设计以及实现方面都是追求能够完成,并不或欠缺考虑性能优化,可拓展性,可维护性等因素,同时应用场景也是比较简单的,对功底的练就是比较欠缺。而nacos作为拥有数万级的企业用户及百万级实例的分布式服务注册、配置管理中心,必然具有很好的应用场景去体验与思考。另外,nacos作为开源项目,社区内有诸多大牛进行开发和讨论,在此过程中可以与其沟通,提升。

  1. 了解学习分布式、云原生

从面试角度来说,分布式渐渐作为大厂面试必考题,因此掌握该块的知识是十分有益的,退一步讲去大厂面试和大厂面试官也能聊几句。

从未来发展角度来说,随着数字经济的发展,西数东算工程的实施,云计算、云原生必然是未来的发展趋势,更多的企业也会选择上云。

从个人发展角度练,可以锻炼思维能力,更加深入地去思考如何解决复杂问题。

  1. 提升自我设计、编程能力

在阅读源码的时候,就会看到很多大牛的代码,就可以学习他们的设计思维以及编程规范、思维等。

  1. 获得与大牛的沟通机会

我觉得除了参与项目实现本身之外,还可以获得与大牛的沟通机会,从他们身上学习他们是如何思考,如何去设计代码,解决问题的,另外也可以通过他们的指导,发现自身的不足,更有利于更快地提升自我。

  1. 丰富经历,更好地就业

该点其实和第一、二点重合,在参与项目的过程中,除了自身的提升外,也会获得一些附加的IP人设影响力,(例如成为项目的commiter,或者参与过nacos的开发),去工作面试时,至少相对于大多人均的论坛系统更会有一定的优势。


三、参与的过程

  1. 初步了解编程之夏的项目,并选题

六月初,我选择了nacos的配置变更插件化这个题目,然后进行了SpringCloudAlibaba组件的学习及着重nacos的学习,此时学习比较无头绪,只能浅浅地知道简单使用,然后又觉得nacos的配置变更插件化这个题目比较贴切适合,并选择了它,并与导师取得了联系。

  1. 初步了解nacos项目,并进行方案设计

六月中下旬,经过初步的了解(主要是通过 nacos架构&原理 这本书,阿里巴巴的藏经阁还是很香的 ),便开始了初步的方案设计。由于时间比较紧迫,很快设计出了初步的方案,当时虽然心想可能没戏了,但是想着不到最后还是不要放弃,于是在截止提交方案之前我有时间都在完善方案设计并与导师保持沟通,导师也十分耐心,面对我一些低级问题也十分温和、耐心地回答。

  1. 进一步了解nacos,并完善方案设计

七月初,名单公布,我入选了,十分高兴。接下来便在导师的指引下,进一步阅读架构&原理那本书,并全貌地去看源代码,发现了原有设计的诸多不妥之处,便进行了进一步的修改与完善(其中印象比较深的便是 面向失败设计思想)。

  1. 进行初步代码实现

七月中旬,便开始想通过调试的方式(刚开始就静态方式看代码)去看代码,结果上来就当头一棒,也是很多nacos初学者会遇到的问题,由于没有安装grpc的插件,导致protobuf没有编译便运行不起来,由于初次接触grpc不懂,便通过百度/谷歌的方式进行搜索并解决。代码跑起来后,进行代码的设计实现,那便进了一大步,不管什么项目,能够先跑起来是关键。与此同时,我也发现了一个请求日志切面的参数不一致的小Bug,为了保证的确存在此问题我便进行了打断点、调试,看日志确认,经过再三确认,便十分紧张地进行了提issue并PR,当PR成功那一刻是十分开心的一刻,虽然只是fix了一个小Bug,但是成就感还是十分足的。

在代码实现的过程中,也出现过设计时考虑不周以及nacos的理解不够等问题导致多次反复修改、完善(告诫我们,务必多思考,设计先行,花90%时间去思考设计、10%的时间写出高质量的代码以及进行测试,不要着急实现)

  1. 代码PR并评审,结项

八月中下旬,进行PR,在提交过程中,刚开始未创建对应的分支,我便直接PR到主分支,经过机器自动化的测试,发现一些代码规范问题便进行修改。然后导师进行评审过程中也发现一些代码规范以及设计臃肿,不优雅等问题。感觉在此阶段与导师反馈问题并给出建议是收获最多的时候(每次沟通也是促进成长最快的时候),关于具体收获放在感悟谈。不过整体的设计与实现都还是OK的,于是顺利结项。

  1. 后续

虽然,此次项目顺利结项了,但是发现还有诸多不足,在未来的日子里将会进一步完善和深入参与。


四、参与的感悟

  1. 大胆尝试,勇于挑战

有机会就要大胆去尝试,不管行不行只要对自己是有益的,就勇敢地去做。回顾我的个人经历,不管是考研还是参与此次开源项目,在参与之前都觉得不可能成功,但是勇敢地去尝试与坚持,定会给你意想不到的收获。

  1. 它山之石,可以攻玉

人生的意义在于不断追求目标,而此过程则是能力完善的过程。对于个人 的缺点发现 则是提升自我的第一步(类似定位问题bug),而发现定位问题则是最关键且艰难的一步,通过自己去发现更为困难,此时通过更优秀的人(此次,要特别感谢导师彦林以及Nacos其他导师们)来给你建议,你将会收益颇丰,闭门造车只会故步自封。

  1. 万物皆有度,学会把控

个人认为,学习是一个输入(学习,借鉴,例如阅读源码)+加工(思考,设计)+输出(实现,方案,总结)的过程,每一环都需要均衡,有时容易重输入(狂看视频,只听不动),有时重输出(进行项目设计,实现)。无论怎么样我觉得都不是有效地学习、成长,都需要去均衡每个环节,在合适的时间做合适的事,不要操之过急。

  1. 一些技术方面的收获
  • 面向失败设计

在设计webhook时,涉及第三方系统的推送,则存在第三方宕机,不能正常推送的情况。而且在代码设计时的IO操作的重操作或其他的异常情况,也需要着重考虑,思考如何降级,打日志,方便后续的问题排查。其实面向失败也是作为三大控制逻辑的分支逻辑的一个考虑,则是考虑问题的全面性,而考虑问题如何全面则是一个比较经验的事情,需要多去学习借鉴,多阅读源代码,多按逻辑链思考分析,不要着急实现。

  • 学会分类思考

分类则让事件管理有序,有条理,也是让后续开发者更容易去维护开发。而针对开发我将其分类为多线程的管理,网络通信的管理(nacos中的http,grpc通信是十分值得去思考的),逻辑控制处理(涉及集合的使用,常量,变量的使用),然后在此基础上进行类抽象、对象为中心去进行设计,管理,优质的设计(nacos的通知机制的观察者模式实现可以值得阅读)是让代码更为简洁,可用性和拓展性更高。

  • 了解到SPI、EB等设计机制及产品

了解到通过SPI机制更好地去实现拓展,也了解到EventBridge这样的事件驱动的云产品,在此过程中也去看了些rocketmq的源码设计及云原生消息队列的书籍,对思维的拓展以及方案设计的考虑更为全面有了一定提升。


最后,十分有幸参与该次项目,认识优秀的导师及小伙伴,感谢他们的指点与帮助,未来的路还长,今天只是踏出的一步。希望以后更够更加深入地参与nacos开源社区的建设,早日成为committer。另外,也欢迎有兴趣参与nacos开源项目或者对阿里云云原生的朋友,联系我!

关于2022年国内软件质量调查问卷的一些感悟与收获

📋前言1️⃣关于2022年国内软件质量调查主题征文活动CSDN《2022年国内软件质量调查》正式开启,我们诚邀各位博主,特别是测试领域的各位技术er参与调查,并围绕主题,撰写《我填写“2022年国内软件质量调... 查看详情

导师男团来袭|开源之夏2022,与alluxio一起探索数据编排的奇妙世界

...究所与openEuler社区共同举办,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。  活动联合国内外各大开源社 查看详情

阿里开发者们的第17个感悟:无细节不设计,无设计不架构

...设计不架构。这是我们送给开发者的第17个感悟。项籍,阿里巴巴新零售供应链平台服务决策平台负责人。在专家页中如此介绍自己:“多年互联网开发经验,从事业务开发、平台开发、架构设计、云计算、APM等领域。目前专注... 查看详情

阿里开发者们的第18个感悟:每次困难出现时,就是成长的机会出现了

...的自己王树彬(国有),淘宝技术部的闲鱼高级技术专家关于成长,我体会最深的有两点。第一,每次困难出现时,就是成长的机会出现了。第二,坚信。现实问题,往往有很多解法,没有标准答案,相信会带来更趋向成功的答... 查看详情

阿里开发者们的第14个感悟:技术拓宽价值边界

...价值的边界。这是我们送给开发者的第14个感悟。孤尽,阿里巴巴技术专家,花名取意“孤帆远影碧空尽”的意思,《阿里巴巴Java开发手册》的主要编写者。2016年3月,孤尽带领约码项目组编写《阿里巴巴Java开发手册》,码出高... 查看详情

关于break的感悟

publicclassBreakTest{ publicstaticvoidmain(String[]args){ for(inti=0;i<25;i++){ if(i==10){ break; } System.out.println("跑了"+(i+1)+"圈"); } System.out.println("退出比赛"); }    查看详情

有奖征文|参与googlei/o课代表征集活动,分享你的灵感与感悟

 今年,GoogleI/O大会以线上形式重新回归。通过SmartCanvas,LaMDA,ProjectStarline, 今年,GoogleI/O大会以线上形式重新回归。通过SmartCanvas,LaMDA,ProjectStarline,MaterialYou,Android12和WearOS等一系列技术和产 查看详情

关于接口与抽象类的感悟

当有属性需要给外部实现时使用抽象类比接口更好;1usingKPIWebAPI.ViewModels;23namespaceKPIWebApi.Utils4{5interfaceICanAssembleFormula6{7KPIFormulaAssembleFormula();8}9} 1usingKPIWebApi.Utils;2usingKPIWebAPI.ViewModels;34n 查看详情

关于团队成员之间协作的一点感悟

 我以前做什么都喜欢一个人,静悄悄地,谁都不鸟。工作了之后更多的是团队协作,十几个人的项目组和十来个人的部门都待过,打过交道的人多了之后对人与人之间的合作关系就有了一点点感悟,特此做一下总结。---------... 查看详情

关于技术学习的一些思考

...够熟练回答,哈希冲突删除等问题而决绝,也在阿里巴巴编程之夏开源实习的提案评估之中回答一些面向失败设计、架构设计考虑的基础问题而感到自身基础功的薄弱,不过还好阿里给与我机会获取该提案,成功... 查看详情

感悟轻松学编程的心态

...感觉应该回头思考一下,一定要抬头看路。最新感悟:学编程没什么了不起,重要的是轻松学。谁都可以来学编程,又没规定必须是计算机专业毕业的。所以学编程没什么了不起,了不起的是怎么学的轻松起来。我其实一直都在... 查看详情

求关于摄影感悟的英语文章

参考技术A原文:100ThingsI’veLearnedAboutPhotographySinceIfoundphotographytwoandahalfyearsagoIhavelearneddifferentthingswhichIwouldliketosharewithyoutoday.TheselessonshavemademericherandIhopethatyouwillfindthemrefreshingandinspiringonyourjourneywiththecamera,too.1.Neverdophotographytobecomearo... 查看详情

关于scrum实战故事录播的感悟升级

 昨晚与几位自组织的伙伴进行了《Scrum 实战》 第17 章 《富有成效的每日站会》录播Sprint不断的优化和精进的感悟。     首先,D兄给予了如下的建议:1.将段落分得更细致只有三个角色; ... 查看详情

结对编程感悟

...表达式的编写时还是遇到了一些困难。这次的作业是结对编程和个人独立作业也有很大不同,需要两个人之间合作,最后生成API接口和UI组对接也是之前没有接触过的,两周左右的时间写完了core的确也有很多感悟。结对与独立作... 查看详情

关于这次kpl春季决赛的感悟

QG4:0横扫AG超玩会,关于这一点想写一些自己的感悟,AG超玩会一直都是4:0横扫别人,这次在冠军赛被别人横扫,一点喘息的机会都没有。 1.QGhappy跟本没把AG超玩会放在眼里,很自信的直接横冲扫荡,而AG超玩会一直在防守,... 查看详情

编程思想感悟

  一直以来都知道面向过程和面向对象两种编程思想,却一直不知道这两者之间的本质区别,其实实际应该分三种,面向过程、基于对象和面向对象。  作为只记得高中学的流程图思想和大学学的C语言的学渣,加上刚入职... 查看详情

关于递归算法学习的点滴感悟

本人的第一篇博客,纯原创,部分内容参考下面两位博主的文章,鸣谢!https://www.cnblogs.com/GODYCA/archive/2013/01/15/2861545.htmlhttps://www.cnblogs.com/LiCheng-/p/8206444.html(这篇文章写的不是很好,因为博文提到“每次问题规模缩小程度必须... 查看详情

编程感悟

...类似的事情发生过几次,所以时刻都在警醒自己: 当编程出现问题时先找自己的原因,检查不是自己的问题再去找别人的问题。时至今日,我依然保持着这样的习惯,这是对山外有山,人外有人的认知,也是对自身的认知,... 查看详情