面灵AI→

海康威视应用软件一面:01背包手撕与AI思考

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 手撕:餐馆有 n 个菜品,顾客有 m 块钱,给出每个菜品的成本和售价,计算 m 块钱能够实现的最大利润,菜品不能重复选择。
  2. 自我介绍。
  3. 项目问题:讲业务背景 + 难点。
  4. 开放性问题:AI 带给开发人员的影响是什么?AI 写的代码如何保证质量?
  5. 反问:对校招生的要求、业务方向、后续推进时间。

《参考解析》

01 背包手撕(本题是「成本—售价」变体):把预算 m 当背包容量,第 i 道菜的成本 cost[i] 当重量、利润 price[i] - cost[i] 当价值,每道菜最多选一次。两点容易翻车:一是「利润为负的菜不该选」——本题求最大利润,不是「必须花完 m」,所以负利润菜品直接跳过(这也自然由 DP 取 max 处理掉了);二是要区分「恰好装满」与「至多花费」,本题是后者,所以答案取 dp[m],初始化全 0 而不是负无穷。一维滚动数组的标准写法:

def max_profit(cost, price, m):
    # dp[j] = 预算 j 时的最大利润;至多花费,故初始化为 0
    dp = [0] * (m + 1)
    for c, p in zip(cost, price):
        profit = p - c
        if profit <= 0:          # 亏本或打平的菜品不选
            continue
        for j in range(m, c - 1, -1):   # 一维必须倒序,保证每件物品只用一次
            dp[j] = max(dp[j], dp[j - c] + profit)
    return dp[m]

复杂度是时间 O(n·m)、空间 O(m)。面试时要主动解释「为什么一维要倒序遍历」——正序会让同一道菜在本轮被重复使用,那就变成完全背包了;如果题目改成「每道菜可以点任意份」,就把内层改成正序。测试用例准备两组:一组常规(如 cost=[1,2,3], price=[3,5,6], m=3),一组边界(m=0、所有菜品都亏本、单个菜品成本恰好等于 m)。如果面试官要求输出具体选了哪些菜,就用二维 DP 或额外记录 choice 数组回溯。此外,如果数据规模是「m 很大(比如 10^9)而 n 很小」,要指出这是 NP-hard 的背包,得换成分支限界/折半枚举/整数规划,别硬套 O(n·m)。

项目讲业务背景与难点:面试官问这一题是想确认项目的真实性和你的贡献边界。推荐顺序:一句话业务价值(谁在用、解决什么问题)→ 系统构成与你负责的模块(画清边界,别把团队的功劳说成自己的)→ 一个真正的技术难点:现象(要有数据,如「峰值 2000 QPS 时 P99 从 80ms 涨到 1.2s」)→ 定位过程(看了什么指标、排除了哪些假设)→ 方案对比与取舍(为什么选 A,代价是什么)→ 结果(优化到多少,有没有引入新问题)→ 复盘(如果重做会怎么做)。提前准备 2~3 个难点,分别偏业务复杂度、性能、稳定性,让面试官挑。切忌只讲「用了什么框架」,要讲「为什么用、踩了什么坑」。

AI 对开发人员的影响:分「已经发生的」和「正在变化的」两层说更可信。已经发生的:编码环节的机械劳动被大幅压缩(样板代码、单测、格式转换、脚手架、SDK 调用示例),查文档与排错的入口从搜索引擎变成对话,新人的上手门槛下降;正在变化的:开发者的价值重心从「写得出来」转向「定义问题、拆解任务、判断方案、验收结果」,review 能力与系统设计能力变得比语法熟练度更重要,同时代码评审、测试、可观测性的地位上升(因为产出速度变快,瓶颈转移到了验证环节)。风险要一起说:AI 生成代码的隐蔽错误(看似合理但边界错、幻觉 API)、依赖与许可证风险、团队代码风格碎片化、以及新人跳过基础训练导致的基本功空心化。落到个人行动上,说明你怎么用(用它做初稿与重复劳动,关键链路自己做并把关)以及你把省下来的时间投到哪里。

AI 写的代码如何保证质量:给一套可落地的组合,按「越靠机器越可靠」排序。一是可执行的护栏:类型系统(TypeScript/严格模式)、lint 与格式化(ESLint/Prettier/Biome)、单测与集成测试、CI 门禁,把「不符合规范就进不来」变成硬约束。二是上下文约束:把项目规范写进仓库里的 AGENTS.md/rules 文件,给正反例与参照文件,让 AI 照抄既有实现而不是自由发挥。三是流程约束:要求 AI 先给方案与影响面再动手、改动尽量小且可回滚、改完自己跑测试与静态检查、输出变更说明,把审查成本前移。四是人的把关:边界与风险代码(权限、金额、并发、状态机、数据迁移)必须人工逐行审;对 AI 生成的关键逻辑强制补测试,用测试锁定行为。五是度量:跟踪 AI 代码的线上缺陷率/回滚率与审查意见密度,用数据决定哪些任务可以放手、哪些必须人工定稿。

反问问什么:这一题给了「对校招生的要求、业务方向、后续推进时间」三个方向,都是高分问题。补充几个值得问的:新人入职后的前三个月大概做什么、有没有导师制;团队的技术栈与迭代节奏(周迭代还是双周);代码评审与测试的实际执行力度;团队目前在解决的技术难题是什么。避免一上来就问薪资福利与加班,这类问题留到 HR 面或有 offer 之后。