大厂真题 / 华为

华为 7.1 笔试真题 - AI岗

本场考试概述

考试时间:2026年7月1日 考试岗位:AI岗 难度评级:中等

考点分析

  • 选择题(20道):信息论、线性代数、概率论、参数估计、线性回归、逻辑回归、PCA、贝叶斯、类别不平衡、滑动窗口注意力、BERT架构、向量检索ANN、Word2Vec、学习率调度
  • 第一题:加权欧氏距离 + 双关键字排序取前 K(难度简单)
  • 第二题:softmax + 交叉熵/熵 + 0/1 背包(难度中等)

建议策略

  1. 选择题以机器学习与数学基础概念为主,先快速扫一遍稳拿分,多选题注意逐项排除
  2. 第一题算出每个商品的加权距离,用二元组排序即可,注意累加可能超 32 位整型
  3. 第二题先按数值稳定写法算好每个 token 的交叉熵与熵,再以影响值为重量、交叉熵为价值跑 0/1 背包

选择题(20道)

一、单选题

1、用于衡量两个概率分布向量相似度的是?

A. 欧氏距离   B. KL 散度   C. 余弦相似度   D. 曼哈顿距离

答案:B

解析:KL 散度专门用于衡量两个概率分布之间的差异,是分布相似度的标准度量。欧氏距离、曼哈顿距离、余弦相似度衡量的是一般向量的几何相似度,不针对概率分布归一化后的信息差异。


2、下列哪一项最接近经典线性回归中的外生性要求?

A. 所有特征都必须服从标准正态分布 B. 样本数必须等于特征数 C. 误差项的条件期望为零 D. 特征必须两两独立

答案:C

解析:外生性即给定解释变量后误差项均值为零,保证误差与特征无系统性相关,是最小二乘无偏的核心假设。


3、采用滑动窗口注意力部署一个支持 128K 上下文的文本分析模型时,其关键逻辑是?

A. 将历史 Token 的 KV 压缩到一个向量 B. 对每个 KV 进行 INT4 量化,减少显存占用 C. 使用稀疏注意力,随机丢弃 N% 的 KV D. 保留最近 N 个 Token 的 KV,丢弃老的 KV

答案:D

解析:滑动窗口注意力让每个位置只关注最近固定长度窗口内的 Token,因此只需保留最近 $N$ 个 Token 的 KV 缓存、丢弃更早的,从而把显存占用限制为常数。


4、给定三个向量 $a$、$b$、$c$,分别计算它们之间的余弦相似度和内积,关于排序哪项正确?

A. 余弦相似度与内积排序相同 B. 余弦相似度与内积排序相反 C. 余弦相似度排序相同,内积因模长差异排序不同 D. 两者排序均相同

答案:C

解析:余弦相似度消除了模长影响,而内积受模长影响。因此向量模长不同时两者排序可能不一致。


5、为了检验并尽量避免”近似泄露”,下列方法最有效的是:

A. 看模型答对率是否异常高 B. 用语义向量检索/MinHash 等近似重复检测 C. 检查训练集是否出现过评测集的文件名 D. 纯完全字符串匹配去重

答案:B

解析:同义改写、轻微编辑不会被精确字符串匹配捕获,需要语义向量检索或 MinHash 等近似重复检测才能发现语义/字面相近的样本。


6、若随机变量 $X$ 在区间 $[0,4]$ 上服从均匀分布,则 $X$ 落在 $[1,3]$ 内的概率以及 $X$ 的期望分别为:

A. $1/2$,$2$ B. $1/2$,$4$ C. $3/4$,$2$ D. $1/4$,$2$

答案:A

解析:均匀分布落入子区间的概率等于长度比 $(3-1)/(4-0)=1/2$;期望为区间中点 $(0+4)/2=2$。


7、BERT 属于以下哪种主架构?

A. Encoder-Decoder   B. Decoder-only   C. Prefix Decoder   D. Encoder-only

答案:D

解析:BERT 仅使用 Transformer 的编码器堆叠,通过双向自注意力做掩码语言建模,属于 Encoder-only。


8、在样本严重不均衡(正类 1%,负类 99%)的场景下,以下哪种处理最有效?

A. 只保留正类样本训练 B. 对正类过采样(如 SMOTE)或对负类欠采样,配合 F1 或 AUC-PR 评估 C. 直接训练,以准确率为优化目标 D. 将学习率调大以让模型更快收敛到正类

答案:B

解析:类别不平衡下应通过过采样/欠采样平衡分布,并改用对少数类敏感的 F1、AUC-PR 等指标评估。


9、已知某数据集服从正态分布,均值 $\mu=50$,标准差 $\sigma=10$。若某数据的 Z-score 为 $2.5$,则原始值是?

A. 70   B. 75   C. 80   D. 65

答案:B

解析:由 $x = \mu + z \cdot \sigma = 50 + 2.5 \times 10 = 75$。


10、逻辑回归为什么通常不使用 MSE 作为损失函数?

A. 会导致梯度消失且函数是非凸的 B. 不支持梯度下降 C. 无法处理 0-1 标签 D. 计算量太大

答案:A

解析:把 Sigmoid 输出代入 MSE 后损失关于参数非凸,存在多个局部极小;且饱和区导数极小会造成梯度消失。因此逻辑回归用交叉熵,其损失是凸的且梯度形式良好。


11、下列哪个性质是线性变换必须满足的基本条件?

A. $T(0) \neq 0$ B. $T(x) = x^2$ C. $T(u+v) = T(u) + T(v)$ D. $T(x) = e^x$

答案:C

解析:线性变换需满足可加性 $T(u+v) = T(u) + T(v)$ 与齐次性 $T(\alpha u) = \alpha T(u)$,C 正是可加性。


12、数据来自正态分布 $N(\mu, \sigma^2)$ 且 $\mu$ 已知,MLE 估计方差时使用:

A. 样本极差 B. 分母为 $n-1$ 的样本方差 C. 样本中位数 D. 分母为 $n$ 的样本方差

答案:D

解析:已知 $\mu$ 时对数似然对 $\sigma^2$ 求导,得 MLE 为 $\frac{1}{n}\sum(x_i - \mu)^2$,分母为 $n$。分母 $n-1$ 是无偏修正(未知 $\mu$ 时用样本均值才需要),并非 MLE。


13、测量误差服从均匀分布 $U[0, \theta]$,观测样本为 ${0.3, 0.7, 1.2, 0.5}$。则 $\theta$ 的 MLE 估计是?

A. 1.5   B. 0.5   C. 1.2   D. 0.8

答案:C

解析:$U[0,\theta]$ 的似然为 $(1/\theta)^n$,前提是所有样本满足 $x_i \leq \theta$。似然随 $\theta$ 增大而减小,故取满足约束的最小 $\theta$,即 $\max(x_i) = 1.2$。


14、在将文本特征转换为向量时,Word2Vec 相比于 One-hot 编码的主要优势是?

A. 能够处理 OOV(未登录词) B. 能够捕捉词语间的语义相似度 C. 计算速度更快 D. 向量维度更高

答案:B

解析:Word2Vec 通过上下文学习得到低维稠密向量,语义相近的词在向量空间中距离更近。One-hot 各词正交、无法反映语义。


15、PCA 对特征的尺度非常敏感。在使用 PCA 降维前,通常需要对数据进行什么预处理?

A. 标准化(均值为 0,方差为 1) B. 对数变换 C. 二值化 D. 归一化(缩放到 $[0,1]$)

答案:A

解析:PCA 基于协方差矩阵,量纲大的特征方差天然更大,会主导主成分方向。标准化使各特征均值 0、方差 1,消除量纲影响,是 PCA 前的标准做法。


二、多选题

16、以下哪些是贝叶斯定理在 AI 与机器学习中的直接应用?

A. $L_2$ 正则化等价于高斯先验的 MAP 估计 B. 贝叶斯优化用于超参数搜索 C. 支持向量机的间隔最大化 D. 朴素贝叶斯分类器

答案:A, B, D

解析

  • A:加高斯先验做 MAP 估计,对数先验项恰好是 $L_2$ 正则
  • B:贝叶斯优化用高斯过程对目标函数建立后验,本质是贝叶斯推断
  • C:SVM 间隔最大化来自凸优化,与贝叶斯定理无关
  • D:朴素贝叶斯分类器直接由贝叶斯定理推导

17、关于向量检索中的近似最近邻(ANN)算法,以下哪些描述正确?

A. IVF 搜索时只查询查询向量所在的一个聚类,召回率与聚类数量成反比 B. HNSW 基于可导航小世界图,ef_construction 越大索引质量越高但构建越慢 C. HNSW 搜索参数 ef 越大,召回率越高但查询延迟也越高 D. 乘积量化(PQ)将向量分解为多个子空间独立量化,可大幅降低内存但引入量化误差

答案:B, C, D

解析

  • A 错误:IVF 搜索时会探查 nprobe 个最近聚类而非只查一个
  • B 正确:ef_construction 越大候选越充分、索引质量越高
  • C 正确:ef 越大候选集越大,召回率与延迟同时增加
  • D 正确:PQ 切分子空间分别量化以压缩内存,代价是量化误差

18、在构建可重复、可审计的训练流水线时,下列哪些做法应作为工程规范?

A. 对训练数据记录样本唯一 ID 与版本号,把数据切分策略写入元数据 B. 只记录最终模型权重,中间 checkpoint 仅保留摘要 C. 固定所有随机源并记录 seed,但允许启用 cuDNN 非确定性算法 D. 每次训练开始时记录完整环境快照并把依赖哈希存入元数据

答案:A, D

解析

  • A 正确:数据唯一 ID + 版本号 + 切分策略入元数据,是可追溯基础
  • B 错误:不保留完整 checkpoint 无法从中间状态精确恢复
  • C 错误:固定 seed 却启用非确定性算法会引入不可复现随机性
  • D 正确:完整环境快照与依赖哈希保证跨机复现

19、$A$ 是 $n \times n$ 实对称矩阵,$I$ 为单位矩阵。下列哪些性质必定正确?

A. 存在正交矩阵 $P$,使 $P^TAP$ 为对角矩阵 B. 若 $A^k = 0$ 对某正整数 $k$ 成立,则 $A$ 必为零矩阵 C. $A$ 的秩等于其非零特征值个数(重根按重数计) D. 矩阵 $e^A$ 总是正定矩阵

答案:A, B, C, D

解析

  • A:实对称矩阵必可正交对角化
  • B:$A^k = 0$ 得特征值 $\lambda^k = 0$,故所有特征值为 0,实对称矩阵可对角化所以 $A = 0$
  • C:可对角化矩阵的秩等于非零特征值个数
  • D:$e^A$ 的特征值为 $e^{\lambda_i} > 0$,且 $e^A$ 仍对称,故恒正定

20、关于学习率调度,以下策略合理的有?

A. 预热:训练初期使用较小学习率,逐渐增加到设定值 B. Step Decay:每隔几个 Epoch 将学习率乘以衰减因子 C. 余弦退火:学习率按余弦曲线周期性变化 D. 指数衰减:随迭代次数指数级降低学习率

答案:A, B, C, D

解析:四者都是标准的学习率调度策略。Warmup 稳定早期训练;Step Decay 阶梯式衰减;余弦退火平滑下降配合热重启;指数衰减平滑降低学习率。


第 1 题:智能选品

题目描述

在个性化推荐系统中,给定目标用户的 $D$ 维特征向量 $T$ 和特征权重向量 $W$,以及 $N$ 个备选商品的特征向量,计算每个商品与目标用户之间的加权欧氏距离平方,返回距离最近的 $K$ 个商品 ID。

加权距离公式:$\text{dist}(p) = \sum_{d=1}^{D} W_d \cdot (T_d - P_d)^2$

排序规则:距离越小越优先;距离相同按商品 ID 升序。

输入格式:第一行 $N, D, K$;第二行 $D$ 个权重;第三行目标用户向量;接下来 $N$ 行每行第一个数为商品 ID,后接 $D$ 个特征值。

样例

输入

3 2 2
100 1
10 10
101 10 20
102 12 10
103 10 10

输出

103 101

输入

4 3 3
1 1 1
0 0 0
1 3 0 0
5 0 4 0
2 0 0 3
9 3 4 0

输出

1 2 5

思路分析

第一步:理解加权距离

加权欧氏距离平方就是对每个维度的差值平方乘以该维度权重再累加。权重越大的维度对总距离影响越大——相当于用户越看重的特征,差异的”惩罚”越重。

第二步:排序策略

把每个商品记为二元组 $(\text{dist}, \text{id})$,按字典序排序天然满足”先按距离升序、距离相同按 ID 升序”的要求,取前 $K$ 个输出即可。

第三步:注意溢出

单维最大差值平方乘权重可达 $10^9$ 量级,$D$ 维累加可超 32 位整型上限,Python 无此问题但其他语言需用 64 位整型。

题解代码

import sys
input = sys.stdin.readline

def solve():
    N, D, K = map(int, input().split())
    W = list(map(int, input().split()))
    T = list(map(int, input().split()))
    arr = []
    for _ in range(N):
        row = list(map(int, input().split()))
        iid = row[0]
        score = 0
        for j in range(D):
            diff = T[j] - row[1 + j]
            score += W[j] * diff * diff
        arr.append((score, iid))
    arr.sort()
    print(' '.join(str(arr[k][1]) for k in range(K)))

solve()

复杂度分析

时间复杂度:$O(ND + N \log N)$,计算全部距离 $O(ND)$,排序 $O(N \log N)$。 空间复杂度:$O(N)$,存储 $N$ 个二元组。


第 2 题:Certainty Forcing 训练损失计算

题目描述

给定 $N$ 个 token,词表大小 $V$,每个 token 有 logits 向量 $z$、正确标签 $y$、稳定性影响值 $c$。需要:

  1. 对每个 token 计算 softmax 概率,得到基础交叉熵 $\text{CE}_i = -\log p_i[y_i]$ 和预测分布熵 $H_i = -\sum_j p_j \log p_j$
  2. 在总稳定性影响不超过上限 $B$ 的约束下,选择一部分 token 使其交叉熵之和最大(0/1 背包)
  3. 最终总损失 = 基础损失之和 + $\lambda \times$ 被选 token 的熵之和

对数一律使用自然对数,结果保留两位小数。

样例

输入

4 4 4 0.80
3.00 1.00 0.00 -1.00 0 2
0.00 1.00 3.00 0.00 2 2
1.00 1.00 1.00 1.00 1 3
2.00 0.00 1.00 2.00 3 1

输出

4.75

输入

3 3 3 0.50
2.00 1.00 0.00 0 2
0.00 2.00 1.00 1 1
1.00 1.00 1.00 2 2

输出

2.88

思路分析

第一步:数值稳定的 softmax 与交叉熵

直接对 logits 取指数可能上溢,先减去每个 token 的最大 logit 值 $m$ 再取指数。交叉熵可以化简为 $\text{CE}i = -(z{y_i} - m) + \log(\sum e^{z_j - m})$,避免先算概率再取对数的精度损失。

第二步:分布熵的计算

熵看的是整个词表的概率分布:$H_i = -\sum_j p_j \log p_j$。这里 $p_j = e^{z_j - m} / \sum e^{z_k - m}$。

第三步:0/1 背包建模

基础损失 $\sum \text{CE}_i$ 恒定不变,增强项只由被选集合决定。令价值 = 交叉熵、重量 = 影响值、容量 = $B$,”选出交叉熵之和最大的合法子集”就是标准 0/1 背包。关键是求出最优子集后,需要同步搬运该子集对应的熵之和——在 DP 更新价值时,同步更新一个附属数组 $g$ 记录对应的熵之和。

第四步:最终答案

$\text{total} = \text{base} + \lambda \cdot g[B]$,四舍五入保留两位小数。

题解代码

import sys
import math
input = sys.stdin.readline

def solve():
    first = input().split()
    N = int(first[0]); V = int(first[1]); B = int(first[2]); lam = float(first[3])
    base = 0.0
    items = []
    for _ in range(N):
        row = input().split()
        z = [float(row[j]) for j in range(V)]
        y = int(row[V]); c = int(row[V + 1])
        m = max(z)
        exps = [math.exp(v - m) for v in z]
        s = sum(exps)
        ce = -(z[y] - m) + math.log(s)
        H = 0.0
        for e in exps:
            p = e / s
            if p > 0.0:
                H -= p * math.log(p)
        base += ce
        items.append((ce, c, H))
    # 0/1 背包:容量 B,重量 c,价值 ce,同步搬运熵
    f = [0.0] * (B + 1)
    g = [0.0] * (B + 1)
    for ce, c, H in items:
        for b in range(B, c - 1, -1):
            cand = f[b - c] + ce
            if cand > f[b]:
                f[b] = cand
                g[b] = g[b - c] + H
    total = base + lam * g[B]
    print(f"{total:.2f}")

solve()

复杂度分析

时间复杂度:$O(NV + NB)$,softmax 与熵 $O(NV)$,背包 $O(NB)$。 空间复杂度:$O(B + NV)$。


小结

  • 选择题覆盖面广,数学基础(信息论、线代、概率、参数估计)和 ML/DL 概念各占一半,多选题需逐项排除
  • 第一题是经典的加权距离计算 + 排序取 Top-K,难度简单,注意大整数累加即可
  • 第二题融合了数值计算(softmax + 交叉熵 + 熵)和组合优化(0/1 背包),核心技巧是在 DP 更新价值的同时同步搬运附属信息(熵之和)