← 返回博客列表 Atlassian 技术面复盘:三阶段流程,Min Stack / 无限有序数组二分 + 通知系统设计 + 两轮 BQ
Atlassian

Atlassian 技术面复盘:三阶段流程,Min Stack / 无限有序数组二分 + 通知系统设计 + 两轮 BQ

2026-06-06

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

第二轮:leadership / ownership

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 技术面真题与陪练

联系方式