mmap 的 MAP_SHARED 和 MAP_PRIVATE 在写操作后行为有何不同?
mmap 的 MAP_SHARED 和 MAP_PRIVATE 在写操作后行为有何不同? 本文先给出可直接复述的结论,再用最小代码说明MAP_SHARED MAP_PRIVATE 区别的工作方式、判断依据、项目边界和常见误区。
程序员面试题库第 64 页,收录第 3151–3200 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
mmap 的 MAP_SHARED 和 MAP_PRIVATE 在写操作后行为有何不同? 本文先给出可直接复述的结论,再用最小代码说明MAP_SHARED MAP_PRIVATE 区别的工作方式、判断依据、项目边界和常见误区。
虚拟化中内存气球(ballooning)如何回收虚拟机的空闲内存? 本文先给出可直接复述的结论,再用最小代码说明内存气球 ballooning 虚拟化 回收的工作方式、判断依据、项目边界和常见误区。
缓存一致性协议和内存屏障分别解决多核编程中的什么问题? 本文先给出可直接复述的结论,再用最小代码说明缓存一致性 MESI 内存屏障 区别的工作方式、判断依据、项目边界和常见误区。
内存内部碎片和外部碎片的成因分别是什么,各用什么手段缓解? 本文先给出可直接复述的结论,再用最小代码说明内部碎片 外部碎片 区别 内存的工作方式、判断依据、项目边界和常见误区。
如何区分进程是内存泄漏还是被 glibc 分配器缓存了内存? 本文先给出可直接复述的结论,再用最小代码说明内存泄漏 诊断 RSS 增长 malloc的工作方式、判断依据、项目边界和常见误区。
次缺页和主缺页有什么区别,如何用 minflt/majflt 判断程序瓶颈? 本文先给出可直接复述的结论,再用最小代码说明minor fault major fault 区别 性能的工作方式、判断依据、项目边界和常见误区。
mlock 锁定的内存有什么保证,数据库为什么用它? 本文先给出可直接复述的结论,再用最小代码说明mlock 锁定内存 禁止换出的工作方式、判断依据、项目边界和常见误区。
匿名 mmap 和文件 mmap 在页面来源与回收路径上有什么区别? 本文先给出可直接复述的结论,再用最小代码说明匿名映射 文件映射 mmap 区别的工作方式、判断依据、项目边界和常见误区。
用 mmap 读文件和用 read 读文件在数据拷贝和缺页上有什么差异? 本文先给出可直接复述的结论,再用最小代码说明mmap read 区别 零拷贝 缺页的工作方式、判断依据、项目边界和常见误区。
NUMA 架构下跨节点访问内存的代价是什么,如何做内存亲和优化? 本文先给出可直接复述的结论,再用最小代码说明NUMA 内存亲和 跨节点访问的工作方式、判断依据、项目边界和常见误区。
Linux OOM Killer 如何挑选要杀死的进程? 本文先给出可直接复述的结论,再用最小代码说明OOM Killer 选择机制 oom_score的工作方式、判断依据、项目边界和常见误区。
Linux 内存超卖(overcommit)策略的三种模式分别意味着什么? 本文先给出可直接复述的结论,再用最小代码说明overcommit_memory 超卖 策略的工作方式、判断依据、项目边界和常见误区。
Linux 页缓存是什么,为什么 free 显示的可用内存很少但系统并不缺内存? 本文先给出可直接复述的结论,再用最小代码说明页缓存 page cache available 内存的工作方式、判断依据、项目边界和常见误区。
发生缺页异常时操作系统内核的完整处理流程是什么? 本文先给出可直接复述的结论,再用最小代码说明缺页异常处理流程 内核 page fault的工作方式、判断依据、项目边界和常见误区。
常见的页面置换算法有哪些,为什么 LRU 在实际内核中被近似实现? 本文先给出可直接复述的结论,再用最小代码说明页面置换算法 LRU FIFO Clock 近似的工作方式、判断依据、项目边界和常见误区。
内存分页和分段有什么区别,为什么主流系统以分页为主? 本文先给出可直接复述的结论,再用最小代码说明分页 分段 区别 内存管理的工作方式、判断依据、项目边界和常见误区。
Linux 内核的 slab 分配器解决什么问题? 本文先给出可直接复述的结论,再用最小代码说明slab 分配器 内核 对象缓存的工作方式、判断依据、项目边界和常见误区。
生产服务器应该禁用 swap 吗,保留少量 swap 的理由是什么? 本文先给出可直接复述的结论,再用最小代码说明swap 是否应该禁用 服务器的工作方式、判断依据、项目边界和常见误区。
vm.swappiness 参数如何影响匿名页与页缓存的回收倾向? 本文先给出可直接复述的结论,再用最小代码说明swappiness 参数 swap 回收倾向的工作方式、判断依据、项目边界和常见误区。
Linux 透明大页(THP)的 always/madvise/never 策略如何取舍? 本文先给出可直接复述的结论,再用最小代码说明透明大页 THP madvise 策略的工作方式、判断依据、项目边界和常见误区。
TLB 在地址转换中起什么作用,TLB miss 时代价有多大? 本文先给出可直接复述的结论,再用最小代码说明TLB 作用与 TLB miss 代价的工作方式、判断依据、项目边界和常见误区。
多核系统中修改共享页表后为什么需要 TLB shootdown? 本文先给出可直接复述的结论,再用最小代码说明TLB shootdown 多核 页表 一致性的工作方式、判断依据、项目边界和常见误区。
虚拟机中客户机虚拟地址到宿主机物理地址经历几级翻译? 本文先给出可直接复述的结论,再用最小代码说明虚拟化 二级地址翻译 EPT NPT的工作方式、判断依据、项目边界和常见误区。
宿主机回收虚拟机内存时,balloon 和 KSM 各适用于什么场景? 本文先给出可直接复述的结论,再用最小代码说明balloon KSM 对比 虚拟机内存回收的工作方式、判断依据、项目边界和常见误区。
CPU 如何将虚拟地址翻译成物理地址? 本文先给出可直接复述的结论,再用最小代码说明虚拟地址 物理地址 地址转换 页表的工作方式、判断依据、项目边界和常见误区。
什么是内存抖动(thrashing),如何诊断系统正在抖动? 本文先给出可直接复述的结论,再用最小代码说明内存抖动 thrashing 诊断 swap的工作方式、判断依据、项目边界和常见误区。
为什么现代操作系统使用多级页表而不是单级页表? 本文先给出可直接复述的结论,再用最小代码说明多级页表 稀疏地址空间 页表大小的工作方式、判断依据、项目边界和常见误区。
为什么操作系统需要虚拟内存而不是直接使用物理内存? 本文先给出可直接复述的结论,再用最小代码说明虚拟内存 作用 操作系统的工作方式、判断依据、项目边界和常见误区。
什么是工作集模型,它和驻留集大小 RSS 有什么关系? 本文先给出可直接复述的结论,再用最小代码说明工作集 working set RSS 驻留集的工作方式、判断依据、项目边界和常见误区。
zswap 和 zram 在压缩换出路径上有什么区别? 本文先给出可直接复述的结论,再用最小代码说明zswap zram 区别 压缩内存的工作方式、判断依据、项目边界和常见误区。
原子操作和无锁编程能解决什么问题,为什么原子变量不等于线程安全? 本文先给出可直接复述的结论,再用最小代码说明原子操作 无锁编程的工作方式、判断依据、项目边界和常见误区。
Linux CFS 完全公平调度器如何用 vruntime 决定下一个运行的任务? 本文先给出可直接复述的结论,再用最小代码说明Linux CFS vruntime 调度的工作方式、判断依据、项目边界和常见误区。
条件变量为什么必须与互斥锁配合、wait 为什么要在 while 循环里? 本文先给出可直接复述的结论,再用最小代码说明条件变量 虚假唤醒 while的工作方式、判断依据、项目边界和常见误区。
为什么频繁上下文切换会降低性能,如何在压测中观测? 本文先给出可直接复述的结论,再用最小代码说明上下文切换开销 vmstat的工作方式、判断依据、项目边界和常见误区。
一次进程上下文切换具体保存和恢复哪些内容? 本文先给出可直接复述的结论,再用最小代码说明进程上下文切换 保存内容的工作方式、判断依据、项目边界和常见误区。
CPU 亲和性是什么,绑核在什么场景能提升性能? 本文先给出可直接复述的结论,再用最小代码说明CPU 亲和性 sched_setaffinity的工作方式、判断依据、项目边界和常见误区。
死锁的四个必要条件是什么,面试中如何用它推导排查思路? 本文先给出可直接复述的结论,再用最小代码说明死锁 四个必要条件的工作方式、判断依据、项目边界和常见误区。
线上进程疑似死锁,如何用 gdb、pstack 或 /proc 定位持锁线程? 本文先给出可直接复述的结论,再用最小代码说明死锁排查 gdb 线程栈的工作方式、判断依据、项目边界和常见误区。
epoll 水平触发与边缘触发的区别是什么,ET 模式为什么必须配非阻塞 fd? 本文先给出可直接复述的结论,再用最小代码说明epoll LT ET 非阻塞的工作方式、判断依据、项目边界和常见误区。
eventfd 适合什么场景,它和 pipe 做线程间通知相比好在哪? 本文先给出可直接复述的结论,再用最小代码说明eventfd 线程通知的工作方式、判断依据、项目边界和常见误区。
Unix socket 的 SCM_RIGHTS 如何实现进程间传递文件描述符? 本文先给出可直接复述的结论,再用最小代码说明SCM_RIGHTS 文件描述符传递的工作方式、判断依据、项目边界和常见误区。
fork 之后再 exec 的典型流程是什么,为什么 Unix 要拆成两步? 本文先给出可直接复述的结论,再用最小代码说明fork exec 两步创建进程的工作方式、判断依据、项目边界和常见误区。
futex 是什么,为什么说它是 Linux 用户态锁的基石? 本文先给出可直接复述的结论,再用最小代码说明futex 用户态锁的工作方式、判断依据、项目边界和常见误区。
管道、消息队列、共享内存、socket 之间如何按场景选型? 本文先给出可直接复述的结论,再用最小代码说明IPC 方式选型的工作方式、判断依据、项目边界和常见误区。
活锁和死锁的区别是什么,什么设计会引入活锁? 本文先给出可直接复述的结论,再用最小代码说明活锁 死锁 区别的工作方式、判断依据、项目边界和常见误区。
Linux load average 包含哪些状态的进程,高负载一定代表 CPU 忙吗? 本文先给出可直接复述的结论,再用最小代码说明Linux load average 含义的工作方式、判断依据、项目边界和常见误区。
固定加锁顺序为什么能预防死锁,跨模块代码如何约定顺序? 本文先给出可直接复述的结论,再用最小代码说明加锁顺序 预防死锁的工作方式、判断依据、项目边界和常见误区。
Linux 内核 lockdep 是如何在运行时检测潜在死锁的? 本文先给出可直接复述的结论,再用最小代码说明lockdep 死锁检测的工作方式、判断依据、项目边界和常见误区。
条件变量的丢失唤醒问题是怎么发生的,如何正确使用避免? 本文先给出可直接复述的结论,再用最小代码说明条件变量 丢失唤醒的工作方式、判断依据、项目边界和常见误区。
为什么多线程程序需要内存序,x86 和 ARM 上的可见性差异在哪? 本文先给出可直接复述的结论,再用最小代码说明内存序 memory ordering的工作方式、判断依据、项目边界和常见误区。