| 问题 | 关键词/关键概念 |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| 进程、线程、协程区别?| **进程**:资源分配单位、独立地址空间、开销大<br>**线程**:调度单位、共享进程资源、内核调度<br>**[[协程]]**:用户态调度、更轻量、无上下文切换开销 |
| 掌握哪些Linux常用命令?| **文件**:ls/cd/cp/mv/rm/find/grep<br>**进程**:ps/top/kill/lsof<br>**网络**:netstat/ss/tcpdump/curl<br>**性能**:vmstat/iostat/sar/perf |
| | |
| 什么是Page Cache?| **定义**:内核页面缓存、4KB页单位、LRU淘汰<br>**读**:预读机制、缓存命中直接返回<br>**写**:写回/写透、脏页标记、优点减少IO、缺点占内存 |
| GPU和CPU区别?为什么挖矿、大模型都用GPU?| **CPU**:复杂控制流、串行计算、大缓存、少核心<br>**GPU**:并行计算、简单控制、多核心(数千个)、高吞吐量<br>**原因**:哈希计算/矩阵运算高度并行、SIMD架构、内存带宽大 |
| IO多路复用和多线程区别?| **IO多路复用**:单线程管理多个IO、事件驱动、资源消耗少、C10K问题<br>**多线程**:线程池处理、上下文切换开销、内存占用大、编程复杂 |
| 为什么按位与运算比取模高效?| **按位与**:单CPU指令、&(2^n-1)等价%2^n、直接操作二进制<br>**取模**:除法指令、多个CPU周期、计算复杂 |
| 什么是IO密集、CPU密集?| **IO密集**:大量IO等待、CPU利用率低、数据库/文件操作、适合多线程<br>**CPU密集**:大量计算、CPU利用率高、算法/加密、适合多进程 |
| 什么是CPU利用率?怎么算?| **定义**:非空闲时间占比、(总时间-空闲时间)/总时间×100%<br>**/proc/stat**获取、user+system+nice+irq+softirq时间 |
| 什么是Load(负载)?| **定义**:运行队列平均长度、1/5/15分钟平均值<br>**包含**:Running+Uninterruptible状态进程、CPU核数参考、Load>核数表示排队 |
| 什么是MESI缓存一致性协议?| **四种状态**:Modified修改、Exclusive独占、Shared共享、Invalid无效<br>**作用**:多核CPU缓存一致性、总线嗅探、状态转换、写失效/写更新 |
| 什么是全双工和半双工?| **全双工**:同时双向通信、如电话、TCP连接<br>**半双工**:交替双向通信、如对讲机、I2C总线 |
| 什么是分段和分页?| **分段**:逻辑划分、变长、外部碎片、程序结构<br>**分页**:物理划分、定长4KB、内部碎片、透明管理 |
| 什么是操作系统多级缓存?| **CPU缓存**:L1/L2/L3 Cache、寄存器<br>**内存缓存**:Page Cache、Buffer Cache<br>**磁盘缓存**:硬盘缓存、RAID卡缓存 |
| 什么是时间片?| **定义**:进程执行时间配额、10-100ms、轮转调度<br>**作用**:并发假象、公平性、响应性、上下文切换触发 |
| 什么是用户态、内核态?如何切换?| **用户态**:受限权限、应用程序运行、Ring3<br>**内核态**:最高权限、操作系统运行、Ring0<br>**切换**:系统调用、中断、异常、保存上下文 |
| 什么是零拷贝?| **传统**:4次拷贝2次系统调用<br>**零拷贝**:sendfile/mmap、DMA直接传输、减少CPU拷贝、用户态内核态切换少 |
| 同步异步阻塞非阻塞理解?| **同步**:等待结果返回、**异步**:不等待回调通知<br>**阻塞**:线程挂起、**非阻塞**:立即返回<br>四种组合:同步阻塞/同步非阻塞/异步阻塞/异步非阻塞 |
| select、poll、epoll理解?| **select**:fd_set位图、1024限制、O(n)遍历<br>**poll**:链表无上限、O(n)遍历<br>**epoll**:红黑树+就绪链表、O(1)、边缘/水平触发 |
| 操作系统IO模型?| **五种模型**:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO<br>**两个阶段**:等待数据、拷贝数据 |
| 持续写入日志如何清理?| **方案**:logrotate轮转、按时间/大小切割、copytruncate、重定向、压缩归档、定时删除旧文件 |
| 线程实现方式?| **用户级线程**:用户空间实现、切换快、不能利用多核<br>**内核级线程**:内核调度、开销大、多核并行<br>**混合实现**:M:N模型 |
| QQ号码去重Linux命令?| `sort qq.txt |
| 计算机开机操作系统做了什么?| **BIOS/UEFI**→**POST自检**→**MBR/GPT**→**Bootloader**→**加载内核**→**init进程**→**运行级别**→**登录界面** |
| Load和CPU利用率区别?| **Load**:任务队列长度、包含等待IO、反映系统繁忙<br>**CPU利用率**:CPU工作时间比例、不含IO等待、反映CPU忙碌 |
| 进程间通信方式?| **管道**:pipe匿名/FIFO命名<br>**消息队列**:消息链表<br>**共享内存**:最快<br>**信号量**:同步<br>**Socket**:网络<br>**信号**:异步通知 |
# 补充说明
## **性能相关**
- CPU密集型:线程数 = CPU核心数 + 1
- IO密集型:线程数 = CPU核心数 * 2 或更多
- Load参考值:单核<1正常,=核数饱和,>核数过载
## **Linux命令技巧**
```bash
# 查看系统负载
uptime / w / top
# 查看CPU使用率
top / htop / mpstat
# 查看IO状态
iostat -x 1
# 查看内存
free -h / vmstat
# 网络连接
ss -tunlp / netstat -tunlp
```
## **零拷贝技术栈**
- sendfile:适合文件传输
- mmap:适合文件修改
- splice:管道数据传输
- DMA scatter-gather:硬件支持
你提出了一个很好的问题,`awk` 处理列的方式确实和 CSV 文件中常见的逗号分隔符有些相似,但它有自己的**默认行为**和**灵活的配置**。
---
# `awk` 定义列(字段)的默认行为
`awk` 默认情况下,将一行文本中的**一个或多个连续的空白字符**(空格或制表符 `\t`)视为字段分隔符。
这意味着:
- **连续的空格**会被视为一个分隔符,而不是多个空字段。
- **行首和行尾的空白**会被忽略,不会产生空字段。
**举例:**
如果一行是:`Hello world this is a test`↳
`awk` 会将其解析为:
- `$1`: "Hello"
- `$2`: "world"
- `$3`: "this"
- `$4`: "is"
- `$5`: "a"
- `$6`: "test"
这和 CSV 的默认逗号分隔行为是不同的,CSV 中通常一个逗号就是一个字段分隔符,即使是连续的逗号也会产生空字段。
# 表格收录
- 八股-操作系统