阿里毕玄:提升代码能力的4段经历

简介: 对于程序员而言,我始终认为代码是展现能力的关键。一个优秀程序员写的代码,和一个普通程序员写的代码是很容易看出差别的,代码是展示程序员硬实力的名片。如何提升写代码的能力,始终是一个关键的话题,不过很遗憾这篇文章其实也不是讲具体的步骤、银弹方法、武功秘籍什么的,这篇文章讲讲我自己印象中,对我写代码能力提升比较大的四段经历,也许可供参考。

 

image.png

第一段:第一次感受每天亿级系统的挑战

第一段:第一次感受每天亿级系统的挑战

2008年,HSF的第二个版本,在当时淘宝最重要的交易中心上线,上线当天造成淘宝网站访问巨慢,交易类的页面几乎打不开,最后靠下线HSF才恢复。

下线后开始查问题,HSF的第二个版本基于的是JBoss Remoting,JBoss Remoting在当时的版本里远程同步调用的超时时间是写死在代码里的60s,而调用的服务确实会有一些超过10几秒的现象出现,导致了Web应用处理Web请求的线程池被这些慢请求给逐渐占据,请求堆积,最终呈现出了页面打开非常慢的现象。

查清原因后,决定基于当时的Mina重写整个HSF的通信。重写的这两个月时间对我自己写代码的能力有很大的提升,无论是对网络IO方面处理的深入学习,还是在高并发系统上的深入学习。现在想想学习的方式也就是翻各类网络IO的科普资料,然后是读Mina的源码、Java网络IO的源码。并发这块的学习主要还是靠那本经典的《Java并发编程实战》,以及读Java J.U.C里的代码。这段时间的学习相比以往翻《Think in Java》之类的最大区别是,学习后付诸实践,随着HSF这个新的重写的版本的上线,基本算是逐渐真正掌握了这些部分的代码能力。

除了代码能力的提升外,得到了另外一个最大的教训就是,对于一个亿级且长时间运行的系统,很多看起来的小概率的问题都一定会成为严重的问题。这也是写高并发系统难的原因,要求必须对自己写的代码,以及自己代码调用到的各种API里的实现都非常的清楚,这样才能真正确保最终代码的鲁棒性。

第二段:民间"消防队"的故事

第二段对我自己写代码能力提升特别大的经历是在民间"消防队"的那段日子。淘宝在2009年故障特别多,但处理故障还没有一个标准的体系和组织,导致很多时候会出现故障出了都没什么人处理,或者处理效率不高。于是当时有个运维团队的同学拉了一些人组建了一个群,群的名字叫淘宝消防队,用来处理淘宝出现的各种故障,我很凑巧的也加入了这个群,这个群里还有另外一个整个阿里公认的超级技术大神:多隆。

一开始看到各种故障的时候,压根就不知道怎么下手。处理故障需要的通常不仅仅是写代码的能力,还需要对一个系统的全貌要有一定的掌握。例如前几年一篇特别火的文章,点击搜索背后发生了什么,其实就是要对一个系统的处理流程特别的熟悉,这在处理故障的时候是非常重要的。在了解了故障大概在哪个环节后,很重要的就是对这个环节代码运行机制的细节的掌控了,这个时候通常来说运用各种工具是非常重要的,可以有效地帮助你知道具体发生了什么,例如像系统层面的top -H之类的,Java层面的BTrace等等,都可以让你根据运行情况去定位问题。

这段时间我觉得我的提升就是靠大量的练手。故障确实有点多,一开始就靠看别人怎么处理,主要是从多隆那里学,然后是尝试自己解决一些故障,解决的越来越多后慢慢熟练度就上去了。除了解决故障能力的提升外,由于看了很多由代码层面造成的故障,对自己在写代码时如何更好的保证鲁棒性来避免故障,也是非常有帮助的。例如,我看过很多滥用线程池造成创建了大量线程,最终导致线程创建不出来的case,就会明白自己在用线程池的场景里一定要非常清楚地控制最大的数量,包括堆积的策略等。又例如,我看过N多的因为自增长容量的数据结构导致的OOM的case,就会明白在写代码的时候不能认为一定不会发生数据结构增长到超级大,所以不做任何保护的case。这段时间我明白到的就是,写一段能运转、实现需求的代码不难,但要写一段在各种情况下都能长期稳定运行的代码是真心不容易,我觉得这是一个职业的写商业系统的程序员和只写程序玩玩的程序员的最大差别。

第三段:重写通信框架

2010年,我从中间件团队离开,去做HBase。那个时候的HBase里面的通信还是用一个非常简单的写法实现的。我想着要么就把以前HSF里用的移植到HBase里用,这个时候刚好多隆在用C给各类C的应用写一个通用的通信框架libeasy,于是就有了一次测试,我记得第一次测试的结果,就看到了原来HSF里面的通信框架的高并发能力和libeasy比相差无比巨大。我便和多隆探讨他是怎么实现的,我看看能不能学习下,在Java这边的版本里也改改,所以有了这段重写通信框架的经历。

本来以为之前在写HSF的那几年应该算是对通信框架这块的代码相关的能力掌握的不错了,在和多隆一起重写的这段过程中,才发现差距还是很大的。多隆教会了我很多细节的问题,基于NIO的通信框架的核心是用非常少的IO线程来处理IO事件(太多也没用,因为有些部分就只能串行),所以如何高效的使用好这几个IO线程是非常关键的,要尽量减少这几个IO线程处理一些不相关的动作,另外一点就是尽量减少IO线程和业务处理线程的切换,例如后来常见的批量把一个流里的多个请求一次性丢给业务处理线程。

这段经历对自己在代码逻辑整体的细节层面更加深入地掌握是非常有帮助的,这对于写要求很高的系统是非常重要的,毕竟对于一个超大规模的系统而言,1%的提升还是可观的。

第四段:学习JVM

之前因为处理故障比较多,有段时间我开始给公司同事们分享如何处理故障,后来发现有些问题自己也讲不清楚,或者也不知道怎么处理,必须深入学习JVM才行,但其实一开始我完全摸不着门路,JVM代码打开都不知道从哪看起。

很幸运,碰到了一个同样爱好JVM又比我强很多的同学,就是撒迦,圈内通常叫R大。我和撒迦好几个周末约着在公司一起看JVM代码,有撒迦的指点,我终于算是入门了,知道大概怎么去看了,而且两个人一起看代码,互相分享和探讨,效率是非常高的。

有了这段经历,再加上继续处理着一些故障,基本上逐渐对JVM的代码实现有了更多的理解。在后来做故障分享、问题解决什么的时候终于能更好地做到知其然知所以然。同样,这对处理故障的能力、写代码的能力也是非常有帮助的,例如会更加明白以前认为的所谓的面向GC友好的代码是几个意思。也有了更深的感受,就是其实Java的代码呢,通常不会写的太烂,因为JVM在运行期会做很多的尽可能的优化,拉到一个平均线,但要写得很好,难度是非常大的,因为需要懂JVM,懂JVM下面的OS。

总结

其实也总结不出什么,因为每个人所处的环境不一样,有不同的适合各自提升的方法。我看自己的经历总结下来,我觉得:

  • 如果环境不具备,就给自己一个命题挑战。例如要学高并发的通信,可以尝试自己写一个和其他的做对比,做性能等的PK,这个通常提升还是会很大的。要学GC,可以尝试给自己几个题目,来控制GC的行为等,如果环境具备的话,确实会更加有利。
  • 多和优秀的程序员一起学习。我自己从多隆、撒迦身上学习到了很多很多。从很多优秀的开源代码,像Netty、OpenJDK里面也学习到了很多很多,所以多参与一些优秀的开源项目也是一个很好的提升方法,看优秀的书(例如并发里的那本《Java并发编程实战》,JVM里的《Oracle JRockit: The Definitive Guide》,《深入理解Java虚拟机》等),也一样是一种向优秀程序员学习的好方法。
  • 多多尝试解决问题/故障。这绝对是提升代码综合能力非常好的一个方法,自己工作里机会少的话,网上有大把的平台,像Stack Overflow之类的,都是很好的练习场。

最后的最后,我还是想说,代码能力作为程序员的硬名片,始终是最有效的区分程序员能力的东西,"talk is cheap, show me the code",这句话我觉得是永远成立的。

作者:开发者小助手_L

原文链接 

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 cstring “+”: 运算符不起任何作用;应输入带副作用的运算符_国家计算机二级考试C语言选择题高频考点汇总,干货满满...

【考点1】C语言的构成1.源程序由函数构成,每个函数完成相对独立的功能。2.每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数开始执行。3.函数体:在函数后面用一对花括号括起来的部分。4.每个语句以分号…

钉钉推出“钉工牌”,门禁、差旅、员工福利一码通用

钉工牌将工作身份验证与支付功能相整合,不同于传统物理工牌,它是一张数字时代的“活”工牌。 编辑 | 宋慧 出品 | CSDN云计算 8月24日,钉钉向1700万企业组织正式推出“钉工牌”。企业开通此项功能后,员工可以用手机里的数字工牌刷…

快速了解云原生架构

简介: 云原生架构本质上也是一种软件架构,最大的特点是在云环境下运行,也算是微服务的一种延伸。 起源 1. 云原生(Cloud Native)的由来 云原生的概念最早开始于 2010 年,在当时 Paul Fremantle 的一篇博…

class传参 python_Python 初学者必备的常用内置函数

本文纲要Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间。目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很常见,这里主要介绍一…

线上流量越发昂贵,如何通过裂变营销实现业务增长?

简介: 公域流量流量越来越聚集于头部的媒体同时投放的费用越来越高。如:在游戏电商或金融行业,在广告投放拉新方面成本达到了100元左右。除了头部媒体的流量以外,在中长尾的流量上,这部分虽然成本低,但转化…

钉钉总裁不穷首谈产品观:To B产品用户不只是CEO

编辑 | 宋慧 出品 | CSDN云计算 头图 | 钉工牌发布现场图 8月24日,钉钉正式对外发布首个数字工牌产品“钉工牌”,这是行业内首个整合了工作身份验证与支付功能的数字工牌产品。以钉工牌为产品思考的原点,阿里巴巴集团副总裁、钉钉总裁叶军&a…

Serverless在游戏运营行业进行数据采集分析的最佳实践

简介: 这个架构不光适用于游戏运营行业,其实任何大数据采集传输的场景都是适用的,目前也已经有很多客户正在基于Serverless的架构跑在生产环境,或者正走在改造Serverless 架构的路上。 众所周知,游戏行业在当今的互联网…

我对技术架构的理解与架构师角色的思考

简介: 架构师一定要有技术的广度。大家一定要学会积累,积累到一定的程度以后,你会做到无师自通。 先自我介绍一下,我叫道延, 2014年进入阿里,在阿里通信呆了接近两年。2016年底到了业务平台,当时…

2018年计算机CPU纳米制程,联发科疯狂堆核计划曝光:7纳米制程,12核CPU

【PConline 资讯】联发科疯狂堆核的脚步并未停歇,在商用量产10纳米十核处理器——Helio X30之后,联发科瞄准了更先进的制程、更密集的CPU核心。据台湾电子时报(DIGITIMES)消息,联发科将首次集成12核CPU,预计第二季度由台积电的7纳…

佳能hdr_烧设备无止境不代表随时败家,佳能EOS 5D4“闲鱼”翻身取代200D

2019年最后一天马上翻篇,想过去看今朝我此起彼伏。待到明年赏花浪漫时,我希望我会笑得更开心一点。今天跟大伙说说刚从闲鱼入手的5D4。烧设备可以,烧相机要出人命,看大佬们三天两头往家里败镜头,我的荷包可撑不住。第一…

浅谈数据中台安全体系构建思路

作者:王振东来源:绿盟科技 战略规划部 摘要数据中台是大数据业务体系数据规约化建设的核心场景,数据中台既搭建大量数据归集的相关设施,又针对数据开展大量治理、运维、分析、加工、共享、开放等交互事务,数据暴露面、…

滴滴 Flink-1.10 升级之路

简介: 滴滴实时计算引擎从 Flink-1.4 无缝升级到 Flink-1.10 版本,做到了完全对用户透明。并且在新版本的指标、调度、SQL 引擎等进行了一些优化,在性能和易用性上相较旧版本都有很大提升。 一、 背景 在本次升级之前,我们使用的…

苹果新算法已混进 iOS 14.3!CSAM 检测技术再遭网友争议

整理 | 禾木木出品 | CSDN云计算(ID:CSDNcloud)苹果宣布即将推出 CSAM 检测系统时,遭到了 4000 多个组织及个人的公开反对,他们质疑苹果会破坏用户隐私和端到端加密机制。一位 Reddit 用户发现 CSAM 算法竟已被悄悄地隐…

数字化时代,阿里云云效如何构建下一代研发协作工具平台?

简介: 本次分享主要由四部分组成: 1、企业在成长过程中遇到的研发效能困境; 2、研发管理从信息化走向数字化的路径,以及背后的逻辑; 3、云原生和 AI 两项新技术在研发平台上的落地; 4、结合阿里巴巴自身案例…

珠海小学计算机比赛,欢聚一堂 共叙佳话 —— 参加珠海市中小学信息技术工作年会纪要...

欢聚一堂 共叙佳话——参加珠海市中小学信息技术工作年会纪要2012年12月22日,香洲区中小学信息技术工作室一行8人赴金湾一小,参加了珠海市教育学会中小学信息技术教学专业委员会组织的第三届年会,会议分为四项议程。一、近两年工作总结上午&a…

安谋科技发布新业务品牌“核芯动力”,先手布局智能计算产业

安谋科技(中国)有限公司(“安谋科技”)举行“创芯生,赋未来” 新业务品牌战略发布会,重磅发布“双轮驱动”战略以及新业务品牌“核芯动力”。新业务品牌的发布代表安谋科技引领智能计算产业发展趋势、推动计…

技术方案设计的方法论及案例分享

简介: 怎么去体现技术方案设计的深度是大家普遍关心的一个问题,这个问题不是个例问题,因此本文主要分享下作者个人的一些观点和看法。 怎么去体现技术方案设计的深度是大家普遍关心的一个问题,这个问题不是个例问题,因…

第四范式:现代存储架构下的系统优化实践

8月21日,白玉兰开源联合示说网主办的“开源大数据技术线上meetup”特邀约大数据领域的前沿技术专家,就大数据存储的关键技术、挑战和当前应用展开交流讨论,阵容强大、内容全面。第四范式体系架构科学家,高性能计算Team leader卢冕…

穿越疫情,阿里云3000万补贴助力中小企业寒冬突围

简介: 2021年,活下去,是所有中小企业的一致心愿。冬将尽,春将来。我们也都在迫切等待着百花齐放的春天到来,阿里云愿和广大中小企业一起守望相助,共待山河无恙,春暖花开! 简介&#…

KubeVela:标准化的云原生平台构建引擎

简介: 本文由“GO 开源说”第三期 KubeVela 直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。 KubeVela 的背景 KubeVela 是一个基于 Go 语言开发的云原生平台级开源项目,这个项目是去年 11 月中旬正式发布的。虽然发…