Linux最新《对线面试官》 高频 Linux 面试题 Part2,2024年最新阿里技术专家深入讲解

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

当子进程比父进程先结束,而父进程又没有回收子进程、释放子进程占用的资源,此时子进程就会变成僵尸进程

僵尸进程是一个早已死亡的进程,但在进程表中仍占据一个位置

孤儿进程:

如果父进程先结束,子进程就会变成孤儿进程,会被 init 进程接管,子进程结束后其占用资源就会被 init 进程回收

为了避免孤儿进程退出时所占资源无法被回收而变成僵尸进程,init 进程会接管这些孤儿进程,被Init接管的所有进程都不会变成僵尸进程

27、如何查看文件的访问时间、修改时间?

使用 stat 命令,可以查看到文件的详细信息

28、在不查看文件内容的情况下,如何快速判断这两份文件内容是否相同

使用 md5sum——计算检验 MD5 校验码

md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和

有 A.txt 和 B.txt 两份文件,可以通过 MD5sum A.txt B.txt 命令来比较这两个文件内容是否相同

29、哪个配置文件可以设置 DNS server?

/etc/reslove.conf

30、任务计划格式中,前面5个数字分表表示什么含义?

分时日月周

31、什么是系统负载?

系统负载表示处在可执行状态和不可中断睡眠状态的进程数量

  • 可执行状态进程:
    • 指的是正在被CPU执行的进程以及在就绪队列上等待被CPU执行的进程(运行态、就绪态)
  • 不可中断睡眠状态进程:
    • 指的是处于内核关键流程中的进程,而且这些流程不可以被打断(阻塞态)

32、什么是 CPU 使用率?

CPU使用率是指在单位时间内CPU处在非空闲态的时间比,反映了CPU的繁忙程度

比如说:比如说单核CPU一秒内处在非空闲态的时间为0.6秒,那么它的CPU使用率就是60%

而双核CPU一秒内处在非空闲态的时间分别为0.6s和0.4s,那么它的CPU使用率为(0.4+0.6)/ 2 * 100% = 50%

举个例子:

比如说有一家银行,只有一个业务窗口,每次只能接待一个人(单核CPU)

这一天,有五个人要来办理业务,由于只有一个窗口,就会出现一人办理另外四人等待的情况(平负载为5)

在业务窗口那个人只有真正办理业务才算是真正使用这个窗口,才意味着窗口正在忙碌(CPU使用率)
在这里插入图片描述

33、CPU 使用率与系统负载的关系

总结:

  • cpu使用率升高,会导致平均负载升高
  • 平均负载升高,CPU使用率不一定会升高(有可能是I/O压力使得出现大量不可中断睡眠进程导致的平均负载升高,但这是 CPU 是空闲状态的)

34、什么是 CPU 上下文切换?

先来了解下什么是 CPU 上下文

Linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行,但这些任务并不是真正在同时运行,而是系统在很短时间内将CPU轮流分配给它们,造成了多任务同时进行的错觉(宏观上并发)

比如说B任务在就绪队列等待CPU执行完A任务后执行它,那么CPU就需要知道任务从哪里加载,从哪里开始执行,这些都是系统事先帮它设置好CPU寄存器和程序计数器,即 CPU 上下文

CPU上下文切换

CPU上下文切换就是先把前一个任务(A任务)的CPU上下文(也就是 CPU 寄存器和程序计数器)保存起来然后加载新任务(B任务)的上下文到CPU寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务而保存起来的上下文,会存储在系统内核中,当该任务重新调度执行时会再次加载进来,从而保证任务原来状态不受影响

35、进程如何访问计算机内存?

进程是无法之间访问物理内存的,只有内核才可以访问物理内存

Linux 内核给每个进程都提供了一个独立的连续的虚拟地址空间,通过这个空间进程就可以访问到虚拟内存,而这个虚拟地址空间又被分为内核空间和用户空间
在这里插入图片描述
进程在用户态时能访问用户地址空间,在内核态可以访问内核地址空间

每个进程的内核空间内存关联的都是相同的物理内存,方便进程切换到内核态后访问
在这里插入图片描述
不是所有的虚拟内存都会被分配到物理内存的,只有那些实际使用的虚拟内存才被分配物理内存,并且通过内存映射来管理

内存映射:虚拟内存地址映射到物理内存地址为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系

在这里插入图片描述

36、聊聊 Linux 的写时复制吧

先来看下 Linux 的两个函数——fork() 和 exec()

  • fork()
    • Linux 系统中创建进程的主要方法,通过 fork() 会创建出一个和父进程完全相同的子进程
    • Linux下 init 进程是所有进程的爹,Linux 的进程都通过 init 进程或 init 的子进程fork(vfork) 出来的
  • exec()
    • 父进程 fork 出一个子进程,这个子进程是父进程的副本
    • exec() 作用就是装载一个新的程序(可执行映像),覆盖当前进程内存空间中的映像,从而执行不同的任务
    • 即 exec() 在执行时会直接替换掉当前进程的地址空间

了解了这两个函数的作用后,再来看下写时复制技术

Linux 写时复制技术(copy-on-write),简称 COW

传统做法下,父进程 fork 出一个和它完全相同的子进程,会直接将父进程的数据拷贝到子进程中,父子进程之间的数据段和堆栈是相互独立

一般来说,子进程被 fork 出之后都会执行 exec() 来实现自己想要的功能

所以如果按照传统的做法,父进程 fork 子进程时拷贝过去的数据是没用的,因为子进程会执行 exec() ,导致原数据被清空

既然很多时候父进程拷贝给子进程的数据是无效的,于是便有了写时复制这项技术

COW介绍:

  • 父进程 fork 出的子进程与父进程共享内存空间,即一开始的时候父进程的数据不会复制给子进程,这样创建子进程的速度就很快了!(不用复制,直接指向父进程的物理空间)
  • 只有当父子进程中有更改段的事件发生时(即写入操作),再为子进程分配相应的物理空间

COW原理:

  • fork之后,内核把父进程中所有的内存页的权限设置为只读,然后子进程的地址空间指向父进程,与父进程共享数据。当父子进程都只读内存时,正常执行
  • 当其中某个进程写内存时,CPU 检测到内存页是只读的,就会触发页异常中断,这时候内核就会把触发异常的页复制一份出来,这样父子进程就各自持有独立的异常页(其余的页还是共享父进程的)

COW好处:

  • 减少分配和复制大量资源时带来的时间消耗
  • 检查不必要的资源分配,比如fork进程时,并不是所有的页面都需要复制,父进程的代码段和只读数据段都不被允许修改,所以无需复制

PS:除了 fork() 之外其实有个 vfork()

这个 vfork() 更牛掰,内核连子进程的虚拟地址空间结构也不创建了,直接共享父进程的虚拟空间,也意味着共享了父进程的物理空间

总结:写时复制,即资源的复制只有在需要写入的时候才进行,不然就是以只读的形式共享,这样可以省去了 fork 子进程时的无用数据复制所需的开销

37、程序和进程的区别

我们知道,计算机只认识 0 和 1,所以无论用哪种语言编写代码,最后都需要通过某种方法将其翻译成二进制文件,才能在计算机中运行起来

而为了让这些代码能够正常运行,我们往往还要给它提供数据,这些数据加上代码本身的二进制文件存放在磁盘上,就是我们平常所说的一个个**”程序“**

然后我们就可以在计算机上运行这个程序了

首先操作系统将这个程序从磁盘读到内存当中,然后去交给 CPU 去执行,CPU 与 内存协作,又会使用到 CPU 寄存器存放数值,内存堆栈保存执行的命令和变量,如果有输入和输出,I/O 设备也会去执行

一旦程序被执行起来,它就从磁盘上的二进制文件,变成了内存中的数据、寄存器里的值,堆栈中的指令,被打开的文件,以及各种设备状态信息的一个集合,由静态变成了动态

像这样一个程序运行起来后的计算机执行环境的总和,就是进程

总结:程序是存储在磁盘上的二进制文件,进程是程序的运行时

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值