So finally got a chance to be interviewed at my dream company and I was able to blow it successfully in the last round 😑. I’ll detail the last question asked, here. The learning was great nonetheless. Here’s how it went:
Round 1:
It was a machine test comprising 2 DSA questions. Both were of medium difficulty. If you’ve solved at least 200+ hard questions on LeetCode or 400+ medium, or have 4 or more stars on Codechef, this won’t be difficult. Had to make sure to clear at least 50% of the test cases.
Round 2:
It was a F2F round. I was asked 2 DSA questions, and 1 question on time complexity. The first DSA question was on binary trees (didn’t really expect it here), and the second was on recursive polymorphism. Was able to clear it without issues.
Round 3:
It was again a F2F. This time I was asked 3 DSA questions (on dynamic programming alone) and 1 High-Level System Design question. The question was:
Design an elevator system (4 elevators for 8 floors) that works just like any elevator, except that no 2 elevators would ever stop at the same floor at the same time. And, there are cameras installed in front of elevator gates, which can count the heads of the people waiting outside, compare it to the available weight in the elevator, and may open the gate if needed. Side question, what would you suggest to improve upon the existing elevator system if you had to design the software?
This went really well.
Round 4:
In this round, I was asked 2 questions. One on Low-Level System Design and one on Management.
The first question was: Design a system that can interpret an alien language. Given you have a database of all the pre-existing and human-known languages, as well as a waveform dataset of all the signals ever received by the Earth from outer space.
This didn’t really go as well as I wanted. My approach wasn’t very optimized and lacked many important considerations.
The senior interviewer still wanted to give a chance and gave another question after this. It was on management / decision-making.
The second question was: Imagine you are a Team Lead here, and you have 8-10 software developers (SDE-1’s and SDE-2’s) working under you. You’ve recently made a production release “A” and unfortunately, there was a bug that you missed. The bug is causing a loss of $5000 every hour. You cannot run a previous release due to migration issues. You also need to make another release “B” in 7 days. This release “B” would generate a profit of $20,000 every hour. However, this release “B” requires a feature “M” which would take 6 days to build. Now you have 2 possible solutions, which would you pick if you had to maximize the profit for first quarter of a year:
- You make an urgent patch “P” and apply it to the current release (this patch would still require 1 day to build). However, this patch would slow down the earnings generated by feature “B” by 10% for the first 2 weeks. After releasing this, you start working on feature “M” and release it when ready.
- You work on a stable release “S”. This release requires 3 days to build. Once it’s ready, you work on feature “M” and release it when ready.
I chose option 2. I was wrong.
On paper Option 2 made perfect sense when length of time is considered for maximum profitability. However, the answer was rather tricky.
After the interview, they told me: “You’re a Team Lead with 8-10 SDE’s. Why wouldn’t you think of a way to work parallelly on both the stable release “S”, as well as feature “M”? You’d have saved 3 days of loss, and get maximum profit as well.”
Yeah, that was a tricky one. Sometimes you do have to think outside the box 🤣
The interviewers were really kind and supported all the way through the interview process whenever I needed some hint or help.
Well now I’m on a cool-down period of 1 year before I bother them again 😅