欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 嵌入式开发高频面试题——第五章 Linux操作系统常见面试题(下)

嵌入式开发高频面试题——第五章 Linux操作系统常见面试题(下)

2025/10/22 0:32:49 来源:https://blog.csdn.net/CHUANZExiaodaima/article/details/142336165  浏览:    关键词:嵌入式开发高频面试题——第五章 Linux操作系统常见面试题(下)

目录

      • 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 一个程序从开始运行到结束的完整过程(四个过程) ⭐⭐⭐⭐⭐
  1. 编译:源代码通过编译器转换为可执行的机器代码。包含编译和链接两个阶段,输出的是一个可执行文件。
  2. 加载:可执行文件由操作系统的程序加载器加载到内存中。加载器会将程序的代码和数据段映射到进程的地址空间,并为其分配栈和堆。
  3. 执行:程序开始执行,CPU指针跳转到程序的入口点,执行指令和处理数据。
  4. 结束:程序完成执行后,通过返回码告诉操作系统成功或失败的状态,进程退出,操作系统回收分配的资源。
5.2.3 什么是堆,栈,内存泄漏和内存溢出? ⭐⭐⭐⭐
  • 堆(Heap):动态分配内存区域,程序员可以在运行时通过mallocnew分配内存。堆内存需要手动释放,如果未释放就会发生内存泄漏。

  • 栈(Stack):存储局部变量和函数调用信息,栈的内存空间是有限的。栈的内存管理由操作系统自动进行,函数返回时自动回收内存。

  • 内存泄漏:当程序不再需要某块动态分配的内存但未能正确释放它时,导致这块内存无法使用。这种情况下,随着程序运行,未释放的内存逐渐增多,可能导致系统内存不足。

  • 内存溢出:程序试图分配超出其能够使用的内存空间。比如栈空间不足导致栈溢出,或程序超出系统内存。

5.2.4 堆和栈的区别 ⭐⭐⭐⭐⭐
  • 管理方式

    • :由操作系统自动管理,先进后出,局部变量存储在栈中,函数调用完成后自动释放。
    • :由程序员显式管理,动态分配,使用完内存后需要程序员手动释放(如freedelete)。
  • 速度

    • :速度快,因为它由CPU直接支持。
    • :速度慢,需要手动分配和释放内存,增加了内存管理的复杂性。
  • 空间大小

    • :通常较小且有限制,常用于函数调用和局部变量。
    • :通常较大,适用于动态分配的大量内存。
5.2.5 死锁的原因、条件 创建一个死锁,以及如何预防 ⭐⭐⭐⭐⭐
  • 死锁的原因:多个进程或线程相互等待彼此释放资源,导致无穷等待状态。

  • 死锁的四个必要条件

    1. 互斥条件:资源不能被共享,每次只能有一个进程占用资源。
    2. 占有和等待条件:一个进程持有某些资源并等待其他进程占有的资源。
    3. 不可抢占条件:进程不能强行剥夺其他进程持有的资源,必须由占有者释放资源。
    4. 循环等待条件:一组进程形成一个环形链,导致每个进程等待下一个进程占有的资源。
  • 预防死锁

    1. 破坏条件:破坏死锁的四个条件之一。例如,允许资源抢占或分配顺序有严格规定。
    2. 使用超时机制:当一个进程等待时间过长,终止等待操作。
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 中断怎么发生,中断处理大概流程 ⭐⭐⭐⭐
  • 中断的发生

    1. 外部设备向CPU发出中断信号。
    2. CPU在当前指令执行完成后,保存上下文,并跳转到中断处理程序。
  • 中断处理流程

    1. 保存当前任务的上下文。
    2. 执行中断服务程序(ISR)处理中断。
    3. 恢复被中断任务的上下文,并继续执行。
5.2.11 Linux 操作系统挂起、休眠、关机相关命令 ⭐⭐
  • 挂起systemctl suspend
  • 休眠systemctl hibernate
  • 关机shutdown nowsystemctl poweroff
5.2.12 数据库为什么要建立索引,以及索引的缺点 ⭐⭐
  • 优点:索引加快查询速度,通过在特定列上创建索引,数据库可以快速定位数据,而无需全表扫描。

  • 缺点

    1. 占用额外的存储空间
    2. 降低插入、删除和更新的效率,因为每次数据操作时都需要更新索引。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词