Atlassian 的面试流程是典型的 多 gate 设计:每通过一个 gate 才进入下一阶段,节奏偏稳,但对综合能力考察非常全面。其中最有 Atlassian 风格、也最容易让人措手不及的,是 Code Design Interview——偏 OOD 的 coding,而不是算法题。本文拆解整个流程和这一轮的高频题型。
一、Atlassian 面试流程(多 gate)
| Gate | 内容 | 时长 | 特点 |
|---|---|---|---|
| Gate 1 | Technical screen | — | 简短 coding + 轻量 system design,验证基础,不太卡人 |
| Gate 2 | 完整技术轮 | 2h | Code Design(1h)+ Data Structure(1h,常规 LeetCode 中等) |
| Gate 3 | System Design | 1h | 需求拆解、架构、可扩展性、trade-off,senior 权重更高 |
| Gate 4 | Soft skill | ~1.75h | Values Interview(45min)+ Management Interview(1h),偏 BQ |
通过所有 gate 后进入 hiring committee review,由 committee 综合所有面试官反馈给结果。
二、Code Design Interview 的整体特点
这一轮需要在 本地 IDE 完成代码实现并全程 share screen。面试官只给题目描述和 function signature,不提供现成代码或测试框架,从零开始实现。它更像偏 OOD 的 coding,评估重点集中在:
- 功能是否正确;
- 代码结构是否清晰;
- 是否易于扩展;
- 是否有良好的抽象和职责划分;
- 命名、拆类方式和思考过程(实时观察)。
三、贪吃蛇:最高频经典题
在所有 code design 题里,出现频率最高、几乎人尽皆知的就是 贪吃蛇。核心功能围绕三点:
- 按键转向:上下左右改变移动方向,要避免非法转向(如直接从左转右)。
- 自动增长:吃到食物时蛇 size 增长。
- 碰撞检测:蛇头撞到自己身体时游戏正确结束。
边界条件(是否有墙 / 是否穿墙 / 棋盘大小是否固定)通常需要你主动和面试官 confirm。下面是一个清晰可扩展的实现框架:
from collections import deque
class SnakeGame:
def __init__(self, width, height, food):
self.w, self.h = width, height
self.food = deque(food) # 预设食物位置队列
self.snake = deque([(0, 0)]) # 蛇身,head 在右端
self.body = {(0, 0)} # 占用格集合,O(1) 碰撞检测
self.dirs = {"U": (-1, 0), "D": (1, 0), "L": (0, -1), "R": (0, 1)}
self.opposite = {"U": "D", "D": "U", "L": "R", "R": "L"}
self.cur = "R"
def move(self, direction):
# 非法转向(直接反向)忽略,沿用当前方向
if direction != self.opposite[self.cur]:
self.cur = direction
hr, hc = self.snake[-1]
dr, dc = self.dirs[self.cur]
nr, nc = hr + dr, hc + dc
if not (0 <= nr < self.h and 0 <= nc < self.w):
return -1 # 撞墙,游戏结束
ate = self.food and self.food[0] == [nr, nc]
if ate:
self.food.popleft() # 吃到食物,蛇增长(不弹尾)
else:
tail = self.snake.popleft() # 没吃到,先移除尾部
self.body.discard(tail)
if (nr, nc) in self.body: # 撞到自己身体
return -1
self.snake.append((nr, nc))
self.body.add((nr, nc))
return len(self.snake) - 1 # 当前得分
设计要点:用 deque 维护蛇身、set 做 O(1) 碰撞检测;先移尾再判碰撞,避免误判刚离开的尾格。面试最后通常要 实际运行证明正确性——时间有限,几乎不可能写 GUI,最稳妥是在 terminal 里用字符打印一个 textual UI。
四、除贪吃蛇外的三大高频 Code Design 题型
表面差异很大,但本质都在考 工程建模能力。
1)偏业务建模的设计题
让你实现一个简化但边界清晰的业务系统:任务管理、评论系统、审批流、RBAC 权限。重点不是写完所有功能,而是 一开始如何拆分 domain object——能否清晰区分 entity / service / repository 职责,会不会把逻辑硬塞进一个大类。面试官常追问 "What if we want to support X later?",考验 public API 设计是否留了扩展空间。
2)偏状态机 / 流程驱动的设计题
电梯、会议室预订、排队系统、事件驱动工作流。重点看你能否 识别系统中的状态及其转换关系:某对象在不同状态下允许哪些操作、非法转换如何处理、状态变化集中管理还是分散。常见坑是用一堆 if-else 控制流程——功能对但设计扣分;能抽象出 状态 + 事件 + 转换 才算高级。
3)偏工具 / 库设计的题目
rate limiter、cache、in-memory store、规则引擎。刻意弱化算法复杂度,把重点放在 API 设计和内部结构:能否把「对外接口」和「内部实现」分离清楚,是否过早暴露实现细节,是否考虑测试 / 可维护性 / 可替换性。这类题最容易写成「能跑但很难改」的代码。
五、备考建议
| 重点 | 做法 |
|---|---|
| 贪吃蛇 | 练到能在 terminal 跑通 + 主动 confirm 边界 |
| 业务建模 | 先拆 domain object,分清 entity/service/repository |
| 状态机 | 抽象「状态 + 事件 + 转换」,别堆 if-else |
| 库设计 | 接口与实现分离,考虑测试与可替换性 |
FAQ
Q1:Atlassian 面试一共几个 gate?
四个 gate:technical screen、完整技术轮(Code Design + Data Structure)、System Design、Soft Skill(Values + Management)。每通过一个才进下一关,最后由 hiring committee 综合评估。
Q2:Atlassian 的 Code Design 和普通算法题有什么区别?
Code Design 更像偏 OOD 的 coding,在本地 IDE 全程 share screen,从零实现,只给题目和 function signature。评估重点是代码结构、抽象、职责划分和扩展性,而不是算法最优解。
Q3:贪吃蛇要写到什么程度?
要实现按键转向(含非法转向处理)、吃食物自动增长、撞墙 / 撞自己的碰撞检测,并主动 confirm 是否有墙、棋盘大小等边界。最后通常要在 terminal 用字符 textual UI 实际运行证明正确性。
Q4:怎么高效准备 Atlassian Code Design?
把贪吃蛇练熟,再覆盖业务建模 / 状态机 / 库设计三大题型,重点训练「动手前先拆模型」。如果想要这几类题的限时陪练、OOD 抽象专项,或需要 VO 辅助 / VO 代面 的实时对接,可以发岗位 JD 先做题型预测再排练习计划。
正在准备 Atlassian Backend 面试?
Atlassian 考的是工程建模能力 + 清晰抽象 + 可扩展设计,不是算法 trick。oavoservice 提供 Atlassian 全 gate 陪练:贪吃蛇 / 业务建模 / 状态机限时模拟、Code Design OOD 专项、System Design 与 Values 故事打磨,也支持 VO 辅助 / VO 代面 的实时对接。教练含前大厂资深工程师,熟悉 Atlassian「从零实现 + 追问扩展」的评分风格。
立即添加微信 Coding0201,获取 Atlassian 真题与陪练。
联系方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy