百度 AIGC 多模态智能体算法工程师一面:Agent 框架选型与手撕最大子数组乘积
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
一面
- 个人背景与实习经历
- 介绍实习
- 年级与实习起点
- Agent 宿主与框架选型
- 使用成熟产品当宿主还是自己搭框架
- 是否只依赖 AI Coding 工具完成实现
- 手撕:最大连续子数组乘积,额外空间 O(1)
- 明确题目:数组含正负数,求最大连续子数组乘积,额外空间 O(1)
- 如何处理负数导致最大值与最小值互换
- 如何用动态规划维护最大、最小状态
- 为什么两个状态可以一遍遍历完成
- 代码实现与样例验证
- 修复实现中的状态转移问题
- 如何把数组状态压缩到 O(1) 额外空间
- 反问团队业务与素材用途
- 团队主要负责哪些业务
- 生产的素材用于哪些 To B 或 To C 场景
- 实习时间与课程安排
- 大三是否有时间实习
- 课程与期末考试如何安排
- 工作城市偏好
- 反问后续面试流程
《参考解析》
-
最大连续子数组乘积的关键是「两个状态一起维护」:因为负数会让最大值翻成最小值、最小值翻成最大值,所以不能只记「以当前位置结尾的最大乘积」,要同时记
maxEnd和minEnd。转移时先用上一轮的maxEnd、minEnd和当前元素x三者比较:新的maxEnd = max(x, maxEnd * x, minEnd * x),新的minEnd = min(x, minEnd * x, maxEnd * x)——注意两边的式子必须用旧的值,实现时要么先存临时变量,要么一次算完再赋值,这就是很多人在这个题上写出 bug 的地方。答案在遍历过程中取maxEnd的历史最大值。 -
几个必答的追问:为什么两个状态就能一遍扫完——因为「以 i 结尾的最优解」只依赖「以 i-1 结尾的最优解」,子问题之间是链式的,天然满足动态规划的无后效性,所以不需要前缀和或二分之类的额外结构。
x本身单独参与比较是处理 0 的关键:遇到 0 时子数组必须断开,maxEnd与minEnd都归零或归 1 都行,但写成max(x, ...)的形式最不容易错。边界要主动说:数组全为 0、只有一个元素、正负交替(如[-2, 3, -4])、以及结果为负的情况(不能返回 1,要返回真实的最大乘积)。O(1) 额外空间这件事本身就是「滚动变量代替数组」——把dp[i]换成三个变量,这也是面试官要求 O(1) 时真正想听的表述。 -
Agent 宿主与框架选型怎么答:这题想听的是取舍标准。用成熟产品(如 Dify、Coze、扣子这类平台)当宿主,换来的是开箱可用的编排、知识库、观测与部署,代价是定制能力受限、模型与数据要过第三方、复杂工具链和权限模型不好改;自建框架换来的是完全的控制权和可私有化部署,代价是要自己把重试、并发、记忆、评测、可观测这些轮子补齐。合理的判断维度是:数据敏感度(能不能出内网)、流程复杂度(有没有人工审批、跨系统写操作)、迭代速度要求、以及团队有没有人力维护。稳妥的答法是「先用平台做验证,等流程稳定且出现平台撑不住的定制需求再逐步替换核心链路」,而不是非黑即白。
-
「是否只依赖 AI Coding 工具完成实现」怎么答:不要简单说「是」——那听起来像没有判断力。可以这样组织:用 AI Coding 提速的是样板代码、接口胶水、单元测试和重构,但有三件事必须自己把关——架构与边界划分、prompt 与工具描述这类语义设计、以及结果验证;并且要能说清自己怎么验证(先写测试或先定义验收样例,再让工具产出,最后手工核对关键路径)。如果能补一个具体例子——「它生成的某段状态转移有 bug,我是怎么通过某个用例定位出来的」——这题就从表态变成了能力证明。