专栏名称: 程序猿
本微信公众号:imkuqin,为程序员提供最新最全的编程学习资料的查询。目前已经开通PHP、C/C++函数库、.NET Framework类库、J2SE API查询功能。
目录
相关文章推荐
码农翻身  ·  微软发明了世界上最流行的编程语言! ·  17 小时前  
程序员小灰  ·  真心建议大家冲一冲新兴领域,工资高前景好 ·  3 天前  
码农翻身  ·  再这么搞下去,程序员失业是迟早的事! ·  昨天  
OSC开源社区  ·  字节跳动开源跨平台UI框架Lynx:一套代码 ... ·  2 天前  
51好读  ›  专栏  ›  程序猿

那些让你起飞的计算机基础知识:学什么,怎么学?

程序猿  · 公众号  · 程序员  · 2020-02-07 22:20

正文


来自公众号: 帅地玩编程

作者: 帅地

个人简介: 一个热爱编程的在校生,我的世界不只有coding,还有writing。 目前维护订阅号「苦逼的码农」,专注于写「算法与数据结构」,「Java」,「计算机网络」。

我公众号里的文章,写的大部分都是与 计算机基础知识 相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。 框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机制。 当然,在面试中也经常会被问到,特别是对于应届生,对于春秋招,也可以看看我前阵子写过的文章 历经两个月,我的秋招之路结束了! 也有读者经常问的 计算机基础知识究竟是指啥? 学习顺序?推荐书籍?

我公众号的读者学生以及非科班的应该挺多的,所以我今天这篇文章就写一写,我学过的计算机基础知识,看过的书以及我学过的顺序

当然,以下是我个人的一些经验,并且学过的一些知识,仅供参考,也欢迎大家进行补充

一、计算机网络

在我们用的程序中,99% 都离不开网络,作为一个程序员,我觉得了解计算机网络是必须的,在大学的课程中,一般也都会开设这一门课。

在我学习这门课之前,我就特别好奇,一台电脑是怎么把消息发给另外一台电脑的呢? 例如:

1、两台电脑啥线路也没有相连,怎么就能把消息发送给他呢?

2、世界上的电脑那么多,咋就能找到那台特点的电脑呢? 有人说我们可以 MAC 或者 IP 来唯一标识啊,可是,我就有点疑惑了,世界那么大,电脑那么多,有了这个标识,我们该怎么找到他呢? 遍历所有电脑?

3、多个程序同时发消息给一台电脑,电脑是如何准确把这些消息拿给这些不同程序的呢?

4、发送的消息丢失了怎么办?

总之,一大堆疑问,看了计算机网络之后,才豁然开朗。 自己也写了一篇评价不错的文章: 一文读懂一台计算机是如何把数据发送给另一台计算机的

所以这里,我是强烈建议大家学一下的,在面试中,计算机网络也是高频考点,这里我大致总结一下一些必学协议以及面试高频考点:

1、http协议,包括: 封装格式,常见响应码,不同版本的区别,常见请求方法,存在哪些安全隐患,啥是无状态协议等。

2、https协议: http 是明文传输,https 是加密安全的,需要知道 https 是如何加密的、数字证书如何形成,啥的对称加密、非对称加密。

3、TCP协议: 三次握手、四次挥手、如何保证可靠传输、流量控制、拥塞控制。

4、UDP: 这个大致了解即可,好像内容比较少

5、DNS、ICMP、ARP、DHCP(我就不一个一个写了)

上面写的这些协议,我觉得是比较重要的,特别是在面试中。 我公众号文章也写了好几篇这些协议的,大家可以去 计算机基础 那个模块找。

对于新手推荐视频: 可以看韩老师讲的视频,在哔哩哔哩搜索 韩老师 就可以找到 韩老师讲高校《计算机网络原理》

推荐书籍: 《计算机网络: 自顶向下》、《图解http》

我是先看了视频,在看这两本书的(文末我会给出电子版)。

二、操作系统

操作系统也是一门非常重要的知识,在面试中也是问的非常多(当然,看公司,有些公司技术栈是 Java 的,可能问的比较少)。 对于操作系统,要学的也挺多,例如:

啥是进程,啥是线程,他们的本质区别? 我们运行一个程序时,数据放在哪里? 代码放在哪里? 咋就还要分堆和栈? 线程切换时是上下文是啥意思?

虚拟地址是什么鬼东西? 线程需要那么多种状态干啥子? 什么是乐观锁、悲观锁? 死锁是怎么造成的? 解决死锁的策略有哪些? 等等

有人说学操作系统太他妈枯燥了,确实挺枯燥,不过说实话,我还是学的挺有意思的,感觉可以学到很多种策略,一种比一种好,每次看完都是: 我去,咋我就想不到呢。 我觉得,对于前期,我们需要多参考别人的策略,看多了,有了一定的基础,慢慢形成自己的策略,总之,看这些书,不单要掌握这些知识点,更重要的是一种思维逻辑的提升

对于操作系统,我总结了下面一些比较核心,面试相对容易被考到的。

1、进程的通信方式(我写过一篇很不错的文章: 记一次面试: 进程之间究竟有哪些通信方式? ---- 告别死记硬背

2、进程、线程究竟是由什么组成的? 有哪些数据?

3、内存管理,包括: 虚拟内存(重点)、分页、分段、分页系统地址映射、内存置换算法(重点)。

4、死锁的处理策略(死锁预防、死锁检测与恢复、死锁避免)

5、进程调度算法

6、磁盘寻道算法

上面说的这些,我认为是比较重要的,如果你没学过,我相信学了之后,你可以学到很多东西,知识点只是其中之一。

推荐视频: 这个我没看过视频,所以想学的,我推荐去 中国mooc大学 找各大高校的课,也可以去国外找对应的课。

推荐书籍: 我看过的书籍是《操作系统—精髓与设计原理(第八版)》,不过大佬们都推荐《深入理解计算机操作系统(原书第三版)》,我看过目录,感觉还不错,这里也推荐这一本。 不过对于零基础的,我建议可以先看一本专门给小白看的书: 《程序是如何跑起来的》。

操作系统的学习,还是挺枯燥的,不过,只有把最难的啃过去,才能变的更加强大。 也欢迎大家持续关注我的公众号:







请到「今天看啥」查看全文