某多多面试相关操作系统、分布式事务、消息队列及 Linux 内存回收策略

在电商平台如某多多的系统架构中,操作系统、分布式事务、消息队列和 Linux 内存回收等技术是保证系统高效运行的重要组成部分。本文将围绕这些技术知识点进行总结,并回答相关的面试问题。


操作系统相关问题

1. 线程和进程的区别 ​编辑
  • 进程

    • 是操作系统进行资源分配和调度的基本单位。​编辑

    • 每个进程都有自己独立的地址空间、代码、数据和系统资源(如文件描述符)。​编辑

    • 进程间的通信通常需要通过 IPC(进程间通信)机制(如管道、共享内存、消息队列)进行。

  • 线程

    • 是进程中的执行单元,多个线程共享同一进程的地址空间、堆栈等资源。

    • 线程间的通信比进程间通信更高效,因为它们共享同一内存空间,但也更容易引发竞争条件和死锁。

    • 线程通常用于并发执行,可以提高程序的并行度,特别适用于 CPU 密集型或 IO 密集型任务。

区别

  • 资源隔离 :进程之间完全独立,线程之间共享同一进程的内存空间。编辑
  • 创建和销毁:进程的创建和销毁比线程更加耗费资源,因为进程需要分配独立的资源;线程的创建和销毁开销较小。
  • 通信方式:进程间通信较为复杂,需要通过 IPC;线程间通信相对简单,可以直接通过共享内存或其他同步机制进行。
2. 分段和分页内存管理 ​编辑
  • 分段管理 :将程序的内存划分为不同大小的段,如代码段、数据段、堆栈段等,每个段都有自己的基地址和长度。分段提供了更为灵活的内存管理,适用于动态变化的程序。
  • 分页管理:将物理内存和逻辑内存都分成固定大小的块(页和页框)。分页消除了内存碎片问题,使得内存的管理更加高效。每个进程拥有独立的页表来映射虚拟地址到物理地址。

区别

  • 灵活性:分段管理可以处理不同大小的内存块,而分页管理则使用固定大小的内存块。
  • 内存碎片:分页管理可以避免外部碎片,但可能存在内部碎片;分段管理则可以灵活地避免内部碎片,但可能存在外部碎片。
3. 用户态和内核态的区别
  • 用户态 :指程序运行时,用户应用程序执行的状态。在用户态下,程序无法直接访问硬件资源和核心操作系统功能,必须通过系统调用来请求内核服务。
  • 内核态:指操作系统核心部分执行的状态,具有完全的控制权限,可以直接访问硬件资源和管理系统资源。内核态运行时,操作系统可以执行涉及硬件操作和资源管理的任务。

区别

  • 权限:用户态权限有限,内核态权限更高,可以直接操作硬件资源。
  • 切换成本:从用户态切换到内核态需要进行上下文切换,开销较大。

分布式事务

1. 如何设计一个二阶段提交(2PC)协议

二阶段提交(2PC)协议用于解决分布式系统中的事务一致性问题。它的基本流程包括两个阶段:

  • 阶段一:准备阶段(Prepare Phase)

    • 主协调者(通常是事务协调器)向所有参与者发送提交请求,并等待各个参与者的响应。

    • 每个参与者判断是否能够提交事务(如检查本地事务的执行情况、锁资源等),然后发送 "准备提交" 或 "拒绝" 给协调者。

  • 阶段二:提交阶段(Commit Phase)

    • 如果所有参与者都返回 "准备提交",协调者会发送 "提交" 命令,参与者正式提交事务。

    • 如果任何一个参与者返回 "拒绝" 或者在等待过程中出现故障,协调者会发送 "回滚" 命令,所有参与者回滚事务。

设计关键点

  • 一致性:必须确保所有参与者一致同意提交或回滚,保证事务的原子性。
  • 容错:必须考虑网络故障、节点崩溃等异常情况,确保在系统恢复后能够继续完成事务。

消息队列(MQ)

1. 消息队列有什么好处

消息队列(MQ)是用于不同系统或应用之间传递消息的一种异步通信方式。其主要优点包括:

  • 解耦:生产者和消费者不需要直接通信,通过消息队列进行中介,系统之间松耦合,便于扩展和维护。
  • 异步处理:消费者可以异步消费消息,生产者不需要等待消费者的处理结果,从而提高系统的吞吐量。
  • 流量削峰:在高并发情况下,消息队列可以平滑流量波动,防止系统过载。
  • 可靠性保障:通过消息持久化机制,确保消息在网络异常或系统崩溃时不丢失。

Linux 内存回收策略

1. Linux 内存回收策略

Linux 使用的内存回收策略包括:

  • 虚拟内存管理 :Linux 会将一部分内存标记为虚拟内存,并将不常用的数据或页面交换到磁盘(交换空间),以释放物理内存。

  • 页面回收(Page Reclaiming):当系统内存紧张时,Linux 会选择回收不活跃的页面,如清理文件缓存、回收未使用的内存页等。

  • 内存压缩(Zswap、Zram):通过内存压缩技术,将数据压缩存储在内存中,从而延缓或减少磁盘交换的需要。

  • OOM Killer:当系统内存不足时,内核会通过 OOM(Out Of Memory)杀手结束某些进程以释放内存,通常会优先杀死占用内存较大的进程。


总结

本文回答了在某多多面试中可能遇到的操作系统、分布式事务、消息队列以及 Linux 内存回收策略的相关问题。掌握这些技术原理不仅有助于通过面试,还能为后续的工作奠定坚实的基础。

相关推荐
IT_陈寒2 小时前
JavaScript 性能优化实战:我通过这7个技巧将页面加载速度提升了65%
前端·人工智能·后端
GISer_Jing2 小时前
Flutter架构解析:从引擎层到应用层
前端·flutter·架构
JaguarJack2 小时前
用 LaraDumps 高效调试 PHP 和 Laravel
后端·php
Victor3563 小时前
Redis(117)Redis的分布式锁如何使用?
后端
Moment3 小时前
为什么我们从 Python 迁移到 Node.js
前端·后端·node.js
Victor3563 小时前
Redis(116)Redis的内存管理如何实现?
后端
星释4 小时前
Rust 练习册 10:多线程基础与并发安全
开发语言·后端·rust
WX-bisheyuange8 小时前
基于Spring Boot的教师个人成果管理系统的设计与实现
java·spring boot·后端
chxii8 小时前
spring boot 获取HTTP 请求参数
spring boot·后端·http