操作系统与 Linux 面试题库

这里记录了操作系统底层原理和 Linux 相关的核心面试题:

进程与线程

  • 进程、线程、协程的区别是什么?
  • 进程的状态有哪些(就绪、运行、阻塞等)?
  • 进程间通信(IPC)的方式有哪些(管道、消息队列、共享内存、信号量等)?
  • 线程间同步的方式有哪些(互斥锁、条件变量、读写锁等)?
  • 常见的进程调度算法有哪些(先来先服务、短作业优先、时间片轮转等)?
  • 什么是孤儿进程和僵尸进程?如何解决僵尸进程?

死锁与并发

  • 什么是死锁?产生死锁的四个必要条件是什么?
  • 如何预防、避免和检测死锁?
  • 什么是银行家算法?
  • 什么是悲观锁和乐观锁?什么是 CAS(Compare And Swap)?

内存管理

  • 什么是虚拟内存?为什么需要虚拟内存?
  • 内存的分段和分页机制有什么区别?
  • 什么是缺页中断(Page Fault)?
  • 常见的页面置换算法有哪些(FIFO、LRU、LFU、OPT)?
  • 什么是 TLB(快表)?

I/O 模型与 Linux

  • 什么是阻塞 I/O、非阻塞 I/O、I/O 多路复用、异步 I/O?
  • 详细讲讲 selectpollepoll 的区别?
  • epoll 的底层数据结构是什么(红黑树 + 双向链表)?
  • epoll 的水平触发(LT)和边缘触发(ET)有什么区别?
  • 什么是零拷贝(Zero-copy)技术(mmap、sendfile)?
  • Linux 中排查 CPU 占用过高的思路和常用命令(toppsjstack/pprof)?
  • Linux 中排查网络问题的常用命令(netstattcpdumppinglsof)?
  • 简单介绍一下 awkgrepsed 的用法?