2021 秋招面经

字节国际电商面试

面的很多都是关于go和操作系统的概念。

如何理解操作系统的用户态和内核态?

操作系统为了系统安全会对执行权限进行分级。内核态是介于硬件与应用之间的层,其拥有最高的ring0的权限,可以执行各种CPU指令和硬件驱动等能力。而用户态尽可以访问位于用户态的内存空间,且每个进程只能访问自己申请的内存区域,不允许访问外围设备,另外在执行cpu指令的时候也可以被高优先级抢占。

通常处于用户态的进程在涉及到一些申请内存,网络读写,设备访问等功能时,会切换到内核态去执行相应的功能。切换模式通常由三种:a.系统调用:通过中断陷入内核态,执行相应功能。 b.异常:当发生异常时,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。 c.外围设备的中断:当外部设备(驱动或读写)准备就绪后,会向CPU发出中断信号告诉它已经准备就绪,这时程序会中断陷入内核态完成一些后续操作。

进程间的通信方式都有什么?

因为每个进程拥有自己的用户地址空间,所以进程的全局变量无法被其他进程所共享,为此进程间的通讯需要从内核开辟一段缓存来进行进程间通信。主要方式有:匿名/高级/有名管道机制,消息队列,信号量,共享内存,socket通信等方式。

具体:进程间8种通信方式详解 - 云+社区 - 腾讯云 (tencent.com)

对多路复用的理解?

我能想到的就是IO中对poll和epoll的理解。

协程被称为用户态线程,你是如何理解的?

进程有自己独立的地址空间,被CPU分配系统资源,进程是资源分配的最小单位。而线程被称为轻量级进程,其是CPU调度执行的最小单位。而协程被称为用户态上的线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈,在协程切换时将这些空间保存到用户空间,之后重新加载用户空间即可完成协程切换,不需要有内核态切换的开销,也不需要有加锁操作,所以上下文切换很快。

进程控制块PCB的理解?

https://www.yuque.com/docs/share/8e1c5aab-c90b-402b-a625-4fcd293c1e8f?# 《PCB学习》