如果想进大厂,那就得花大量时间学习基础知识吧!
- 数据结构与算法
- 计算机网络
- 操作系统
- 数据库原理
记录面试过程中被问到的问题。
操作系统相关
- 进程与线程
进程是程序执行的一个实例,是系统进行资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块(PCB)中,以表示该进程拥有这些资源或正在使用他们。
进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
线程是程序执行的最小单元,是进程中的一个实体,是被系统独立调度和分派的基本单位,与进程不同,线程与资源分配无关,线程自己不拥有系统资源,它属于某一个进程,并与进程内的其他线程一起共享进程的资源,线程只由相关堆栈寄存器和线程控制表TCB组成。
通常在一个进程中可以包含若干个线程,他们可以利用进程所拥有的资源,但是一个线程只属于一个进程,进程间相互独立,同一进程中的各线程共享。某进程内的线程在其他进程不可见。
线程是调度和分配的基本单位,进程时资源拥有的基本单位。
在同一进程中,线程的切换不会引起进程的切换,在由一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换。
2.可执行程序执行的过程
以linux环境为例。
首先是可执行程序的格式,linux下的格式为 ELF。
当运行一个可执行文件时,首先需要将该文件加载到内存中去。从理论上将,系统会将该文件拷贝到一个虚拟的内存空间段里面去,在拷贝的过程中,可执行程序的格式和进程的地址空间存在映射关系。
在linux下,我们一般是在shell的环境下来运行一个可执行文件。
shell fork出来的子进程执行execve系统调用,执行完系统调用后,shell的子进程就变为了可执行程序。