八股文騷套路之操作系統(tǒng)
八股文騷套路系列之計(jì)算機(jī)基礎(chǔ)來(lái)啦!?? 今天帶來(lái)的是操作系統(tǒng)相關(guān)的內(nèi)容。
這篇文章,我主要會(huì)介紹如何準(zhǔn)備操作系統(tǒng)面試,推薦一些不錯(cuò)的書(shū)籍以及視頻。并且,我還會(huì)總結(jié)出最常見(jiàn)的一些操作系統(tǒng)面試問(wèn)題,以方便大家把握重點(diǎn),有的放矢!
另外,我在這個(gè)系列,也會(huì)逐漸將自己在準(zhǔn)備秋招面試過(guò)程中的一些心得,以及一些技巧穿插的進(jìn)行講述,希望對(duì)大家有幫助!
計(jì)算機(jī)基礎(chǔ)這塊一般是中大廠面試問(wèn)的比較多,并且不同的大廠面試之間對(duì)其重視程度也不一樣。比如說(shuō)字節(jié)、騰訊面試就非常重視計(jì)算機(jī)基礎(chǔ)比如操作系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)這塊,他們會(huì)問(wèn)很多相關(guān)的問(wèn)題。而阿里、京東的面試偏向 Java 生態(tài),像常用的一些中間件、框架經(jīng)常會(huì)成為面試的重點(diǎn)。像阿里、京東的面試當(dāng)然也會(huì)問(wèn)計(jì)算機(jī)基礎(chǔ)比如操作系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò),不過(guò)問(wèn)的深度相對(duì)來(lái)說(shuō)比較一般。
相關(guān)閱讀:
面試小技巧
這里帶來(lái)的面試小技巧是關(guān)于 項(xiàng)目介紹 相關(guān)的。
在技術(shù)面試中,面試官通常都會(huì)讓你介紹一下自己所做的項(xiàng)目。
你可不要小看這一環(huán)節(jié)!就是一個(gè)簡(jiǎn)單的項(xiàng)目介紹,求職者之間的差距就特別大。有些小伙伴說(shuō)了半天就是說(shuō)不到重點(diǎn),面試官都著急。而有些小伙伴,不光言簡(jiǎn)意賅地介紹了項(xiàng)目經(jīng)歷,還順帶把面試官引向自己所擅長(zhǎng)的領(lǐng)域。
想要做好項(xiàng)目介紹,重要的是自己對(duì)于項(xiàng)目非常了解。一般情況下,在面試之前,你至少需要對(duì)你所做的項(xiàng)目下面這些信息了如指掌:
項(xiàng)目背景 :這個(gè)項(xiàng)目是在什么背景下做的。 項(xiàng)目架構(gòu)圖 :通常面試官會(huì)讓你手繪一下項(xiàng)目架構(gòu)圖。 項(xiàng)目技術(shù)棧 :你需要搞懂項(xiàng)目每個(gè)模塊所涉及到的技術(shù)。 項(xiàng)目亮點(diǎn) :這個(gè)項(xiàng)目有哪些亮點(diǎn)呢? 個(gè)人職責(zé)(重要) :面試官更看重的是你為這個(gè)項(xiàng)目做了什么貢獻(xiàn)。
具體介紹項(xiàng)目的時(shí)候,你可以這樣來(lái)(個(gè)人歷經(jīng)各種挫折之后所總結(jié)的經(jīng)驗(yàn),僅供參考):
簡(jiǎn)單幾句話介紹項(xiàng)目背景,讓面試官對(duì)項(xiàng)目有一個(gè)大概的認(rèn)識(shí)。 介紹一下項(xiàng)目所涉及到的一些技術(shù)點(diǎn)。介紹這些技術(shù)點(diǎn)的時(shí)候,順帶可以簡(jiǎn)單說(shuō)說(shuō)用這些技術(shù)都干了什么。比如介紹到 ES 的時(shí)候,你可以簡(jiǎn)單說(shuō)說(shuō)它在系統(tǒng)中哪些模塊(搜索模塊?日志模塊)被用到。 介紹自己做了一些什么事情,旨在突出亮點(diǎn)。另外,項(xiàng)目上自己遇到的一些比較有含金量的問(wèn)題及解決方案也可以順帶說(shuō)一下。
通常我們的簡(jiǎn)歷上都會(huì)有至少 2 個(gè)項(xiàng)目經(jīng)歷,個(gè)人建議你把你自己認(rèn)為最有價(jià)值,最能體現(xiàn)出你個(gè)人能力的放在最前面。
最后, 一定一定一定要把自己在項(xiàng)目上做過(guò)的功能所涉及到的技術(shù)給研究透! 這會(huì)是面試中的重中之重。
操作系統(tǒng)面試準(zhǔn)備
救急準(zhǔn)備
由于篇幅問(wèn)題,我并沒(méi)有寫下面涉及到的知識(shí)點(diǎn)的答案。你可以自行查閱,你也可以參考下面這兩個(gè)開(kāi)源倉(cāng)庫(kù):
CS-Notes[1] :技術(shù)面試必備基礎(chǔ)知識(shí)、Leetcode 題解、后端面試、Java 面試、春招、秋招、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、系統(tǒng)設(shè)計(jì)。 JavaGuide[2] :一份涵蓋大部分 Java 程序員所需要掌握的核心知識(shí)。
操作系統(tǒng)基礎(chǔ)概念
操作系統(tǒng)基礎(chǔ)相關(guān)的概念在面試中也會(huì)遇到,不過(guò),這部分內(nèi)容比較簡(jiǎn)單,花不了太多時(shí)間。
我簡(jiǎn)單總結(jié)了操作系統(tǒng)基礎(chǔ)概念中比較重要的知識(shí)點(diǎn):
操作系統(tǒng)的作用、特點(diǎn)、分類、發(fā)展 操作系統(tǒng)的結(jié)構(gòu) 內(nèi)核態(tài)和用戶態(tài)、系統(tǒng)調(diào)用
進(jìn)程和線程(重要)
這個(gè)是非常高頻的考點(diǎn)了!面試官在面試的時(shí)候可能會(huì)先讓你介紹一下進(jìn)程和線程的基本定義,然后再讓你對(duì)比一下兩者。
問(wèn)了這些比較基礎(chǔ)的內(nèi)容之后,有些面試官還會(huì)順帶問(wèn)你進(jìn)程和線程的狀態(tài)以及各種狀態(tài)之間的轉(zhuǎn)換。
如果還要繼續(xù)深入挖的話,面試官可能還會(huì)問(wèn)你 :
進(jìn)程的通信方式 :進(jìn)程與進(jìn)程之前是如何進(jìn)行通信的。 進(jìn)程調(diào)度算法 :CPU 如何應(yīng)用不同的調(diào)度算法來(lái)調(diào)度進(jìn)程。
內(nèi)存管理(重要)
面試官可能會(huì)先問(wèn)一些比較簡(jiǎn)單的問(wèn)題比如內(nèi)存管理的目的、邏輯和物理地址。
比較核心一些的問(wèn)題還是內(nèi)存管理機(jī)制和內(nèi)存管理相關(guān)的一些概念。
內(nèi)存管理機(jī)制 :像內(nèi)存管理機(jī)制簡(jiǎn)單分為連續(xù)分配管理方式和非連續(xù)分配管理方式這兩種。非連續(xù)分配管理方式比較重要,像分頁(yè)機(jī)制、分段機(jī)制、段頁(yè)式機(jī)制都屬于非連續(xù)分配管理。 內(nèi)存管理相關(guān)概念 :快表和多級(jí)頁(yè)表。
除此之外,虛擬內(nèi)存和請(qǐng)求分頁(yè)也非常重要,面試中也經(jīng)常會(huì)遇到。
虛擬內(nèi)存 :虛擬內(nèi)存介紹、局部性原理、虛擬內(nèi)存的實(shí)現(xiàn)機(jī)制 請(qǐng)求分頁(yè) :頁(yè)表機(jī)制、缺頁(yè)中斷、頁(yè)面置換算法
最后就是死鎖相關(guān)的內(nèi)容了,你需要掌握:
死鎖的必要條件 死鎖預(yù)防、避免、檢測(cè)與解除
CPU 調(diào)度
CPU 調(diào)度這塊最重要的就是搞懂幾種常見(jiàn)的 CPU 調(diào)度算法:
先到先服務(wù)調(diào)度(First-Come First-Served Scheduling,F(xiàn)CFS) 最短作業(yè)優(yōu)先調(diào)度(Shortest Job First,SJF) 優(yōu)先級(jí)調(diào)度(Priority Scheduling) 輪轉(zhuǎn)法調(diào)度(Round Robin,RR) ......
上面這幾種調(diào)度算法,大家通過(guò)名字應(yīng)該就能猜出個(gè)大概意義了。這些調(diào)度算法各有優(yōu)劣,沒(méi)有銀彈,只能根據(jù)具體場(chǎng)景選擇具體的調(diào)度算法。
因此,多級(jí)隊(duì)列調(diào)度(Multilevel Queue) 就誕生了。簡(jiǎn)單來(lái)說(shuō)就是把就緒隊(duì)列(存放有待執(zhí)行進(jìn)程)分成多個(gè)獨(dú)立隊(duì)列,每個(gè)隊(duì)列都有自己的調(diào)度算法。
Linux 相關(guān)(重要)
另外的話,操作系統(tǒng)這塊還需要對(duì) Linux 相關(guān)的知識(shí)有所了解:
Linux 常用命令 :比如說(shuō)創(chuàng)建文件相關(guān)的命令、搜索相關(guān)的命令 Linux 文件系統(tǒng) :文件系統(tǒng)原理、硬鏈接與軟鏈接、目錄結(jié)構(gòu) 僵尸進(jìn)程和孤兒進(jìn)程
系統(tǒng)學(xué)習(xí)
如果你要系統(tǒng)地學(xué)習(xí)操作系統(tǒng)的話,最硬核最權(quán)威的書(shū)籍是 《操作系統(tǒng)導(dǎo)論》[3] 。
這本書(shū)是是國(guó)外經(jīng)典教材《Operating Systems:Three Easy Pieces[4]》的中文版,還入選了國(guó)外著名高等院校信息科學(xué)與技術(shù)優(yōu)秀教材[5] 。目前,國(guó)內(nèi)很多高校的教材都是用的這本書(shū)。

這本書(shū)的作者還在 Github 分享了中文翻譯版,地址:https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese 。

你可以再配套一個(gè) 《深入理解計(jì)算機(jī)系統(tǒng)》[6] 加深你對(duì)計(jì)算機(jī)系統(tǒng)本質(zhì)的認(rèn)識(shí),美滋滋!
如果你覺(jué)得看書(shū)比較枯燥的話,還可以搭配一個(gè)視頻來(lái)學(xué)習(xí)。推薦你看看哈工大的李治軍老師的操作系統(tǒng)慕課,課程地址:https://www.icourse163.org/course/HIT-1002531008#/info 。

整個(gè)課程一共分為 4 大節(jié),每一大節(jié)的最后還有一些小實(shí)驗(yàn)。
操作系統(tǒng)基礎(chǔ) 進(jìn)程與線程 內(nèi)存管理 設(shè)備驅(qū)動(dòng)與文件系統(tǒng)
這個(gè)課程把操作系統(tǒng)中最重要的幾個(gè)模塊都涵蓋到了 :CPU 管理、內(nèi)存管理、外設(shè)管理、磁盤管理與文件系統(tǒng)、用戶接口和啟動(dòng)模塊。
另外,如果你僅僅是為了準(zhǔn)備操作系統(tǒng)面試的話,我更推薦去年新出的一本國(guó)產(chǎn)的操作系統(tǒng)書(shū)籍:《現(xiàn)代操作系統(tǒng):原理與實(shí)現(xiàn)》[7] (夏老師和陳老師團(tuán)隊(duì)的力作,值得推薦)。

這本書(shū)分為 3 部分,主要看第 1 部分就足夠了:
操作系統(tǒng)概述 :主要講了操作系統(tǒng)相關(guān)基礎(chǔ)概念及簡(jiǎn)史。 硬件結(jié)構(gòu) :主要講了計(jì)算機(jī)硬件結(jié)構(gòu)包括 CPU 與指令集架構(gòu)、物理內(nèi)存與 CPU 緩存等內(nèi)容。 操作系統(tǒng)結(jié)構(gòu) :主要講了操作系統(tǒng)內(nèi)核架構(gòu)、操作系統(tǒng)復(fù)雜度管理方法等內(nèi)容。 內(nèi)存管理 :主要講了虛擬地址、物理地址、虛擬內(nèi)存、物理內(nèi)存的分配與管理等內(nèi)容。 進(jìn)程與線程 :主要講了進(jìn)程和線程相關(guān)的概念。 操作系統(tǒng)調(diào)度 :主要講了操作系統(tǒng)的調(diào)度機(jī)制。 進(jìn)程間通信 :主要講了進(jìn)程間的通信機(jī)制。 同步原語(yǔ) :主要講了解決并發(fā)訪問(wèn)共享資源出現(xiàn)的同步問(wèn)題的解決方案比如互斥鎖、信號(hào)量、讀寫鎖。 文件系統(tǒng) :主要講了文件存儲(chǔ)相關(guān)的概念。 系統(tǒng)虛擬化 : 主要講了 CPU 虛擬化、內(nèi)存虛擬化、I/O 虛擬化等內(nèi)容。
另外,《現(xiàn)代操作系統(tǒng):原理與實(shí)現(xiàn)》這本書(shū)還有配套的視頻教程,地址:https://cnmooc.org/portal/course/5610/14956.mooc 。

最后,我再推薦一個(gè)國(guó)外學(xué)習(xí)編程的網(wǎng)站 studytonight[8] ,上面也有計(jì)算機(jī)基礎(chǔ)相關(guān)的學(xué)習(xí)資源。

參考資料
CS-Notes: https://github.com/CyC2018/CS-Notes
[2]JavaGuide: https://github.com/Snailclimb/JavaGuide
[3]《操作系統(tǒng)導(dǎo)論》: 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]國(guó)外著名高等院校信息科學(xué)與技術(shù)優(yōu)秀教材: https://book.douban.com/series/47813
[6]《深入理解計(jì)算機(jī)系統(tǒng)》: https://book.douban.com/subject/1230413/
[7]《現(xiàn)代操作系統(tǒng):原理與實(shí)現(xiàn)》: https://book.douban.com/subject/35208251/
[8]studytonight: https://www.studytonight.com/
我是 Guide哥,一個(gè)工作2年有余,接觸編程已經(jīng)6年有余的程序員。大三開(kāi)源 JavaGuide,目前已經(jīng) 100k+ Star。未來(lái)幾年,希望持續(xù)完善 JavaGuide,爭(zhēng)取能夠幫助更多學(xué)習(xí) Java 的小伙伴!共勉!凎!點(diǎn)擊即可了解我的個(gè)人經(jīng)歷。
歡迎點(diǎn)贊分享。咱們下期再會(huì)!
