OfferForge 导师 Dr. W. — 博士毕业,前 FAANG Senior MLE。研究方向为大规模分布式机器学习系统,曾在顶级国际学术会议发表多篇论文。负责团队学术方向把控与 MLE 面试辅导。
OfferForge 导师 Dr. S. — 前大厂 Senior SDE,精通分布式系统与大规模数据处理。曾在顶级技术会议发表多篇技术报告,专注于系统可扩展性与可靠性。负责课程体系设计与 System Design 面试辅导。
OfferForge 导师 Dr. L. — 前大厂 Senior SDE,深耕分布式系统与微服务架构。在服务治理、事件驱动架构方面有丰富实战经验。负责求职策略制定与 SDE 面试辅导。
Atlassian现在的整个流程分为三个阶段,按照顺序是:两轮 coding、一轮 system design、两轮BQ。整体节奏比较友好,面试官都来自不同产品组,不会很 push,但会一直引导你深入细节。
第一轮 coding 的题目是 实现一个支持 push、pop、min 的栈(O(1) 时间复杂度)。这题是比较常见的变种数据结构题,我的思路是设计两个栈,一个主栈保存所有值,一个辅助栈保存当前的最小值。每次 push 的时候更新辅助栈,pop 时也要同步 pop 两个栈,min() 直接返回辅助栈的栈顶即可。写完后,面试官会故意给一些 edge case,比如重复 push 相同最小值、连续 pop 导致辅助栈为空的情况,问你是否考虑到了。
第二轮是数组+二分的题,具体是 在一个无限长的 sorted array(只能通过 API get(i) 访问)中查找一个目标值的位置。由于不能直接获得数组长度,我先通过指数增长的方式找 upper bound(即 i=1,2,4,8... 直到 get(i) > target),然后在这个范围内做标准的 binary search。面试官在意的是你对边界的处理是否严谨,以及是否能处理 target 不存在、数组为空、或者所有值都小于目标值等情况。
System design 轮的题目是 设计一个In-app Notification System,要求支持发送、存储和展示通知,包括读未读状态、展示顺序和 TTL 过期。因为时间比较紧,我先从 high-level component 开始讲,分成 producer(业务服务触发通知)、notification service(负责去重和调度)、storage(MySQL + Redis)、frontend query(支持分页与筛选)。面试官关注点包括:数据模型怎么设计、Redis 缓存怎么做、一个用户有几千条通知时怎么优化 query latency。我还补充提到了 Kafka 作为异步 pipeline、支持 batched write 到 DB,整个方案尽量简单可落地。
第一轮 BQ 的主题比较偏collaboration与communication,面试官问了我:“Tell me about a time when you had to explain a complex technical concept to a non-technical stakeholder”,我讲了在一次产品会议中解释为何延迟上线是对数据一致性的保护,过程中我用类比、流程图,最后得到认可;第二个问题是 “Tell me about a time when your teammate was blocked and you helped them”,我讲了带实习生调研数据 pipeline 的经历,面试官希望听到你有没有帮助别人 unblock、有没有沉下心来做 mentoring。