计算机基础知识的最小集合

2019 年 4 月 12 日 码农翻身

码农翻身的老读者们估计要烦了: 老刘真是老了,怎么老是在这里啰嗦计算机基础?


没办法,问的人特别多, 我还是要再啰嗦一次,希望这是最后一次。


很多人工作后痛感计算机基础知识的缺乏, 那计算机基础知识都有哪些呢?


我觉得首先计算机专业的那六大件:组成原理,操作系统,数据库,编译原理,计算机网络,数据结构(这个说太多遍了,这次不再讲了), 其次还得加上分布式的基础知识, 因为现在的系统都变成分布式的了。


如果你是做应用层开发的,那几门课程中的有些内容和日常工作关联度不大,我挑那些最重要的来说一说,也算是一个最小集合吧!


计算机组成原理


如果你不是做操作系统/驱动程序的,直接和硬件打交道的机会很少,因为操作系统已经把他们屏蔽掉了,提供了抽象的API给我们使用。


但是还必须理解冯诺依曼体系的结构,CPU和内存,硬盘,各种外设之间的关系,寄存器、缓存等知识。


CPU有哪些指令,如何执行这些指令,如果实现数组,结构体,函数调用,这就涉及到汇编的知识。


像原码,反码,补码,定点数、浮点数的表示和运算也是编程中必备的知识,几乎每种语言都要涉及。


现在很多语言都是在虚拟机上运行的,你只要是了解了计算机的组成原理,再去看哪些虚拟机,就会发现概念都是相通的。


另外CPU中的缓存,缓存一致性协议,DMA的异步思想都会在应用层中有所体现。


如果能找一本书,尽可能多的囊括这些知识的话,我觉得还是神书《深入理解计算机系统》的前4章, 我之前还对它写过一个书评,在这里: 为什么说《深入理解计算机系统》是一本神书?


《编码》是一个更加科普性,但是也更加有趣的讲组成原理的书。


操作系统


操作系统是比较枯燥的, 站在应用层的角度,我认为重点是掌握操作系统对外提供的抽象,包括进程、线程,文件,虚拟内存,以及进程间的通信问题。


几乎所有的编程语言都会涉及到对多进程或者多线程编程的支持, 特别是多线程的并发编程,所以必须得搞明白他们的本质是什么,线程都有哪些实现方式(对以后学习各种语言和并发模型有极大好处)。 得真正地体会到“进程是资源分配的最小单位,线程是调度的最小单位。” 这句话的含义。


几乎所有的编程语言都会涉及到锁和死锁,最好在最底层理解锁是怎么实现的。


需要理解虚拟内存和物理内存直接的关系,分段和分页,文件系统的基本原理。


对于进程的调度,页面分配/置换算法,磁盘的调度算法,I/O系统,我认为优先级比较低。


计算机网络


我认为必须要理解的是这些:


什么分组交换


TCP可靠性传输原理,TCP/IP的协议细节, 三次握手,四次挥手,TCP状态转换。


几个重要的协议DHCP,UDP, ARP, DNS。


能够说出一个客户端如何在接入网络以后,通过这些协议,跨域网络和服务器通信的。


和应用层结合非常紧密的Socket知识和网络安全(对称加密,非对称加密,Hash, 数字签名,以及集大成者Https)


至于网络层的路由选择算法,链路层的各种协议,我认为优先级比较低。


还有一个重要的知识点,一般的网络书都没提,就是I/O多路复用,涉及到同步/异步,阻塞/非阻塞,select/epoll ,这个是很多软件的基础,在《Unix网络编程》,《深入理解计算机系统》中有讲述。


以上这些知识,在你学习Redis ,Ngnix, Tomcat, LVS等软件时将有极大的帮助


数据库


这个和日常工作结合极其紧密,不用我再多说,包括最基本的SQL,各种范式,事务及其隔离级别,事务的实现方式,索引及其实现方式,B+树等等。


编译原理


你这一辈子也许都不会去写一个编译器,但是很有可能会利用现成的工具去生成/操作一个抽象语法树(AST),甚至可以会写一个DSL(领域特定语言)。 所以你得理解词法分析、语法分析、语义分析,中间代码生成,代码优化这个基本编译的过程。


学习了编译与原理,会对语言的一些设计有更深的理解,比如LISP。


分布式的理论知识


由于现在的系统慢慢地变成了分布式, 所以又扩展出了很多相关基础知识需要学习:


数据复制与一致性:

CAP理论, BASE原则,幂等性, 2PC, TCC

Paxos , Raft , Gossip


数据分片和路由:

Hash分片:Hash取模(实际中非常常见的算法), 虚拟桶(Redis使用),一致性Hash(memcached使用)

范围分片


最后想说的是,不能带着特别功利的目的去学习这些基础,不能想着立刻、马上就应用到实战中,从中获益。更重要的理解掌握它们背后的思想,有一天你会发现:奥,这个问题我在哪里见过,可以用类似的办法来解决啊!



知识星球终于回归了,开门优惠一天压压惊。


原价149,今天仅需99元,平均每天2毛多,即可加入我的专属小密圈,和来自腾讯、阿里、京东、滴滴、IBM、SAP等大厂的各路大神一起讨论技术,分享职场经验,组队读书,刷leetcode,学英语......  还免费赠送15个计算机基础知识的视频。


详细介绍猛戳:我在知识星球这一年


我在知识星球等你:


登录查看更多
0

相关内容

CVPR 2022 将于2022年 6 月 21-24 日在美国的新奥尔良举行。CVPR是IEEE Conference on Computer Vision and Pattern Recognition的缩写,即IEEE国际计算机视觉与模式识别会议。该会议是由IEEE举办的计算机视觉和模式识别领域的顶级会议,会议的主要内容是计算机视觉与模式识别技术。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
85+阅读 · 2020年6月28日
专知会员服务
28+阅读 · 2020年5月20日
Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
我在知识星球这一年
码农翻身
10+阅读 · 2019年2月28日
资源 | Python 中文书籍大集合
AI研习社
13+阅读 · 2018年12月20日
自然语言处理NLP快速入门
专知
19+阅读 · 2018年10月8日
自然语言处理(NLP)知识结构总结
AI100
51+阅读 · 2018年8月17日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
入门 | 一文介绍机器学习中基本的数学符号
机器之心
28+阅读 · 2018年4月9日
干货|掌握机器学习数学基础之优化[1](重点知识)
机器学习研究会
9+阅读 · 2017年11月19日
构建AI知识体系-专知主题知识树简介
专知
339+阅读 · 2017年9月17日
Arxiv
34+阅读 · 2019年11月7日
Embedding Logical Queries on Knowledge Graphs
Arxiv
3+阅读 · 2019年2月19日
Arxiv
3+阅读 · 2018年6月24日
Arxiv
9+阅读 · 2018年5月7日
Arxiv
151+阅读 · 2017年8月1日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
85+阅读 · 2020年6月28日
专知会员服务
28+阅读 · 2020年5月20日
Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
相关资讯
我在知识星球这一年
码农翻身
10+阅读 · 2019年2月28日
资源 | Python 中文书籍大集合
AI研习社
13+阅读 · 2018年12月20日
自然语言处理NLP快速入门
专知
19+阅读 · 2018年10月8日
自然语言处理(NLP)知识结构总结
AI100
51+阅读 · 2018年8月17日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
入门 | 一文介绍机器学习中基本的数学符号
机器之心
28+阅读 · 2018年4月9日
干货|掌握机器学习数学基础之优化[1](重点知识)
机器学习研究会
9+阅读 · 2017年11月19日
构建AI知识体系-专知主题知识树简介
专知
339+阅读 · 2017年9月17日
Top
微信扫码咨询专知VIP会员