<audio id="audio" title="期末测试 | 这些操作系统问题，你真的掌握了吗？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/96/5d/96ff6d500b5fa98ae05a9ad84300295d.mp3"></audio>

你好，我是刘超。当你看到这篇文章的时候，说明你已经历经九九八十一难，完成了整个课程的学习，你是否已经悟到操作系统的“真谛”了呢？我们今天就来测试一下。

先和你说一下，期末测试题的设计，我采取了和入学测验不一样的思路。当时入学测验里的题目比较细节，类似你在大学里学完操作系统课之后的考试题目。现在整个专栏学完了，我们需要换一种检测方式。所以，期末测试题，我设计成了选择题+开放式问题的形式。这才是我们现实生活中，不管是面试还是工作中，常常会遇到的“考试”方式。

有人说，面试的时候问操作系统知识，就是“面试造航母，上班拧螺丝”，没有啥用。其实不然，这些看似简单开放的问题，其实最能检验真本事的。面试官毕竟阅人无数，带人无数，看似他只是在问你这个问题的答案，其实这些问题背后都有实际的工作场景——只是你可能不了解或者想象不到而已。

因此，我把专栏内容中最核心的知识点总结成20道选择题，并且把每个部分面试可能会考到的问题，也总结成11道开放式面试题。你可不要小看这些面试题，也不要以为，面试官真的只是单纯地在问你这些问题的答案。因为这些面试题都产生于真实的工作场景中。

在这个场景中，秃头哥因为工作经验丰富，发际线已经非常可怜。长发哥是新进入公司的员工。你可以看看，他们在工作中是怎么互动的，感受一下长发哥回答不出问题的“尴尬”。

同时，你可以想一想，如果换作是你，在面试或者工作中遇到这些问题，你会怎么回答呢？你可以把思考之后的答案写在留言里。当然，如果你的朋友也在为面试或者操作系统知识烦忧，你可以把这篇文章分享给他。

这里呢，我还给你准备了几个回答问题的小Tips。你在答题的时候，可以参照下面这三个Tips，组织你的答案。

**第一，回答尽量体系化。**不仅仅回答这个问题的知识点，还可以简单描述一下这个点背后完整的体系，然后根据面试官接下来的追问，更详细地描述其他相关的内容。

这样做的好处是：一，防止你因为这个点没有回答好而丢掉所有的分；二，可以体现你的知识掌握比较全面，可以加分；三，还可以避免冷场和尬聊。

面试官开放式地提问，最不想听到的就是“封闭式”回答。有的面试者“惜字如金”，有的人能聊一个小时，有的人不到半个小时就答完了，让面试官没有办法深入全面地了解你。

**第二，在体系化的阐述过程中，可以加入一些你使用过的相关工具或者技巧的阐述。**例如，操作系统干这个事情有十个步骤。第三步会在某个日志文件里面打印这样的日志，如果发现打印出xxx说明可能有错误，第七步可以通过某个命令行查看某某状态，等等。诸如此类，可以让面试官感觉到你是实战派而非理论派。

**第三，在体系化的阐述过程中，如果能加入一些项目经验就更好了。**例如，在第九个步骤，当时在做某项目的时候，因为客户现场的版本问题，导致了什么结果，最后如何进行解决的等等。

我刚才说了，面试官问问题的时候，脑子里都是有实际工作场景的。如果你能把他带到你的工作场景里面，有利于面试官对你当时的情形感同身受，你的分数自然不会很低。

看我说了这么多，你是不是已经迫不及待的想要答题啦？别着急，我们来说说这两套题的答题顺序，我建议你先做选择题，再做面试题，因为这更像我们实际的面试过程，先笔试、再面试。

## 选择题

好了，现在开始答题吧！

[<img src="https://static001.geekbang.org/resource/image/28/a4/28d1be62669b4f3cc01c36466bf811a4.png" alt="">](http://time.geekbang.org/quiz/intro?act_id=152&amp;exam_id=337)

## 面试题

### 1.你能说一下操作系统的启动和初始化过程吗？

秃头哥：给虚拟机做一个镜像，让系统起来以后做一些初始化。<br>
长发哥：才初始化，怎么连进去呢？<br>
秃头哥：……

### 2.请问进程和线程的概念和区别是什么？

秃头哥：把Dubbo线程池调大一点！<br>
长发哥：好，我调到10000了。线程越多是不是性能越高啊？<br>
秃头哥：……

### 3.请问函数调用堆栈的原理是什么？

秃头哥：这个接口调用性能比较差，排查一下哪里慢！<br>
长发哥：好的，一定认真排查。<br>
秃头哥：怎么样了？有思路了吗？<br>
长发哥：正在一行行看呢！<br>
秃头哥：……

### 4.对内存管理了解吗？请说一下物理内存和虚拟内存的概念。

秃头哥：你看这个进程GC这么严重，看看问题在哪儿？<br>
长发哥：这么多变量，看哪个？<br>
秃头哥：……

### 5.请介绍一下虚拟文件系统的机制。

长发哥：这个程序运行时间一长就挂了，咋回事呀？<br>
秃头哥：这不有异常吗？超过最大打开文件数了。<br>
长发哥：打开文件还有限制？<br>
秃头哥：……

### 6.你了解文件写入的流程吗？

秃头哥：咱们的消息队列模型要慢慢换成Kafka！<br>
长发哥：我大概瞄了一下，Kafka的消息存储是基于硬盘的。这么慢的方式怎么能用？<br>
秃头哥：……

### 7.进程间通信的管道机制了解吗？

秃头哥：帮我把这些监控数据里面的第三列拿出来，取一个平均数！<br>
长发哥：好的，等我打开Excel。<br>
秃头哥：……

### 8.请讲一下信号和中断机制。

秃头哥：为了让这个进程能够优雅的关闭，要给他发一个信号！<br>
长发哥：怎么发信号？<br>
秃头哥：kill呀！<br>
长发哥：那不就强制干掉了吗？没法儿优雅呀？<br>
秃头哥：……

### 9.请讲一下TCP/IP的分层模型。

长发哥：客户要求数据一个不能丢，是不是要通过可靠的协议TCP才行？<br>
秃头哥：当然应该TCP呀！<br>
长发哥：可是客户还要求数据一个不能多，TCP重传可能会导致数据重复啊！<br>
秃头哥：……

### 10.请讲一下三次握手和四次挥手以及状态转换。

长发哥：进程明明启动了，为啥连不上呀？<br>
秃头哥：看一下有没有监听端口，处于什么状态！<br>
长发哥：我看配置文件了，端口配置得没错呀。<br>
秃头哥：你看监听的端口和配置的不一样，是不是配置文件有冲突了？<br>
长发哥：你真牛，你怎么知道另一个jar里面还有一个配置文件？<br>
秃头哥：……

### 11.最新的云或者容器的技术了解过吗？

秃头哥：客户有一台老的centOS 6，需要写一个脚本能在上面安装软件！<br>
长发哥：去哪里找这么老的系统啊，帮我申请一台物理机，我找找老镜像装一个。<br>
秃头哥：……
