《刨根问底系列》00:序言
为什么会有这个《刨根问底系列》?一切源于我自己的学习历程。我在十几年前就开始编程,其间产生了不少大大小小的疑问,有宏观一点的,比如操作系统到底是怎么调度进程的?也有微观一些的的,如sleep是怎么实现的?正是通过对这些问题的追问,让我对计算机的本质有了更深刻的理解,从而让我在解决实际工作中的问题时,能够得心应手游刃有余。
刨根问底人学习方式,实际上是抓住一个问题,以些为原点不断的往下深挖,所以从中收获到的知识,是更加有深度的,且更加成体系的。比如通过穷究【操作系统是怎么调用用户程序?】这个问题,我学会了cpu特权级别、中断、内核态、用户态、系统调用、IO等知识。那种豁然开朗的感觉,真的是会带给自己莫大的满足感。
以下是那些曾经困扰我的问题,我将用刨根问底的形式将他们写出来:
-
从硬盘读取一个文件,底层都做了什么?
-
printf到底是怎么打印到屏幕上的?
-
socket到底是怎么把数据发送出去的?
一些注意事项:
1、在学习中,要尽量与实际工作结合,比如在工作中遇到了MySQL性能瓶颈,将需要去思考这个瓶颈的本质原因是什么,你可能会得出结论,是大量的随机读写而数据没有在内存中,导致进行了大量的磁盘IO,你还可能得出结论,是因为你使用了机械硬盘,导致单次IO时间太长,所以问题的解决方案就不言而愈了。
2、另一个启示就是,学习的过程,不是一蹴而就的,在刨根问底的过程中,要有坚持的毅力,但不能使用蛮力及太钻牛角尖。其实刨根问底问底有点像钻牛角尖,但不同的是,当你遇到让你精疲力尽的问题时,说明你的储备知识不够,你应该尝试从其它角度去帮助理解它,而不是在某个点上止步不前,阻碍自己前进。