写给内功修炼读者的一封信!文末献上作者近照!
大家好,我是张彦飞allen。我在2010年从西北大学计算机系硕士毕业,然后就来到帝都一直混迹到现在。这期间主要在腾讯、搜狗两家公司从事应用开发与技术管理工作。
为啥要写这么一个技术号呢?故事还要从2011年我在腾讯时的一个项目工作开始。当时老大给我分配到了一个模块,所有合作方数据源的图片下载模块。这个模块的需求描述起来也很简单,就是把合作方数据中的图片url摘出来,然后下载并存储到腾讯的服务器上。这个工作从开始到完成不需要太长的时间。但是在这个过程中,引发了我很多的思考。比如新建一个空文件的话消耗磁盘空间吗?一个文件夹下最多能存多少个文件?文件名太长了的话会影响系统性能吗?Linux在学校的时候大家也都学过,但是对于以上这些问题我却不能给自己一个很好的答案。基于这些疑问,我自己翻了不少资料,做了不少的实际测试,然后写出了《Linux文件系统十问》。该文章在腾讯内部KM上成为了年度热文,当时有几乎1/3的同事都浏览过(腾讯有很多非技术员工,所以1/3的阅读覆盖率很高了)。腾讯大讲堂还帮我把这篇文章发到了外网,现在在外网上也还能搜到。
大家应该都听过关于面试候选人的一句调侃的话,”面试造火箭,工作拧螺丝“。这虽然有一点夸张的成分,不过也确实体现除了国内开发日常工作的特点。大家大部分的时间都是在处理各种应用层的项目需求,拧各种各样的螺丝、写各种各样的重复CRUD、修各种各样的bug。像我上面举的例子里,我的任务也只是下载和保存图片而已,再简单不过了。但是为啥面试的时候要考察的技术又比较深呢?因为你写出来的应用程序不是能跑起来就行了,是要7*24小时地稳定地提供服务的。但程序在运行期间可能会遭遇各种线上问题,你是否有能力处理各种线上故障、甚至是在写代码之前就能预料到并避免出问题。应用都是跑在硬件、操作系统,甚至是各种其它开源应用之上的。如果你对底层一点的东西的一些了解的不够,当你碰到一些性能或者其他底层相关的问题的时候可能直接就傻掉了。
swoole作者韩天峰在2017年的一篇文章里说过:“很多程序员职业规划的文章,上来就是Linux、PHP、MySQL、Nginx、Redis、Memcache、jQuery的使用学习,然后就直接上手搭环境、做项目,中级就是学习各种PHP框架和类库,高级阶段就是MySQL优化、PHP内核与扩展、架构设计这些了。这些文章都存在一个严重的缺陷,不重视基础。就好比练武功,只求速成,不修炼内功和心法,只练各种招式,这样练出来的高手能高到哪里去?”。对于他的这段话,我是表示再同意不过了。
在我十年的工作生涯中,我虽然从事的是应用层的开发,但仍然一直保持着对底层的好奇。把工作中遇到的一些问题,进行深度思考。例如,
内存的访问的延时是多长时间? 内存的访问带宽实际使用中能达到多少? 磁盘格式化究竟是怎么回事? read文件一个字节会发生磁盘IO吗?发生的话会发生多大! Linux是怎么样接收一个网络包的? 一条TCP连接究竟要消耗多大的内存? ....
带着好奇,我查阅了各种各样的书籍,电子资料,不断地总结。并将成果在部门内部进行了多次的分享。在2019年,我遇到了一个自己修复不了的bug,需要医生的帮忙才行。我的甲状腺出了点问题,从来没有怎么进过医院的我住院做了两次手术。躺在病床上的我就在思考,人的一生的意义是什么,怎么样让自己创造出更大的价值呢。忽然想到了我为啥不把之前总结出来的东东分享给更多的人。于是我的个人技术号「开发内功修炼」就这样诞生了。刚开始我只是希望全网能够收获1000个粉丝就行了。现在一年的时间过去了,虽然粉丝数和其它技术大号无法相提并论,但已经是大大超过我之前的预期,知乎和公众号粉丝加起来已经有8-9千了。