如何学习计算机基础知识的?

大家好,我是帅地。

前阵子还不我们组的 leader 叫去谈话,说是好好学习,快速提升自己,特别是对于计算机的那些基础知识,也不能丢掉,你们看吧,计算机基础知识,想不学都不行。

不过说实话,对于计算机基础,帅地在学习的过程中,也没有运用啥方法论,也没啥技巧,可能和很多人一样,就是简单粗暴着看书,所以这篇文章,我也很难告诉你们学习的骚技巧或者捷径,所以大家不要有太大的期望,更多的是和大家讲一讲,我自己是如何学习的计算机基础知识的,然后供大家一个参考,假如你是学生或者非科班或者计算机基础很薄弱的工作者,或许可以参考一下。

一、计算机基础指哪些?

在微信,还是经常有小伙伴问我:你们说的计算机基础具体是指哪些呢?,这个问题,感觉算起来,已经被问过 10+ 次了。

计算机基础包括哪些?如果要全部都说的话,其实我也不清楚,这个还得看如何定义计算机基础,不过,最常见的几门计算机基础课,大概就是这几门了:

1、计算机网络

2、操作系统

3、计算机组成原理

4、汇编语言

5、编译原理

其中,计算机网络和操作系统,也是面试中被问的最多的两门课程,如果你没有太多的时间来学习这些课程,那么可以优先学习计算机网络和操作系统,之后在学习计算机组成原理、汇编语言和编译原理,当然,如果你还是在校生,那么这些课程都会在大二大三学习到,我希望你能好好学习下,特别是计算机网络和操作系统这两门课。

二、我是如何学习?

对于如何学习这个事情,我觉得我一句话就能回答完了,因为真的没啥技巧,我基本就是看书为主,视频为辅,看这些知识有时候容易困,因为有些真的是挺枯燥,特别是编译原理和计算机组成原理,又难又枯燥。

一种比较有效的学习方式就是从工作中用到的知识点出发,这样你可能是带着疑问去学习的,目的性也比较强,学起来会比较有趣,学完之后也会豁然开朗。

但是,假如你是一个学生,那么是很难从工作中遇到的知识点出发的,或者说,如果你对计算机基础知识一窍不通,那么就算你又疑问,你也是很难从哪里学起的。

所以,我的建议就是,如果可以,一定要系统学习一下,千万不要觉得以后工作了,或者等用到了再来学习,一定要从 0 到 1,系统学习起来,所谓系统,就是找一本书,从头看到尾,就是这么简单粗暴。

讲一讲我平时是怎么看这些书的

其实我在看这些书的时候还是非常快的,因为我会以最快的速度看一本书,会先从总体上掌握这门知识,不会去死扣某个知识点,一遍看过去,理解了就行了,但如何你问我细节,我可能都忘了,但是我知识大概是怎么一回事。

一般来说,对于操作系统和计算机网络,我都看了两遍,第一遍只求理解,心中知道个大概,看的很快,总体上知道操作系统是怎么一回事,网络是如何链接起来的。

看完第一遍之后,我会看这本书的目录,然后看到某个标题,自己思考一下是怎么一回事,例如TCP 是如何保证可靠性传输的,我会思考一下该如何保证,然后会打开对应的页面去看看大佬们都是怎么写的,因为可靠性传输,其实会涉及到很多种方法,第一遍看的,虽然当时理解了,但其实很多也都忘了,这时我会在看一遍,再次为大佬们想出的方法卧槽一遍。

不过,我第二次并不会从头到尾看,而是根据目录来看的,第一次看的时候,其实有时候是一遍看一遍犯困的,但是第二次看的时候,会 get 到更多的点,心中不断着给大佬们点赞,卧槽,我怎么没想到还能这样做!

总之就是,先快速且系统着从总体把握这门知识,看的过程中犯困很正常,之后会根据目录,一遍思考自己的想法一遍看看书上是如何实现的,因为当你什么也没学的时候,其实你的想法是很少的,但是当你看了很多人的想法之后,你的脑袋也会积累的挺多想法,也就是说,在第二遍看的时候,你一定要思考

还有一种就是,我第一遍有时候是通过看视频学习的,把视频看完之后,在系统从头到尾看书,我也不会一遍看视频一边看书,而是疯狂着,以最快的速度刷完视频。

三、无处不在的计算机基础

我们都说计算机基础很枯燥,学了也很少用到,但我觉得,正是因为枯燥难学,才有了人与人之间的差距,并且计算机基础知识也是处处都存在的,例如你学习 redis 的时候,可能会学到缓存的淘汰算法,如果你学习操作系统的内存置换,那么你一眼就能看懂了。

例如你可能经常听说过重量锁和轻量锁,重量锁很消耗性能,如果你没有学过操作系统的话,可能你并不清楚重量锁为啥就消耗性能了?内核切换咋就消耗性能了?但是如果你学过操作系统中的进程/线程的话,可能就知道重量级锁和轻量级锁的本质区别了。

不过在我看来,学习计算机基础知识最重要的,就是让我们学到了一些设计思想,这种设计思想,会伴随我们终生,你在学习的过程中,会学到各种各样的方法,并且都是你最开始没有想到的方法,方法积累多了,你就能产生属于自己的新想法。

说实话,我在学习的过程中,并不觉得很枯燥,相反觉得很有趣,因为我在不停着吸收新知识,吸收前人的精华,例如计算机网络中的流量控制、拥塞控制、HTTPS 的加密算法等等,我特么就没想到,还能这样做,要我,肯定无法设计出这么严谨的算法,所以在看的过程中,真的觉得很过瘾。

当然,有时候也会犯困,实不相瞒,犯困往往是因为有点难,看了一大堆描述之后,居然忘了刚才看了啥,然后看着看着就困了就不想看了,我也就先跳过了,之后在回过头来看。

四、简单说下具体都需要学些什么 + 书籍推荐

对于如何学习,貌似我说了好像和没说一样,这也没办法,因为确实没什么学习技巧,我说的先快速把握全局,在根据目录来深入思考,这是我的方法,适不适合你,其实我也不清楚,下面我简单说下一些相对重要的知识点,相当于抛砖引玉,看看你掌握了多少

1、计算机网络

计算机网络是工作中用的最多的吧,真的无处不在。最常见就是 HTTP 协议了,这必须学,get 和 post 的本质区别,通过他们报文的定义来区分就好,不需要死记硬背你之前看过的那些面试题。

HTTPS 是如何解决 HTTP 明文问题的的,数字证书解决了什么问题?为啥 HTTP 是一种无状态协议?啥是无状态协议?

TCP,UDP 也是必须掌握的了,特别是 TCP,TCP 是如何保证可靠传输的呢?啥是拥塞控制和流量控制呢?啥时拆包粘包?这必须掌握。

IP地址主要用来干啥?为啥还需要子网,子网掩码?世界这么大,IP 这么多,啥是路由寻址?

咋就还有公网IP和私网IP了?NAT转化解决了啥问题?

DNS除了能进行域名解析,还是解决了啥问题?

……

等等,我说的这些,基本都是重点,你们可以看看自己掌握了多少。

至于视频多话,可以在 B 站搜索对应的计算机网络视频,我只看看的是韩立刚老师的视频,感觉还不错,33 个小时,1.x倍播放,其实很快就能看完,之后刷了《图解 http》和《计算机网络:自顶向下》两本书,书籍太容易失效了,我就不整理了,你们可以在这里:计算机书籍免费下载(高清带目录完整PDF版)

2、操作系统

咋就还有进程和线程之分?为什么要有挂起、运行、阻塞等这么多种状态?怎么就还有悲观锁和乐观锁,他们的本质区别?

进程咋还会出现死锁,都有哪些处理策略?进程都有哪些调度算法?

虚拟内存解决了什么问题?为啥每个进程的内存地址就是独立的呢?

为啥 cpu 很快而内存很慢?磁盘怎么就更慢了?

听说中国 mooc 有些课程讲的不错,大家可以去找找勒,我主要是看书的,新手可以先看《程序是怎样跑起来的》,之后看《现代操作系统》或者《深入理解计算机操作系统》,对于书籍在我那个GitHub上可以找到。

3、汇编

学了汇编,估计你就更加理解地址是怎么一回事了,顺序、分之,循环、函数调用、数组之类的,是如何通过寄存器来实习的?

小小的几个寄存器,居然还能实现这么多复杂的操作?

如果你能用汇编写个红黑树的话,那就,呵呵了

书籍的话,我看的是王爽写的《汇编语言》。

4、计算机组成原理

计算是如何用 0 和 1 表示各种数值的?为啥要有补数?

计算机是如何进行加减乘除的?为啥计算机无法精确表示某些浮点数?

计算机是如何知道内存地址的?

计算机组成原理还是有点难度,书籍暂时没有推荐的,大部分知识,其实《深入理解计算机操作系统》这本书,其实都有包括。

后面的,就不继续写了,你们可以来补充勒。

以上推荐的书籍,你们可以在这里:计算机书籍免费下载(高清带目录完整PDF版)

另外,这里也有一门专门应付面试的计算机基础视频:计算机基础三门课视频

五、总结

对于计算机基础如何学习,如我刚才所说,我一句话就能说完了,但还是硬生生扯出了这么多,这批啊文章居然是讲「我是如何学习」的,所以我也不会凭空捏造自己的学习方法,而是真实描述自己的学习方法,可能并不适合每一个人,甚至可能感觉自己看了和没看一样,但如果对某些人有用,那么感觉就值了。

因为在写这篇文章的时候,其实我也没有把握,真心觉得没啥学习技巧,更多的还是需要自己去死啃,视频 + 书籍,死磕一遍,应该就差不多了,之后遇到问题,在去查找对应的文章深入了解。但是,如果你没学过,比起看文章,我依旧坚持希望你去系统看书学习一遍!

基础路漫漫,大家加油!

发表回复

后才能评论