Airbnb Software Engineer Interview Experience — Phone Screen, Then a Five-Part Onsite With a Brutal Experience Deep Dive
Company: Airbnb
Role: Software Engineer
Round: Onsite
Seniority: General
Company: Airbnb
Role: Software Engineer
Round: Onsite
Seniority: General
Phone screen: LC 1235
Onsite
// 1: Any refund should be issued in full for a payment before considering next payment.
// 2: Refund will be prioritized among different payment methods based on such order: CREDIT, CREDIT_CARD, PAYPAL.
// 3: Refund should be issued to more recent payment.
// Example 1
// Transactions:
// Payment1: Credit, 2023-01-10, $40
// Payment2: Paypal, 2023-01-15, $60
// Input:
// Refund amount: $50
// Output:
// Refund a: linked to Payment1, Credit, $30
// Transactions:
// Payment1: Credit, 2023-01-15, $40
// Payment2: Paypal, 2023-01-10, $60
// Payment3: Paypal, 2023-01-20, $40
// Refund1: linked to Payment1, $20
// List<String>
// Refund 50
// refund a: linked to Payment1, credit, $40
// refund b: linked to Payment2, Paypal, $10
Honestly the problem itself wasn't hard, but you had to handle the input/output strings yourself. I used Java, and with 45 minutes that also had to include small talk, I was pretty nervous, and it was just annoying.
Code review: the interviewer was genuinely helpful, you could tell he actually wanted to help. The content was about the same as the Python version already posted on the forum.
SD: design a notification system.
Experience deep dive: don't take this round lightly. The interviewer digs into the details — specifically the timeline and scope of every project you worked on, and exactly what everyone did — very, very closely. I originally thought this would be a traditional behavioral question, but I didn't answer it very well; there were some project details I just couldn't remember.
There's also a culture round — basically storytelling, why you like Airbnb.
Addendum (2025-01-25 15:52 +08:00):
I noticed there's an issue with the output for this coding problem — it's probably been too long and I made a typo when copying it over. From what I remember, for example 1 the output should be:
Refund a: linked to Payment1, Credit, $40
Refund a: linked to Payment2, Paypal, $10
Example 2 is correct, because the payments before the Refund1 in the input already cover the $50 that needs to be refunded.