Citadel 软件工程师面试实录 2026:真实面经完整复盘
Citadel面试软件工程师面试VO面试真实面经算法题System Design

Citadel 软件工程师面试实录 2026:真实面经完整复盘

Citadel面试第一人称完整复盘:涵盖算法Coding、系统设计、Behavioral面试。还原真实面试对话、高频题目与解题思路,附准备策略与注意事项,助你高效备战Citadel技术面试。

Sam · · 15 分钟阅读

公司:Citadel 岗位:软件工程师 (SDE) 面试形式:Virtual Onsite 结果:Pass → Offer

测试结构总览

整个测试由三部分组成:一道选择题(非常简单,形式类似“你是否愿意使用数据进行决策”之类的问题,选 yes 就好)+ 两道代码题,难度在 LeetCode 中等偏上或接近 Hard 的水平,涉及字符串处理、动态规划、贪心、并查集等考点。75 分钟完成全部三题,时间分配一定要合理。建议选择题 1 分钟内完成,然后将 70 分钟平均分给两道编程题。

第一题:Palindrome with Period k 这是一道带有实际应用背景的密码规则更新问题。题目要求将当前的密码(一个只包含小写字母的字符串)转换成满足新规则的密码,要求如下:新密码必须是一个回文。同时它还要满足“周期为 k” 的性质,也就是说 s[i] == s[i + k] 对所有合法位置 i 都必须成立。这道题的关键点是同时处理两个等值约束条件:回文约束和周期约束。本质上是多个字符位置之间必须统一成同一个字符的问题。最优策略是将所有必须相等的字符位置聚类(可以用并查集),然后对每一组统一为出现次数最多的字符,其他都要修改,累加这些修改次数就是答案。这题乍看复杂,其实只要想到用 union-find 来聚合字符位置,整体实现还算清晰。我用了 Python 实现,AC 用时 25 分钟左右。

第二题:Minimize Image Processing Cost 这道题非常贴近实际场景,设定是你需要为若干张图片应用滤镜,每张图在特定的时间窗口内处理,并且处理代价不同。每天你可以选择:分别对每张图单独处理,花费是各自的 filterCost或者花一笔 discountPrice,将所有当天需要处理的图批量处理目标是决定每天的处理策略,使得总花费最小。我一开始想复杂了,还在尝试做 segment tree 优化处理区间,后来发现其实只要每天看有哪些图处于活跃期,然后比较当日的两种策略成本,取较小值即可。这是一个典型的贪心+区间扫描问题。最终我用 prefix sum + 哈希表优化处理,跑得很快,答案也顺利通过所有测试。这题很考察对题意的理解和贪心策略的选择,代码实现不算难,但对思路的正确性要求很高。

编程建议和平台限制

整场考试必须在 HackerRank 的内置编辑器中完成,不能复制样例,也不能跳出窗口去查文档。建议平时刷题多用 HackerRank 熟悉它的 UI,避免考试时不适应。同时建议提前准备好 IDE 模板代码或调试脚本,因为没有 IDE 辅助的话调试字符串类题目会比较麻烦。平台不提供样例答案,只能通过 sample case 和 hidden case 来判断代码是否正确。因此建议在每段逻辑后加入 debug 打印(记得及时删掉),确保对边界情况的处理没有问题。

从投递到首轮面试

我是通过海投拿到的机会,完全没有内推。甚至没有做 OA,就直接收到了第一轮的 screening 电话邀请。可能他们是根据简历挑了一批直接进 screening 的人。

第一轮是一个 45 分钟的 screening,整体氛围很轻松。面试官先简单聊了一下我的项目经历,然后顺带问了几个行为问题,类似 Why Citadel?、“你觉得自己在哪个项目中学到最多”,这些问题我当时没有提前准备,但用自己的实习经历随便聊聊就过了,完全没有压力。

技术题的部分是一个排列组合类问题,题目形式非常像 LeetCode 上的 backtracking 基础题:给定数字 1 到 9,把它们分别填入 ABC、DEF、GHI 三个三位数的位置,要求 ABC + DEF = GHI,不能重复数字,问总共有多少种有效组合。我用的是 Python 回溯法去暴力枚举所有 9 位排列,然后每 3 位划分成 ABC、DEF、GHI,判断是否满足等式即可。面试官当时说:“你的方法是对的,有些人会卡在如何生成合法 permutation 上。”最后还一起跑了几个 sample,验证都通过了,整个环节结束得挺顺利。

三轮back to back VO:整体节奏与面试形式

几天后我收到了正式的三轮 video interview 安排,2 小时 15 分钟,三轮连着面完,中间没有休息时间。每一轮都包含了两部分内容:开头是简历/BQ问题,后半段是算法题 coding。总体时间分配大概是每轮 45 分钟左右。

所有面试都在一个 Citadel 的专属系统上进行,不是 HackerRank,也不是常见的 Zoom + CoderPad,而是他们自己的 video + 编辑器一体的平台。界面比较干净,体验还可以。

第一轮:任务分配与员工 multiplier

第一轮的题目背景是一个 DMV 办公室。每个员工都有一个 multiplier,代表他的工作速度,比如 multiplier=2 意味着该员工处理一个任务要花 double 时间。同时,系统中还有多个任务,每个任务有一个 base duration,也就是 multiplier=1 时的标准耗时。面试会给一个任务列表,每个任务有 base duration,要你写一个函数计算“最少多少时间可以完成所有任务”。每个员工只能串行做任务(不能并行),每个任务必须被某个员工完整处理,不能被拆开。你需要自己决定如何把任务分配给不同的员工,然后模拟整个过程,返回最短的总完成时间。这题其实是一个典型的 load balancing 问题。我的做法是先按照任务耗时从大到小排序,然后用一个 min heap 去模拟每个员工当前的工作累积时间,greedily 把任务分配给当前最空闲的员工。需要注意的是分配的时候要乘以 multiplier。总体实现比较冗长,因为所有 I/O 也要自己写,但逻辑不算特别难,最终我的代码是对的,面试官也确认通过了,还跟我说这题有很多不同的分配方式,只要逻辑合理就行。

第二轮:不熟悉的题 + 沟通卡壳

这一轮感觉是挂的主要原因。题目是一个我之前没刷过的leetcode原题,一上来我就有点懵。面试官从头到尾都很冷漠,不主动给提示。我的思路其实是可行的,我想用一种结构来存储状态,但面试官 insist 我用另一个类型。我们俩在representation上纠结了很久,导致我不得不硬着头皮去迁就他的方式。后面虽然勉强写完了,但由于类型转换搞得我很晕,逻辑上出现了 bug,最后没时间 debug,眼睁睁看着代码错在那里。最气的是,后来我自己复盘了一下,发现我的方法本来是能跑通的,只是我俩的理解和代码风格差太多,加上时间压力,完全没法沟通好。这一轮整体体验很差,不仅题不熟,节奏也被打乱。

第三轮:Topological Sort(字符版)

最后一轮的题是一个有点变种的 topological sort 问题。输入是多个字符对,代表有向边 A -> B,同时还会提供一个字符全集(表示会出现的所有字符)。题目要求你输出一个合法的字符顺序,满足这些顺序约束。可以有多个解,返回任意一个合法顺序就行。这题我之前在 LeetCode 上刷过类似题(Alien Dictionary),核心就是构建 graph,然后 BFS + in-degree map 做 Kahn 算法。我比较熟练地写了出来,面试官一边输入不同样例一边验证,全部返回正确,表现比较顺利。这轮的面试官很 chill,也很愿意和我讨论思路细节,最后还给了一些优化建议,整个交流体验很好。

面试总结

成功经验

  1. 充分准备高频题:Citadel 的面试题目集中在经典算法和数据结构上,提前准备 LeetCode 高频题非常有必要。
  2. Behavioral 故事要准备充分:使用 STAR 框架准备 5-8 个核心故事,覆盖 Leadership、Conflict、Innovation 等场景。
  3. 沟通表达要清晰:解题过程中要主动与面试官沟通思路,不要闷头写代码。
  4. 边界条件要主动讨论:面试官很看重候选人对 edge cases 的考虑。

面试注意事项

时间管理:每轮 45-60 分钟,需要合理分配时间给题目、讨论和 follow-up 问题。

技术深度:Citadel 的面试官对技术细节要求很高,边界条件、性能优化、系统设计能力都是考察重点。


推荐阅读


💡 需要面试辅导?

如果你对准备技术面试感到迷茫,或者想要个性化的面试指导和简历优化,欢迎联系 Interview Coach Pro 获取一对一辅导服务。

👉 联系我们 获取专属面试准备方案

准备好拿下下一次面试了吗?

获取针对你的目标岗位和公司的个性化辅导方案。

联系我们