Skip to content

Latest commit

 

History

History
130 lines (78 loc) · 7.67 KB

八股文骚套路之操作系统.md

File metadata and controls

130 lines (78 loc) · 7.67 KB

八股文骚套路系列之计算机基础来啦!✌️ 今天带来的是操作系统相关的内容。

这篇文章,我主要会介绍如何准备操作系统面试,推荐一些不错的书籍以及视频。并且,我还会总结出最常见的一些操作系统面试问题,以方便大家把握重点,有的放矢!

另外,我在这个系列,也会逐渐将自己在准备秋招面试过程中的一些心得,以及一些技巧穿插的进行讲述,希望对大家有帮助!

计算机基础这块一般是中大厂面试问的比较多,并且不同的大厂面试之间对其重视程度也不一样。比如说字节、腾讯面试就非常重视计算机基础比如操作系统和计算机网络这块,他们会问很多相关的问题。而阿里、京东的面试偏向 Java 生态,像常用的一些中间件、框架经常会成为面试的重点。像阿里、京东的面试当然也会问计算机基础比如操作系统和计算机网络,不过问的深度相对来说比较一般。

操作系统面试准备

救急准备

由于篇幅问题,我并没有写下面涉及到的知识点的答案。你可以自行查阅,你也可以参考下面这两个开源仓库:

  • CS-Notes :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。
  • JavaGuide : 一份涵盖大部分 Java 程序员所需要掌握的核心知识。

操作系统基础概念

操作系统基础相关的概念在面试中也会遇到,不过,这部分内容比较简单,花不了太多时间。

我简单总结了操作系统基础概念中比较重要的知识点:

  • 操作系统的作用、特点、分类、发展
  • 操作系统的结构
  • 内核态和用户态、系统调用

进程和线程(重要)

这个是非常高频的考点了!面试官在面试的时候可能会先让你介绍一下进程和线程的基本定义,然后再让你对比一下两者。

问了这些比较基础的内容之后,有些面试官还会顺带问你进程和线程的状态以及各种状态之间的转换。

如果还要继续深入挖的话,面试官可能还会问你 :

  • 进程的通信方式 : 进程与进程之前是如何进行通信的。
  • 进程调度算法 : CPU 如何应用不同的调度算法来调度进程。

内存管理(重要)

面试官可能会先问一些比较简单的问题比如内存管理的目的、逻辑和物理地址。

比较核心一些的问题还是内存管理机制和内存管理相关的一些概念。

  • 内存管理机制 :像内存管理机制简单分为连续分配管理方式和非连续分配管理方式这两种。非连续分配管理方式比较重要,像分页机制、分段机制、段页式机制都属于非连续分配管理。
  • 内存管理相关概念 : 快表和多级页表。

除此之外,虚拟内存和请求分页也非常重要,面试中也经常会遇到。

  • 虚拟内存 :虚拟内存介绍、局部性原理、虚拟内存的实现机制
  • 请求分页 : 页表机制、缺页中断、页面置换算法

最后就是死锁相关的内容了,你需要掌握:

  • 死锁的必要条件
  • 死锁预防、避免、检测与解除

CPU 调度

CPU 调度这块最重要的就是搞懂几种常见的 CPU 调度算法:

  • 先到先服务调度(First-Come First-Served Scheduling,FCFS)
  • 最短作业优先调度(Shortest Job First,SJF)
  • 优先级调度(Priority Scheduling)
  • 轮转法调度(Round Robin,RR)
  • ......

上面这几种调度算法,大家通过名字应该就能猜出个大概意义了。这些调度算法各有优劣,没有银弹,只能根据具体场景选择具体的调度算法。

因此,多级队列调度(Multilevel Queue) 就诞生了。简单来说就是把就绪队列(存放有待执行进程)分成多个独立队列,每个队列都有自己的调度算法。

Linux 相关(重要)

另外的话,操作系统这块还需要对 Linux 相关的知识有所了解:

  • Linux 常用命令 :比如说创建文件相关的命令、搜索相关的命令
  • Linux 文件系统 : 文件系统原理、硬链接与软链接、目录结构
  • 僵尸进程和孤儿进程

系统学习

如果你要系统地学习操作系统的话,最硬核最权威的书籍是 《操作系统导论》

这本书是是国外经典教材《Operating Systems:Three Easy Pieces》的中文版,还入选了国外著名高等院校信息科学与技术优秀教材 。目前,国内很多高校的教材都是用的这本书。

操作系统导论

这本书的作者还在 Github 分享了中文翻译版,地址:https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese

你可以再配套一个 《深入理解计算机系统》 加深你对计算机系统本质的认识,美滋滋!

如果你觉得看书比较枯燥的话,还可以搭配一个视频来学习。推荐你看看哈工大的李治军老师的操作系统慕课,课程地址:https://www.icourse163.org/course/HIT-1002531008#/info

整个课程一共分为 4 大节,每一大节的最后还有一些小实验。

  • 操作系统基础
  • 进程与线程
  • 内存管理
  • 设备驱动与文件系统

这个课程把操作系统中最重要的几个模块都涵盖到了 : CPU 管理、内存管理、外设管理、磁盘管理与文件系统、用户接口和启动模块。

另外,如果你仅仅是为了准备操作系统面试的话,我更推荐去年新出的一本国产的操作系统书籍:《现代操作系统:原理与实现》 (夏老师和陈老师团队的力作,值得推荐)。

这本书分为 3 部分,主要看第 1 部分就足够了:

  • 操作系统概述 :主要讲了操作系统相关基础概念及简史。
  • 硬件结构 :主要讲了计算机硬件结构包括 CPU 与指令集架构、物理内存与 CPU 缓存等内容。
  • 操作系统结构 :主要讲了操作系统内核架构、操作系统复杂度管理方法等内容。
  • 内存管理 : 主要讲了虚拟地址、物理地址、虚拟内存、物理内存的分配与管理等内容。
  • 进程与线程 : 主要讲了进程和线程相关的概念。
  • 操作系统调度 :主要讲了操作系统的调度机制。
  • 进程间通信 : 主要讲了进程间的通信机制。
  • 同步原语 :主要讲了解决并发访问共享资源出现的同步问题的解决方案比如互斥锁、信号量、读写锁。
  • 文件系统 :主要讲了文件存储相关的概念。
  • 系统虚拟化 : 主要讲了 CPU 虚拟化、内存虚拟化、I/O 虚拟化等内容。

另外,《现代操作系统:原理与实现》这本书还有配套的视频教程,地址:https://cnmooc.org/portal/course/5610/14956.mooc

最后,我再推荐一个国外学习编程的网站 studytonight ,上面也有计算机基础相关的学习资源。