[Continue from part 2]
The next day, I received a few emails from the recruiter regarding how to prepare for the upcoming technical phone screen. I opened them and read thoroughly. Basically, they were:
- Gayle Laakmann McDowell’s famous interview techniques:
- Cracking the Coding interview.
- Cracking the soft skills.
- A link to watch a live sharing session by Gayle. They hosted interview prep sessions at the Facebook headquarter twice a week.
- Articles and videos about interview tips from Google and Facebook.
- Some websites to practice coding problems.
I spent several days reading through all the materials (articles, blogs, books, videos). They were quite entertaining to read though. I learnt a lot of about the interview settings and what would be expected of me as a candidate. The most useful resource was the book “Cracking the Coding interview”. It had everything I needed to know about interviewing at big tech companies.
Now, I needed a plan to practice as many coding problems as possible. Since I still had a job at the time so I could only study at nights and weekends. I came up with a plan like this:
- I chose https://leetcode.com/ as the main source of questions.
- I registered for a premium account which would allow me to filter questions by companies.
- I only solved Facebook interview questions.
- There were 3 types of questions on Leetcode: Easy, Medium, Hard.
- I only picked “Easy” and “Medium” questions because I believed that there wouldn’t be enough time to solve a “Hard” problem during a one-hour interview, not to mention about the time for introducing each other and chit chat to warm up before the real deal.
- Every night, I tried to solve 1-2 “Easy” questions. (I will talk a bit technical down here, so maybe only programmers will understand)
- Not only did I try to solve the problem as fast as possible, I also practiced speaking out loud as I was iterating on the solution. This was super important because it helped the interviewer understand what I was thinking and what I wanted to do next.
- After finishing the solution, I practiced testing it by giving an example input and debugging the code line by line.
- Then I thought of edge cases, Big O and how to optimise it.
- There was a section on Leetcode that explained about the various approaches to the problem and what the best solution would be. That was very insightful to read.
- I didn’t try to write code on a whiteboard at this stage as it may not help much during a technical phone screen.
- On weekends, I solved “Medium” problems.
- During my free time on the road, I used my phone to read interview questions on Glassdoor (a platform to share anonymously about salaries, interview questions, work environment of many companies). The number of questions were a bit overwhelming though. I realised that nothing was secret in this world. Everyone talked about everything on the internet. So the problem wasn’t the lack of information, but rather about whether you were willing to spend the time to read it.
After a few weeks, I felt more than ready.
Then the interview date came, this time it happened early in the morning, around 6 am Vietnam time. I got up early and sit down at my computer. I still felt a bit nervous, but not as much as the previous round.
As the clock was ticking, I received a friend request on Skype and the call started.
This time I interviewed with an engineer. He shared his webcam so I could see his face. He’s an American guy with beard and glasses, maybe in his 30s. He said he’s an engineering manager of an iOS team at Facebook. We introduced ourselves to each other and then the real interview began.
He gave me a link to an online code editor called Coderpad. Then he pasted the first question which was about “removing duplicates from an array”.
This question was quite an easy one. However, because this was the first time I ever coded live in front of an interviewer, I was nervous as hell. But I didn’t forget my practice. I started to speak out loud about what I was going to do step-by-step and typed the code at the same time. There were some hesitation and confusion but I managed to finish the solution in maybe 10-15 minutes. Then I gave an example input and tested my code. He seemed to be okay with this and quickly moved on to the next question.
This time, it’s about “tree traversal”, but not complicated. I did the same practice and reached the solution pretty fast. He then spent a few minutes checking my solution and confirmed that it was correct. He smiled and praised me for talking my mind out loud and even testing the code thoroughly at the end. He was impressed.
“This is the end of the interview. Do you have any questions”, he asked.
I did, as always. This time I mostly asked about technical stuff, things like: how Facebook deploy such a big iOS app, automated testing, memory leak detection, etc.
There was only one non-technical question:
Question: How’s life at Facebook?
Answer: I really enjoyed working at Facebook. I have opportunities to move among teams to challenge myself. Everyone is smart, not only engineers but also designers and product managers. All of them are passionate about their work and the impact that they’re making. Sometimes, we had arguments about what architecture we should use but those were healthy and constructive so yeah, I am enjoying my time here.
Then the call ended.
“Yes, I did it”, I shouted.
Although I still needed to wait for the official result, I knew that he liked my interview performance. I had a very high chance of going to the onsite interviews in the US. I couldn’t describe how happy I was at the time but I was smiling cheerfully the whole day.