目录
- 5.2 其他操作系统常见面试题
- 5.2.1 大小端的区别以及各自的优点,哪种时候用 ⭐⭐⭐⭐⭐
- 5.2.2 一个程序从开始运行到结束的完整过程(四个过程) ⭐⭐⭐⭐⭐
- 5.2.3 什么是堆,栈,内存泄漏和内存溢出? ⭐⭐⭐⭐
- 5.2.4 堆和栈的区别 ⭐⭐⭐⭐⭐
- 5.2.5 死锁的原因、条件 创建一个死锁,以及如何预防 ⭐⭐⭐⭐⭐
- 5.2.6 硬链接与软链接的区别 ⭐⭐⭐⭐⭐
- 5.2.7 虚拟内存,虚拟地址与物理地址的转换 ⭐⭐⭐⭐
- 5.2.8 计算机中,32bit与64bit有什么区别 ⭐⭐⭐
- 5.2.9 中断和异常的区别 ⭐⭐⭐⭐⭐
- 5.2.10 中断怎么发生,中断处理大概流程 ⭐⭐⭐⭐
- 5.2.11 Linux 操作系统挂起、休眠、关机相关命令 ⭐⭐
- 5.2.12 数据库为什么要建立索引,以及索引的缺点 ⭐⭐
5.2 其他操作系统常见面试题
5.2.1 大小端的区别以及各自的优点,哪种时候用 ⭐⭐⭐⭐⭐
-
大端(Big Endian):数据的高字节存储在内存的低地址处,低字节存储在高地址处。例如,0x12345678存储在内存中是 0x12 | 0x34 | 0x56 | 0x78。
-
小端(Little Endian):数据的低字节存储在内存的低地址处,高字节存储在高地址处。例如,0x12345678 存储在内存中是 0x78 | 0x56 | 0x34 | 0x12。
-
优点:
- 大端:数据按照存储顺序符合人类阅读习惯(高位在前)。通常在网络协议中采用大端,因为它便于数据传输的标准化。
- 小端:对处理器执行按字节访问的运算更为高效。大多数现代计算机(如x86架构)使用小端模式。
-
什么时候使用:
- 大端:网络通信(网络字节序),特别是数据传输时。
- 小端:在大多数现代计算机的本地计算中,使用小端进行高效处理。
5.2.2 一个程序从开始运行到结束的完整过程(四个过程) ⭐⭐⭐⭐⭐
- 编译:源代码通过编译器转换为可执行的机器代码。包含编译和链接两个阶段,输出的是一个可执行文件。
- 加载:可执行文件由操作系统的程序加载器加载到内存中。加载器会将程序的代码和数据段映射到进程的地址空间,并为其分配栈和堆。
- 执行:程序开始执行,CPU指针跳转到程序的入口点,执行指令和处理数据。
- 结束:程序完成执行后,通过返回码告诉操作系统成功或失败的状态,进程退出,操作系统回收分配的资源。
5.2.3 什么是堆,栈,内存泄漏和内存溢出? ⭐⭐⭐⭐
-
堆(Heap):动态分配内存区域,程序员可以在运行时通过
malloc
或new
分配内存。堆内存需要手动释放,如果未释放就会发生内存泄漏。 -
栈(Stack):存储局部变量和函数调用信息,栈的内存空间是有限的。栈的内存管理由操作系统自动进行,函数返回时自动回收内存。
-
内存泄漏:当程序不再需要某块动态分配的内存但未能正确释放它时,导致这块内存无法使用。这种情况下,随着程序运行,未释放的内存逐渐增多,可能导致系统内存不足。
-
内存溢出:程序试图分配超出其能够使用的内存空间。比如栈空间不足导致栈溢出,或程序超出系统内存。
5.2.4 堆和栈的区别 ⭐⭐⭐⭐⭐
-
管理方式:
- 栈:由操作系统自动管理,先进后出,局部变量存储在栈中,函数调用完成后自动释放。
- 堆:由程序员显式管理,动态分配,使用完内存后需要程序员手动释放(如
free
或delete
)。
-
速度:
- 栈:速度快,因为它由CPU直接支持。
- 堆:速度慢,需要手动分配和释放内存,增加了内存管理的复杂性。
-
空间大小:
- 栈:通常较小且有限制,常用于函数调用和局部变量。
- 堆:通常较大,适用于动态分配的大量内存。
5.2.5 死锁的原因、条件 创建一个死锁,以及如何预防 ⭐⭐⭐⭐⭐
-
死锁的原因:多个进程或线程相互等待彼此释放资源,导致无穷等待状态。
-
死锁的四个必要条件:
- 互斥条件:资源不能被共享,每次只能有一个进程占用资源。
- 占有和等待条件:一个进程持有某些资源并等待其他进程占有的资源。
- 不可抢占条件:进程不能强行剥夺其他进程持有的资源,必须由占有者释放资源。
- 循环等待条件:一组进程形成一个环形链,导致每个进程等待下一个进程占有的资源。
-
预防死锁:
- 破坏条件:破坏死锁的四个条件之一。例如,允许资源抢占或分配顺序有严格规定。
- 使用超时机制:当一个进程等待时间过长,终止等待操作。
5.2.6 硬链接与软链接的区别 ⭐⭐⭐⭐⭐
-
硬链接:
- 硬链接指向文件在磁盘上的数据块,所有指向同一文件的硬链接共享相同的Inode编号,删除其中一个链接不影响其他链接。
- 优点:更稳定,文件删除后内容仍然存在,除非所有硬链接都被删除。
-
软链接(符号链接):
- 软链接类似于Windows中的快捷方式,保存了文件的路径指向,被删除的文件或被移动后链接就会失效。
- 优点:可以跨文件系统、指向目录,灵活性更强。
5.2.7 虚拟内存,虚拟地址与物理地址的转换 ⭐⭐⭐⭐
-
虚拟内存:一种内存管理技术,允许进程假装拥有连续的内存空间,实际内存可能分散在不同的物理地址上,部分数据可能存储在磁盘的交换空间(swap)中。
-
虚拟地址:每个进程有自己独立的地址空间,程序中使用的地址是虚拟地址,由操作系统通过内存管理单元(MMU)将其转换为实际的物理地址。
-
物理地址:计算机主内存的实际地址,用于数据的真实存储。
5.2.8 计算机中,32bit与64bit有什么区别 ⭐⭐⭐
-
位宽:32位系统最多能访问4GB内存,而64位系统可以处理更大容量的内存(理论上是2^64字节)。
-
性能:64位处理器在处理大数据和执行复杂计算时效率更高,64位操作系统能更好利用大内存。
-
应用兼容性:32位程序可以运行在64位操作系统上,但64位程序不能在32位操作系统上运行。
5.2.9 中断和异常的区别 ⭐⭐⭐⭐⭐
-
中断:来自外部设备的信号,用于通知CPU执行特定任务(如硬件设备完成了某些操作),中断是异步发生的。
-
异常:在处理器内部发生的错误或特殊条件(如除零错误、页面错误),异常是同步的,通常是程序错误的结果。
5.2.10 中断怎么发生,中断处理大概流程 ⭐⭐⭐⭐
-
中断的发生:
- 外部设备向CPU发出中断信号。
- CPU在当前指令执行完成后,保存上下文,并跳转到中断处理程序。
-
中断处理流程:
- 保存当前任务的上下文。
- 执行中断服务程序(ISR)处理中断。
- 恢复被中断任务的上下文,并继续执行。
5.2.11 Linux 操作系统挂起、休眠、关机相关命令 ⭐⭐
- 挂起:
systemctl suspend
- 休眠:
systemctl hibernate
- 关机:
shutdown now
或systemctl poweroff
5.2.12 数据库为什么要建立索引,以及索引的缺点 ⭐⭐
-
优点:索引加快查询速度,通过在特定列上创建索引,数据库可以快速定位数据,而无需全表扫描。
-
缺点:
- 占用额外的存储空间。
- 降低插入、删除和更新的效率,因为每次数据操作时都需要更新索引。