八股文骚套路之操作系统
共 4583字,需浏览 10分钟
·
2021-08-09 22:59
八股文骚套路系列之计算机基础来啦!✌️ 今天带来的是操作系统相关的内容。
这篇文章,我主要会介绍如何准备操作系统面试,推荐一些不错的书籍以及视频。并且,我还会总结出最常见的一些操作系统面试问题,以方便大家把握重点,有的放矢!
另外,我在这个系列,也会逐渐将自己在准备秋招面试过程中的一些心得,以及一些技巧穿插的进行讲述,希望对大家有帮助!
计算机基础这块一般是中大厂面试问的比较多,并且不同的大厂面试之间对其重视程度也不一样。比如说字节、腾讯面试就非常重视计算机基础比如操作系统和计算机网络这块,他们会问很多相关的问题。而阿里、京东的面试偏向 Java 生态,像常用的一些中间件、框架经常会成为面试的重点。像阿里、京东的面试当然也会问计算机基础比如操作系统和计算机网络,不过问的深度相对来说比较一般。
相关阅读:
面试小技巧
这里带来的面试小技巧是关于 项目介绍 相关的。
在技术面试中,面试官通常都会让你介绍一下自己所做的项目。
你可不要小看这一环节!就是一个简单的项目介绍,求职者之间的差距就特别大。有些小伙伴说了半天就是说不到重点,面试官都着急。而有些小伙伴,不光言简意赅地介绍了项目经历,还顺带把面试官引向自己所擅长的领域。
想要做好项目介绍,重要的是自己对于项目非常了解。一般情况下,在面试之前,你至少需要对你所做的项目下面这些信息了如指掌:
项目背景 :这个项目是在什么背景下做的。 项目架构图 :通常面试官会让你手绘一下项目架构图。 项目技术栈 :你需要搞懂项目每个模块所涉及到的技术。 项目亮点 :这个项目有哪些亮点呢? 个人职责(重要) :面试官更看重的是你为这个项目做了什么贡献。
具体介绍项目的时候,你可以这样来(个人历经各种挫折之后所总结的经验,仅供参考):
简单几句话介绍项目背景,让面试官对项目有一个大概的认识。 介绍一下项目所涉及到的一些技术点。介绍这些技术点的时候,顺带可以简单说说用这些技术都干了什么。比如介绍到 ES 的时候,你可以简单说说它在系统中哪些模块(搜索模块?日志模块)被用到。 介绍自己做了一些什么事情,旨在突出亮点。另外,项目上自己遇到的一些比较有含金量的问题及解决方案也可以顺带说一下。
通常我们的简历上都会有至少 2 个项目经历,个人建议你把你自己认为最有价值,最能体现出你个人能力的放在最前面。
最后, 一定一定一定要把自己在项目上做过的功能所涉及到的技术给研究透! 这会是面试中的重中之重。
操作系统面试准备
救急准备
由于篇幅问题,我并没有写下面涉及到的知识点的答案。你可以自行查阅,你也可以参考下面这两个开源仓库:
CS-Notes[1] :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 JavaGuide[2] :一份涵盖大部分 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 文件系统 :文件系统原理、硬链接与软链接、目录结构 僵尸进程和孤儿进程
系统学习
如果你要系统地学习操作系统的话,最硬核最权威的书籍是 《操作系统导论》[3] 。
这本书是是国外经典教材《Operating Systems:Three Easy Pieces[4]》的中文版,还入选了国外著名高等院校信息科学与技术优秀教材[5] 。目前,国内很多高校的教材都是用的这本书。
这本书的作者还在 Github 分享了中文翻译版,地址:https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese 。
你可以再配套一个 《深入理解计算机系统》[6] 加深你对计算机系统本质的认识,美滋滋!
如果你觉得看书比较枯燥的话,还可以搭配一个视频来学习。推荐你看看哈工大的李治军老师的操作系统慕课,课程地址:https://www.icourse163.org/course/HIT-1002531008#/info 。
整个课程一共分为 4 大节,每一大节的最后还有一些小实验。
操作系统基础 进程与线程 内存管理 设备驱动与文件系统
这个课程把操作系统中最重要的几个模块都涵盖到了 :CPU 管理、内存管理、外设管理、磁盘管理与文件系统、用户接口和启动模块。
另外,如果你仅仅是为了准备操作系统面试的话,我更推荐去年新出的一本国产的操作系统书籍:《现代操作系统:原理与实现》[7] (夏老师和陈老师团队的力作,值得推荐)。
这本书分为 3 部分,主要看第 1 部分就足够了:
操作系统概述 :主要讲了操作系统相关基础概念及简史。 硬件结构 :主要讲了计算机硬件结构包括 CPU 与指令集架构、物理内存与 CPU 缓存等内容。 操作系统结构 :主要讲了操作系统内核架构、操作系统复杂度管理方法等内容。 内存管理 :主要讲了虚拟地址、物理地址、虚拟内存、物理内存的分配与管理等内容。 进程与线程 :主要讲了进程和线程相关的概念。 操作系统调度 :主要讲了操作系统的调度机制。 进程间通信 :主要讲了进程间的通信机制。 同步原语 :主要讲了解决并发访问共享资源出现的同步问题的解决方案比如互斥锁、信号量、读写锁。 文件系统 :主要讲了文件存储相关的概念。 系统虚拟化 : 主要讲了 CPU 虚拟化、内存虚拟化、I/O 虚拟化等内容。
另外,《现代操作系统:原理与实现》这本书还有配套的视频教程,地址:https://cnmooc.org/portal/course/5610/14956.mooc 。
最后,我再推荐一个国外学习编程的网站 studytonight[8] ,上面也有计算机基础相关的学习资源。
参考资料
CS-Notes: https://github.com/CyC2018/CS-Notes
[2]JavaGuide: https://github.com/Snailclimb/JavaGuide
[3]《操作系统导论》: https://book.douban.com/subject/33463930/
[4]Operating Systems:Three Easy Pieces: https://link.zhihu.com/?target=http%3A//pages.cs.wisc.edu/~remzi/OSTEP/
[5]国外著名高等院校信息科学与技术优秀教材: https://book.douban.com/series/47813
[6]《深入理解计算机系统》: https://book.douban.com/subject/1230413/
[7]《现代操作系统:原理与实现》: https://book.douban.com/subject/35208251/
[8]studytonight: https://www.studytonight.com/
我是 Guide哥,一个工作2年有余,接触编程已经6年有余的程序员。大三开源 JavaGuide,目前已经 100k+ Star。未来几年,希望持续完善 JavaGuide,争取能够帮助更多学习 Java 的小伙伴!共勉!凎!点击即可了解我的个人经历。
欢迎点赞分享。咱们下期再会!