恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
华为AI软件岗面试攻略:从C++、算子开发到系统设计
首页
资讯中心
/
华为AI软件岗面试攻略:从C++、算子开发到系统设计
华为AI软件岗面试攻略:从C++、算子开发到系统设计
发布时间:2026/9/2 7:12:37
每年到招聘季总有一批同学拿着算法岗的面经去准备华为AI软件岗的面试结果一面就被问懵。我见过不少算法理论背得滚瓜烂熟的人栽在“深拷贝和浅拷贝的区别”“C虚函数表存在哪”这种看似基础的问题上也见过工程能力很强的人因为没提前了解华为AI业务栈被“MindSpore和PyTorch的差异”“NPU算子开发”这类题打得措手不及。华为的AI软件岗面试核心关键词不是“AI”而是“软件岗”三个字。它招的不是发论文的算法科学家而是能把AI模型落地成稳定、高效、可交付的软件系统的人。这篇文章不打算列一份“全网最全千题集”而是基于我对华为AI软件岗面试的观察和复盘帮你把高频问题背后的考察逻辑拆明白再给出一条可执行的备考路径。岗位画像决定了复习方向方向和努力同样重要。华为AI软件岗的面试流程通常是机试在线编程→ 技术面两到三轮每轮约45-60分钟→ 主管面HR或业务主管面。技术面里手写代码、项目深挖、八股问答会交替出现越到后面越偏系统和工程。下面我按这个逻辑逐块拆解每一节都会给你具体题目、回答思路和避坑提醒。1. 面试官到底在找什么人先从华为AI软件岗的岗位画像聊起先给一个很多人能背出来的结论华为的AI软件岗跟互联网大厂的“推荐算法工程师”“CV算法工程师”不是同一个物种。华为的AI软件岗大量集中在昇腾、盘古、MindSpore、ModelArts、智能汽车解决方案等BG/部门下面岗位职责经常是这几类AI框架开发与优化基于昇腾底座的算子库开发、自动微分、图编译、分布式训练框架代表产品是MindSpore和CANN。AI推理与部署模型转换、量化、剪枝、推理引擎开发、端侧/云侧性能优化TBE算子开发、AI Core指令映射、TensorRT/ONNX Runtime二次开发。AI平台与工具链AI训练平台、推理服务化、数据标注与处理Pipeline、MLOps系统的设计与开发。嵌入式/AIOT方向芯片侧算法工程化、模型压缩与加速跟硬件打交道非常多。从这些职责能提炼出华为AI软件岗和“纯算法岗”的核心差异我就是靠这张表帮学生认清备考重点的维度华为AI软件岗传统互联网算法岗第一优先级工程能力、C/Python、推理性能、系统设计模型效果、论文/竞赛、数据分析编程语言C Python要求扎实的底层能力Python为主偶尔要Java/Scala框架要求MindSpore、PyTorch、TensorRT、CANNPyTorch、TensorFlow为主算法深度能说清原理但很少推复杂公式需要推导GAN、注意力机制的细节部署知识必须懂算子融合/量化/内存复用是常规话题加分项不是必须面试官画像多为框架开发/编译器/系统工程师多为算法工程师所以准备华为AI软件岗的同学请先停下来问自己一个问题我是把时间花在刷“K-means聚类证明”还是花在搞懂“手写一个C智能指针”答案是后者。算法理论不是不重要但它的权重和出题方式跟你想象的不太一样。华为AI软件岗面试常见的技术考察范围可以粗分成四块算法基础、AI基础、工程能力、系统设计。算法基础就是通用的编程题后面单独说。AI基础考的是机器学习/深度学习核心概念工程能力考的是C/Python、算子开发和推理优化系统设计考的则是架构能力和大模型背景下的分布式训练/推理知识。2. 机器学习与深度学习高频题不是背公式而是讲清楚推导网上流传的华为AI算法岗面经里最常出现的题在软件岗上也会问但问法不同。软件岗的技术面试官更关心你“能不能实现”而不是你“能不能背诵”。2.1 机器学习基础过拟合、正则化与损失函数“过拟合怎么解决”几乎每场面试必问。常规回答是增加数据、正则化、Dropout、早停、集成学习。但华为面试官往往会加一句“你再说说L1和L2正则化的区别怎么用代码实现”L1正则化是加惩罚项的绝对值L2正则化是加平方和。L1更容易产生稀疏解因为它在零点处有不可导的尖角坐标轴下降法/近端梯度法可以在置零处停住。L2是连续平滑的解不会稀疏但会趋向于小值。工程实现时L2正则通常集成到优化器里也就是weight decayPyTorch的AdamW就是把weight decay和梯度分开做避免Adam自适应学习率把正则效果冲淡。L1则更简单直接在loss上加上lambda * torch.norm(w, p1)。再高一层面试官会问“交叉熵损失和MSE在分类问题里怎么选”。如果你只回答“分类用交叉熵回归用MSE”那这题只能拿一半分。更好的回答是交叉熵配合Softmax输出是概率分布梯度形式是预测值减真实值不会出现SigmoidMSE那种在饱和区梯度趋近于0导致训练极慢的问题。MSE对分类问题本质上是做最小二乘拟合它并不惩罚“错误概率分布形状”的偏离只会让输出向0/1靠拢训练不稳定。2.2 神经网络核心从反向传播到Transformer手推反向传播是华为技术面保留节目。面试官不会让你推完整的ResNet152但会让你推一个两三层神经网络的前向和后向或者解释梯度消失/爆炸的成因。我的建议是不要只写公式要用计算图的方式讲。从Loss开始逐层往前求梯度说明链式法则中哪个变量是缓存下来直接复用的。这样面试官会觉得你是真的写过训练代码而不是背了一本书。Transformer就更常考了。高频题包括Self-Attention的复杂度为什么是O(n²)对序列长度极端敏感因此衍生出Sparse Attention、FlashAttention、线性注意力等优化方法。Query、Key、Value分别是什么为什么需要Scale操作Scale的作用是防止点积结果过大导致Softmax陷入饱和区梯度消失。Positional Encoding为什么用sin/cos能不能学到这是让模型感知词序的机制sin/cos能保证相对位置的线性关系也可以换成可学习的位置编码但长度泛化能力差一些。MHA和MQA/GQA的区别是什么MHA每组QKV都有独立权重大模型推理时KV Cache占用显存巨大MQA让所有头共享一组Key/ValueGQA则让多头分组成组共享是推理优化中的重要技术。上面这些题如果没有项目背景容易答成“我知道Transformer用了自注意力”。想拿高分要找开源实现比如Hugging Face的实现读一遍把代码里mask怎么做的、head_dim怎么拆的、cache怎么存的和删除的讲清楚。华为面试官尤其爱问“如果你要把这个模块部署到NPU上你会怎么优化”这就是从AI理论跨到软件工程的典型问题。2.3 高频问答清单可以对着自测我整理一份面试前必自测的清单覆盖AI基础部分最常考的题解释Batch Normalization的作用训练和推理时有什么区别训练用batch统计推理用滑动平均什么是激活函数的“死亡ReLU”问题LeakyReLU、ELU、GELU怎么缓解什么是梯度累积它模拟的是增大batch_size还是增大学习率解释Precision/Recall/F1什么时候只关心Precision什么是Focal Loss解决什么问题Momentum、RMSProp、Adam、AdamW有什么区别哪个适合大模型数据并行和模型并行的区别是什么ZeRO做的是哪件事你知道KV Cache吗为什么能加速自回归生成不要光背题目每个题都要能讲出“为什么”和“代码里怎么做”。3. C、算子开发与推理优化拉分项全在这块如果说AI基础是门槛那C、算子开发、推理优化就是华为AI软件岗面试里真正的拉分项。大部分候选人能答好前两轮但在“优化”环节被淘汰。3.1 C必考点不只是八股华为的软件工程师面试C相关的问题几乎是必考。即便是Python为主的候选人也会被问C因为AI框架底层、算子、推理引擎几乎都用C。高频考点智能指针unique_ptr/shared_ptr/weak_ptr的区别循环引用怎么解决引用计数是线程安全的吗虚函数虚函数表放在哪里多重继承的虚函数表长什么样拷贝构造与移动语义深拷贝浅拷贝的区别std::move做了什么何时触发移动构造STL容器底层vector扩容机制map与unordered_map底层红黑树和哈希表的差异dequevslist。内存管理栈和堆的区别内存对齐内存泄漏排查工具Valgrind/ASan。我的建议是每个问题都要准备一个“场景化解释”。说到vector扩容不要只说变成两倍而是说“如果我在一个循环里反复push_back且数量达到上千万内存拷贝会非常可观因此需要提前reserve”。说到shared_ptr循环引用就说“两个对象互相持有shared_ptr引用计数永远不为0如果把其中一个改成weak_ptr就解决了”。这样面试官才会相信你在实际项目中写过。华为AI岗还会追问C和AI结合的题比如“把PyTorch模型加载的部分用C实现如何做到与Python的解耦”“ONNX Runtime的C API和Python API性能上有什么差异”。你不需要真的在生产环境写过但至少要了解推理引擎用C部署原因是避开GIL、更精细控制内存、更好的算子调度。3.2 算子开发与NPU编程至少会画一张图昇腾相关岗位面试一定会问“你了解CANN吗了解算子开发吗”如果你没接触过不用慌但需要知道基础概念并且能表现出学习能力。NPU芯片里计算核心叫AI Core算子就是运行在AI Core上的计算单元比如矩阵乘法和卷积就是算子。TBE和Ascend C是开发算子的语言/框架。TBE基于TVM的思想程序员写算子的计算逻辑编译器把它映射到AI Core指令。Ascend C是更贴近芯片的高性能编程语言提供类似CUDA的编程模型包含并行计算、流水、内存管理、同步等概念。面试官常问“一个二维卷积算子如何在AI Core上实现高性能计算”你不用写复杂代码但需要会拆解数据切分NHWC还是NCHW布局如何把一个大的输出切块放入片上内存。循环分块输入通道和输出通道分块或者叫tiling减少访存。向量化使用向量指令资源一次同时算多个点。流水线加载数据、计算、写回三个步骤重叠。算子融合把相邻算子的中间结果留在片上不落回主存。例如ConvBNReLU融合减少搬运。如果你还了解CPU上的优化可以说Cache miss、SIMD、循环展开、NEON/AVX。这些都能让面试官觉得你“有性能意识”。3.3 模型推理优化要能给出数据说话“你的模型部署到实际服务延迟太高怎么办”这是系统级问题不是让你背一个答案。比较好的回答链路是先做性能分析用profiler看时间花在算子还是数据加载还是拷贝。不要盲目优化。算子级优化融合、减少内存分配、提高算子并发。模型级优化量化FP16、INT8、剪枝、蒸馏。框架级优化换用TensorRT/ONNX Runtime、开启图优化。服务级优化多线程/多进程、动态batch、缓存、预热。你应该能对每个点展开说。比如INT8量化你需要知道什么是PTQ和QATRN、校准集怎么用量化误差来源是什么为什么对Transformer来说量化难度大。动态batch是推理服务常用的手段在并发请求多的时候把多个请求合并成一个batch能大幅提升吞吐但需要注意显存峰值和超时时间。此外Distributed training和fsdp的知识也可能出现。华为有大量分布式训练的场景面试官会问数据并行、模型并行、流水线并行的区别以及参数服务器和AllReduce的对比。你需要了解Ring-AllReduce的通信量O(n)以及它比PS的优势在哪里。如果你答不上来至少把“数据并行每个卡都有一份完整模型副本梯度通信量大模型并行需要切分模型通信切片和计算一样重要”这个点说清楚。4. 机试与手撕代码华为上机考试的套路与备考节奏华为的机试是大部分人的第一道坎。校招和OD机试虽然略有不同但核心都是在线编程题目风格偏重“逻辑复杂、边界情况多、时间空间要求高”而不是偏门算法。机试能不能过直接影响后续面试邀约所以必须认真对待。4.1 机试的三种常见形式校园招聘机试一般90-120分钟3道题难度递增。分值分布常是第一题100分、第二题200分、第三题300分或类似但总分过线就能进面试。第一题偏模拟第二题偏字符串和搜索第三题偏动态规划和贪心。OD机试网上资料更多一般有ABCD卷之说实际是为了防作弊的换题机制。题目风格和校招类似但更注重“围绕题目给出的场景做准确模拟”。牛客网/华为OJ平台环境是ACM模式代码需要自己处理输入输出不提供函数模板。这跟力扣的“核心代码模式”不同很多人直接栽在这里。4.2 备考节奏与题目类型我建议把机试备考分为三个阶段第一阶段两周熟悉数据结构。优先级是数组、字符串、链表、栈、队列、哈希表、二叉树、图。每种结构去力扣刷20道高频题不要贪多。第二阶段三周专项突破算法。重点是排序、二分查找、双指针、滑动窗口、动态规划、贪心、回溯、DFS/BFS。华为机试第二道和第三道常考动态规划尤其是“背包类”“区间DP类”和“路径计数类”。第三阶段一周完整模拟机试。严格按照考试时长和时间段在牛客网上做华为真题。每天至少一套注意输入输出格式、多组测试样例、超时问题。具体到题量我在带学生备考时一般要求至少150道力扣题其中Medium占80道以上Hard不需要太多。针对华为要特别留意“字符串处理”和“情况讨论”的题目。比如“给定一个算式字符串求结果”“实现一个简易计算器”“括号匹配的变种”“火星文计算”这些题看起来不难但边界情况很多非常考验码风。4.3 一个高频题示例手写LRU缓存手写LRU是华为以及很多大厂机试/手撕代码的热门题。手撕时可以直接用Python的OrderedDict但最好让面试官看到你在想什么。简单实现如下from collections import OrderedDict class LRUCache: def __init__(self, capacity: int): self.capacity capacity self.cache OrderedDict() def get(self, key: int) - int: if key not in self.cache: return -1 self.cache.move_to_end(key) return self.cache[key] def put(self, key: int, value: int) - None: if key in self.cache: self.cache.move_to_end(key) self.cache[key] value if len(self.cache) self.capacity: self.cache.popitem(lastFalse)写完还要能回答为什么用双向链表哈希表也能实现OrderedDict底层是什么如果要求自己实现双向链表你需要把“哈希表存储key到节点的指针链表维护访问顺序”说出来。手撕代码考察的往往不只是代码能力还包括你遇到边界情况的反应速度。写完后主动说“我来检查一下get不存在的keyput已存在的key大量插入缓存满时删除的是不是最久未访问的项”这种自测意识非常加分。4.4 机试中的编程细节注意时间复杂度和空间复杂度最好一开始就说出解法复杂度。用Python时谨慎使用递归默认递归深度只有1000可能爆栈。深搜建议显式栈或加sys.setrecursionlimit。注意多个测试用例间的全局变量清空避免状态污染。写代码时不要过早优化先把无脑正确版本写出来如果复杂度不行再优化。面试官更关注你的思路链而不是一步到位。5. 项目深挖与系统设计把做过的事讲成架构能力技术面中必然会有一大段时间挖项目。很多人以为项目讲得越炫越好其实华为的面试官非常讨厌“背稿子”。他们更倾向于不断追问“为什么这样做”“有没有想过另一种方案”“数据量大了怎么办”。5.1 使用STAR法则组织项目但要突出技术决策随便举一个例子你做过一个图像分类项目准确率97%。如果你只说“我用ResNet50做分类准确率97%”面试官很难往下聊。更好的框架是Situation业务场景比如工业缺陷检测样本类别极不平衡坏品只占1%。Task目标是漏检率低于0.1%误检率低于5%。Action不是简单套ResNet而是设计了图像增强策略、Focal Loss、模型集成、推理时做了TTATest-Time Augmentation。同时在工程上优化了预处理Pipeline用OpenCV并行替换PIL使单张推理从80ms降到20ms。Result漏检率0.08%误检率2%最终部署到推理服务器上QPS达到50。注意Action部分的描述要和“软件岗”匹配模型选型和效果提升占1/3工程落地的性能优化占2/3。如果你能说出“我用了多进程把图像解码和预处理并行然后在GPU推理前后做缓存”这类细节面试官自然会觉得你有工程sense。5.2 项目被追问时的常见深水区你用的batch size是多少为什么选这个值显存占用怎么算训练时数据预处理怎么做的有没有做数据增强会不会导致数据泄漏你的模型推理显存是多少有没有用自动混合精度准确率提升你的实验重复了几次方差多大有没有做过显著性检验如果线上数据分布变化你的模型会不会跪你有监控方案吗不要因为项目小就回避。我见过项目经历平平、但被追问时每个问题都能答出“当时我在源码里看到是什么行为所以我怎么做”的候选人反而顺利通过。面试官要的是真实经验而不是包装好的完美故事。5.3 系统设计题训练平台和推理服务是两大方向华为AI软件岗的系统设计题很少让你设计“秒杀系统”。它更爱考这两类第一类是训练平台设计。题目类似“设计一个多机多卡的分布式训练系统训练一个大模型怎么做资源调度、数据加载、模型同步和容错”回答思路应从底层往上讲计算集群使用容器化调度K8s、Volcano、SlurmGPU/NPU虚拟化和共享数据加载用缓存和预取策略模型同步用AllReduceHorovod或ZeRO失败任务自动重启并断点续训训练日志和指标监控接入Prometheus/Grafana。第二类是推理服务设计。题目类似“一个大语言模型要部署成在线服务延迟要求2秒以内并发100怎么设计”这个题是2025年的热门题。你需要提到服务架构上做多级缓存对话前缀缓存、KV Cache复用动态batch把模型切成多卡并用张量并行支持多副本自动扩缩容预热和健康检查高可用和灰度发布。还要注意显存估算一个7B模型用FP16加载大约14GB加上KV Cache和中间激活一张卡可能放不下需要模型并行或者INT8量化。如果你能报出这些数字面试官就会相信你真的部署过。系统设计没有标准答案但面试官希望看到两点一是你有一种或两种主流设计范式的知识储备二是你有取舍能力能说清楚“在资源有限的情况下我先满足哪个指标”。不要一上来就堆组件先从单机方案开始再逐步扩展。6. 主管面谈动机与压力技术之外能不能过取决于这几点华为面试流程里的主管面技术含量虽然降低了但淘汰率不低。主管面通常由部门主管或者资深技术专家担任面试25-50分钟重点考察你的动机、价值观、抗压能力和学习潜力。主管面前请认真准备三个问题“为什么选择华为为什么选择AI这个方向”“你有没有遇到过特别难的问题或冲突是怎么解决的”“你的职业规划是什么”第一题不要回答“华为技术强、平台大”这种空话。更好的角度是“我想做AI基础设施尤其是昇腾这种国产AI算力平台正好和自己的技术栈匹配”。或者“我之前用的MindSpore做了某类模型适配感觉它的图模式技术栈很有意思想深入做编译和算子方向”。只有当过面试官的人才知道比起大而空的表白一个具体的业务方向更打动人。第二个问题回答框架可以用“遇到挑战-拆解问题-尝试多种方案-最终结果-复盘收获”但要把重点放在“怎么拆解”和“怎么调动资源”上。不要把自己描述成独自扛下所有。华为很看重团队协作适度展示你如何让别人配合你比“我加班三天搞定”更真实。第三个问题不要回答“三年做到主管”“五年年薪百万”也不要回答“我想做技术专家”。更好的说法是“先在某个垂直方向打深比如推理引擎的算子优化再横向扩展到整个AI计算栈之后可以带小团队做完整的系统交付”。这样既显示了技术追求也显示了领导力潜力。主管面中还可能出现压力测试比如“我觉得你技术基础一般你怎么证明自己合适”这种题不要慌。它的核心是考察你面对否定时的反应。可以回答“我现在确实有些地方还不够熟但我在接下来的时间里可以针对性补齐。比如这周我正准备把FP8量化的原理和实现完整看一遍面试后我可以写一篇技术总结给你看”。要真诚、具体、有行动意图而不是空洞地说“我很努力”。7. 关于备考节奏的个人经验三个月倒推复习法最后分享一套我觉得靠谱的备考节奏适合从现在开始准备未来面试的同学。三个月其实很紧张但也够用。第一个月补齐基础和机试能力。每天2道编程题周末做专项突破同时每天花1小时复习C智能指针、STL、内存周末看机器学习/深度学习核心知识重点在过拟合、正则化、BN、优化器、Transformer。第二个月主打工程和框架。每周深入读一个开源项目比如MindSpore或PyTorch的某个模块重点看算子注册、自动微分、缓存分配。写一份阅读笔记。同时把模型推理优化扫一遍自己用TensorRT或ONNX Runtime跑通一个模型把量化、融合、检测的过程跑一遍记录数据。每周做一套完整机试模拟。第三个月模拟面试和查漏补缺。找伙伴或自己录屏模拟20-30分钟技术面再写复盘。针对薄弱环节集中训练。同时把项目经历重新打磨准备追问列表。最后一个星期以看面经为主不要刷太难的题保持手感即可。我在实际陪跑过程中有个很深的感受很多人并不是技术不行而是准备方向系统性不强被“AI岗位”三个字误导把大量时间投在了论文理解和模型调参上忽略了软件工程基础。华为AI软件岗面试本质上是一场“你是否能在真实生产环境里把模型变成高效可靠的软件”的检验。只要按这个逻辑去准备面试现场的问题再千变万化你都能找到回答的锚点。