华为2026.6.17机考选择题+编程题【速刷敲黑板】

下面进行华为2026年6月17日AI岗机考题的复盘和关键知识点(重点)深度剖析,笔者7月9日刷完选择题和2道算法题。选择题考到回归分析、机器学习和深度学习基础概念、梯度检查点、激活函数、NPU迁移部署、增量更新、向量检索、模型量化、MLE估计等知识点。编程题是机器学习和传统的数据结构与算法的考点,一个是大模型PP并行训练场景(基础模拟,评级中等)的题目(评级中等),一个是信号频域特征聚类(评级中等)。

说明:文章内选择题证明和论述部分的绿色字体是AI生成内容,红色字体是人工增添或重要修改内容。

目录

第十八题

代码题1(中等)

代码题2(中等)

选择题

用时30分钟

第十八题

向量检索、RAG检索增强式生成,正确答案ACD。

A:document文档的子模块是chunk,chunk可以是一个段落或者几个段落,一般有按照固定长度切分chunk还有使用语义进行切分两种模式,后者往往是更合适的切分方式,因为固定长度切分第一可能导致有效信息囊括不足(chunk分块偏小),第二可能导致混入过多其他信息(chunk不纯净),这直接导致模型在生成内容的时候答不对题,因为模型自己参考的教科书本身就是无关的。实现的时候直接读取段落间换行符或者标题间分隔符就可以。

保留overlap可以让模型适度的扩充本轮回答的素材库,但是overlap不能太低也不能太高,这个也是深度学习领域调参的经典设计:太低可能导致向量检索时按照相似度阈值匹配的语义相关的素材较少,回答比较干瘪;太高可能导致两个语义块内容相似度太高,参考材料冗余,有效信息较低,在输出的时候内容在信息上容易重复。

B:temperature设为0即为开启确定性采样,但并不能够确保检索到的文档或者语义块一定和用户问题相关,我理解成总体会更相关,但是还是需要"系安全带",通过rerank后处理或者语义分块预处理确保模型回答基于的素材库足够相关(纯净),同时会导致生成的内容在多样性方面下降。

C:因为检索的时候有温度随机采样设定,所以top5得到的匹配文档不一定是最匹配的,使用rerank进行精确的二次排序并且筛选更少更匹配的素材进入生成阶段。

D:强制加入语义chunk索引,可以减轻模型幻觉。

关于工业界选择Overlap比率,我了解到的情况是,一般选择15%作为调参起始点,然后使用结合命中率(Hit Rate)和生成内容多样性(Distinct-n)的网格搜索方法(Grid Search)在基线上调优,最终结果根据输入的向量素材库本身的语义chunk大小和内容分布高度相关。

  • 如果Chunk Size很小(如128 tokens):15%的重叠只有约19个token,太少了,根本兜不住跨块的指代消解(如"它"、"该方法"),此时网格搜索会建议你把Overlap提到25%~30%。
  • 如果Chunk Size很大(如1024 tokens):15%的重叠有153个token,足够把上一块的收尾总结全包进来,此时网格搜索可能会建议你降到8%~10%。

代码题1(中等)

模拟题目,用时10分钟,通过率100%

第2题-大模型训练流水线并行(PP)最优估计计算 - problem_ide - CodeFun2000

python 复制代码
def code1():
    l = input().split()
    if len(l) != 4:
        print("-1 -1")
    else:
        l = list(map(int, l))
        TL, SL, mb, N = l
        minimum_available_pp = 0
        for i in range(1, N + 1):
            if TL % i == 0 and TL // i <= SL:
                minimum_available_pp = i
                break
        if minimum_available_pp == 0:
            print("-1 -1")
        else:
            bubble_rate = (minimum_available_pp - 1) / (mb + minimum_available_pp - 1)
            print(minimum_available_pp, "{:.4f}".format(bubble_rate), sep=" ")

代码题2(中等)

K-Means机器学习无监督聚类算法+基础数学运算

55分钟,通过率10%

1小时15分钟,通过率80%

1小时20分钟,通过率100%

第3题-基于频域特征的轻量级传感器信号聚类系统 - problem_ide - CodeFun2000

python 复制代码
def code2():
    import math
    import copy

    # 输入处理
    N, L, K = map(int, input().split())
    data = []
    for i in range(N):
        data.append(list(map(float, input().split())))

    init_centers = list(map(int, input().split()))
    # 傅里叶变换构建特征向量
    feature = []
    for i in range(N):
        Xks = [[0, 0] for i in range(L // 2 - 1)]
        for j in range(1, L // 2):
            Xks[j - 1][0] = sum([math.cos(2 * math.pi * j * n / L) * data[i][n] for n in range(L)])
            Xks[j - 1][1] = -sum([math.sin(2 * math.pi * j * n / L) * data[i][n] for n in range(L)])
        amp = [(x[0] ** 2 + x[1] ** 2) for x in Xks]
        # 确保振幅相同时,reverse设置下频率低索引小的排前面
        inds = list(range(L // 2 - 1, 0, -1))
        # inds=list(range(1,L//2))
        inds.sort(key=lambda i: amp[i - 1], reverse=True)
        feature.append(inds[:3])

    # K-means聚类
    # 一定注意要深拷贝,否则会同步修改feature数据
    centers = [feature[ic][:] for ic in init_centers]
    for e in range(100):
        last_centers = copy.deepcopy(centers)
        clusters = {i: [] for i in range(K)}
        for n in range(N):
            dists = []
            min_id = 0
            for c in centers:
                dists.append(sum([(feature[n][k] - c[k]) ** 2 for k in range(3)]) ** 0.5)
                if dists[-1] < dists[min_id]:
                    min_id = len(dists) - 1
            clusters[min_id].append(n)
        # 更新中心
        for k, v in clusters.items():
            if len(v) > 0:
                for t in range(3):
                    centers[k][t] = round(sum([feature[ve][t] for ve in v]) / len(v))
                    """
                    centers[k][t]=sum([feature[ve][t] for ve in v])/len(v)
                    bias=centers[k][t]-int(centers[k][t])
                    if bias<0.5:
                        centers[k][t]=int(centers[k][t])
                    elif bias>0.5:
                        centers[k][t]=int(centers[k][t])+1
                    else:
                        if int(centers[k][t])%2==1:
                            centers[k][t]=int(centers[k][t])+1
                        else:
                            centers[k][t]=int(centers[k][t])
                        """
            else:
                # 保持不变
                pass
        if centers == last_centers:
            break

    # 输出处理
    # centers.sort(key=lambda x:10000*x[0]+100*x[1]+x[2])
    centers.sort()
    for i in range(K):
        print(" ".join([str(ce) for ce in centers[i]]))

注意点:(默认?)如果频率特征向量到多个聚类中心L2距离一样按照索引低的中心去归类(索引始终根据初始指定的顺序维护);按照振幅或者能量排序的时候,振幅相同,低频分量排前面,索引列表一开始就降序排列;centers初始化的时候一定要深拷贝处理feature的数据,不然后序更新中心,原始特征也同步更改,导致迭代和结果紊乱;输出排序处理直接sort即可。

关于优化:使用last_centers深拷贝centers进行循环跳出检测,缩短迭代步数。使用PyPy3语言,10个测试用例的程序运行时间可以缩短200-250ms左右。

相关推荐
OBiO20131 小时前
靶向脂肪组织的AAV如何选择启动子?
人工智能
accept 99%1 小时前
RAG从0到简单入门的一篇文章
人工智能
凌波粒1 小时前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法
Chengbei111 小时前
SoloXSS:一款现代化的自托管 XSS平台
人工智能·安全·web安全·网络安全·自动化·xss·安全架构
YHHLAI1 小时前
Agent 智能体开发实战 · 第五课:Mini-Cursor —— 手写 AI 编程 Agent 终极实战
人工智能
To_OC1 小时前
MCP 入门实战:写一个能读本地文件的极简服务
人工智能·agent·mcp
ujainu小1 小时前
帧率协议栈:13变量揭秘60Hz性能分析
华为·harmonyos
火山引擎开发者社区1 小时前
3 倍于 VectorDBBench 榜首,火山 Milvus 如何把向量检索拉到新高度
人工智能
Hesionberger1 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#