OfferForge 导师 Dr. W. — 博士毕业,前 FAANG Senior MLE。研究方向为大规模分布式机器学习系统,曾在顶级国际学术会议发表多篇论文。负责团队学术方向把控与 MLE 面试辅导。
OfferForge 导师 Dr. S. — 前大厂 Senior SDE,精通分布式系统与大规模数据处理。曾在顶级技术会议发表多篇技术报告,专注于系统可扩展性与可靠性。负责课程体系设计与 System Design 面试辅导。
OfferForge 导师 Dr. L. — 前大厂 Senior SDE,深耕分布式系统与微服务架构。在服务治理、事件驱动架构方面有丰富实战经验。负责求职策略制定与 SDE 面试辅导。
我在收到 Citadel 的 OA 邀请后,被要求在 10 天内完成一次限时在线评测,平台是 HackerRank,总时长 75 分钟。整个测试分为三部分:一道选择题,两道编程题。
选择题只是形式上的,一般是让你确认你会独立完成评测、不会作弊等,只需要点击 “Yes” 即可,不涉及技术内容,也不消耗时间。
真正的挑战在于两道编程题,整体难度偏高,大致相当于 LeetCode 的 medium 到 hard。
第一道题是关于一个整数数组的操作,需要你实现一种优化的查询方式。题意是:给你一个长度为 n 的数组和多个查询,每个查询是一个目标值 x,问是否存在两个不同位置的元素 a[i] 和 a[j],使得 a[i] + a[j] = x。最朴素的方法当然是双重循环,但显然无法通过所有测试点。必须使用哈希表预处理整个数组或者借助排序和双指针。需要注意的是,某些查询可能会重复,所以做缓存优化也有助于提速。总体考察的是常见的 two sum 变体,但结合了多次查询和时间复杂度的挑战。
第二题更有算法设计的味道,题目是图论类型的模拟。有一个迷宫表示为二维字符矩阵,‘#’ 表示墙壁,‘.’ 表示可以走的路径,‘S’ 是起点,‘E’ 是终点。你需要判断从 S 到 E 是否存在路径,并返回最短路径长度。如果不存在路径,返回 -1。题目看似 BFS 模板题,但会加入一些 twist,例如某些格子会在固定时间间隔内变成墙壁或变成可走路径,类似动态地图,需要你在搜索过程中记录状态。这就要求你实现带时间戳的 BFS 或加入状态压缩,不能只用 visited 数组。还有些测试点地图很大,因此如果实现不够高效,容易超时。