大厂真题 / 华为
华为 6.24 笔试真题 - AI岗
本场考试概述
考试时间:2026年6月24日 考试岗位:AI岗(AI算法工程师、AI应用开发工程师、AI数据科学工程师等) 难度评级:中等偏上
考点分析:
- 选择题(20 道):大模型(Beam Search、RAG、注意力机制、Flash Decoding)、深度学习(激活函数、RNN/LSTM、Transformer)、数学基础(方差、PCA、几何分布、线性代数)
- 第一题:动态旋转位置编码(RoPE)——大模型位置编码 + 公式模拟(难度中等)
- 第二题:最优分段常数量化——区间 DP + 决策单调性分治优化(难度困难)
建议策略:
- 选择题以大模型与深度学习基础概念为主,先快速扫一遍稳拿分
- 第一题严格按 NTK-aware RoPE 的三步公式逐对模拟即可,注意全程用 float64 与定点输出舍入
- 第二题先写 $O(K \cdot N^2)$ 朴素区间 DP 拿部分分,再用决策单调性分治优化到 $O(K \cdot N \cdot \log N)$ 拿满分
选择题(20 道)
一、单选题
1. Beam Search 的主要作用是?
A. 搜索最优生成路径 B. 减少生成时间 C. 增加多样性 D. 随机采样
答案:A 考点:大模型—生成策略 解析:Beam Search 维护多条候选路径按累积概率择优扩展,逼近全局最优生成序列。它牺牲速度换质量,不减少时间也不增加多样性。
2. 以下哪项不是 Embedding 在 RAG 中的核心作用?
A. 将查询与文档映射到同一语义空间 B. 压缩文档存储空间,减少磁盘占用 C. 通过余弦相似度计算语义相关性 D. 支持跨语言检索
答案:B 考点:大模型—RAG 解析:Embedding 向量本身还增加了额外存储开销,压缩存储不是其核心作用。
3. 关于 Sigmoid 激活函数,下列说法错误的是?
A. 平滑可导,便于反向传播 B. 易出现梯度消失 C. 输出均值为 0,有利于加快收敛 D. 输出范围 $(0,1)$,可用于二分类输出层
答案:C 考点:深度学习—激活函数 解析:Sigmoid 输出范围 $(0,1)$,均值约 $0.5$ 而非 $0$,非零中心会使梯度更新呈锯齿状。
4. 多模态对齐中,对比损失与匹配损失的目标差异?
A. 对比损失只优化正样本对 B. 两者完全相同 C. 对比损失拉近正样本对、推远负样本对;匹配损失仅优化二分类边界 D. 对比损失需大规模负采样,匹配损失只需 1 个负样本
答案:C 考点:大模型—多模态对齐 解析:对比损失(InfoNCE)在嵌入空间中建模样本间相对距离;匹配损失(ITM)是”是否匹配”的二分类,不关注负样本之间的距离。
5. 自注意力机制中 Q、K、V 通过什么方式得到?
A. 循环神经网络生成 B. 输入向量与三个不同权重矩阵相乘 C. 随机初始化后不变 D. 直接从输入复制
答案:B 考点:深度学习—Transformer 解析:$Q = XW_Q$,$K = XW_K$,$V = XW_V$,三个可学习的权重矩阵在训练中更新。
6. 关于 Softmax 函数的输出特性,正确的是?
A. 所有输出之和等于 1 B. 输出值可能为负 C. 同一输入每次输出不同 D. 输出与输入成线性关系
答案:A 考点:机器学习—逻辑回归 解析:Softmax 将实数归一化为概率分布,输出非负且和为 1。
7. Transformer 中自注意力的主要作用?
A. 降维 B. 生成词嵌入 C. 捕获长距离依赖 D. 映射到固定长度向量
答案:C 考点:深度学习—Transformer 解析:自注意力让每个位置直接与全序列交互,高效捕获长距离依赖。
8. RNN 的主要特点是?
A. 处理序列数据 B. 以上都是 C. 权重共享 D. 具有记忆能力
答案:B 考点:深度学习—RNN 解析:RNN 通过循环结构处理序列(A),各时间步共享权重(C),隐藏状态保留历史信息(D),三者皆为其特点。
9. $\text{Var}(X) = 4$,则 $\text{Var}(2X + 3)$ 的值是?
A. $16$ B. $19$ C. $11$ D. $8$
答案:A 考点:数学—概率 解析:$\text{Var}(aX+b) = a^2 \text{Var}(X) = 4 \times 4 = 16$。
10. PCA 降维,特征值总和为 100,前 5 个特征值为 35, 25, 15, 10, 8,累计贡献率 $\geq 90\%$ 最少保留几个主成分?
A. 3 个 B. 4 个 C. 2 个 D. 5 个
答案:D 考点:机器学习—PCA 解析:累计贡献率:35%, 60%, 75%, 85%, 93%。保留 5 个才达到 $\geq 90\%$。
11. LSTM 的主要目的是解决什么问题?
A. 计算无法并行 B. 过拟合 C. 长距离依赖下的梯度消失或爆炸 D. 输入特征降维
答案:C 考点:深度学习—LSTM 解析:LSTM 通过门控机制控制信息流与梯度通路,缓解长序列梯度消失/爆炸。
12. $n$ 个独立同分布的几何分布随机变量之和服从什么分布?
A. 几何分布 B. 正态分布 C. 泊松分布 D. 负二项分布
答案:D 考点:数学—概率分布 解析:几何分布刻画”首次成功所需试验次数”,$n$ 个之和即”第 $n$ 次成功所需试验次数”,为负二项分布。
13. Flash Decoding 针对 LLM 推理哪个阶段的优化?
A. Decode B. Embedding C. Tokenization D. Prefill
答案:A 考点:大模型—推理优化 解析:Flash Decoding 对长上下文 KV 沿序列维度切分并行计算注意力,专门加速 Decode 阶段。
14. ReLU 相比 Sigmoid 的主要优势不包括?
A. 缓解梯度消失 B. 计算速度更快 C. 稀疏激活 D. 输出以零为中心
答案:D 考点:深度学习—激活函数 解析:ReLU 输出恒非负,不是零中心,这反而是它的缺点。
15. Multi-Head Attention 参数量和 FLOPs?
A. 参数量 $3d^2 + d^2$,FLOPs 与序列长度线性 B. 参数量与序列长度相关 C. 参数量 $4d^2$,FLOPs 主要项 $O(n^2 d^2)$ D. 参数量 $4d^2$(忽略 bias),FLOPs 中与序列长度相关的主要项为 $O(n^2 d)$
答案:D 考点:深度学习—Transformer 解析:Q/K/V 三个投影各 $d^2$,输出投影 $d^2$,共 $4d^2$,与 $n$ 无关。FLOPs 含 $O(nd^2)$ 投影和 $O(n^2 d)$ 注意力计算,后者是高阶主项。
二、多选题
16. 深层网络中倾向使用 ReLU 而不是 Sigmoid 的原因?
A. Sigmoid 两端饱和导致梯度消失 B. Sigmoid 输出非零中心,梯度更新锯齿状 C. ReLU 计算涉及指数运算,比 Sigmoid 高效 D. ReLU 正区间导数恒为 1,利于梯度回传
答案:A, B, D 考点:深度学习—激活函数 解析:C 说反了,含指数运算的是 Sigmoid。
17. 基于 K 近邻关系归组的常见挑战?
A. 对异常点和噪声敏感 B. 大规模数据下近邻搜索开销高 C. 高维空间中近邻关系不稳定 D. 不同 K 取值导致结果差异大
答案:A, B, C, D 考点:机器学习—KNN 解析:四项都是 KNN 类方法的已知挑战。
18. 反向传播算法的优势包括?
A. 高效计算梯度 B. 实现简单 C. 适用于深度网络 D. 计算复杂度低
答案:A, C, D 考点:深度学习—反向传播 解析:反向传播利用链式法则复用中间结果,计算量与前向传播同阶。B”实现简单”不是其相对优势。
19. 哪些矩阵一定可逆?
A. 单位矩阵 B. 满秩方阵 C. 零矩阵 D. 行列式不为 0 的方阵
答案:A, B, D 考点:数学—线性代数 解析:零矩阵行列式为 0、秩为 0,不可逆。
20. 哪些情况可能导致模型对齐失效输出有害内容?
A. RLHF 数据质量不足 B. Temperature 设置过高 C. 训练数据含大量有害言论 D. 攻击者使用越狱提示词
答案:A, B, C, D 考点:大模型—对齐安全 解析:四种情形都可能导致有害输出。
第 1 题:动态旋转位置编码
题目描述
实现 Dynamic NTK-aware Scaled RoPE:根据当前序列长度 $T$ 动态调整基频,对位置 $m$ 处的向量逐对施加二维旋转。
- 动态缩放因子:$s = \max(1, T/L)$,其中 $L$ 为原始预训练长度
- 基频变换:$\text{base}’ = b \cdot s^{D/(D-2)}$
- 第 $i$ 对维度的旋转角:$\theta_i = m \cdot \text{base}’^{-2i/D}$
- 旋转变换:$x’{2i} = x{2i} \cos\theta_i - x_{2i+1} \sin\theta_i$,$x’{2i+1} = x{2i} \sin\theta_i + x_{2i+1} \cos\theta_i$
输出保留 4 位小数。
样例
输入
368 276 16 1450.9560044215173 209
-1.8728 1.3494 1.2030 -0.5053 -1.0223 -0.4466 1.5474 0.0967 0.0820 -2.1588 0.9543 0.0011 -0.0810 0.4860 -0.0258 0.2101
输出
-1.1873 -1.9795 0.3002 -1.2698 -1.0961 -0.2079 1.3933 -0.6801 -2.1600 0.0418 -0.2163 0.9295 -0.3734 0.3215 -0.0806 0.1957
输入
20 10 16 100.0 12
1.0 0.0 -1.0 0.5 0.3 -0.2 1.0 0.0 -1.0 0.5 0.3 -0.2 1.0 0.0 -1.0 0.5
输出
0.8439 -0.5366 -0.9001 0.6631 -0.2941 0.2085 -0.0147 0.9999 -1.0526 -0.3769 0.3549 -0.0634 0.9781 0.2080 -1.0476 0.3907
思路分析
第一步:理解 NTK-aware RoPE
标准 RoPE 用固定基频 $b = 10000$ 对不同维度对赋予不同频率的旋转。当推理序列超过预训练长度时,需要动态内插:通过放大基频来拉伸低频分量的波长,使更长上下文中仍能区分相对位置。
第二步:三步公式直接模拟
- 计算缩放因子 $s$(仅当 $T > L$ 时放大)
- 计算新基频 $\text{base}’ = b \cdot s^{D/(D-2)}$
- 对 $D/2$ 对维度依次计算旋转角 $\theta_i$ 并做二维旋转
第三步:精度注意
全程使用 float64,输出统一 4 位小数,注意 -0.0000 要输出为 0.0000。
题解代码
import math
first = input().split()
T = int(first[0]); L = int(first[1]); D = int(first[2])
b = float(first[3]); m = int(first[4])
x = list(map(float, input().split()))
s = max(1.0, T / L)
base = b * s ** (D / (D - 2))
out = [0.0] * D
for i in range(D // 2):
theta = m * base ** (-2.0 * i / D)
c = math.cos(theta)
sn = math.sin(theta)
p = 2 * i
out[p] = x[p] * c - x[p + 1] * sn
out[p + 1] = x[p] * sn + x[p + 1] * c
def fmt(v):
t = f"{v:.4f}"
return "0.0000" if t == "-0.0000" else t
print(" ".join(fmt(v) for v in out))
复杂度分析
时间复杂度:$O(D)$,遍历 $D/2$ 对维度。 空间复杂度:$O(D)$。
第 2 题:最优分段常数量化
题目描述
给定已排序的 $N$ 个整数序列,将其划分为至多 $K$ 个连续区间。每个区间用其下中位数(长度为偶数时取第 $\lfloor(\text{len}+1)/2\rfloor$ 个数)作为代表值,区间误差为所有数到代表值的绝对误差之和。求最小总误差。
样例
输入
3 1
1 2 3
输出
2
输入
5 2
1 2 10 11 12
输出
3
思路分析
第一步:定义区间代价
数据已排序,区间 $[l, r]$ 的下中位数位于下标 $\lfloor(l+r)/2\rfloor$,用前缀和可以 $O(1)$ 计算区间内所有数到中位数的绝对误差之和。
第二步:区间 DP 状态设计
设 $f[k][i]$ 为把前 $i$ 个数划分成 $k$ 段的最小总代价:
\[f[k][i] = \min_{j < i} \left( f[k-1][j] + \text{cost}(j+1, i) \right)\]朴素实现是 $O(K \cdot N^2)$,$N$ 较大时会超时。
第三步:决策单调性优化
代价函数 $\text{cost}(l, r)$ 满足四边形不等式,因此对固定的 $k$,最优切点随 $i$ 单调不减。利用分治:先求中点的最优切点,再左右两半各在缩小后的候选区间内搜索,单层从 $O(N^2)$ 降到 $O(N \log N)$。
第四步:多分段只减不增
多分一段不会增加总代价,最终取 $f[K][N]$ 即可。
题解代码
import sys
sys.setrecursionlimit(1000000)
def main():
N, K = map(int, input().split())
a = list(map(int, input().split()))
pre = [0] * (N + 1)
for i in range(1, N + 1):
pre[i] = pre[i - 1] + a[i - 1]
def cost(l, r):
mid = (l + r) // 2
rep = a[mid - 1]
return rep * (mid - l + 1) - (pre[mid] - pre[l - 1]) + (pre[r] - pre[mid]) - rep * (r - mid)
K_use = min(K, N)
INF = float("inf")
f = [INF] * (N + 1)
for i in range(1, N + 1):
f[i] = cost(1, i)
for k in range(2, K_use + 1):
g = [INF] * (N + 1)
def solve(iL, iR, jL, jR):
if iL > iR:
return
mid = (iL + iR) // 2
best, bestj = INF, max(jL, k - 1)
lo = max(jL, k - 1)
hi = min(jR, mid - 1)
for j in range(lo, hi + 1):
v = f[j] + cost(j + 1, mid)
if v < best:
best, bestj = v, j
g[mid] = best
solve(iL, mid - 1, jL, bestj)
solve(mid + 1, iR, bestj, jR)
solve(k, N, k - 1, N - 1)
f = g
print(f[N])
main()
复杂度分析
时间复杂度:$O(K \cdot N \cdot \log N)$,每层分治 $O(N \log N)$,共 $K$ 层。 空间复杂度:$O(N)$,前缀和加滚动 DP 数组。
小结
- 选择题覆盖面广,重点考察了 Beam Search、RAG、Sigmoid 缺陷、对比损失/匹配损失区别、Flash Decoding 适用阶段、MHA 参数量/FLOPs 等高频知识点
- 第一题是公式模拟题,核心是理解 NTK-aware RoPE 的三步变换(动态缩放 → 基频变换 → 逐对旋转),难度在于精度控制
- 第二题是本场压轴难题,朴素 $O(K \cdot N^2)$ 区间 DP 可拿部分分,满分需利用代价函数的四边形不等式性质进行决策单调性分治优化