mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1789 字
5 分钟
计算机基础面试题
2023-09-13

一、网络七层模型以及每层的常用协议#

1.1 OSI 七层模型#

层级名称核心功能典型协议
7应用层为用户提供接口服务HTTP、DNS、FTP、SMTP
6表示层数据格式转换、加密解密TLS、SSL
5会话层管理通信会话NetBIOS、SOCKS
4传输层端到端连接、流量控制TCP、UDP
3网络层路由选择、IP 寻址IP、ICMP、ARP
2数据链路层帧同步、MAC 寻址Ethernet、PPP
1物理层比特流传输RJ45、光纤

1.2 TCP/IP 四层模型#

实际工作中更常用的是 TCP/IP 四层模型:

层级对应 OSI典型协议
应用层5-7 层HTTP、DNS、SSH
传输层4 层TCP、UDP
网络层3 层IP、ICMP、路由器
网络接口层1-2 层Ethernet、ARP

1.3 TCP 三次握手与四次挥手#

三次握手建立连接

客户端 服务端
│ │
│────── SYN (seq=x) ────────▶│ 第一次:客户端发送 SYN
│ │
│◀───── SYN+ACK (seq=y,ack=x+1)──│ 第二次:服务端返回 SYN+ACK
│ │
│────── ACK (ack=y+1) ──────▶│ 第三次:客户端发送 ACK
│ │
│ 连接建立完成 │

四次挥手断开连接

客户端 服务端
│ │
│────── FIN (seq=u) ────────▶│ 第一次:客户端发送 FIN
│◀──────── ACK (ack=u+1) ────│ 第二次:服务端确认(客户端不再发送,但可以接收)
│ │
│◀────── FIN (seq=w) ───────│ 第三次:服务端发送 FIN
│ │
│────── ACK (ack=w+1) ──────▶│ 第四次:客户端确认(等待 2MSL 后关闭)
│ │

为什么是三次握手

  • 两次握手无法确认双方的发送和接收能力都正常
  • 三次握手是确认双方「发送+接收」能力的最小次数

为什么是四次挥手

  • TCP 是全双工连接,需要双向各自关闭
  • 服务端收到 FIN 后先回复 ACK,等应用层处理完再发 FIN

1.4 TCP 与 UDP 对比#

特性TCPUDP
连接性面向连接无连接
可靠性可靠、有重传、拥塞控制不可靠,不保证送达
效率低(需要确认、重传)高(无额外开销)
场景文件传输、邮件、Web视频流、DNS、语音通话

1.5 HTTP 常见状态码#

类别范围含义
1xx100-199信息性状态码
2xx200-299成功
3xx300-399重定向
4xx400-499客户端错误
5xx500-599服务器错误

常用状态码:

  • 200:OK,请求成功
  • 301:永久重定向
  • 302:临时重定向
  • 304:缓存未修改
  • 400:请求语法错误
  • 401:未认证
  • 403:无权限
  • 404:资源不存在
  • 500:服务器内部错误
  • 502:网关错误
  • 504:网关超时

1.6 DNS 解析过程#

浏览器缓存 → 系统缓存 → 本地 DNS 服务器 → 根域名服务器 → 顶级域名服务器 → 权威域名服务器

递归查询:客户端只发一次请求,本地 DNS 负责全部查询过程

迭代查询:DNS 服务器返回可查询的下一级服务器地址,客户端自行继续查询

二、进程间通信有哪些方式?#

2.1 同一主机进程间通信#

方式原理特点
管道(Pipe)内核缓冲区,单向流动简单,只能亲缘进程
命名管道(FIFO)有名管道,支持非亲缘进程磁盘文件,持久化
消息队列内核消息链表异步,消息持久化
共享内存映射同一块物理内存最快,但需同步
信号异步信号通知轻量,无法传输大量数据
信号量计数器,实现同步互斥常与共享内存配合

2.2 共享内存详解#

共享内存是最快的 IPC 方式,因为数据无需在用户态和内核态之间复制:

// 创建共享内存
int shmid = shmget(key, SIZE, IPC_CREAT | 0666);
// 映射到进程地址空间
void *shmaddr = shmat(shmid, NULL, 0);
// 读写共享内存(直接像访问内存一样)
((int *)shmaddr)[0] = 100;
// 解除映射
shmdt(shmaddr);
// 删除共享内存
shmctl(shmid, IPC_RMID, NULL);

2.3 不同主机进程间通信#

方式说明
Socket最通用,TCP/UDP 可跨主机
RPC远程过程调用,隐藏网络细节
消息队列如 RabbitMQ、Kafka

三、进程与线程的区别#

3.1 基本概念#

**进程(Process)**是资源分配的基本单位,拥有独立的地址空间、文件描述符、信号处理等资源。

**线程(Thread)**是 CPU 调度的基本单位,同一进程的线程共享进程的地址空间和资源。

3.2 对比#

维度进程线程
资源占用独立虚拟地址空间共享进程资源
创建/销毁慢(需分配资源)快(共享资源)
切换开销大(上下文切换)小(同一地址空间)
通信需 IPC 机制直接读写共享内存
安全性隔离,崩溃不影响其他崩溃可能导致进程崩溃

3.3 线程的实现#

  • 内核线程:OS 内核实现,调度直接由 CPU 完成
  • 用户线程:库实现,内核未知,调度在用户态
  • 轻量级进程(LWP):Linux 中的实现,一对一映射到内核线程

3.4 僵尸进程与孤儿进程#

僵尸进程:子进程退出但父进程未调用 wait() 回收其退出状态,进程表项仍存在

孤儿进程:父进程退出,子进程还在运行,子进程被 init 收养

# 查看僵尸进程
ps aux | grep 'Z'
# 杀死僵尸进程的父进程
kill -9 <父进程 PID>

四、内存管理#

4.1 虚拟内存的作用#

虚拟内存让每个进程拥有独立的地址空间,解决了以下问题:

  1. 进程隔离:防止进程间互相破坏
  2. 内存高效利用:按需加载,不需要全部加载到物理内存
  3. 简化内存分配:进程看到的连续虚拟地址对应物理上可能不连续
  4. 实现内存保护:页表项记录权限(可读/写/执行)

4.2 页面置换算法#

当物理内存不足时,需要将页面换出到磁盘:

  • FIFO:最先进先出,简单但可能有 Belady 异常
  • LRU:最近最少使用,性能好但实现复杂
  • Clock:LRU 的近似实现,用访问位模拟

4.3 内存碎片#

外部碎片:空闲内存加起来够用,但单块不够大(可通过内存紧缩解决)

内部碎片:分配的空间比请求的大,内部未被使用的内存

伙伴系统(Buddy System):一种减少内存碎片的分配算法,内存按 2 的幂次划分,每次分配找到最小的满足 2^n 的块。

五、系统调用#

系统调用是用户态程序请求内核服务的接口。

5.1 常见系统调用#

进程控制

  • fork():创建进程
  • execve():执行新程序
  • exit():进程退出
  • wait():等待子进程退出

文件操作

  • open():打开文件
  • read()/write():读写文件
  • close():关闭文件

内存管理

  • brk()/mmap():修改程序断点/内存映射

通信

  • pipe():创建管道
  • socket():创建 socket
  • connect()/accept():建立连接

5.2 用户态与内核态#

内核态(Kernel Mode):CPU 可以访问所有内存和硬件,特权指令可执行

用户态(User Mode):受限的内存访问和指令集

切换方式

  • 系统调用:用户态 → 内核态(程序主动)
  • 中断:硬件事件触发(键盘输入、磁盘 I/O 完成)
  • 异常:程序错误(除零、越界)

六、参考#


参考#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

计算机基础面试题
https://blog.souloss.com/posts/interview/base/
作者
Souloss
发布于
2023-09-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时