操作系统常见面试和笔试题

介绍
操作系统是编程最重要的基础之一,操作系统相关知识广泛应用在程序设计、系统调优、问题追查、性能优化等重要场景中,一个不懂操作系统的程序员不可能写出优秀的代码,更不可能设计出优秀的系统架构,所以操作系统知识也是面试中不可或缺的一部分,尤其对于基础组件开发、系统调优等相关职位。
本节主要涉及一些操作系统的基本知识,包括操作系统原理及 Linux 系统的基本使用,包含 Linux 系统基本操作是因为现在的互联网公司基本都在使用 Linux 系统,日常的编程和基本操作基本都在 Linux 命令行下进行,所以 Linux 命令行下的基本操作及在 Linux 环境下编程和调试是一项必备技能。
由于本节中涉及到的知识都比较基础,所以这里没有对每个问题给出详细的答案,如果有不了解的内容,可以翻阅参考书籍的相关章节或百度一下,相信可以从各种途径得到详细的解答。这也是日后工作中必备的一项技能,主动寻求答案与被动接受答案的效果是相差很大的,被动接受的答案类似于死记硬背,缺乏灵活变通,在经验丰富的面试官面前会很容易被识破;而主动寻求答案的过程正是带着自己的思考不断融会贯通的过程,这样的
学习能力才是面试中最看中的素质。从现在开始练起吧。
一、进程与线程
1、什么是进程、线程,两者的关系?
2、进程有哪几种状态?孤儿进程、僵尸进程?
3、重点要理解孤儿进程和僵尸进程的产生原因、这两种进程对系统的影响(如:会不会消耗系统资源)、如
何处理这两种进程、在编程时如何避免产生这两种进程。
4、进程间通信有几种方式?详细解释其中最熟悉的一到两种?
5、管道、命名管道、信号、信号量、共享内存、消息队列,各种方式的原理是怎样的,需要深入理解其中
的至少 2 种方式。
6、操作系统的 CPU 调度算法有哪些?简述各种调度算法的原理?
7、FIFO、SPF、带优先级的调度 …,需要能简要说出各种调度算法的大致原理及优缺点
8、进程同步有几种方式?详细解释其中的一种?
9、临界区、信号量 …,需要能简述出各种方式的大致原理,并能详细理解至少其中一种,可以尝试用伪代码实现一种。
10、常见的同步模型:生产者消费者模型?尝试用你擅长的任何一种语言实现之
11、死锁问题?死锁的原因、处理、预防策略?
12、线程池的原理及作用?
13、了解线程池与一般的多线程有什么区别、优点及使用场景,尝试用代码实现之

二、内存管理与文件系统、IO
1、物理内存与虚拟内存
2、分页与分段
3、了解的页面置换算法有几种?详述其中一种?
FIFO、LRU、最优页……需要知道常用的几种算法的大致原理,并能详述其中一种
4、常见的 Linux 文件系统有哪几种?有哪些区别?
ext2、ext3、ext4 ?

三、Linux 基本操作
1、如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?
2、如何查看一个进程的详细信息,如何追踪一个进程的执行过程
3、awk、sed 等文件处理工具的使用
4、熟练使用一种 Linux 下的编辑器(VIM、Emacs)

网络基础
一、网络模型
1、OSI 七层网络模型和 TCP/IP 四层模型分别是什么样的?以及每层的数据格式?

2、常见的网络协议及它们分别属于 TCP/IP 模型的哪一层
应用层:HTTP、FTP ……
传输层:TCP、UDP ……
网络层:IP、ICMP、IGMP ……
链路层:ARP、RARP ……
3、TCP/IP 协议
1、TCP 建立和关闭连接过程
建立连接的三次握手,关闭连接的四次握手,及为什么要这么做,需要理解清楚。
2、TCP 滑动窗口
这个里面有几点需要理解
(1)滑动窗口机制的原理
(2)滑动窗口的作用
(3)滑动窗口大小与传输效率的关系
(4)TCP 拥塞控制机制,超时与重传

你可能感兴趣的:(前端面试)