Atlassian 的面試整體非常清晰,按順序分三個階段:兩輪 coding → 一輪 system design → 兩輪 BQ。節奏比較友好,面試官來自不同產品組、不會很 push,但會一直引導你深入細節。演算法題並不刁鑽,但 edge case 處理和 ownership 是評分關鍵。下面完整複盤三個階段。
一、Atlassian 技術面概覽
| 階段 | 輪次 | 內容 |
|---|---|---|
| 階段一 | 2 輪 coding | Min Stack / 無限有序陣列二分 |
| 階段二 | 1 輪 system design | In-app Notification System |
| 階段三 | 2 輪 BQ | collaboration / leadership / ownership |
| 風格 | 溫和但摳細節 | 面試官故意給 edge case 追問 |
二、階段一 · 題 1:O(1) 最小堆疊
實作一個支援 push、pop、min 的堆疊,三個操作均為 O(1) 時間複雜度。
思路轉化:用兩個堆疊——主堆疊保存所有值,輔助堆疊保存「當前最小值」。每次 push 更新輔助堆疊(push 進當前值和已有最小值中較小者),pop 時兩堆同步彈出,min() 直接返回輔助堆疊頂。
class MinStack:
def __init__(self):
self.stack = []
self.mins = [] # 與 stack 同步,頂為當前最小值
def push(self, x):
self.stack.append(x)
cur_min = x if not self.mins else min(x, self.mins[-1])
self.mins.append(cur_min)
def pop(self):
if not self.stack:
return None # 空堆疊保護
self.mins.pop()
return self.stack.pop()
def min(self):
return self.mins[-1] if self.mins else None
面試官的 edge case 追問:重複 push 相同最小值(輔助堆疊要同步存,pop 才不會錯)、連續 pop 導致輔助堆疊為空(要做空堆疊保護)。複雜度:三個操作均 O(1),空間 O(n)。
三、階段一 · 題 2:無限長有序陣列二分查找
在一個無限長的 sorted array 中查找目標值的位置,只能透過
get(i)存取,無法直接獲得陣列長度。
思路轉化:先用 指數增長找上界(i = 1, 2, 4, 8... 直到 get(i) > target),把無限問題縮小到一個有限範圍 [lo, hi],再在該範圍內做標準二分。
def search_infinite(reader, target):
# 1) 指數找界
lo, hi = 0, 1
while reader.get(hi) < target:
lo = hi
hi *= 2
# 2) 範圍內二分
while lo <= hi:
mid = (lo + hi) // 2
val = reader.get(mid)
if val == target:
return mid
elif val < target:
lo = mid + 1
else:
hi = mid - 1
return -1 # 不存在
面試官在意的邊界:target 不存在、陣列為空(get(0) 越界)、所有值都小於 target。要講清楚 get 越界返回什麼、指數找界為何是 O(log n)。時間複雜度:O(log n);空間複雜度:O(1)。
四、階段二 · 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,整個方案盡量簡單可落地——Atlassian 的 system design 希望你 接地氣,不是只談理論。
五、階段三 · 兩輪 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." → 我講了帶實習生調研 data pipeline、幫其 unblock 並做 mentoring 的經歷。
第二輪:leadership / ownership
- "Describe a time when you took initiative outside your normal responsibilities." → 我講了自己主導引入 code quality metric 的 side project。
- "Tell me about a mistake you made and what you learned." → 我講了部署時沒寫 rollback script 導致 production 短暫中斷,後來引入標準 rollback checklist。
BQ 評分關鍵:Atlassian 兩輪 BQ 很關鍵,是評估 culture fit 和 leadership potential 的核心,每個故事都要能體現 影響力 + 反思。
六、備考建議
| 階段 | 重點 |
|---|---|
| Coding | Min Stack / 二分變種練熟,主動覆蓋 edge case |
| System Design | 講接地氣的落地方案,Redis 快取 + 分頁 + Kafka |
| BQ | 準備 collaboration / mentoring / ownership / 失敗反思故事 |
整體風格溫和但很摳細節和 ownership:演算法題不刁鑽,system design 要落地,BQ 兩輪很關鍵,每一輪都可能影響最終結果,準備時要注意 balance。
FAQ
Q1:Atlassian 技術面分幾個階段?
三個階段:兩輪 coding、一輪 system design、兩輪 BQ。面試官來自不同產品組、風格溫和,但會持續引導你深入 edge case 和設計細節。
Q2:Atlassian 的 coding 難嗎?
不刁鑽,難在 edge case。比如 Min Stack 會追問重複最小值、連續 pop 空堆疊;無限有序陣列二分會追問 target 不存在、陣列為空。把邊界講清楚比寫出主邏輯更重要。
Q3:Atlassian 的 system design 看重什麼?
接地氣的落地方案,不是只談高層理論。以 notification system 為例,要講清資料模型、Redis 快取、幾千條通知的 query latency 優化,以及 Kafka 非同步 pipeline + batched write。
Q4:Atlassian 的兩輪 BQ 怎麼準備?
圍繞 collaboration / communication 和 leadership / ownership 各準備故事:向非技術 stakeholder 解釋複雜概念、幫 teammate unblock、超出職責範圍主動推進、失敗反思。每個故事都要體現影響力和反思。需要的話,我們的 VO 輔助 / VO 代面 / 面試輔助 可以幫你打磨這兩輪 BQ 故事並做限時演練。
正在準備 Atlassian 技術面?
Atlassian 三階段考的是 edge case 嚴謹度 + 落地系統設計 + ownership 故事。如果你想要 Min Stack / 二分變種的限時陪練、notification system 設計推演,或兩輪 BQ 的故事打磨,歡迎交流:發職缺 JD 先做題型預測,再排練習計畫,也支援 VO 輔助 / VO 代面 / 面試輔助 的即時對接。
立即新增微信 Coding0201,獲取 Atlassian 技術面真題與陪練。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy