八股文 / 华为后端

华为八股文高频题 - 后端方向

持续更新中。来源:2026 暑期实习 + 秋招真实面经。


计算机网络

Q1:TCP 和 UDP 有什么不同?

来源:26暑期实习-技术面

对比维度 TCP UDP
连接方式 面向连接(三次握手建立) 无连接,直接发送
可靠性 可靠传输(确认、重传、排序) 不可靠,可能丢包/乱序
传输方式 字节流 数据报
拥塞控制 有(慢启动、拥塞避免、快重传、快恢复)
头部开销 20 字节(最小) 8 字节
速度 相对慢(握手 + 确认开销) 快(无连接开销)
适用场景 HTTP/HTTPS、文件传输、邮件 视频直播、DNS 查询、游戏

面试加分点

  • TCP 三次握手:SYN → SYN+ACK → ACK,为什么不是两次?因为两次无法防止历史连接的 SYN 导致误建连接
  • TCP 四次挥手:FIN → ACK → FIN → ACK,TIME_WAIT 状态等待 2MSL 确保对方收到最后的 ACK
  • UDP 可以在应用层自己实现可靠性(如 QUIC 协议)

数据结构 & 算法

Q2:栈和队列怎么理解?

来源:26暑期实习-技术面

对比维度 栈(Stack) 队列(Queue)
操作规则 后进先出(LIFO) 先进先出(FIFO)
核心操作 push(入栈)、pop(出栈)、peek(查看栈顶) enqueue(入队)、dequeue(出队)、front(查看队首)
生活类比 叠盘子:最后放的最先取 排队:先来先服务
典型应用 函数调用栈、括号匹配、表达式求值、DFS BFS、任务调度、消息队列、缓冲区
实现方式 数组 / 链表 数组(循环队列)/ 链表

延伸

  • 双端队列(Deque):两端都能进出,Python 的 collections.deque 就是实现
  • 优先队列(Priority Queue):按优先级出队,底层通常是堆(Heap)
  • 用两个栈实现队列 / 用两个队列实现栈 — 是华为高频手撕题

Q3:贪心算法和动态规划有什么区别?

来源:26暑期实习-技术面

对比维度 贪心(Greedy) 动态规划(DP)
决策方式 每步选当前最优,不回头 考虑所有子问题,综合得出全局最优
最优子结构 需要 需要
贪心选择性质 需要(局部最优 → 全局最优) 不需要
重叠子问题 不涉及 核心特征,用备忘录/表格消除重复计算
时间复杂度 通常 $O(n)$ 或 $O(n \log n)$ 通常 $O(n^2)$ 或更高
正确性 需要证明贪心策略正确(反证/交换论证) 状态转移方程正确即可

举例对比

  • 零钱兑换(硬币 1, 5, 10, 25):贪心可以(每次选最大面值),因为硬币面值有倍数关系
  • 零钱兑换(硬币 1, 3, 4,凑 6):贪心失败(4+1+1=3 次,但 3+3=2 次),必须用 DP

一句话总结:贪心是 DP 的特例。当贪心选择性质成立时,用贪心更快;不成立时,必须用 DP 枚举所有可能。


编程语言(C++/Java/Python)

Q4:简历写了多种编程语言,它们之间有什么差异?

来源:26暑期实习-技术面

这是一道开放题,面试官通常根据你简历写的语言来问。以最常见的 C++ / Java / Python 对比为例:

维度 C++ Java Python
类型系统 静态强类型 静态强类型 动态强类型
内存管理 手动(new/delete)或智能指针 GC(垃圾回收) GC(引用计数 + 分代回收)
执行方式 编译为机器码 编译为字节码 → JVM 执行 解释执行
性能 最快 快(JIT 优化) 慢(解释开销 + GIL)
指针 有,可直接操作内存 无裸指针,有引用
多继承 支持 不支持(接口实现多继承效果) 支持(MRO 解决菱形继承)
应用场景 系统/嵌入式/游戏引擎/竞赛 企业后端/Android AI/数据科学/脚本/Web

面试建议:不要背表格,结合自己的项目经历谈。比如”项目中用 Python 做模型训练是因为生态好(PyTorch),但推理部分用 C++ 是因为性能要求”。


Q5:通过项目,对 Python 语言有什么认识?

来源:26暑期实习-技术面

这是结合项目的开放题,建议从优点 + 坑 + 实际体会三方面答:

优点

  • 开发效率极高:动态类型 + 丰富标准库 + pip 生态
  • AI/数据科学生态无敌:NumPy、PyTorch、Pandas、Scikit-learn
  • 语法简洁,代码可读性强

踩过的坑

  • GIL(全局解释器锁):多线程无法利用多核 CPU,CPU 密集型任务需要用多进程(multiprocessing
  • 性能瓶颈:纯 Python 循环慢,需要向量化(NumPy)或 C 扩展
  • 可变默认参数陷阱def f(a=[]) 中默认列表在调用间共享
  • 浅拷贝 vs 深拷贝list.copy() 是浅拷贝,嵌套结构需要 copy.deepcopy()

面试建议:具体到你项目里遇到的问题。比如”训练数据预处理阶段发现单线程太慢,后来用 multiprocessing.Pool 实现了 4x 加速”。


操作系统

待补充 — 后续面经录入后更新

数据库

待补充 — 后续面经录入后更新


面经记录

面经 1:26暑期实习(双机位)

技术面(约 85min,手撕用时较长)

  • 自我介绍
  • 手撕代码:未 AC 但思路正确,面试官协助调试(面试官说不影响结果)
  • 八股:编程语言差异、栈和队列、TCP vs UDP、贪心 vs 动态规划、Python 项目认识
  • 项目追问
  • 无反问

主管面

  • 自我介绍
  • 项目介绍
  • 常见面试问题(建议提前准备)