Short background about me:
- I did some competitive programming back in highschool (04-07) but didn't do a lot of practice after that. I still have a good amount of understanding, just a lot of practice will bring back all the knowledge
- I join Microsoft out of college in 09/2014 and been with the company since -> 6.5 YOE, currently an SDE2 there
- Had a kid last year, so lots of motivation to jump ship for better TC.
Timeline:
- I started looking outside Microsoft end of December.
- I’m fluent in c# but heard that Python is much easier and faster for interview, so I self-taught myself Python to deal with the interview. As well as knowing another popular language will give me much more options and opportunities anyway
- With work going on, I spend around an 1-2 hour every day to work on 2-4 problems every day. Starting with easy questions, and try out medium once I got ahold of things again
- I took PTO at the end of Jan so I can focus 100% on practicing. That’s where I worked on about 10-15 problems a day (mostly medium, 1-2 hard) for around 2 weeks. Then it’s a share between Leetcode and System Design practicing
- It took about 2 months of practicing before my first virual onsite interview
Process:
Amazon:
- Recruiter reached out to me on Linkedin. I also knew that my former teammate in microsoft is currently hiring for his team in Amazon. So I reached out to him to set things up with the recruiting process
- Online assessment is 60 minutes coding of 2 questions on HackerRank followed by a bunch of multiple choice regarding leadership principle. Coding was ok, around easy/medium difficulty. The multiple choice after is a real pain, as you never know when it's gonna end
- Virtual Onsite: : 4 rounds. 3 coding and 1 system design.
- Every round will start with 30 mins of leadership principle
- Coding is fairly simple as you only have around 25-30 mins for coding and QnA with the interviewer
- 1 coding will be with what Amazon calls a Bar Raiser. Not much compared to other coding rounds
- System designs will be fairly simple as well because of timing.
- Got rejection email after a week. Coding/Technical was good but my LP part wasn't too strong.
Uber:
- Got a referral from a friend. Recruiter reached out 2-3 days after and set things up
- Online assessment: 1 hour, contains 4 questions (2 easy, 2 medium). Usually, the last question will be the most challenging. You can submit as many times as you like in that 1 hour, and don’t feel bad if you couldn’t get the maximum score. Personally, I didn’t achieve the maximum score either, but was sent to onsite
- Virtual Onsite: 5 rounds. 3 technical rounds (1 will be system design), 1 with hiring manager (usually some Behavior and some Coding), 1 Behavior
- Every round will 1 hour long.
- Coding is around leetcode medium. The difference is Uber is using codesignal as online IDE, and will ask you to write code until it compiles as well as running test case correctly
- Round with hiring manager is your chance to talk more about your background, strength and weaknesses as well as ask more information about the team
- System designs will be on the anywhere from easy -> hard, depends on the level you’re applying.
- Got an offer for L4 next day
Google:
- Got a referral from a friend. Recruiter reached out 2-3 days after and set things up
- Phone Interview: Google decided to skip this round for me. Don't know why, I'm just glad :)
- Virtual Onsite: 5 rounds. 4 technical rounds and 1 Behavior
- Every round will be 45 minutes long.
- Coding is around leetcode medium/hard. From what I heard, Google tends to ban any questions that got leaked outside, so it’s rare that you’ll see something on Leetcode in your interview.
- I heard from others that Google is notorious hard and if you cannot code the optimal solution, you’re gone. But that is not always the case for me.
- Also, since I’m applying for L4 in Google, there’s no System design. The recruiter did encourage me to shoot for L5 but since Google is my target company, I tried to reduce the risk.
- Got a call a week later from the recruiter saying that my interview feedback is good and he'll submit my package to HC. Got another call 3-4 days later telling that I've gotten HC approval and move to Team Match process. Team match Process took around 2-3 weeks and one team agree to move forward with me. An offer is sent out not long after that.
Facebook:
- Recruiter reached out and kept the process painless for me. Facebook is not hiring E4 so going for E5 is my only option
- Online assessment: It’s 1 hour. My experience is 1 leetcode easy and 1 leetcode medium
- Onsite interview: 5 rounds. 3 technical rounds, 1 System design and 1 Behavior
- Every round will be 45 minutes long.
- Coding is around leetcode medium/hard. I did around 220 questions on Leetcode that has Facebook tag and had no problem with coding interview
- System design round was quite pleasant, lots of interaction from the interviewer so it's more like a design discussion.
- Got an offer 1 weeks out.
Overall, my interviewing experience was very nice and I really enjoyed it. At the end, I decided to join Facebook because of its level as it would save me a at least a couple years if I chose Google/Uber instead. Only time will tell whether I've made the correct decision, but at least I know that I'm not as bad as I think I am and I can really ace an interview if I really put in the effort.