操作系统考点分析与总结
我发现在计算机网络和操作系统这两门基础课程的考察中,操作系统问的还是相对比较少,并且问的花样也不多,就那几个问题,总的来说就是比计算机网络少很多,当然,这并不影响我们依然得把操作系统作为重点来学习。
下面我先给大家分析一下操作系统各个知识点的考点以及大公司和小公司在操作系统上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。
希望大家可以认真看一下,看完你内心也有一个大概了,并且你后面就围绕这个技术图谱来复习就行。
一、考点比例分布
我在统计的时候,把操作系统分成了进程与线程以及其他两个模块来统计(一般进程和线程会同时出现),统计下来的结果差不多是 1:1 ,也就是说,对于操作系统这门知识,进程和线程 占了一半的考点,并且问的都不难。
二、大公司与小公司
看了很多份面经,小公司基本不考,即使有问你进程和线程的区别,也是问 Java进程和 Java 线程,其实这算是属于 JVM 的东西,JVM 会 Java 线程与进程内存共享的玩意。
所以呢,如果是面试小公司的话,简单了解下就行,主要是了解下可以加深你对某些东西的理解。大公司的会,有时候没问,有时候问的时候,会一连串追着问。
下面我把进程与线程当作一个模块来总结,其他的知识当作一个模块来总结
三、超详细考点总结(按照出现频率排序)
1.1 进程与线程知识点总结
1、掌握进程的几种通信方式 + 线程的几种通信方式 + 进程与线程的区别 + 他们各自的使用场景。
2、掌握进程常见的几种调度算法
3、明白什么时候会发生线程切换,理解什么是上下文切换,切换时大致会保存哪些数据(记住几个核心的就可以了)。
4、掌握进程和线程的内部有哪些属性,记住几个常见的就可以了,比如寄存器是吧,又比如他们的状态啊,ID 啊,是吧,都是他们的属性,最后可以不用记忆,自己推导。
5、还要了解下协程,进程,线程,协程他们之间的区别。
6、理解什么是僵尸进程,怎么产生的,以及如何解决。
一般大部分问来问去就这些,有些太散的其实也不好总结,所以你们等下就看下面是怎么问的就行。
1.2 进程与线程提问方式
1、进程间的通信方式 –> 线程呢(???答了线程会共享进程全局变量),另外的问发:为什么要设计进程间通信这么多种方式?
AB共享内存通信,A new一块内存与B通信,A异常退出,B还能访问那块内存吗 为什么
2、进程和线程的区别?–>多进程和多线程的区别?-> 多进程和多线程的应用场景(答不出来,面试官换了个角度提醒我为什么引入线程)–> 线程如何改善进程的并发性能–> 线程是不是越多越好?–> 为什么要上下文切换?
3、进程与线程区别,进程通信方式,说一下socket,socket在本机和在网络通信区别
4、多进程与多线程的区别以及使用场景?
5、说一下进程(任务)调度算法
6、进程的地址空间里面有什么?
7、线程切换要保存哪些上下文?
8、寄存器有哪些?
9、了解协程吗?
10、线程切换的时机?给线程分配时间片,操作系统怎么知道时间片用完了?线程切换 一定会引起内核态和用户态的切换吗?
11、单核情况下,多线程为什么会比单线程的情况下去使用情况会更好?(面试官提醒后,会了)
看了一堆面经,基本都是这样问,关于进程与线程的提问方式,比较单调,也不算难。
2.1 其他知识点总结
1、了解内核态和用户态的区别以及为啥要区分这样两种状态。
2、理解什么是内存分页,什么是内存分段
3、理解什么是虚拟内存,以及为啥需要用虚拟内存 + 虚拟内存与物理内存的区别
4、系统调用与库函数的区别
4、理解什么是中断 + 什么情况下会发生中断
6、死锁相关问题:其实这个的话,更多的会结合 Java 来问,包括乐观锁,悲观锁这些
7、掌握常见页面调度算法
2.2 其他知识点总结提问方式
1、为什么要设计内核态、用户态两种状态
2、用户态和内核态的区别
3、虚拟内存到物理内存的寻址方式
3、为什么需要引入虚拟内存?
4、讲一讲内存分页、分段
5、页表的作用
6、系统调用与库函数的区别
7、聊聊系统调用,记得具体命令吗?
8、操作系统怎么处理中断的?怎么判断是哪种类型的中断?
9、操作系统读写磁盘,影响磁盘读写时间的因素有哪些?
10、锁:乐观锁与悲观锁、典型锁、死锁相关问题
11、页面调度算法有哪些
12、知不知道公平调度算法