前言
声明
此电子书是飞哥为知识星球「开发内功修炼营」会员专门整理的电子书,供星球会员阅读。本电子书是飞哥下一本书的一个雏形。因为当时整理完了这个 PDF 后才让我有了再写一本新书的想法。由于是雏形,所以可能存在一些瑕疵,望大家海涵。目前新书的内容进度已有 80% 了,第一个版本预计会在 2023 年 8 月底左右在星球中放出。
为什么开知识星球
国内大部分的开发者平时的精力都聚集在应用层了。但应用层是建立在语言运行时、内核、硬件等底层之上的。如果能把底层的工作原理理解清楚,才能够在技术上融会贯通,进而取得更高的成就。但底层知识中比如内核学习曲线十分陡峭,不投入大量的精力难以入门。平时大家的工作已经很忙了,又很难抽出这么多的时间。为了降低学习门槛,我在公众号的整理归纳了很多的技术文章。但即便如此很多读者依然表示学习起来不是很容易。
在内容形式上,视频比文字的表达力还是要强很多。所以我特此开辟了一系列的视频课程,通过视频讲解的方式进一步让大家理解底层的工作原理。这些内容会放在知识星球上。在这里,我会从硬件到内核,甚至包括一些语言运行时的知识,全部用浅显易懂的视频的方式给大家讲出来。让大家快速消化吸收。另外也可以在星球我们可以就底层学习中不懂的问题提问,进行方便的交流。
另外就是想在星球上提升大家的业界技术视野。有多年工作经验的同学都知道。在多年工作中,往往最有价值的经验是两块,线上问题排查和性能优化。在线上遇到问题后,你是如何排查的,中间的过程是怎样的,最终导致你线上问题的原因是啥,你又是如何解决的。你们公司的业务线上的性能瓶颈是啥,你是如何把它找出来的,采用了哪些技术手段优化的,最终优化了多少台服务器或者耗时降低了多少。这两块内容就是高级工程师和初级工程师的核心区别,是技术工作经验中的精华所在。在星球里,我会搜集一些业界的案例,也欢迎大家把自己这方面的经验分享出来。让你快速把其他人多年工作经验中的精华吸收掉,然后把它运用到你的工作中,提升你手头工作的效果。
我的目标是把「开发内功修炼营」这个星球打造成一个国内最佳的底层功力修炼技术社区。虽然知识星球是要收一点费用的,但我已经自己把价格压到最低了,相信飞哥能让你在这里绝对能获取到你物超所值的内容。有想继续加入知识星球的同学微信扫描下面的二维码即可加入。早期加入的同学可以有额外的优惠,在公众号后台发送「星球优惠券」可以获取开发内功修炼读者的专属优惠券。
其中视频课程的主要内容暂定如下,在实际录制核主体不会发生变化,但细节可能会有微调,以星球中的实际内容为准。
INFO
视频课程主要内容暂未在 PDF 中列出,以星球中实际内容为准。
作者介绍
本电子书作者张彦飞。2010 年西北大学计算机硕士毕业,毕业后一直在互联网大厂工作。2011 年加入腾讯,在腾讯和搜狗总共工作了十年,后来又于 2022 年加入字节跳动。对底层的性能有非常深入的理解。技术作品包括公众号「开发内功修炼」,也于 2022 年出版了技术畅销书《深入理解Linux网络》。
本书中内容是在我的公众号「开发内功修炼」的部分内容的基础上,理顺了整体的框架结构整理而来的。欢迎大家关注我的公众号,及时阅读最新内容。另外由于本人个人精力有限,书中内容难免会有疏漏。如您发现内容中有描述不正确的地方,欢迎到公众号后台或者飞哥微信回复指正,不胜感激!
也欢迎大家加入我们的微信技术交流群,互相学习共同成长。个人微信 zhangyanfei748528。也欢迎关注作者 4.7K Star 的 Github:https://github.com/yanfeizhang/coder-kung-fu
作者对本电子书拥有全部版权,可以用来分享学习,但严禁用于商业用途。
从大厂面试说起
互联网大厂是当今很多开发,尤其是应届生们所向往的公司。但大家应该都听过关于大厂在面试候选人时一句调侃的话,”面试造火箭,工作拧螺丝“。这虽然有一点夸张的成分,不过也确实描述的比较形象。在面试中,尤其是顶级互联网大厂的面试,对技术的考察往往都很深。但是到了工作中,可能确实又需要花不少时间在写各种各样的重复 CRUD 上。
那为啥会出现这种情况,是大厂们闲的没事非得为难候选人吗?其实不是的,这是因为扎实的底层功力确实在大厂中很重要。
互联网大厂区别于小公司的一个业务特点就是海量请求,随便一个业界第二梯队的 App 每天的后端接口请求数过亿在大厂都很常见,更不用提微信、淘宝等头部应用了。在这种量级的用户请求下,业务能 7 * 24 小时地稳定地提供服务就非常重要了。哪怕服务故障出现十分钟,对业务可能都是不可估算的损失。
所以在大厂中,你写出来的应用程序不是能跑起来就行了,是必须要能够稳定运行的。但程序在运行期间无法避免可能会遭遇各种线上问题。应用都是跑在硬件、操作系统之上的,因此线上的很多问题都是和底层相关。如果遇到线上问题,你是否有能力快速排查和处理。例如线上有的时候访问超时是因为 TCP 的全连接队列满导致的。如果你对这类底层的知识了解的不够,你根本无法应对。
另外大厂招聘高水平程序员的目的可能都不仅仅是要求能快速处理问题,甚至可能希望你能在写代码之前就能有预判并能做到避免出故障。不知道你们团队是否进行过 code review。往往新手程序员自我感觉良好,觉得写得还不错的代码给资深程序员看一眼就能发现很多上线后可能会出现的问题。
大厂在招人上是不怕花钱的,但最怕的是业务不稳定和不可靠。如果很低的价钱招来成水平一般的程序员,结果导致业务三头五天出问题,给业务收入造成损失那可就无法评估了。所以,要想进大厂,扎实的内功功力是不可或缺的。
谈谈工作了以后的成长
那是不是说已经工作了,或者说已经进入到大型了,扎实的内功能力就可有可无了呢?答案当然是否定的,工作以后内功能力也同样的重要!
拿后端开发岗来举例。初接触后端开发的同学会觉得,这个方向太容易了。我刚接触的时候也有这种错觉。我刚毕业做 Windows C++ 的时候,项目里的代码编译完的工程都是几个 G 的。但是转到后端后发现,一个服务接口可能 100 行代码就搞定了。
由于“简单性”,许多工作三年左右的后端同学会陷入一个成长瓶颈,手头的东西感觉已经特别熟练了,编程语言、框架、Mysql、Nginx、Redis 都用的溜的飞起。总感觉自己没有啥可以学习的新东西了。
这些同学真的已经掌握了所有了吗?但其实不然,当他们遇到一些线上的问题,排查和定位手段又极其的有限,很难承担的起线上问题紧急救火的重要责任。当程序性能出现瓶颈的时候,也是在网上搜几篇帖子,盲人摸象式的试一试,各个半清不楚的内核参数调一调,对关键技术有缺乏足够深的认知。
反观另外一些工作经验丰富的高 T,他们一般对底层有着深刻的理解。当线上服务出现问题的时候,都能快速发现关键问题所在。就算是真的遇到了棘手的问题,他们也都有能力潜入底层,比如内核源码里找解释,看看底层到底是怎么干的,为啥会出现这种问题。
所以大厂不仅仅是在招聘面试,在内部的晋升面试中也同样注重考察开发同学对于底层的理解以及性能把控的能力。一个人的内功功力的深浅,决定了他是否具备基本的问题排查以及性能调优能力。内功指的就是当年曾经你学过的操作系统、网络、硬件等这些知识。互联网的服务都是跑在这些基础设施之上的,只有你对他们有深刻的理解,你才能够源源不断想到新的性能分析和调优办法。
所以说,扎实的内功能力并不是通过大厂面试以后就没有用了。而是会贯穿你整个职业生涯。
创作思路
虽然底层的知识是如此重要,但这类知识有个共同的特点就是很枯燥。那如何才能把枯燥的底层讲好呢,这个我思考过很多很多次。
2012 年我在腾讯工作期间,在内部 KM 技术论坛上发表过一篇文章,叫做《Linux 文件系统十问》(这篇文章现在在外网还能搜到,因为被搬运了很多次)。当时写作的背景是老大分配给我一个任务,把所有合作方提供的数据里的图片文件都下载并保存起来。我把在工作时候中产生的几个疑问进行了追根溯源,找到答案以后把他发表了出来了。比如文件名到底存在了什么地方?一个空文件到底占不占用磁盘?Linux 目录下子目录太多会有什么问题?等等。这篇当发表出来以后,竟然在全腾讯公司内部传播开了,反响很大,最后成为了腾讯 KM 当年的年度热文。
在本书中,整体的思路就是按照磁盘、内存、CPU 三大硬件部分。每一部分都是先从硬件原理,再到操作系统内核的使用方式,最后结合一些实际测试的性能数据或者性能优化案例。让大家把理论和实践联系起来,从而对性能能有更深的把握!
TIP
Github:https://github.com/yanfeizhang/coder-kung-fu
有想继续加入知识星球的同学微信扫描下面的二维码即可加入。另外在公众号后台发送「星球优惠券」可以获取开发内功修炼读者的专属优惠券。