Airbnb 是全球短租 / 旅行赛道的代表,面试也带着浓重的「run + test + follow-up」工程文化:每道题写完必须能跑、必须有测试、必须能接住 follow-up。这不是 LeetCode 提交按钮模式——你需要在 IDE 里完成调试。这篇文章把 Airbnb 面试拆成 5 个阶段、3 道高频题、1 个系统设计,全部按真实流程节奏给出解法和应对模板。
五阶段总览
W0 Initial Screening: Resume → 30 min HR phone (背景 + 期望 + base)
W1 OA HackerRank: 60-90 min, 2-3 道算法 (LC Medium 改造)
W2 Electronic Interview: CoderPad 1-2 轮,每轮 45 min
W3 Onsite VO 4-6 轮:
├─ Coding × 2 (45 min each)
├─ System Design × 1 (60 min)
├─ Behavioral × 1 (Cultural Fit + STAR)
└─ Cross-functional × 1-2 (跨 PM / Eng Manager)
W4 Decision + offer call
整个流程 4-5 周。Airbnb 招聘节奏比 FAANG 慢但更注重 cultural fit——你 50% 概率会和创始人级别(或 VP 级)面试。
阶段 1 — HR Screen(30 min)
招聘 manager 看的两点:
- 简历亮点:旅行 / 电商 / 推荐系统经验是加分项
- expectations alignment:base / 远程 / 期望开始时间
回答模板:
- 简历讲故事:「在 X 项目里我把 Y 指标提升 Z」
- 期望薪资:给一个 base + RSU 区间,不要单数字
- 远程:明确说能不能搬 SF / 周几 onsite
阶段 2 — OA HackerRank(60-90 min)
通常 2-3 道 LC Medium 难度,主题包括:
- 字符串处理(housing description NLP)
- 图遍历(city graph routing)
- 优先队列调度(booking conflict resolution)
cutoff 大约 70% AC + 1 题全 AC。Airbnb OA 没有 hidden monster case,但要求每题写完跑过几个 sample——HackerRank 的 console.log 输出会被 reviewer 看到。
阶段 3 — CoderPad 电面(1-2 轮,45 min/轮)
Airbnb 的特色:每道题都要 写完 → 跑测试 → 答 follow-up。三步必须都做完才算完整。
高频题 1:Zigzag Matrix Print
题面:给 M × N 矩阵,按 zigzag 顺序打印(不是普通水平打印)。
1 2 3 → 1, 2, 3, 6, 5, 4, 7, 8, 9
4 5 6
7 8 9
def zigzag_print(matrix: list[list[int]]) -> list[int]:
out = []
for i, row in enumerate(matrix):
if i % 2 == 0:
out.extend(row)
else:
out.extend(reversed(row))
return out
复杂度:O(M·N)。
Follow-up:
- 「如果不让用 reversed()?」→ 用双指针手写翻转
- 「如果是 spiral zigzag(边界先转)?」→ 改成模拟方向数组
- 「内存敏感场景如何 streaming?」→ generator 输出
阶段 4 — Onsite VO(4-6 轮)
Coding 轮 1:Listings Subset Optimization(Hard)
题面:给 N 个 listings,每个有 id / neighborhood / capacity。在指定 neighborhood 中选若干 listings,使总 capacity ≥ groupSize,优先 listings 数量最少,其次总 capacity 最少(避免浪费)。返回 listing id 列表。
核心思路:双维度 DP / 枚举。先按 capacity 倒序贪心选 listings 数量最少,再二维 DP 在固定数量下找 minimum capacity。
def select_listings(listings: list[dict], neighborhood: str, group_size: int) -> list[int]:
pool = [l for l in listings if l["neighborhood"] == neighborhood]
pool.sort(key=lambda x: -x["capacity"])
# Step 1: 找最小 listings 数量
cap_sum = 0
min_count = 0
for i, l in enumerate(pool):
cap_sum += l["capacity"]
if cap_sum >= group_size:
min_count = i + 1
break
if cap_sum < group_size:
return []
# Step 2: 在 min_count 数量下找 minimum capacity
n = len(pool)
INF = float("inf")
# dp[j][c] = 选 j 个 listings 总 capacity = c 的最小 capacity 路径
# 简化:枚举所有 C(n, min_count) 组合
from itertools import combinations
best_cap = INF
best_combo = None
for combo in combinations(range(n), min_count):
cap = sum(pool[i]["capacity"] for i in combo)
if cap >= group_size and cap < best_cap:
best_cap = cap
best_combo = combo
return [pool[i]["id"] for i in best_combo] if best_combo else []
复杂度:组合枚举 O(C(n, k)·k),可优化为 DP O(n · group_size)。
Follow-up:「n = 1000 时 combinations 会爆,怎么办?」→ 改成 0/1 knapsack DP。
Coding 轮 2:Task Scheduling with Deadline(Medium)
题面:给一组任务,每个任务有 id / deadline / reward。每个任务占 1 天。安排执行顺序使所有任务在 deadline(含)前完成且总 reward 最大。返回执行顺序和最大 reward。
核心思路:贪心 + 优先队列。按 deadline 升序排序,遇到 deadline 紧的任务先入堆,堆满(size > deadline)则弹出 reward 最低的任务。
import heapq
def schedule_tasks(tasks: list[dict]) -> tuple[list[int], int]:
tasks_sorted = sorted(tasks, key=lambda t: t["deadline"])
heap: list[tuple[int, int]] = [] # (reward, id)
for t in tasks_sorted:
heapq.heappush(heap, (t["reward"], t["id"]))
if len(heap) > t["deadline"]:
heapq.heappop(heap) # 弹出 reward 最小
total = sum(r for r, _ in heap)
order = [tid for _, tid in sorted(heap, key=lambda x: x[1])]
return order, total
复杂度:O(n log n)。
System Design 轮:Airbnb Listing Search
题面:设计 Airbnb 房源搜索系统,处理百万级房源,要求低延迟、支持过滤(价格、位置、人数)。
60 min 框架:
05 min Clarify scope: QPS / 房源规模 / 过滤维度数
05 min Data model: listing schema + index strategy
10 min Indexing: ElasticSearch 倒排索引 + geohash
10 min Caching: Redis 热门 query / popular city pre-warm
10 min Query path: API gateway → search service → ES → ranking → filter → result
10 min Ranking: relevance + rating + price + booking history
05 min Failure modes: ES node down, cache miss storm
05 min Follow-up: real-time inventory / partial availability
关键设计点:
- 分片策略:按 geohash 分片,热门城市单独 shard
- 缓存层:Redis 存 top 100 query × city 组合
- 数据一致性:listing 更新通过 event bus 异步同步到 ES(30s 内最终一致)
- 复杂度:搜索 O(log n) on ES,缓存命中 O(1)
Behavioral / Cultural Fit 轮
Airbnb 有 6 条 core values,最常考的两条:
- Be a host — "你怎么让团队 / 用户感到被 welcome?"
- Embrace the adventure — "你最近一次走出 comfort zone 是什么?"
每道 BQ 准备 STAR 模板,每个故事必须有一段 host / hospitality 的细节——Airbnb reviewer 会专门评估这一点。
Situation: 我接手 X 项目时,team morale 较低
Task: 作为 onboarding 负责人,我要让新人快速 ramp up
Action: 我建立了 buddy 系统、weekly office hours、问题 doc
Result: 新人 ramp time 从 6 周降到 3 周,retention 提升 20%
Reflection: 这件事让我意识到「being a host」不只是欢迎,而是持续 enable
Cross-functional 轮
通常和 PM / Eng Manager 聊。重点是 storytelling 和「跨职能沟通」:
- "如果一个 PM 想砍掉你认为重要的 feature,你怎么办?"
- "讲一个你和 Designer 意见不合的项目"
应对:用 layman 语言(不要 DS 行话),先理解对方动机,再用数据 / 实验做收口。
三条岗位线的 VO 差异
| 岗位线 | Coding 题型 | System Design |
|---|---|---|
| Backend SDE | 数据结构 + Hard DP | Listing Search / Booking |
| Frontend | DOM tree + state mgmt | UI rendering optimization |
| Full-stack | 字符串 + 图 | API gateway design |
VO 辅助怎么对接 Airbnb
Airbnb VO 的难点是「run + test + follow-up + cultural fit」四件套都要做完。VO 辅助 / VO代面 的标准节奏:
- 岗位线判定:JD + recruiter call 摘要,5 分钟内判定 SDE / Frontend / Full-stack 线
- CoderPad 实战训练:每道题写完 → 跑测试 → 答 follow-up 三步走
- 限时 mock:45 min × 4 / 5 onsite 节奏仿真,含 system design 60 min
- 现场 cue:onsite 当天 reviewer 后台推 follow-up 对接 / SD 框架
- Cultural fit 模板:6 条 core values 各配 1 个 STAR 故事,重点 "be a host"
FAQ
Q1: Airbnb 真的会让创始人面试吗? A: 不是创始人本人(Brian Chesky 已不亲面),但 Director / VP 级别有 30% 概率。这一轮重点是 cultural fit,不是技术。
Q2: OA 没全 AC 还能进 CoderPad 吗? A: 1 题全 AC + 1 题 70% AC 仍可能进。但 2 题都低于 50% 几乎必拒。
Q3: System Design 一定考 Listing Search 吗? A: 50% 概率。其他常见题:Booking system / Pricing engine / Review aggregation。三类都要练。
Q4: Cultural Fit 轮失利会被刷吗? A: 会。Airbnb 的 cultural fit 是一票否决项,即便技术全绿灯也可能 reject。
Q5: Airbnb NG 的 base 大概多少? A: SDE NG base 约 $170-180K + 股权 + sign-on,Total comp 第一年约 $260-300K。
写在最后
Airbnb 面试不是「比谁刷题多」,而是「比谁能在 IDE 里完整写一个 production-ready 函数 + 把自己包装成一个 host」。如果你正在准备 Airbnb 的 OA 或 VO,可以微信 Coding0201 联系,发岗位 JD + 当前流程节点截图,先做岗位线判定,再排 VO 辅助 / VO代面 节奏。
需要面试真题? 立刻联系微信 Coding0201,获取真题。
联系方式
- 微信:Coding0201
- Email: [email protected]
- Telegram: @OAVOProxy