华为技术岗2026

面经解析

本文为华为2026校招技术面试经验分享,详细解析了OD机试中滑动窗口算法、操作系统进程与线程区别及通信方式、TCP三次握手与四次挥手、零拷贝技术原理,以及华为5G和鸿蒙生态等核心问题,附有回答思路和示例代码。

更新 2026-05-22
华为校招技术面OD机试滑动窗口进程线程TCP零拷贝
371 浏览
面试前,把简历里的项目讲清楚面经里的追问通常围绕简历展开,先整理项目亮点和可量化结果,回答会更稳。
优化我的简历

企业总结

使命:把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。

愿景

  • 近期:突破芯片、操作系统等卡脖子技术,实现核心软硬件自主可控,鸿蒙生态设备突破10亿台;
  • 中期:以华为云和昇腾AI芯片为双引擎,服务全球百万企业的数字化和智能化转型;
  • 长期:成为全球ICT领域最受尊重的领导者,用技术创新守护数字经济的未来。

1. OD机试真题:找出字符串中最长的不含重复字符的子串长度

【回答思路】 华为OD机试是上机考核,题型偏向数据结构与算法,滑动窗口是高频考点。

1. 暴力解:枚举所有子串,O(n³),说完即可。

2. 滑动窗口:双指针维护窗口 + HashMap记录字符位置,O(n)。

3. 边界处理:空字符串、全相同字符、全不同字符。

【回答示例】

public int lengthOfLongestSubstring(String s) {
 Map<Character, Integer> map = new HashMap<>();
 int maxLen = 0;
 int left = 0; // 窗口左边界
 for (int right = 0; right < s.length(); right++) {
 char c = s.charAt(right);
 if (map.containsKey(c) && map.get(c) >= left) {
 left = map.get(c) + 1;
 }
 map.put(c, right); // 更新字符的最新位置
 maxLen = Math.max(maxLen, right - left + 1);
 }
 return maxLen;
}
// 示例:"abcabcbb" → 输出3("abc")
// 时间复杂度 O(n),空间复杂度 O(min(m,n)),m为字符集大小

2. 操作系统中进程和线程的区别?线程间如何通信?

【回答思路】 华为重视计算机基础,进程/线程是必考知识点,要从概念、资源、切换代价三个维度对比。

1. 本质区别:进程是资源分配单位,线程是CPU调度单位。

2. 资源对比:进程独占地址空间,同一进程的线程共享堆、全局变量、文件描述符。

3. 切换代价:进程切换需要切换页表(开销大),线程切换只切换寄存器/栈(开销小)。

4. 线程通信方式:共享内存(需要同步)、信号量、互斥锁、条件变量、消息队列。

【回答示例】

进程与线程的本质区别:进程是操作系统资源分配的基本单位,每个进程有独立的虚拟地址空间、文件描述符、信号处理等资源,进程间相互隔离;线程是CPU调度的基本单位,同一进程内的线程共享进程的堆内存、全局变量和代码段,但各自拥有独立的栈和寄存器状态。

切换代价:进程切换需要切换页表(TLB失效,需重新建立地址映射),开销是微秒级;线程切换只需保存/恢复少量寄存器,开销比进程切换小1-2个数量级。

线程间通信方式:

1. 共享内存:最快的通信方式,但需要用互斥锁(mutex)防止竞争条件;

2. 互斥锁 + 条件变量:经典的生产者-消费者模型实现,条件变量用于等待某个条件成立(如队列非空);

3. 信号量(Semaphore):控制多线程对共享资源的访问数量;

4. 消息队列(Java中的BlockingQueue):线程安全的队列,解耦生产和消费,是实际工程中最常用的方式。

3. 计算机网络:TCP三次握手和四次挥手的过程,以及为什么是三次/四次?

【回答思路】 华为网络岗必考,要说清楚状态机(SYN/SYN-ACK/ACK),以及为什么握手三次够了、挥手为什么需要四次。

1. 三次握手过程:SYN → SYN+ACK → ACK,双方确认各自的发送和接收能力。

2. 为什么三次:两次不够(服务端无法确认客户端收到了自己的SYN),四次多余。

3. 四次挥手过程:FIN → ACK → FIN → ACK,TCP是全双工,双方各自关闭。

4. TIME_WAIT:主动关闭方需要等待2MSL,防止最后一个ACK丢失。

【回答示例】

三次握手流程:

1. 客户端发送SYN(seq=x),进入SYN_SENT状态;

2. 服务端收到后,发送SYN+ACK(seq=y, ack=x+1),进入SYN_RCVD状态;

3. 客户端收到后,发送ACK(ack=y+1),双方进入ESTABLISHED状态,连接建立。

为什么是三次:三次握手是建立可靠连接的最少次数。两次握手服务端无法确认客户端能接收数据;三次握手后,双方都确认了各自的发送和接收能力均正常。

四次挥手流程:

1. 主动方发FIN(我没有数据发了),进入FIN_WAIT1;

2. 被动方ACK(知道了,但我还有数据要发),进入CLOSE_WAIT;

3. 被动方数据发完后,发FIN,进入LAST_ACK;

4. 主动方ACK,进入TIME_WAIT(等待2MSL后进入CLOSED)。

为什么挥手四次:TCP是全双工,关闭分为两个方向独立关闭,因此多出一次(第2步ACK和第3步FIN不能合并,因为被动方收到FIN时可能还有数据未发送完)。

TIME_WAIT等2MSL的原因:确保最后一个ACK如果丢失,被动方重传FIN时主动方还能响应,防止旧连接的报文影响新连接。

4. 华为OD算法题:合并两个有序链表

【回答思路】 链表题是华为OD高频,要能快速写出正确的递归和迭代两种解法,并分析复杂度。

【回答示例】

// 迭代法(推荐,空间复杂度O(1))
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 ListNode dummy = new ListNode(-1); // 哑节点简化边界处理
 ListNode cur = dummy;
 while (l1 != null && l2 != null) {
 if (l1.val <= l2.val) {
 cur.next = l1;
 l1 = l1.next;
 } else {
 cur.next = l2;
 l2 = l2.next;
 }
 cur = cur.next;
 }
 cur.next = (l1 != null) ? l1 : l2;
 return dummy.next;
}
// 时间复杂度 O(m+n),空间复杂度 O(1)

5. 数据库:MySQL的索引结构为什么用B+树而不是B树或红黑树?

【回答思路】 华为数据库岗/后端开发常考,要对比B+树、B树、红黑树在磁盘IO、范围查询、数据存储上的差异。

1. B+树 vs B树:B+树非叶子节点只存索引,不存数据,因此节点更小,IO次数更少;B+树叶子节点形成有序链表,支持高效范围查询。

2. B+树 vs 红黑树:红黑树是二叉树,高度高,磁盘IO次数多;B+树是多叉树,高度低(通常3-4层),适合磁盘预读。

3. 聚簇索引 vs 非聚簇索引:InnoDB的聚簇索引叶子节点存整行数据,非聚簇索引叶子节点存主键值。

【回答示例】

B+树的核心优势:

1. 非叶子节点只存索引,不存数据:每个节点可以存储更多索引项,树的高度更低(InnoDB中B+树高度通常为3-4层),磁盘IO次数更少。

2. 叶子节点形成有序链表:支持高效的范围查询(如WHERE id BETWEEN 100 AND 200),只需找到起始叶子节点后顺序遍历即可,B树需要多次回溯。

3. 磁盘预读友好:B+树节点大小通常设置为磁盘页大小(InnoDB默认16KB),一次IO读取一个完整节点,充分利用局部性原理。

与红黑树对比:红黑树是二叉树,高度约为log₂n(100万数据需要20层),每次查询需要20次磁盘IO;B+树是1200叉树(16KB/13字节≈1200),100万数据只需3层,IO次数大幅减少。

6. 华为OD算法题:岛屿数量(DFS/BFS)

【回答思路】 华为OD高频题,考察图的遍历,DFS和BFS两种解法都要掌握。

【回答示例】

// DFS解法
public int numIslands(char[][] grid) {
 if (grid == null || grid.length == 0) return 0;
 int count = 0;
 for (int i = 0; i < grid.length; i++) {
 for (int j = 0; j < grid[0].length; j++) {
 if (grid[i][j] == '1') {
 count++;
 dfs(grid, i, j);
 }
 }
 }
 return count;
}
private void dfs(char[][] grid, int i, int j) {
 if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0') {
 return;
 }
 grid[i][j] = '0'; // 标记已访问
 dfs(grid, i + 1, j);
 dfs(grid, i - 1, j);
 dfs(grid, i, j + 1);
 dfs(grid, i, j - 1);
}
// 时间复杂度 O(m*n),空间复杂度最坏 O(m*n)(递归栈深度)

7. HTTPS是如何保证传输安全的?证书校验的完整流程是什么?

【回答思路】 华为网安/通信岗常考网络安全,要说清楚TLS握手 + 证书链校验的完整流程。

1. 对称加密 vs 非对称加密:为什么两者结合使用。

2. 证书链校验:根CA → 中间CA → 服务器证书,三层验证。

3. 校验内容:证书有效期、域名匹配、证书链完整、CRL/OCSP校验吊销状态。

【回答示例】

为什么HTTPS同时使用对称和非对称加密?对称加密(AES)速度快,但密钥传输不安全;非对称加密(RSA/ECDHE)密钥传输安全,但计算速度慢。HTTPS在握手阶段用非对称加密交换会话密钥,后续通信使用对称加密。

证书链校验完整流程:

1. 浏览器内置根CA证书:如DigiCert Global Root,浏览器/操作系统内置,全球约200个;

2. 服务器发送证书链:服务器返回服务器证书 + 中间CA证书(根CA不直接签服务器证书,因为根CA证书吊销影响太大);

3. 浏览器校验证书链:

  • 验证签名:用上级CA的公钥验证当前证书的签名,递归到根CA;
  • 验证有效期:当前时间必须在证书的Not Before和Not After之间;
  • 验证域名:证书的Subject Alternative Name(SAN)必须包含请求的域名;
  • 检查证书吊销:查询CRL(证书吊销列表)或OCSP(在线证书状态协议),确认证书未被吊销。

4. 会话密钥协商:证书校验通过后,用证书中的公钥加密发送Pre-master Secret,后续通信用该密钥加密。

8. 什么是零拷贝(Zero-Copy)技术?Kafka为什么使用它?

【回答思路】 华为高性能网络/中间件岗考察,零拷贝是高性能数据传输的核心技术,Kafka是最典型的应用案例。

1. 传统IO的问题:4次数据拷贝(磁盘→内核缓冲区→用户空间→Socket缓冲区→网卡)。

2. 零拷贝实现:mmap(内存映射)/ sendfile(Linux系统调用)。

3. Kafka的零拷贝:使用sendfile + DMA(直接内存访问),从磁盘到网卡只需1次拷贝。

【回答示例】

传统IO的数据拷贝次数:读取一个文件并通过网卡发送,传统方式需要4次拷贝:

1. 磁盘 → 内核缓冲区(DMA拷贝)

2. 内核缓冲区 → 用户空间(CPU拷贝)

3. 用户空间 → Socket缓冲区(CPU拷贝)

4. Socket缓冲区 → 网卡(DMA拷贝)

加上2次上下文切换(用户态→内核态→用户态),开销巨大。

零拷贝技术:

1. mmap(内存映射):将文件直接映射到用户进程的地址空间,省去步骤2,但步骤3仍然存在;

2. sendfile(Linux 2.1+):在内核空间内直接将文件内容从磁盘缓冲区传到Socket缓冲区,配合DMA(直接内存访问,CPU不参与数据搬运),只需1次DMA拷贝。

Kafka在v0.9之后全面使用sendfile传输消息:磁盘文件 → 内核缓冲区(DMA)→ Socket缓冲区(DMA)→ 网卡

Kafka为什么用零拷贝:Kafka每秒处理百万级消息写入和读取,传统IO会成为瓶颈。使用sendfile零拷贝后,磁盘文件内容可以直接从PageCache(内核缓冲区)通过DMA传到网卡,无需经过用户空间,数据处理延迟降低60%以上。

9. 你对华为的5G技术和鸿蒙生态有什么了解?

【回答思路】 华为特色题,考察你对公司核心技术方向的理解,展示你对行业前沿的关注。

1. 5G核心技术:Massive MIMO、网络切片、边缘计算MEC。

2. 鸿蒙生态:分布式架构、一次开发多端部署、万物互联。

3. 个人结合点:说明你感兴趣的具体方向。

好的,我已经准备好回答你的问题了。看起来你是在华为技术面试/笔试环节中,需要我帮你分析华为技术面经中的题目或技术点。

你提到的“华为技术面经”中包含了5G核心技术、网络切片、鸿蒙OS生态、分布式软总线、鸿蒙OS的差异化特性(如设备协同、一次开发多端部署)等。这些内容看起来像是面试中可能会被问到的技术点或场景题。

请问你具体需要我帮你做什么?比如:

1. 解析某个技术概念(如“鸿蒙分布式软总线”或“5G网络切片”)

”)

3. 技术点对比(如“鸿蒙OS和Android/iOS在分布式能力上的区别”)

4. 代码/架构设计(如“鸿蒙分布式软总线的实现原理”)

5. 其他(如“华为技术面经中常考的技术栈”)

请告诉我你具体需要哪方面的帮助?我可以为你提供更聚焦的解答。

看完面经后,回到自己的简历做一轮准备

用 HI简历整理项目经历、提炼可追问亮点,再按面经高频问题准备对应回答。

免费开始写简历

常见问题

华为OD机试中如何找出最长不含重复字符的子串?

使用滑动窗口算法,双指针维护窗口,HashMap记录字符位置,时间复杂度O(n)。

进程和线程的本质区别是什么?

进程是资源分配单位,线程是CPU调度单位;进程独立地址空间,线程共享堆和全局变量;进程切换开销大,线程切换开销小。

TCP为什么需要三次握手?

三次握手是建立可靠连接的最少次数,两次无法确认客户端接收能力,四次多余。