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