一、面试总体概述
1.1案例背景
同一候选人 10.13 完成 AI 技术应用岗的技术一面与技术二面,两轮各约 1 小时,结果都在面试结束后十分钟内通知。一面所有问题围绕实习与项目展开,深挖 Agent 开发的 Harness 编排、记忆模块与技术选型,八股只涉及 Redis;手撕先给了一道非 hot100 的 hard(二分 + 贪心,未写出完整代码),换题后是字符串排列。二面不考八股,聚焦 AI 的安全应用与项目落地,并追问 AI Coding 工具的使用方法与 coding plan 选型,手撕为两个数组的交集。
1.2基本信息
| 公司 | 华为技术有限公司 |
| 岗位 | AI 技术应用 |
| 招聘类型 | 校招 |
| 面试时间 | 2026-10-13 |
| 面试轮次 | 2 轮 |
| 平均时长 | 1 小时 |
| 题目数量 | 共 11 题,均附参考答案 |
| 整体难度 | ★★★☆☆ 中等 |
| 候选人背景 | 经历 有实习经历,面试全程围绕实习与项目展开 |
1.3面试轮次与结构
| # | 轮次 | 类型 | 时间 | 时长 |
|---|---|---|---|---|
| 1 | 技术一面 | 技术面 | 2026-10-13 上午 9 点多 | 1 小时 |
| 2 | 技术二面 | 技术面 | 未注明 | 1 小时 |
1.4高频考点
| 考点 | 分类 | 出现轮次 | 次数 |
|---|---|---|---|
| 手撕代码(二分 + 贪心 hard / 字符串排列 / 数组交集) | 算法与数据结构 · 手撕代码 | 技术一面、技术二面 | 3 |
| Agent 应用开发(Harness 编排 / 记忆模块) | 项目经历 · Agent 开发 | 技术一面 | 2 |
| AI Coding 工具与 coding plan 选型 | 机器学习 / AI · 工程效率 | 技术二面 | 2 |
| AI 的安全应用与项目落地 | 机器学习 / AI | 技术二面 | 2 |
| Redis 基础 | 基础八股 · 数据库 | 技术一面 | 1 |
1.5备考建议
| 优先级 | 易失分点 | 准备动作 |
|---|---|---|
| P0 | 非 hot100 的 hard 手撕写不出来就放弃表达 | 按「二分答案 + 贪心判定」等套路做专项训练;场上先把单调性与判定函数讲清楚,再主动请面试官给提示 |
| P0 | Agent 项目讲不出哪些是自己实现的 | 准备一张 Harness 调用链图与记忆模块的读写流程图,能说清每一步由谁触发、失败怎么处理 |
| P1 | AI 工具只会用、不会说 | 整理常用 AI Coding 工具的适用场景与套餐差异,准备一个「使用前后耗时对比」的具体例子 |
| P1 | 偏项目就完全放弃八股 | Redis 等基础仍会抽查,按「数据结构 → 过期与淘汰 → 缓存穿透/击穿/雪崩 → 持久化与高可用」整理一页 |
| P2 | 题意不清时闷头硬写 | 养成先复述题意与约束、确认边界再动手的习惯;存在多解时先讲清两种理解,再选一种实现 |
二、第 1 轮:技术一面
2.1面试形式与时长
| 轮次名称 | 技术一面 |
| 面试类型 | 技术面 |
| 时间 | 2026-10-13 上午 9 点多 |
| 时长 | 1 小时 |
| 本轮题量 | 6 题 |
2.2重点考查维度
- 项目经历 —— 本组 3 道题
- 算法与数据结构 —— 本组 2 道题
- 基础八股 —— 本组 1 道题
面试结束后约 10 分钟通知一面通过。所有问题围绕实习与项目展开,八股仅涉及 Redis。
看难题下的思路表达与临场调整,而不是非要写出完整代码;考察回溯模板的熟练度与去重细节;看是否真的自己实现过编排层,而不是只会调 API
2.3面试真题与参考答案
具体题干没有完整留存,只留下「二分 + 贪心」这个考点,按这一套路给出通用解法。
这类题通常是「二分答案 + 贪心判定」:
- 把「求最优值」转成「判定可行性」:给定一个值 x,能否在限制下完成。
- 二分搜索答案区间 [lo, hi],按判定结果收缩边界。
check(mid)用贪心实现,保证 O(n)。- 注意单调性前提与上下界取值,区间开闭要和判定条件一致。
def solve(a, k):
def check(x):
# 贪心:按容量 x 依次装填,看能否在 k 段内覆盖全部元素
cnt, cur = 1, 0
for v in a:
if cur + v <= x:
cur += v
else:
cnt += 1
cur = v
return cnt <= k
lo, hi = max(a), sum(a)
while lo < hi:
mid = (lo + hi) // 2
if check(mid):
hi = mid
else:
lo = mid + 1
return lo现场策略:写不出完整代码时,先把单调性、判定函数与复杂度讲清楚,再主动请面试官给提示。
「字符串排列」即输出字符串的全排列,典型回溯 + 剪枝。
def permutation(s):
s = sorted(s) # 排序后同层重复字符相邻
res, used = [], [False] * len(s)
def dfs(path):
if len(path) == len(s):
res.append("".join(path)); return
for i, ch in enumerate(s):
if used[i]:
continue
# 同层重复字符跳过,避免产生重复排列
if i > 0 and s[i] == s[i - 1] and not used[i - 1]:
continue
used[i] = True
path.append(ch)
dfs(path)
path.pop()
used[i] = False
dfs([])
return res要点:复杂度 O(n!),去重后为 O(n × 结果数),额外空间 O(n)。
动手前先问清「是否要求去重、是否按字典序输出」,条件不同实现与输出顺序都会变。
Harness 是模型与工具 / 环境之间的编排层,面试官想听你如何把「大模型 + 工具 + 状态」串起来,可以按四块讲:
- 工具层:工具注册与 schema 定义(参数校验、工具描述质量直接影响模型调对的概率),统一出入参结构。
- 循环控制:ReAct 式的 think → act → observe 循环,设置最大步数、超时与提前终止条件,避免死循环。
- 上下文与状态:多轮工具结果的裁剪与压缩(只保留必要字段),长结果落盘、按需回读。
- 稳定性与可观测:超时重试、幂等、异常兜底;每一步的输入输出都打日志,便于离线复现与评测。
讲的时候最好配一张自己画的调用链,说明每一步谁触发、失败怎么处理。
记忆模块要区分「短期」与「长期」:
- 长期:事实性信息抽成结构化 KV(用户偏好、关键结论),语义类内容写入向量库,按当前 query 召回 top-k 再拼进上下文。
再补三件事才算完整:
- 写入时机:什么时候写、写什么字段、如何合并同义或冲突信息。
- 召回策略:阈值过滤、时间衰减、rerank,避免召回噪音污染上下文。
- 评测:把「该记住的有没有记住、不该记的有没有混进来」做成可回归的用例集。
三个子问题连着答,顺序建议:
- 产出:一句话说清业务价值 + 你独立负责的部分 + 可量化的结果。
- 问题:挑一个真实、有排查过程的问题(现象 → 假设 → 验证 → 定位 → 修复),重点讲你的定位路径。
- 选型:给出对比维度(性能、开发成本、可维护性、团队熟悉度),说明为什么选 A 不选 B,以及现在回看会不会改。
凡是简历与口述里出现的名词都要能往下展开一层。
Agent / 应用类项目里的 Redis 一般围绕四块被问:
- 数据结构与场景:
String做计数与缓存、Hash存对象、ZSet做排行榜与延时队列、List/Stream做队列。 - 过期与淘汰:
EXPIRE/TTL、惰性删除 + 定期删除、maxmemory-policy各类淘汰策略的取舍。 - 缓存一致性:穿透(布隆过滤器 / 空值缓存)、击穿(互斥重建 / 逻辑过期)、雪崩(过期时间打散、多级缓存)。
- 持久化与高可用:RDB 与 AOF 的差异、主从 + 哨兵 / Cluster 的取舍。
结合自己项目里的键设计与失效策略来讲,比背条目更有说服力。
三、第 2 轮:技术二面
3.1面试形式与时长
| 轮次名称 | 技术二面 |
| 面试类型 | 技术面 |
| 时长 | 1 小时 |
| 本轮题量 | 5 题 |
3.2重点考查维度
- 机器学习 / AI —— 本组 3 道题
- 项目经历 —— 本组 1 道题
- 算法与数据结构 —— 本组 1 道题
先面谈后手撕,全程没有八股。面试结束后约 3 分钟通知二面通过。帖中把本轮日期标注为「10.30 左右」,与标题日期不一致,故此处不填具体日期。
看是否理解大模型应用的风险面与工程化防护手段;验证项目是否真跑起来,以及你能否用数据描述结果;看是否有成型的 AI 辅助开发流程
3.3面试真题与参考答案
可以按「输入 → 模型 → 工具 → 输出」四层讲:
- 输入层:Prompt 注入与越狱防护(系统提示与用户内容隔离、指令优先级、可疑内容过滤)、敏感信息脱敏。
- 模型层:输出内容审核与兜底话术、幻觉抑制(强制引用来源、结构化输出校验)。
- 工具层:工具调用做权限最小化与白名单,参数二次校验;涉及写操作时加二次确认或人工审批,防止模型被诱导执行危险动作。
- 输出层:日志留痕与审计、可回滚。
结合项目举一个你实际做过的防护点,比罗列风险更有说服力。
「落地」的关键词是可用的证据:
- 谁在用:真实用户量 / 调用量 / 使用频次。
- 效果:用指标说话(准确率、节省时长、人工介入率),并说明指标怎么测、基线是什么。
- 稳定性:在线可用性、失败率、平均响应时间。
- 迭代:上线后收到什么反馈、改了哪些。
项目还没上线就说明当前阶段(内测 / 灰度)、已验证的部分与下一步计划,不要夸大。
面试官在判断你是不是真的把 AI 编进了工作流,可以按环节讲:
- 需求与设计:用模型做方案对比、拆任务、写接口草稿。
- 编码:补全与整块生成、重构、单测生成、跨文件改动。
- 评审与排错:先让模型做一轮 review、给出报错的可疑点,再自己验证。
- 规则约束:项目级规则文件(约定技术栈与代码风格),上下文只投喂相关文件而不是整个仓库。
配一个具体例子:某个改动原本要多久、用工具后多久、返工点在哪里。
这题不是考谁买得多,而是看你有没有形成稳定的使用习惯:
- 说出实际在用的 1~3 家,以及各自擅长的场景(长上下文重构 / 代码补全 / Agent 式改动)。
- 说明选择理由:成本、额度、上下文长度、是否支持团队协作与规则文件。
- 说明组合方式:主力工具做日常开发,另一家处理长任务或做交叉验证。
没买过就如实说在用免费额度或自建方案,重点讲清你依赖它完成了什么。
先确认真实条件:是否要求结果去重(LC 349)还是保留出现次数(LC 350),数组是否已排序、规模多大。条件不同解法不同。
# 去重版:哈希集合
# 时间复杂度 O(m+n)
def intersection(nums1, nums2):
return list(set(nums1) & set(nums2))
# 保留出现次数版:哈希计数
# 时间复杂度 O(m+n),额外空间 O(min(m,n))
from collections import Counter
def intersect(nums1, nums2):
cnt = Counter(nums1)
res = []
for x in nums2:
if cnt.get(x, 0) > 0:
res.append(x)
cnt[x] -= 1
return res如果两数组已排序,可以用双指针做到 O(m+n) 且 O(1) 额外空间。
面试时先问清约束再动手,是最稳的做法。
备考阶段,我发现很多同学容易陷入「不知道从哪准备」的困境。后来我向学员推荐了一款叫求职精灵的 AI 工具,上面收录了大量真实面经,还能直接搜到目标岗位的面试官常问什么、评分标准是什么。用它做 AI 模拟面试也特别方便,输入公司和岗位,系统自动生成仿真题目并给出反馈,练完之后心里更有底。感兴趣的同学可以直接访问 https://finsight.work/ 体验。
总结收尾
最后真心建议大家在备考阶段用一下求职精灵,网址是 https://finsight.work/ 。它能查岗位JD、一键修改简历、刷15万+道真题题库,还有AI模拟面试功能,整个备考流程基本都能覆盖,已经有超过6万学员用过,效果有口皆碑。别等到面试前一天才开始准备,现在就去用起来。机会永远留给有准备的人,希望读到这篇文章的每一位同学都能拿到心仪的offer。