引言 #
最近逛知乎的时候看到一篇知乎回答很有趣,也给了很深的感触,自己对于操作系统、数据库、HTTP用的都非常熟练,但是也从来没有去想怎么怎么实现或者背后深层次的原理
以前刚开始学习的时候自己也看过很多关于操作系统、数据库的书,但是就像走马观花一样,很多书就是过了一遍脑子,然后就没有了,在2017年下半年自己也开始尝试把自己以前只是了解只是会用的东西拿出来咀嚼咀嚼,并在这个过程中写出一些自己觉得还是有点干货的博文。而且我也比较享受把复杂的问题简单话的过程。
操作系统、计算机、数据库、编程原理在我看来都是非常复杂庞大的东西,在2018年,希望能够将上面这些复杂的东西搞的简单一点,当然在这个同时我也会将我将问题简单话的过程中分享出来。
当然这些东西都太过宽泛,比如操作系统。很多人刚开始学习编程了解了操作系统概念,还有听到很多牛人都说自己写了一个操作系统都会在心里暗暗的立下一个Flag,自己也要做一个操作系统,但是很多人的热情慢慢的被无数的复杂概念慢慢磨掉,最后能坚持到做出一个完整的系统没有几个。作为一个普通人,我们没法一口吃下一个很大的“饼”,当然你如果叫爱因斯坦给你造一个原子弹,它也只能拍拍手跟你说我只能证明它能造出来。所以有效的解决问题的方法是将问题分解,或许最终我们最终造不出操作系统,但是我们对操作系统也能更深一步了解。
操作系统 #
首先谈谈操作系统,其实我们对操作系统的理解大致都停留在开关机。我们要分解的问题就是我们对这个“黑盒子”的疑问
- 操作系统如何管理硬件,比如说鼠标移动点击、键盘输入
- 操作系统如何让多用户使用
- 操作系统如何在多用户的情况下区分每个用户
- 操作系统如何分配内存,如何限制用户的内存
- 操作系统如何管理文件,如何避免文件被同时写入
- …..
当然我这里只是列举了一些直观的问题,在解答这些问题的时候,我们会逐渐衍生出各种问题,最终我希望所有的问题都能被简单话
数据库 #
数据库我算使用的比较多了,但是对数据库背后的机制也是懵懵懂懂,只知道他能保证这些功能,比如事务的原子性、一致性、分离性、持久性。
我觉得了解数据库就是要了解它是如何实现这些特性的,当然这个问题也很宽泛,我们可以尝试分解成
- 数据库如何将输入复杂的查询分解成为数据库的操作
- 数据库如何避免死锁
- 数据对于插入删除异常如何解决
- …..
其实在我看来数据库可以分解成两大块,一个是编程语音解析(SQL),一个是高效的存贮(Database)
所以了解数据库也可以尝试了解编译原理,了解如何实现解析SQL,所以接下来我就不提编译原理了
总结 #
其实想想自己的这种把复杂问题简单话就是华罗庚先生曾说的一句话:“把书由薄变厚,再把书由厚变薄”,首先我们得把这些看起来很简单的问题复杂话,最后慢慢的把这个复杂的问题简单话,这样你才能真正的把这个问题给搞懂。
对于我来说,从小或许受应试教育的影响,自己只学会了复杂问题给解决,但是不懂得解决后再把复杂问题简单话,所以看起来我懂很多复杂问题,但是其实换一个场景,换一个问题就一知半解了。所以自己慢慢的开始改变自己的方法,不满足于解决问题,而着重于简化问题,希望自己的一点经验也能给后来人一点启发。