Status: B.E Comp Science from tier-3 college, 3 years experience.
Position: SDE at an Indian product based company.
This is going to be a long post. I like writing :p
The first part will be the interview experience itself, the second one will be personal experience, tips, musings etc,
Recruiter reached out to me on LinkedIn regarding this job opportunity. Fortunately I was already preparing for about 2-3 months (mostly cp) so I agreed and she setup the online assessment about a week later.
Online assessment
2 questions. The first problem was a BFS based question, easy-medium. Solved it with ease, all test cases passed. Second problem was an array based problem again easy-medium. Had a small bug in my code that I couldn’t find and started panicking a bit. Fortunately since I solved the first one quick, left me a lot of time for this one. Found the issue, fixed it, all test cases passed.
After this the recruiter informed me we can start the interview process. I requested for about 2-3 weeks for prep and I got that much. She sent over a few docs regarding the process and things to revise. First two rounds happened on the same day, one after the other.
First round (DS/Algo/Problem solving)
Straightaway started with the problems.
Second round (DS/Algo/Problem solving)
Recruiter called me up 2-3 days later and informed me we will move on to the next rounds. She didn’t have much feedback but said problem solving feedback is good. Again 2 rounds happened next week on the same day, back to back.
System design round
Asked me to introduce myself, my role currently in depth. Then a few Leadership Principles (LP) questions were asked. Also delved into some technical aspects of a project mentioned on my resume. Asked me the trade-offs/design choices I had made in it, reasoning for it etc.
Then he asked me to design a massively multiplayer online game like Pubg. Asked clarifications and framed a definite problem statement for myself, did some capacity estimation. Gave a rough architecture, then he immediately deep dived into how to match players, find players of same level, handling peak game time when many are online etc. I tried to separate concerns for the mobile client and server, pre spawning of game rooms in anticipation of peak time, cut off time after which game can be started with less players/bots, thread/process for handling a single game which will receive 100 (players) * 60 (fps) updates per second over sockets etc.
I like real world problem solving, so I did well. We were still discussing approaches and time was up. Initially he said he wanted to try and get a low level diagram too but we spent a lot of time on the high level architecture itself.
Hiring manager round
Again started with me introducing myself and then into LPs. His approach was interesting. He would ask a LP question, then delve into some technical aspects of my answer. He went deep into the technologies I mentioned to check my understanding of it. LP questions can sometimes throw up a surprise and only experience can help you there. For example - I was explaining how we solved a file fetching issue in my current job by using an in-memory cache like Redis. He asked me what other choices did you have? What could be the potential issues with your in-memory cache approach? It forces you to think. I thought for a while and said that serialising/deserialising over network could be an issue with using Redis for large chunks of data.
Be prepared to justify any technical choice you had to make, even realise potential pitfalls in the best approach. Then he asked me to design a system like the Youtube recommendation system. I decided an architecture which uses a message queue into which analytics events regarding views/likes/time spent on video are being pushed, a Lambda to batch analytics requests, NoSQL store for big data, offline ML model which will generate recommendations. What recommendations can be given when the ML model is still training for a new user? Use a simple market basket algorithm which will give recommendations based on similar users (what Amazon retail site uses) till recommendations generated. This round I felt, went really well.
HR contacted me, setup the final bar raiser round for next week. She did not have any feedback from the last rounds.
Bar raiser round
Intro, LPs. Gave me a programming problem, for each element find the first element larger than it to it’s right. I had feeling a stack would work, after working out a few examples found the solution. After coding it up, interviewer asked me to reduce the lines of code. First time I had encountered this. He said there are a few redundancies in code, I checked and removed whatever I could. Follow up - use the same stack to find the first number smaller than each element to it’s left. A little head scratching then I got the solution. Again he asked me to modify existing code itself with minimal change. Took only a one line change actually.
About 40 mins were over by this point. He said for the design problem, he’ll consider my performance from earlier rounds. I deduced that either design rounds either went really well or really bad 🙂
About a few days later, got a call saying I had been selected! Very satisfying experience. Finally got into a FAANG company. Overall process was very smooth, I was kept well informed. Hiring Manager later called me up, asked me to shoot any questions I like. Explained about the role, tech etc. This was a really nice gesture. He also urged me to call him up for any doubts I have before I joined 2 months later (have a notice period of 2 months). Compensation details - https://leetcode.com/discuss/compensation/865832/Amazon-or-SDE2-or-Chennai
Tips
Aside from all this, I believe in India brand name is a big thing to land interviews unfortunately. I know a few startups who allow graduates only from ‘IIT/BITS’ (premier Indian universities) to apply. You can’t even apply or send in your resume! I desperately hope I am wrong about this but you do need either a good college or company on your resume (for big companies). Sometimes even that may not be enough, I joined my company as a Web Developer. A year back when I was looking to switch, I would land no interviews from big companies. Even getting referrals wasn’t enough. In one case, a senior PM I knew referred me for a big online payment co, despite this I wasn’t even called for interviews and got a rejection mail in a few days.
Things changed once I was promoted at my current company. I applied internally and passed all interviews, got promote to SDE. For those who don’t have a brand name on the resume, do not lose heart. Keep preparing and applying, whether you will be called or not for an interview is not in your hands. Even back then as a web developer I landed a few offers at good startups/product companies after a long struggle.
You can also read my recent Uber interview fail here - https://leetcode.com/discuss/interview-experience/730072/Uber-or-SE2-or-Hyderabad-or-July-2020-Reject
This was a great journey for me. Although the destination is important, this journey definitely made me a better developer. There were moments of anxiety and panic attacks too. At the end of each day I asked myself, did I give my 100% today and am I better than I was last week? Remember the easiest person you can fool is yourself. Enjoy the journey, learn as much as you can. Don’t let an interview decide your worth. Keep your spirits up!
“Life is a shipwreck, but we must not forget to sing in the lifeboats.” - Voltaire