Like many people have noted before, the whole interview experience is very enjoyable. It started off with a recruiter reaching out to me on LinkedIn, followed by setting up a phone screen. The phone screen, unlike many others, was purely a behavioral interview, with a lot of questions about the things on my resume, and my past work experience. Post that, I was called to come down onsite for a full day of interviews. I was told there would be 2 coding, 2 system design and 1 behavioral interview. All 45 minutes long.
Before the interview, having gone through a ton of hard problems on leetcode, I was really shaky about my coding interview skills, but was fairly confident about the design interview. In hindsight, this was a huge mistake. I had a friend help me out with mock interviews, and they were all focused on coding problems.
On the day of, I was greeted by the first interviewer, and after a brief introduction, I was told it'll be a coding interview. I'm not going to give out the exact questions, but suffice to say they were all from medium/hard problems in leetcode or some variant of it. The behavioral interview had a coding part for the last 15 minutes as well. All three coding interview questions were string/array based. I was surprised that they didn't ask me about any other data structure. I kinda breezed through them. Each interview had a follow up question around a small optimization. I could get to it two out of three times. For the third time, though I did mention the optimization verbally, I didn't have time to write down the code. But the interviewer was happy with the solution. I was super confident after these coding interviews.
The behavioral interview went very well too. There were a few questions where I had to take a little time to think of situations in my work that I could use as an example. The interviewer was ok with it.
As for the design interviews: Oh boy! Was I in for a surprise. I guess because of the level of my prior experience (15 years), their bar was too high, and they placed a huge emphasis on design interviews rather than coding interviews. I did go through the 'Grokking the System design interview' course, many times over, and was fairly confident on tackling any systems, similar to the examples that the course covers. What was asked of me was, without giving away too many details,
To build a purely peer-to-peer distributed system, with super minimal resources in each of them. I didn't clarify if I could have centralized components outside of the small peer nodes at the start, and it was revealed to me only at about the 30 minute mark. I was rambling along on how I could have API servers, gateways, proxies, databases, and load balancers that could scale horizontally and handle massive loads, only to be told that I couldn't use any of that. I merely have the peer-to-peer network, and anything I wanted to implement, a web server, database, load balancer, it all had to be one of the machines in the P2P network. With only 15 minutes on the clock. I think I didn't handle it too well. I panicked, and couldn't discuss how I would handle even one of the requirements with the new constraints, and before I knew it, the interview was over. I apologized for going with the wrong assumption, and the interviewer laughed and said that it happens a lot with this question.
The second one was to build out a caching data structure on one machine only. There weren't any constraints but I was told to assume that it was a modern day machine with a decent amount of RAM and Compute power (let's say 64GB RAM & 8 core). This one went much better than the previous interview, but again, I didn't keep track of time, and we could barely scratch the surface of how I'd maximise the available memory to keep items cached as long as possible. We didn't even start talking about how the 8 cores would come into play. I wasn't too worried about this, but it might've just been me comparing the relative experience with the previous interview.
There was an additional design interview, that I wasn't prepared for. At this stage I was pretty much all ready to be walked out the door, but another interviewer walked in and mentioned that there will be one, and I said ok! This one, at least initially, was the easiest of the lot. I had to build an online gaming platform where people play against each other. The game is of a 1-1 nature, so at any point you'd only have 2 players in a game. But I had to build it to scale for about 2B users. At the start, the interviewer said he'd interrupt me if he wants me to focus on a different area than the one I'm describing, and that I shouldn't think he was being rude, he just wants to cover as much ground in the short time we have, and I said that makes sense; he's the boss, and I'll talk about exactly what he wants me to talk about.
Once it started though, he barely let me finish my thought before jumping on to something totally random. By the end of the first 20 minutes, I still hadn't managed to cover what all features I'd have to factor in to the system, nor the list of all APIs that I'd need the server to expose, nor the database schema. But I had touched a little bit on every one of it, because the interviewer asked me to. I think the purpose of the interview was to fluster me and see how I'd handle the situation I guess, and I think I didn't do very well. Towards the end, I was left wondering, "What the hell just happened? I thought I had this one!". Not to mention I wasn't even aware of there being an additional design interview at the end of the day!
The best part though, was the lunch! One of the potential hiring managers met up with me, and we chatted for the 45 minutes about different things in facebook my work, and how similar/different the things we do are. It was a lot of fun. There was a ton of food choices, and everything was up for grabs, and I love to eat, but I had to contain myself to a small bowl of meat and veggies, to keep the focus of the lunch time to talk with the manager than to eat!
So come to think of it, it was definitely the design interviews that totally got me. It did take them ten days to respond before they said no, so the only solace I can take out of it was that it wasn't an outright no. They probably did a bit of deliberation before coming to the conclusion. I was super bummed to hear that of course, but wasn't too surprised. On to other things!