← 返回博客列表 Atlassian Backend 面试复盘:多 gate 流程 + Code Design 贪吃蛇,高频工程建模题全拆解
Atlassian

Atlassian Backend 面试复盘:多 gate 流程 + Code Design 贪吃蛇,高频工程建模题全拆解

2026-06-06

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 题里,出现频率最高、几乎人尽皆知的就是 贪吃蛇。核心功能围绕三点:

  1. 按键转向:上下左右改变移动方向,要避免非法转向(如直接从左转右)。
  2. 自动增长:吃到食物时蛇 size 增长。
  3. 碰撞检测:蛇头撞到自己身体时游戏正确结束。

边界条件(是否有墙 / 是否穿墙 / 棋盘大小是否固定)通常需要你主动和面试官 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 真题与陪练

联系方式