前言
对于操作系统可能很多人会觉得:“我又不需要写一个Linux,写一个windows所以我就不需要学习”。这里需要注意的是我们学操作系统不是叫你写一个操作系统的,讲的是资源的调度和分配,以及大型软件的设计。稍微写过一些并行并行的程序,都能体会到这门课的重要性。它介于软件和硬件之间的一个部分,一般意义上认为其重要性介于软硬件之间,不会操作系统,不了解基本的计算机形成过程,玩计算机恐怕无异于痴人说梦,而我们程序员这一群体,做啥都离不开计算机,如果连操作系统都没有一点了解的话,在我看来是不算一个合格的程序员的!
说到操作系统就不得不说计算机网络了,计算机网络这块苦且绕不过去。开发时服务数量一多,吞吐量一大,我们关心的不再仅仅是某个Java应用,而是要提升整个集群的性能,这时网络问题就会出现。而且大规模的微服务架构必定要上云、使用VPC网络,这时就必定要考虑双活和灾备,必定要做各个层次的负载均衡,这些都需要网络方面的技术。以上种种让操作系统与计算机网络方面已经成为我们程序员必会的知识了!那么我们该如何学习这两方面的知识呢?不要慌,互联网雷锋(小编我)从我华为的朋友手上为大家搜罗到两份其内部疯传的进阶文档。由于内容太全,只能以截图主要内容的形式为大家展示出来了,需要的朋友只需要点赞文章,关注我之后文末即可免费获取高清版文档。
第一份:操作系统
大部分操作系统提供了特定的基础概念和抽象,例如进程、地址空间、文件等,它们是需要理解的核心内容。
- 进程和线程
操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象。操作系统的其他所有内容都是围绕着进程展开的。在传统的操作系统中,每个进程都有一个地址空间和一个控制线程。
- 内存
主存(RAM)是一件非常重要的资源,必须要认真对待内存。虽然目前大多数内存的增长速度要比IBM7094要快的多,但是,程序大小的增长要比内存的增长还快很多。不管存储器有多大,程序大小的增长速度比内存容量的增长速度要快的多。这一节就是探讨一下操作系统是如何创建内存并管理他们的。
- 文件储存
对于长久存储的信息我们有三个基本需求:必须要有可能存储的大量的信息,信息必须能够在进程终止时保留必须能够使多 个进程同时访问有关信息。这时候文件存储概念就出来了。
- I/O
I/0 设备又叫做输入/输出设备,它是人类用来和计算机进行通信的外部硬件。输入/输出设备能够向计算机发送数据(输出)并从计算机 接收数据(输入)
- 死锁
两个进程独占性地访问某个资源,从而等待另外一个资源的执行结果,会导致两个进程都被阻塞,并且两个进程都不会释放各自的资源,这种情况就是死锁(deadlock)
- 多线程面试题
下面是大厂的一些关注操作系统的面试真题
由于篇幅限制就只能这样展示出来了,需要的朋友帮忙评论+转发,关注我之后直接私信文末即可免费获取!下面我们来看看第二份文档.
第二份:网络协议
这份文档以通俗易懂、更加贴近日常生活的方式,从底层到上层对最基础、最常用、最重要的网络协议进行解析,并将深入分析网络协议在云计算、容器和微服务等领域的应用和实践。帮助入门级程序员深入、直观地理解网络协议基础概念和原理,构建一个完整、 精准的网络协议知识框架:也会帮助有一定工作经验的程序员填补知识漏洞、打通知识体系。
- 目录一览
- 内容一览
由于写在这里文章篇幅已经很长了,就只能以这样的形式展示出来了!有什么见解可以评论区指正。
写在最后
正如前言所说,操作系统和计算机网络非常重要!身为程序员的我们,应该深刻理解和掌握它们,虽然我们日常 CURD 的工作中,即使不熟悉它们,也不妨碍我们写代码,但是当出现问题时,没有这些基础知识,你是无厘头的,根本没有思路下手,这时候和别人差距就显现出来了,可以说是程序员之间的分水岭。如果你在学习这两方面的知识上遇到了什么问题,那么这两份文档一定能帮到你!需要的朋友只需要点赞文章,关注我之后直接添加小助理即可百分百免费获取!