Status : 8 years of experience
Position : Senior Software Engineer in an eCommerce company
Interview Experience
Technical Phone Screen (45 mins)
Was asked 2 medium level questions, 1 of them was a LC medium and other was new to me but was easy-medium level. Was able to solve and code both in time.
Onsite Algo/DS Round 1 (45 mins)
Was asked 2 LC medium questions. Was able to solve and code both in time. Made some silly mistakes in the first question but was able to correct myself. The interviewer seemed satisfied with my solution.
Onsite Algo/DS Round 2 (45 mins)
Was asked 1 LC medium and 1 LC hard. Coded both with 10 mins to spare in the interview. This was the best round for me.
Behavioural Round (45 mins)
Had a very good conversation about my past experience and the usual behavioural questions. I had a good connect with the interviewer. This one went well.
Design Round (45 mins)
Here comes the bad stuff. I was asked to design a proximity server. I did very bad in this one. I got stuck in the approach itself. Once I solved the approach, there was no time left to deep dive into some of the components. I expected to get rejected after this round.
Luckily, I got a second chance. They scheduled a follow up design round for me.
Follow Up Design Round (45 mins)
I was prepared for this one. I was asked to design a web crawler. I followed the usual template. Discussed the functional and non functional requirements. Gave a high level approach based on BFS. Started designing it. Was able to design a working approach in 10 mins. The diagram was not good since it I made changes incrementally. Took 5 mins and re-drew it cleanly. I discussed in detail about how a pub-sub system can be used to simulate the BFS queue and how we can partition the urls. Visited state will be simulated by a strongly consistent database like MySQL. I also discussed how we can parallely process these partitions by making sure each processor node is assigned to one of these partitions. Node-partition assigment will be handled by Zookeeper. Talked a lot about fault tolerance - node faulires in processor nodes and pub-sub system. Discussed tradeoffs between DFS and BFS. The interviewer seemed satisfied.
I thought it went well.
Got a rejection a few days later. Reasons were that I didn't do enough quantitative analysis and there were not enough trade off discussions.
While discussing about pub-sub systems, I had mentioned Kafka and he kept asking me about some Kafka basics. I happily answered them. At one point, he mentioned he isn't sure how it worked. So I went further into details and explained him. He seemed satisifed. The interviewer was a front-end (app) developer and it could be because of that.
I was really disappointed that I was rejected and it took me several days to come out of it.
Preparation
I mostly focused on coding. I did around 250 problems before my phone screen and solved another 250 before my onsite. Did all FB and Google mock interviews and regularly participated in weekly contests. After doing about 250 problems, I was able to consistently solve 3 out of 4 in weekly contests and solved all 4 once. Usually it takes me around 45min-2 hours for the 4th problem, depending on the difficulty level. I was confident of my coding prerparation.
I prepared for design interviews only in the last 2 weeks of onsite. This was because I was fairly confident in it as I do a fair amout of designing in my current job. But clearly, it didn't work out for me. I felt I did well in my follow up design round but clearly I didn't check all the boxes.
Extremely dissapointed that I couldn't get the offer after months of rigourous preparation. Hopefully, I can come out of this disappointment and continuing my learning. Life must go on !
Lessons learnt
Lastly, thanks to the LC community. This is a wonderful platform for learning and keeping your mid sharp. I have made it a habit to do at least one LC problem a day.