YOE: 5+
Current location: San Francisco
Offer: $400K
Past interview experience with FAANG:
- 2014: Google, London, internship, rejected
- 2017: Amazon, San Francisco Bay Area, SDE2 L5, offered but declined due to a personal issue (deeply regretted until now)
- Phone screen: coding + LP
- Onsite 1: coding + LP
- Onsite 2: OO design + LP
- Interviewer: what game do you like?
- Me: Starcraft
- Interviewer: good, can you design a game like Starcraft?
- Me: (insert surprised Pikachu meme)
- Onsite 3: Distributed system design + LP
- Onsite 4: coding + LP
- Onsite 5: LP with hiring manager
- Manager: how have you done so far?
- Me: I liked the questions, I was afraid if I was asked to balance binary search tree (because that joke was popular at that time)
- Onsite 6: bar raiser, only coding
- Interviewer: sorry, I'm late. I just want to ask you one question. Could you balance a binary search tree?
- Me: (insert surpised Pikachu meme)
- 2018: Amazon, San Francisco Bay Area, SD3 L6, rejected
I expected harder coding interview questions, but I was so wrong. I only had 2 coding questions and they were even easier than my previous L5 interview. There were no OO design question either. Instead, I was tortured with LP from the phonescreen, and it was award since I told the same story again for 2 or 3 interviewers.
- Phone screen: LP
- Onsite 1: LP with hiring manager (another manager was shadowing)
- Onsite 2: LP
- Onsite 3: coding + LP
- Onsite 4: system design + LP
- Onsite 5: coding + LP
- Onsite 6: bar raiser, LP
- 2018: Google, Mountain View, L3 or L4, rejected
- Phone screen: dynamic programing, I could only figure out the brute-force O(8^N), but I said I would you cache to optimize
- 4 round of coding interview + 1 round about domain-specific questions
- July 2020: Google, Mountain View, probably L5, rejected
- Skip phone screen
- Onsite: 1 behavior + 3 coding + 1 system design
This is my first interview with Facebook
- Phone screen: 2 questions
- LC medium question using by 2 binary searches
- LC medium question using BST
- Virtual onsite 1: one question
- It was supposed to be an easy warm-up question. I proposed two solutions: one with DFS and hash map, another one with Union-Find
The interview did not know what Union-Find was, and kept asking about it. So I ended up using the rest of the interview to implement a Union-Find data structure.
- Virtual onsite 2: behavior. Had a relaxing chat with a very senior manager, who had worked in Microsoft Research for decades.
- Virtual onsite 3: 2 questions
- First question: I figured out the backtracking solution immediately, and working toward a memoization approach. The interviewer stopped me after 20 minutes and asked the second question.
- Second question: BST, I solved in 5 - 7 minutes, and then continue working on the first question for the rest of the interview, but couldn't finish the memoization approach. Later that date, I found the first question on leetcode. It was a medium question and the most voted solution is still a brute-force backtracking solution.
- Virtual onsite 4: system design is my strongest point.
Timeline from onsite to offer letter
- Virtual onsite was on Thursday
- Friday: recruiter had all the feedback, asked me about expected TC.
- Monday: recruiter submitted package, it passed the debrief of HC.
- Tuesday: VP approved an E5 offer. Negotiated TC.
- Thursday: final negotiation about TC.
- Friday: received offer letter.
I was really happy with my recruiter who called me everyday to update the status.
Preparation:
298/1585 Solved - Easy 108, Medium 156, Hard 34.

I didn't start from nothing, I did all the questions in crack the coding interview in 2018. In 2014, I read the whole book "algorithm design manual" of skiena. But to be honest, I don't remember much, apart from nice war stories.
- Tushar Roy's channel is most helpful for me. I learned Union-Find from his video, and was able to use it during the interview.
- I also listened to other channels: Nick White, Back2back SWE, but they do not provide much intuition.
I felt that I was very lucky. I could solve very few LC hard questions, and I passed the interview because I did easy/medium questions flawless. In fact, in all my interviews with Google, Facebook and Amazon, all questions are easy/medium that I could see a direction right away. If I was asked the skyline problem, I would not write a single line of code. And I couldn't balance the binary search tree.
I didn't buy LC premium. Well, I planed to buy one month subscription after solving all public lists, but I hadn't finished the lists before the interview. Google "Leetcode problems classified by company".
- Learn from mistakes. One feedback I received from my Google interview in July was that I had missed many corner cases. I then realized that when practicing on Leetcode, I had developed a bad habit of submitting solutions and correcting it from failed test cases. Sometimes I made more than 20 submissions for a single problem. This habit costed me my Google interview. So for one month, I changed the strategy, and only submitted the solution when I thought there would be no errors. If there were, I took notest of the patterns. My acceptance rate went up from 50% to 60%. This really helped during my Facebook interview.
- When practicing on LC, I kept forgetting, and I couldn't solved the questions I thought I had understood. Later, instead of learning the solution, I tried to learn the intuition and thought process. For example, the intuition of QuickSelect is not different from that of binary search (and delta debugging). This does not always work, I couldn't figure out the intuition of KMP, and kept forgetting it after a couple of weeks. When I looked for the solution in LC discussion, I only tried to learn the one with intution. For example, for the problem find the duplicate number, I only tried to learn the O(nlogn) binary search solution. If someone rejected me because I couldn't do the O(n) hare-and-tortoise algorithm, I would accept that (I have never been asked this question).
System design
My primary source to learn system design is my current project. It has hundreds of components, and hundreds of millions of lines of code. I only work on some small components, which I designed from scratch, but for years, I have tried to learn about my project: listening to recorded training sessions, reading design documents, talking with several staft/principal engineers (because each one only understands some components). Until now, I am only able to understand a small part of the system, but I have learned a lot. I also did 5 mock interviews in PRActice Make Perfect.
Negotiation
There are many tips about negotiation on the internet, but it is easier said than done. For me, I always tried to be honest. The recruiter is my future colleague and I don't want to appear as someone too greedy, unhonest, or difficult to work with.
- It is always advised that you should not give a number first, but it's not possible for me because I'm not good at communication (I'm not even good at English). So I did some research (on levels.fyi and this post), and told them my expected TC.
- I showed a strong commitment that I woud accept the offer immediately if they can meet my number, that I would not use the offer to negotiate better TC at other company, and that I would not go back and forth asking for more than that number.
- I also made very clear that if they could not meet the number I wanted, I would need 3 weeks to interview with other companies before I could make a decision.
Maybe honesty is the best policy. Maybe I was just lucky. I got what I wanted, and the recruiter was also happy. I think it was a win-win. What I asked for is just a bit above the median in levels.fyi, considering that I'm local and I don't need any visa sponsor (so the company saved ton of money in relocation package and lawyer fee).
Trivia
- You could thank your interviewers in your Facebook career profile page. I thanked all my interviewers right after the interviews.
- I started running at the same time with starting LC, i.e. around mid March. At the beginning, I could run for only 10 minutes, now I can run for 1 hour. I ran on each day of my interviews, which started at 10 or 11 AM. Running made me feel energetic, and I didn't get exhausted after 4 or 5 hours interview.