Airbnb 面试题型总结整理:Coding、Code Review、System Design 和 Past Experience 怎么准备

Airbnb 面试题型总结整理:Coding、Code Review、System Design 和 Past Experience 怎么准备

Airbnb 面试的特点是轮次结构比较综合:coding、code review、system design、past experience、HM/core value 都可能出现。近期面经里,多位候选人提到“某些轮很 solid,但 system design 或加面没过”,说明 Airbnb 不只看代码能不能写完,也看你能否解释设计、复盘项目和匹配团队价值观。

本文基于近期公开面经标题和本地整理信号,不代表官方流程。

近期面经信号

  • Coding 里出现过 KV store、图/连锁效应、房源/booking 业务包装题。
  • Code review 是重要信号轮,重视评论质量而不是评论数量。
  • System design 常见 booking system、ticket system、pagination、agent/manager workflow。
  • Past experience 常会深入项目架构图、技术取舍和个人贡献。

面试真题题目合集

下面是 Airbnb 相关面经里出现过的题目和题型摘要:

  • Split stay / booking 分段入住。
  • 给 hotels 可用日期和请求区间,判断能否覆盖完整 stay。
  • Split stay follow-up:最多用两个 property 覆盖。
  • Split stay follow-up:返回具体 property 分配方案。
  • Linked list:有环链表 intersection。
  • Linked list:无环/有环组合讨论。
  • Chat system design。
  • Chat system:schema、membership、message storage。
  • Chat system follow-up:top N group chat。
  • Search and booking/order query system。
  • Distributed KV store。
  • KV store:get/put/delete
  • KV store:prefix pagination,例如 get(key*)
  • KV store:eventual consistency 和 high availability。
  • Listings 页面超过 100 个时如何优化。
  • Search result / listing page 性能优化。
  • 地里银行类 coding。
  • Retrier / retry wrapper 设计。
  • Past experience:why Airbnb。
  • Past experience:旅行经历和为什么选择 Airbnb。
  • Past experience:跨时区协作。
  • Past experience:风险决策和 expectation gap。
  • Project deep dive。

真题整理与分析

Airbnb 的高频题很贴近业务:预订、库存、搜索、房源、聊天和用户体验。准备时要把“题目背后的产品约束”说出来。

真题 1:Split stay / booking 分段入住

题目大意:给定若干 hotel/property 的可用日期和用户请求区间 [start, end],判断能否用两个或多个 property 覆盖完整入住区间。

考点分析: 这题可以建成 interval coverage。关键是日期边界:入住日/离店日是否包含、区间能否无缝衔接、是否允许换房、最多换几次。基础解法可以排序 + greedy,follow-up 可能变成最少换房次数或返回具体方案。

真题 2:Linked list 有环 + intersection

题目大意:两个链表可能有环,判断是否相交,或返回交点。

考点分析: 这是经典题,但 Airbnb 会看你是否覆盖所有组合:无环/无环、有环/无环、有环/有环。准备时要能用 Floyd 找环入口,再分情况讨论。只写无环双指针是不够的。

真题 3:Chat system + topN group chat

题目大意:设计聊天系统,支持私聊/群聊、消息存储、在线状态,follow-up 追问 topN group chat 或热门群聊优化。

考点分析: 这题不能只说 WebSocket。要拆 message table、conversation table、membership table、read receipt、fanout on write/read。topN 部分要说明按什么窗口排序、是否近实时、如何防止大群写放大。

真题 4:Distributed KV store with prefix pagination

题目大意:实现或设计 KV store,支持 get/put/delete,以及按 prefix 分页读取,例如 get(key*),同时考虑 eventual consistency 和高可用。

考点分析: prefix pagination 会把普通 KV 拉向 LSM/tree/index 设计。要讲 key ordering、cursor token、page size、consistent snapshot,以及 delete tombstone。系统层面要讨论 replication 和读写一致性。

真题 5:Listings 页面超过 100 个时如何优化

题目大意:当搜索结果或房源列表超过 100 个,如何优化页面加载和用户体验。

考点分析: 这是前端/全栈候选人的高频业务题。回答要包括分页或无限滚动、图片懒加载、地图 marker 聚合、server-side ranking、缓存、首屏指标和 A/B 指标。不要只说“加缓存”。

高频题最优解速查

Split stay / booking interval coverage

最优解思路: 把每个房源可用时间看成 interval,目标是覆盖请求区间。通用解法是按 start 排序,用 greedy 每次选择在当前 covered_end 之前开始、并能延伸最远的 interval。若限制最多两个 property,可以枚举第一段或在扫描时记录最远覆盖。

复杂度: 排序 O(n log n),扫描 O(n)。

面试要讲的边界: 日期区间是闭区间还是 [checkin, checkout);是否允许中间换房;最多换几次;返回 boolean 还是实际房源列表。

有环链表 intersection

最优解思路: 先用 Floyd 找两个链表的环入口。无环/无环用双指针;一个有环一个无环必不相交;两个都有环时,如果环入口相同,交点可能在入环前,按无环交点处理;如果入口不同,绕环一圈看能否遇到另一个入口。

复杂度: O(n + m),空间 O(1)。

面试要讲的边界: 环入口就是交点;两个链表在环内相交但入口不同;链表为空;节点相等是 reference 相等,不是 value 相等。

Chat system + top N group chat

最优解思路: 核心表:conversation、membership、message、read_receipt。小群可 fanout on write,大群可 fanout on read。top N group chat 不要实时扫 message 表,可维护窗口计数或异步聚合。

复杂度: 发消息写入 O(1),fanout 取决于群大小;topN 用 heap/sorted set 更新通常 O(log n)。

面试要讲的边界: 大群写放大、离线消息、read receipt、消息顺序、重复投递、热门群计数窗口。

Prefix pagination KV store

最优解思路: key 要有序存储,可用 sorted map / LSM / B-tree。prefix 查询转成 [prefix, prefix_next) 范围扫描;分页用 cursor 记录最后一个 key 和 snapshot/version。

复杂度: 查询 O(log n + page_size)。

面试要讲的边界: cursor 不能只用 offset;删除 tombstone;分页期间数据变化;eventual consistency 下是否需要 stable snapshot。

可直接练习的答案骨架

Coding sample:Split stay interval coverage

def cover_stay(intervals, start, end):
    intervals.sort()
    ans = []
    i = 0
    cur = start

    while cur < end:
        best_end = cur
        best_interval = None
        while i < len(intervals) and intervals[i][0] <= cur:
            if intervals[i][1] > best_end:
                best_end = intervals[i][1]
                best_interval = intervals[i]
            i += 1
        if best_interval is None:
            return None
        ans.append(best_interval)
        cur = best_end

    return ans

OOD class definition:Booking domain

from dataclasses import dataclass


@dataclass
class DateRange:
    start: int
    end: int

    def can_connect_to(self, other):
        return self.end == other.start


@dataclass
class PropertyAvailability:
    property_id: str
    available_range: DateRange


@dataclass
class StaySegment:
    property_id: str
    date_range: DateRange


class SplitStayPlanner:
    def plan(self, availabilities, requested_range):
        raise NotImplementedError

System design:Chat system

flowchart LR
    Client --> Gateway["WebSocket/API Gateway"]
    Gateway --> MessageAPI["Message Service"]
    MessageAPI --> DB[("Message DB")]
    MessageAPI --> Fanout["Fanout Workers"]
    Fanout --> Push["Push/Notification"]
    Client --> ReadAPI["Read Receipt API"]
    ReadAPI --> DB

API design

POST /conversations
POST /conversations/{id}/messages
GET /conversations/{id}/messages?cursor=...
POST /conversations/{id}/read-receipts
GET /users/{id}/conversations

Data model

conversations(id, type, created_at)
conversation_members(conversation_id, user_id, role, joined_at)
messages(id, conversation_id, sender_id, body, created_at)
read_receipts(conversation_id, user_id, last_read_message_id, updated_at)

Airbnb 场景里要讲私聊、群聊、大群 fanout、消息顺序、未读数、删除/撤回和 topN group chat 的异步统计。

题目逐题答案速查

Coding:linked list cycle + intersection

Sample code

def cycle_entry(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow is fast:
            slow = head
            while slow is not fast:
                slow = slow.next
                fast = fast.next
            return slow
    return None


def intersect_no_cycle(a, b):
    p, q = a, b
    while p is not q:
        p = p.next if p else b
        q = q.next if q else a
    return p

讲解重点: 两个都有环时,若入口相同,交点可能在入环前;若入口不同,绕一个环看能否遇到另一个入口。

Coding:retrier

Sample code

import random
import time


def retry(fn, max_attempts=3, base_delay=0.1):
    for attempt in range(max_attempts):
        try:
            return fn()
        except Exception:
            if attempt == max_attempts - 1:
                raise
            delay = base_delay * (2 ** attempt)
            jitter = random.uniform(0, delay)
            time.sleep(delay + jitter)

OOD:booking split stay

classDiagram
    class Property {
      property_id
      location
    }
    class Availability {
      property_id
      start_date
      end_date
    }
    class StaySegment {
      property_id
      start_date
      end_date
    }
    class SplitStayPlanner {
      plan(request, availabilities)
    }
    SplitStayPlanner --> Availability
    SplitStayPlanner --> StaySegment

System design:search and booking order query

Flow

flowchart LR
    Client --> SearchAPI["Search API"]
    SearchAPI --> SearchIndex[("Listing Search Index")]
    Client --> BookingAPI["Booking API"]
    BookingAPI --> BookingDB[("Booking DB")]
    BookingAPI --> Payment["Payment Service"]

API design

GET /search?location=...&checkin=...&checkout=...
POST /bookings
GET /bookings/{id}
GET /users/{id}/trips

Data model

listings(id, host_id, location, capacity, status)
availability(listing_id, date, available, price)
bookings(id, listing_id, guest_id, checkin, checkout, status)

Frontend:listings > 100 optimization

答案骨架: server-side pagination + ranking;图片 lazy loading;map marker clustering;首屏只取 above-the-fold;滚动分页用 cursor;缓存搜索条件和结果。

准备重点

Coding:准备业务包装题,不要只记 LeetCode 原题。要能把题抽象成图、KV、interval、reservation、state transition。

Code Review:重点看正确性、边界、测试、幂等、权限和性能。评论要有 priority,不能只挑命名。

System Design:Booking 类题重点是库存、hold、支付、超时、取消和防止重复预订;ticket 类题重点是 claim、routing、SLA metrics。

Past Experience:准备一张架构图,讲清目标、团队规模、你的模块、指标、tradeoff 和失败复盘。

7 天冲刺计划

  • Day 1:整理 Airbnb 目标岗位和轮次。
  • Day 2:练业务包装 coding。
  • Day 3:练 code review mock。
  • Day 4:准备 booking system。
  • Day 5:准备 ticket/support system。
  • Day 6:整理 past experience 项目。
  • Day 7:做一轮 full loop 模拟。

常见失分点

  • System design 前面 clarification 花太久,后面没时间 deep dive。
  • Code review 评论太浅,只说风格不说生产风险。
  • Past experience 没有图、没有指标、没有个人贡献比例。
  • Core value/HM 回答太泛,听起来不像 Airbnb 定向准备。

CTA

如果你已经拿到 Airbnb 面试,建议按具体轮次做组合训练:coding、code review、system design 和 past experience。你可以在服务和价格页面查看服务;也可以通过联系我们页面发送面试时间和轮次安排。

Previous
Previous

Amazon 面试题型总结整理:OA、SDE VO、System Design、Applied Scientist 和 Leadership Principles 怎么准备

Next
Next

Senior 工程师 HM 轮怎么答:技术深度、项目影响力和职业动机