一、计算机基础(操作系统)

1. 进程与线程的区别?

答:

  • 进程:独立的内存空间,资源开销大,切换成本高。
  • 线程:共享进程的内存空间,资源开销小,切换成本低。
  • 关键区别
    • 线程是 CPU 调度的基本单位,进程是资源分配的基本单位。
    • 进程间通信(IPC)复杂,线程间通信简单(共享内存)。
    • 多线程可能引发竞态条件,需同步机制(锁、信号量等)。

2. 死锁的四个必要条件?如何避免死锁?

答:

  • 必要条件
    1. 互斥(资源不可共享)
    2. 占有并等待(持有资源等待其他资源)
    3. 非抢占(资源不能强制剥夺)
    4. 循环等待(形成资源请求环)
  • 避免方法
    • 破坏循环等待:资源编号,按顺序申请。
    • 银行家算法:预判资源分配是否安全。
    • 超时机制:资源等待超时后释放已占资源。

3. 什么是虚拟内存?它解决了什么问题?

答:

  • 虚拟内存:通过页表将物理内存映射到逻辑地址空间,允许程序使用比实际物理内存更大的地址空间。
  • 解决的问题
    • 内存隔离:每个进程拥有独立的地址空间。
    • 内存扩展:通过磁盘交换(Swap)实现物理内存不足时的扩展。
    • 简化内存管理:程序员无需关心物理内存布局。

4. 文件系统中 inode 的作用?

答:

  • Inode 是文件系统中存储文件元信息的数据结构,包含:
    • 文件大小、权限、所有者、时间戳、数据块指针等。
  • 作用
    • 文件名与 inode 关联,实现文件内容的存储和管理。
    • 支持硬链接(多个文件名指向同一 inode)。

5. 什么是页表?页表的作用?

答:

  • 页表:将虚拟地址转换为物理地址的映射表。
  • 作用
    • 实现虚拟内存管理。
    • 支持分页(Page)机制,减少内存碎片。
    • 提供访问权限控制(读/写/执行)。

二、计算机网络

1. OSI 七层模型和 TCP/IP 四层模型的区别?

答:

复制

OSI 七层模型 TCP/IP 四层模型
物理层 网络接口层
数据链路层 网络接口层
网络层 网络层
传输层 传输层
会话层 应用层
表示层 应用层
应用层 应用层

2. TCP 和 UDP 的区别?

答:

复制

特性 TCP UDP
可靠性 可靠(确认机制、重传) 不可靠(无确认)
连接 面向连接(三次握手) 无连接
传输顺序 保证顺序 不保证顺序
头部开销 大(20~60 字节) 小(8 字节)
适用场景 文件传输、网页浏览 视频流、实时通信

3. TCP 三次握手和四次挥手的过程?

答:

  • 三次握手
    1. 客户端 → 服务端:SYN=1, seq=x
    2. 服务端 → 客户端:SYN=1, ACK=1, seq=y, ack=x+1
    3. 客户端 → 服务端:ACK=1, ack=y+1
  • 四次挥手
    1. 客户端 → 服务端:FIN=1, seq=u
    2. 服务端 → 客户端:ACK=1, seq=v, ack=u+1
    3. 服务端 → 客户端:FIN=1, seq=w, ack=u+1
    4. 客户端 → 服务端:ACK=1, seq=u+1, ack=w+1

4. HTTP 和 HTTPS 的区别?

答:

  • HTTP
    • 明文传输,不安全。
    • 默认端口 80。
  • HTTPS
    • 基于 TLS/SSL 加密,安全。
    • 默认端口 443。
    • 通过证书验证服务器身份(防止中间人攻击)。

5. HTTP 状态码 200、301、404、500 各代表什么含义?

答:

  • 200 OK:请求成功。
  • 301 Moved Permanently:资源已永久移动。
  • 404 Not Found:资源不存在。
  • 500 Internal Server Error:服务器内部错误。

6. DNS 的工作原理?

答:

  • 流程
    1. 客户端 → 本地 DNS 缓存。
    2. 本地 DNS → 根域名服务器 → 顶级域名服务器 → 权威域名服务器。
    3. 返回 IP 地址。
  • 缓存机制:减少重复查询,提高效率。

三、数据结构与算法

1. 快速排序的时间复杂度?最坏情况是什么?

答:

  • 平均时间复杂度:O(n log n)
  • 最坏情况:O(n²)(当每次划分极不平衡时,如已排序数组)

2. 哈希表的冲突解决方法?

答:

  • 开放寻址法:线性探测、二次探测、双重散列。
  • 链地址法:每个桶挂一个链表或红黑树(Java 8+ 中当链表长度 > 8 时转红黑树)。

3. B 树和 B+ 树的区别?

答:

  • B 树:非叶子节点可存储数据,适合磁盘读取。
  • B+ 树:所有数据存储在叶子节点,叶子节点通过指针相连,适合范围查询(如数据库索引)。

4. 图的遍历算法(DFS 和 BFS)?

答:

  • DFS(深度优先):递归或栈实现,适用于路径搜索。
  • BFS(广度优先):队列实现,适用于最短路径问题。

四、系统设计与分布式

1. 如何设计一个分布式锁?

答:

  • 方案
    • Redis 分布式锁:使用 SET key value NX PX 命令,设置过期时间。
    • Zookeeper:通过临时顺序节点实现。
  • 关键点
    • 避免死锁(自动过期)。
    • 容错(主从一致性)。

2. CAP 定理的含义?如何取舍?

答:

  • CAP 定理:一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance),三者不可兼得。
  • 取舍
    • CP 系统:牺牲可用性,保证一致性和分区容忍(如 Zookeeper)。
    • AP 系统:牺牲一致性,保证可用性和分区容忍(如 Cassandra)。

3. 如何设计一个高并发的秒杀系统?

答:

  • 关键点
    • 限流:令牌桶算法、漏桶算法。
    • 缓存:热点商品缓存(Redis)。
    • 异步处理:订单写入队列(Kafka/RabbitMQ),异步处理。
    • 数据库分库分表:减少单表压力。

五、开放性问题

1. 如何优化一个慢查询的数据库?

答:

  • 索引优化:添加合适的索引,避免全表扫描。
  • 查询优化:避免 SELECT *,使用分页。
  • 缓存:使用 Redis 缓存热点数据。
  • 分库分表:水平或垂直拆分。

2. 如何设计一个分布式任务调度系统?

答:

  • 核心组件
    • 任务队列:Kafka/RabbitMQ。
    • 调度器:Zookeeper 分布式锁。
    • 任务执行器:Worker 节点拉取任务。
  • 容错:任务失败重试、超时机制。

六、编程题(可能结合基础知识)

1. 实现一个生产者-消费者模型(多线程)?

答:

  • 使用线程锁(threading.Lock)或条件变量(threading.Condition)。
  • 通过共享队列(queue.Queue)实现线程间通信。

2. 用 TCP 实现一个简单的客户端-服务器通信?

答:

  • 服务器
    
      

    python

    import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('0.0.0.0', 8080)) s.listen(1) conn, addr = s.accept() data = conn.recv(1024) conn.send(b'Hello')

  • 客户端
    
      

    python

    import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 8080)) s.send(b'Hi') data = s.recv(1024)


总结:高频考点

复制

领域 常考知识点
操作系统 进程/线程、死锁、虚拟内存、文件系统
网络 TCP/UDP、HTTP/HTTPS、DNS、三次握手
算法 排序、哈希、图遍历、B 树
系统设计 分布式锁、CAP 定理、高并发设计
编程 多线程、TCP 通信、数据库优化
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐