叶锦棉:全面均衡的高手
简介: 叶锦棉,2012年电子科技大学本科入学,2016年保送成为本校徐增林教授的研究⽣。bitman成员。
本科期间跟随韩⽼师、廖⽼师学习系统底层知识,⼤三期间获得全国信息安全⼤赛⼀等奖,研究⽣期间发表并⾏与分布式计算国际顶级会议⽂章⼀篇(⼆作),计算机视觉国际顶级会议⽂章⼀篇(⼀作),申请发明专利两项。现 就职于⾃动驾驶创业公司Momenta,算法及系统研发⼯程师。
下面我写点自己记忆中的锦棉。是个斯斯文文的小伙子。全面均衡在哪里?能拿国奖,能保送,能搞研究(发了国际顶级会议),工程能力也超级好(在本科后期时,就带着研究生做项目。)。有担当。在bitman时,他主动担当起当时的各种杂务。
最关键的是,有极为可贵的诚信精神,因为面对着学业生涯中最关键的事情,也不放弃自己的操守。具体不便细说,点赞!
正文
近来受韩⽼师邀请,写下关于系统能⼒⽅⾯的理解,以及对本科学习的建议。
系统能⼒,我的理解是,对系统机制本身的深⼊了解, 遇事时⼤胆猜测,活⽤⼯具,仔细验证的能⼒。这句话 说来简单,但是如何在实际中运⽤是个经验问题。
譬如举⼀个我最近⾯临的问题。某个分布式程序在执⾏过程中会偶尔抛出段错误问题,那么基于对C/CPP语⾔的内存使⽤⽅式,以及操作系统上关于内存分段的概念,我们可以得知程序在某个时刻越界访问,导致当前进程空间被破坏了。我们⾸先尝试定位问题。Linux系统可以通过设置开启在段错误时转存运⾏栈,得到⼀个“core”⽂件。获得该⽂件后可以使⽤gdb调试⼯具载⼊并查看发⽣错误时程序的当前状态。很容易地发现每次执⾏时的运⾏栈都是⼀样的,然⽽该位置处的代码从经验上是不可能出现段错 误问题的,按照韩⽼师《⽼码识途》⼀书所说,“当我们关注案发现场时,元凶很有可能转移场地了。”
接下来尝试逐⼀关闭运⾏时⾮必须的模块,找到⼀个最⼩bug复现代码。在关闭⼀些模块时出错的运⾏栈发⽣了转移,验证了我们上述的猜想。这个过程繁杂,略去不表。插述⼀句,程序的模块化设计在此刻体现出了其重要的开发和调试优势。
最后我们找到了⼀个多线程读写的数据冲突可能,⼤致表现为主线程执⾏速度过快,导致某个资源被提前释放,然后另⼀个线程仍在使⽤该资源的现象。此前在系统设计时,由于该资源被频繁使⽤,为了性能需求⽽选择了⽆锁设计。为了解决该问题,我们在线程退出时加⼊了⼀个同步信号机制,保证了资源释放的安全性,同时保持了⽆锁设计的性能。
从上述例⼦我们可以发现,为了解决⼀个bug,需要我 们对系统的运⾏机制、调试⼿段和⼯具、代码结构设计 思想、多线程安全等⽅⾯的知识有充分的了解。这就是我个⼈理解的系统能⼒:对你的⼯作领域有充分的理解,并在⾯临未知问题时能灵活运⽤⼿中⼯具的能⼒。
⼯欲善其事必先利其器。本科学习阶段即为重要,我们对计算机领域的所有观念都将在这⼀阶段打下根基。我 从C语⾔课程中学习到了编程语⾔的⼯作⽅式,对内存的管理观念;从JAVA课程中学习到了⾯向对象设计思想的优雅,它能指导绝⼤部分的⼤型项⽬设计出合理灵活的结构;从操作系统课程中学习到操作系统本身对资源 调度的关键性。若此课程多不胜数,希望你们能认认真 真去理解这些课程的核⼼思想,并灵活运⽤到⾃⼰的⼯ 作中,⽽不仅仅是考试前的⼏天突击。
理论知识可以从学校课程中获得,然⽽纸上得来终觉浅,绝知此事要躬⾏。本科期间学校开设的实操课程在时间和内容上都显得太过单薄,你们在课余时间仍有⼤ 部分⾃由时间,可以选择加⼊⼯作室,直接从⼩项⽬中锻炼⾃身能⼒;也能加⼊如韩⽼师带领的兴趣⼩组,多⽅⾯深⼊了解系统能⼒思想,为⽇后的⼯作学习打下稳固的根基。总⽽⾔之,⼀定要找到⾃⼰的兴趣⽅向,并 为此奋⽃,那必然是⼀件幸福的事。
Happy Coding!