Level: Senior-Level · L5
Round: Full Journey · Type: Multiple Types · Difficulty: 6/10 · Duration: 480 min · Interviewer: Unfriendly
Topics: Algorithms, System Design, Behavioral Questions, Bit Manipulation, Data Structures
Location: San Francisco, CA
Interview date: 2025-11-30
Question: Introduction to the role (15 minutes).
Question: Coding problem related to split stays at Airbnb listings (45 minutes).
Question: Coding problem (45 minutes).
Question: Coding problem (45 minutes).
Question: Deep dive into my resume and projects (45 minutes).
Question: Designing the landlord page to integrate information such as the number of nights booked and average price, and optimizing the design when there are over 100 listings (45 minutes).
Question: Deep dive into my resume and projects, along with behavioral questions (45 minutes).
Question: Behavioral questions focusing on Airbnb's core values (45 minutes).
The coding question I got in VO1 and VO2 was:
Suggest a split stay where you stay at 2 different houses, one for the first part of your trip and other for the remainder. Make an API endpoint that will return all possible combos of split stays across 2 listings for a given date range. Give each listing a name ("A" "B", etc.) and our availability will just be a list of day numbers. For example: A - [1,2,3,6,7,10,11]; B - [3,4,5,6,8,9,10,13]; C - [7,8,9,10,11] Given the date range [3-11], the expected result is all sets of two Airbnbs that could form a split stay: [B, C]
My approach (brute force solution):
`python from itertools import combinations
def find_splits(listings, start_date, end_date): desired_days = set(range(start_date, end_date+1)) splits = [] for a,b in combinations(listings.keys(), 2): a_set = set(listings[a]) b_set = set(listings[b]) if desired_days.issubset(a_set) or desired_days.issubset(b_set): continue combined_days = set(listings[a]) | set(listings[b]) if desired_days.issubset(combined_days): splits.append((a,b)) for a in listings.keys(): a_set = set(listings[a]) if desired_days.issubset(a_set): splits.append((a)) return splits
listings = {"A": [1,2,3,6,7,10,11], "B":[3,4,5,6,8,9,10,13], "C":[7,8,9,10,11]} print(find_splits(listings, 3,11)) print(find_splits(listings, 11,11)) `
I also provided a bit mask solution.
The system design question in VO4 was:
How would you design the landlord page to integrate information such as the number of nights booked and average price, and optimize the design when there are over 100 listings?
Assumptions: