写在前面

1. 计算机操作系统和计算机网络是每个后端开发工程师必须掌握的知识。因为你写的代码最终都是要在操作系统里跑的,弄懂操作系统的原理对你编写高质量代码、调优、排故都有很大的帮助。在这里说一下我作为非科班转后端开发对计算机操作系统的看法,这一块知识确实要比其他模块的知识要难理解,因为多了很多名词和概念,更加抽象。但是呢,即便难度大,我们也必须征服它。因为很有可能你不跨越它,就见不到向你挥手的 offer 。无论是为了秋招还是为了以后当一名有“深度”的开发工程师,都是有必要去学习操作系统的。2. 这里给大家推荐两本书,封面如下。我一直觉得对于计算机基础的模块,看一本好书是最好的学习办法。

2. 做笔记:计算机操作系统的知识点还是比较多的,需要看书的时候做好笔记,方便复习。而且做笔记的时候可以就这个知识点去百度下,看看有没有自己遗漏的点,再给补充进来。这样复习的时候,只用看笔记就可以了。

3. 看面经:经常刷一刷牛客,看看对于计算机操作系统,面试官们都是怎么问的?很多问题你可能会,但是不懂面试官的问法,也会回答不上来;问到的题目自己是否准备了?而且对于计算机网络和计算机操作系统会因为公司和岗位的不同而有所侧重的,多看看面经就会发现还是有一点规律的,但是这都不是绝对的,最后还要看面你的面试官的喜好。

计算机操作系统

1、简单说下你对并发和并行的理解?1. 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生;2. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件;2、同步、异步、阻塞、非阻塞的概念同步:当一个同步调用发出后,调用者要一直等待返回结果。通知后,才能进行后续的执行。异步:当一个异步过程调用发出后,调用者不能立刻得到返回结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。阻塞:是指调用结果返回前,当前线程会被挂起,即阻塞。

非阻塞:是指即使调用结果没返回,也不会阻塞当前线程。

3、进程和线程的基本概念进程:进程是系统进行资源分配和调度的一个独立单位,是系统中的并发执行的单位。线程:线程是进程的一个实体,也是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,有时又被称为轻权进程或轻量级进程。

4、进程与线程的区别?

1. 进程是资源分配的最小单位,而线程是 CPU 调度的最小单位;2. 创建进程或撤销进程,系统都要为之分配或回收资源,操作系统开销远大于创建或撤销线程时的开销;3. 不同进程地址空间相互独立,同一进程内的线程共享同一地址空间。一个进程的线程在另一个进程内是不可见的;4. 进程间不会相互影响,而一个线程挂掉将可能导致整个进程挂掉;5、为什么有了进程,还要有线程呢?

进程可以使多个程序并发执行,以提高资源的利用率和系统的吞吐量,但是其带来了一些缺点:

1. 进程在同一时间只能干一件事情;2. 进程在执行的过程中如果阻塞,整个进程就会被挂起,即使进程中有些工作不依赖与等待的资源,仍然不会执行。

基于以上的缺点,操作系统引入了比进程粒度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时间和空间开销,提高并发性能。

6、进程的状态转换进程包括三种状态:就绪态、运行态和阻塞态。

1. 就绪 —> 执行:对就绪状态的进程,当进程调度程序按一种选定的策略从中选中一个就绪进程,为之分配了处理机后,该进程便由就绪状态变为执行状态;

2. 执行 —> 阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如进程提出输入/输出请求而变成等待外部设备传输信息的状态,进程申请资源(主存空间或外部设备)得不到满足时变成等待资源状态,进程运行中出现了故障(程序出错或主存储器读写错等)变成等待干预状态等等; 3. 阻塞 —> 就绪:处于阻塞状态的进程,在其等待的事件已经发生,如输入/输出完成,资源得到满足或错误处理完毕时,处于等待状态的进程并不马上转入执行状态,而是先转入就绪状态,然后再由系统进程调度程序在适当的时候将该进程转为执行状态;4. 执行 —> 就绪:正在执行的进程,因时间片用完而被暂停执行,或在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行而被迫让出处理机时,该进程便由执行状态转变为就绪状态。

7、进程间的通信方式有哪些?

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC 的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams 等。其中 Socket 和 Streams 支持不同主机上的两个进程 IPC。

  • 管道

1. 它是半双工的,具有固定的读端和写端;2. 它只能用于父子进程或者兄弟进程之间的进程的通信;3. 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read、write  等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

  • 命名管道

1. FIFO 可以在无关的进程之间交换数据,与无名管道不同;2. FIFO 有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

  • 消息队列

1. 消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符 ID 来标识;2. 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级;3. 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除;4. 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

  • 信号量

1. 信号量(semaphore)是一个计数器。用于实现进程间的互斥与同步,而不是用于存储进程间通信数据;

2. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存;

3. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作;4. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数;5. 支持信号量组。

  • 共享内存

1. 共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区;2. 共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。8、进程的调度算法有哪些?调度算法是指:根据系统的资源分配策略所规定的资源分配算法。常用的调度算法有:先来先服务调度算法、时间片轮转调度法、短作业优先调度算法、最短剩余时间优先、高响应比优先调度算法、优先级调度算法等等。

  • 先来先服务调度算法

先来先服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方案。当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。该算法既可以用于作业调度,也可以用于进程调度。先来先去服务比较适合于常作业(进程),而不利于段作业(进程)。

  • 时间片轮转调度算法

时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片。

  • 短作业优先调度算法

短作业优先调度算法是指对短作业优先调度的算法,从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。 短作业优先调度算法是一个非抢占策略,他的原则是下一次选择预计处理时间最短的进程,因此短进程将会越过长作业,跳至队列头。

  • 最短剩余时间优先调度算法

最短剩余时间是针对最短进程优先增加了抢占机制的版本。在这种情况下,进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,他可能比当前运行的进程具有更短的剩余时间,因此只要新进程就绪,调度程序就能可能抢占当前正在运行的进程。像最短进程优先一样,调度程序正在执行选择函数是必须有关于处理时间的估计,并且存在长进程饥饿的危险。

  • 高响应比优先调度算法

高响应比优先调度算法主要用于作业调度,该算法是对 先来先服务调度算法和短作业优先调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

  • 优先级调度算法

优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

9、什么是死锁?

死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 如下图所示:如果此时有一个线程 A,已经持有了锁 A,但是试图获取锁 B,线程 B 持有锁 B,而试图获取锁 A,这种情况下就会产生死锁。

10、产生死锁的原因?

由于系统中存在一些不可剥夺资源,而当两个或两个以上进程占有自身资源,并请求对方资源时,会导致每个进程都无法向前推进,这就是死锁。

  • 竞争资源

例如:系统中只有一台打印机,可供进程 A 使用,假定 A 已占用了打印机,若 B 继续要求打印机打印将被阻塞。

系统中的资源可以分为两类:1. 可剥夺资源:是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU 和主存均属于可剥夺性资源;2. 不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。

  • 2. 进程推进顺序不当

例如:进程 A 和 进程 B 互相等待对方的数据。

11、死锁产生的必要条件?

1. 互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。2. 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。3. 不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。4. 环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。12、解决死锁的基本方法?1. 预防死锁2. 避免死锁3. 检测死锁4. 解除死锁

13、怎么预防死锁?

1. 破坏请求条件:一次性分配所有资源,这样就不会再有请求了;2. 破坏请保持条件:只要有一个资源得不到分配,也不给这个进程分配其他的资源:3. 破坏不可剥夺条件:当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源;4. 破坏环路等待条件:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反。14、怎么避免死锁?

  • 银行家算法

当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。

当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源。若没超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若满足则按当前的申请量分配资源,否则也要推迟分配。

  • 安全序列

是指系统能按某种进程推进顺序(P1, P2, P3, ..., Pn),为每个进程 Pi 分配其所需要的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序地完成。这种推进顺序就叫安全序列【银行家算法的核心就是找到一个安全序列】。

  • 系统安全状态 

如果系统能找到一个安全序列,就称系统处于安全状态,否则,就称系统处于不安全状态。

15、怎么解除死锁?

1. 资源剥夺:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他死锁进程(但应该防止被挂起的进程长时间得不到资源);

2. 撤销进程:强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源(撤销的原则可以按进程优先级和撤销进程代价的高低进行);3. 进程回退:让一个或多个进程回退到足以避免死锁的地步。进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。16、什么是缓冲区溢出?有什么危害?

缓冲区为暂时置放输出或输入资料的内存。缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入是否合理。计算机中,缓冲区溢出会造成的危害主要有以下两点:程序崩溃导致拒绝服务和跳转并且执行一段恶意代码。

17、分页与分段的区别?1. 段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的;2. 段的大小不固定,有它所完成的功能决定;页大大小固定,由系统决定;3. 段向用户提供二维地址空间;页向用户提供的是一维地址空间;4. 段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。18、物理地址、逻辑地址、虚拟内存的概念1. 物理地址:它是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取,是内存单元真正的地址。2. 逻辑地址:是指计算机用户看到的地址。例如:当创建一个长度为 100 的整型数组时,操作系统返回一个逻辑上的连续空间:指针指向数组第一个元素的内存地址。由于整型元素的大小为 4 个字节,故第二个元素的地址时起始地址加 4,以此类推。事实上,逻辑地址并不一定是元素存储的真实地址,即数组元素的物理地址(在内存条中所处的位置),并非是连续的,只是操作系统通过地址映射,将逻辑地址映射成连续的,这样更符合人们的直观思维。3. 虚拟内存:是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。19、页面置换算法有哪些?

请求调页,也称按需调页,即对不在内存中的“页”,当进程执行时要用时才调入,否则有可能到程序结束时也不会调入。而内存中给页面留的位置是有限的,在内存中以帧为单位放置页面。为了防止请求调页的过程出现过多的内存页面错误(即需要的页面当前不在内存中,需要从硬盘中读数据,也即需要做页面的替换)而使得程序执行效率下降,我们需要设计一些页面置换算法,页面按照这些算法进行相互替换时,可以尽量达到较低的错误率。常用的页面置换算法如下:

  • 先进先出置换算法(FIFO)

先进先出,即淘汰最早调入的页面。

  • 最佳置换算法(OPT)

选未来最远将使用的页淘汰,是一种最优的方案,可以证明缺页数最小。

  • 最近最久未使用(LRU)算法

即选择最近最久未使用的页面予以淘汰

  • 时钟(Clock)置换算法

时钟置换算法也叫最近未用算法 NRU(Not RecentlyUsed)。该算法为每个页面设置一位访问位,将内存中的所有页面都通过链接指针链成一个循环队列。

20、谈谈你对动态链接库和静态链接库的理解?

静态链接就是在编译链接时直接将需要的执行代码拷贝到调用处,优点就是在程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行,但是体积可能会相对大一些。

动态链接就是在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。优点是多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝,缺点是由于是运行时加载,可能会影响程序的前期执行性能。

您点的“在看”就是对我最大的鼓励

简单计算机面试题库及答案_460道Java后端面试高频题答案版【模块六:计算机操作系统】...相关推荐

  1. 面试题:460道Java后端面试高频题答案版「模块九:Spring」

    Spring 写在前面 相信对于 Spring 这个模块,只要是做过 Java 开发的同学都是不陌生的,或多或少都使用过 Spring 体系的框架.对于平时自己做点小项目会写配置文件可能就行了,但是对 ...

  2. 40道Java多线程面试真题及答案

    这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...

  3. 2022最全Java后端面试真题、两万字1000+道堪称史上最强的面试题不接受任何反驳

    对于生命垂危的病人来说,时刻就是宝贵的生命;对于做生意的人来说,时刻就是财富,有的人说时刻就像是从山坡上流下来的水,从何处吹来的风,走了就不再回来了;而对于正在工作的我们来说,时刻就是力量,时刻就是财 ...

  4. Java面试题:热情盛夏,分享Java大厂面试百题

    Java是编程语言中的王者,在未来也依旧稳坐霸主,是IT行业的发展趋势,学习Java已经是一个不可阻挡的趋势. 大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在 ...

  5. 目前我们所说的个人商用计算机属于,计算机组成原理试题库(大专生用,共20份,有答案)...

    内容简介: 计算机组成原理试题库(大专生用,共20份,有答案) 专科生期末试卷一 一. 选择题 (每小题1分,共20分) 1. 目前我们所说的个人台式商用机属于______. A.巨型机 B.中型机 ...

  6. 计算机组成原理基础知识试题及答案,[电脑基础知识]计算机组成原理试题库.doc...

    [电脑基础知识]计算机组成原理试题库.doc 计算机组成原理练习题一. 单项选择题CPU响应中断的时间是. A中断源提出请求: B取指周期结束: C执行周期结束: D间址周期结束. 2下列说法中是正确 ...

  7. 大一大学计算机考试题库,2017年大学计算机基础试题库「附答案」

    2017年大学计算机基础试题库「附答案」 一.选择题 1.世界上公认的第一台电子计算机诞生的年代是( ). A.1943 B.1946 C.1950 D.1951 2.构成CPU的主要部件是( ). ...

  8. 运营商计算机笔试题库及答案,计算机笔试题库及答案

    计算机的出现和逐步的普及,信息对整个社会的影响逐步提高到一种绝对重要的地位.以下是计算机笔试题库及答案,欢迎阅读. 一.选择题 1.世界上公认的第一台电子计算机诞生的年代是(  ). A)1943 B ...

  9. 计算机笔试知识题库及答案解析,计算机笔试题库及答案.docx

    计算机笔试题库及答案 计算机的出现和逐步的普及,信息对整个社会的影响 逐步提高到一种绝对重要的地位.以下是计算机笔试题库 及答案,欢迎阅读. 世界上公认的第一台电子计算机诞生的年代是. TOC \o ...

最新文章

  1. swift实现提示框第三方库:MBProgressHUD
  2. 一文带你了解被 BATJ 问烂的 TopK 问题
  3. Chapter 1 Securing Your Server and Network(9):使用Kerberos用于身份验证
  4. Linux 内核超时导致虚拟机无法正常启动
  5. mysql 执行计划 优化_执行计划
  6. Java内存缓存-通过Google Guava创建缓存
  7. WebSocket服务器上的oTransactionID_SiteDetailMap的qrcode是何时生成的
  8. (十四)【RecSys 2016】Personalized Recommendations using Knowledge Graphs: A Probabilistic【看不懂】
  9. 能量采集(HYSBZ-2005)
  10. asp类型转换函数汇总 转贴
  11. Myeclipse 8.5 注册码
  12. 在HTML中标记tel是什么意思,'tel'属性在AEM 6.1的经典UI中富文本编辑器中的锚标记的href中不起作用...
  13. 【TSP】基于matlab蚁群算法求解76城市旅行商问题【含Matlab源码 409期】
  14. 软件评测师备考经验分享
  15. 科技狂人埃隆·马斯克
  16. 电脑小白快来!这有电脑常见故障解决方法
  17. 数据库是根和数据仓库是魂
  18. Why my APNs push certificate did not work?
  19. Pytorch Tutorial 学习笔记(六)模型部署
  20. python相册排版_Python3一键排版证件照(1寸照、2寸照) | 原创

热门文章

  1. scala调用java代码
  2. arcgis api for javascript从地图如何读取要素
  3. OCPC 广告算法在凤凰新媒体的实践探索
  4. Object类和String类
  5. 获取用户之间关系——使用followerway
  6. python核心编程6-14习题的解题思路
  7. 多代理集群调度:可伸缩性和灵活性
  8. 如何在WPF中调用Winform控件
  9. Linux 线程与互斥锁的使用
  10. opencv,用摄像头识别贴片元件的定位和元件的角度(转载)