拿下技术面上传简历

你在做一个离线批处理调度器:每天凌晨要在一台 128 核的机器上,从 N=2000 个待跑任务里挑一个子集执行,每个任务有 CPU 需求 w_i(1~200 的整数核)和业务收益 v_i,目标是总收益最大。需求要求最终输出被选中的任务清单,而不是只输出最优收益值,且整个求解要在 5 秒内完成。同事给的方案是标准 0/1 背包 DP。请说明你会怎么实现(状态定义、空间处理、方案还原),并回答:如果第二天任务数变成 200000、机器换成 10000 核的聚合池,同一套代码还能不能撑住,你会怎么改。

数据结构与算法动态规划与贪心5 年以上知识点 1 个

面试官在考什么

判断他是否清楚“只要最优值”和“要输出方案”对应两种不同的空间实现,以及在数据量级跳变时能否主动切换建模(换维/缩放/近似),而不是在原来的复杂度上硬扛。

背包问题

回答框架 · 前两步

  1. 0/1 背包标准做法:dp[i][j] 表示前 i 个任务、容量 j 的最大收益;一维滚动形式 dp[j] = max(dp[j], dp[j-w]+v),容量逆序遍历。
  2. 要还原方案必须有额外决策信息:二维表、每层决策位图或父指针;一维滚动数组原地覆盖之后无法回溯出合法方案。

还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题