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