Two rounds of phone interviews, done on two separate days.
The first half of Apple's phone screens is always a behavioral question, which I thought was pretty distinctive. The first round was with an older engineer, kind of serious and not big on smiling, but you could tell he was a senior engineer. The question was to design a hit counter that aggregates how many hits happened in the past 5 minutes. We spent a long time discussing what data structure to use and how to clean up stale data, and also did an optimization (his hint) where the data structure doesn't need to store every single hit entry, since that could waste a lot of unnecessary memory. I basically finished the code and added test cases too. At the end he gave me 15 extra minutes to finish the code, and I added test cases but there was a bug I couldn't find, and he didn't tell me where it was either. I felt like I'd failed at the time, but two days later HR said I was moving on.
The second round was with a younger interviewer: write an interface that reads messages from a network socket, where each call reads a variable number of bytes. The problem itself wasn't supposed to be hard (the closest LeetCode equivalent is rated Hard, but it wasn't exactly the same problem), but I didn't think it through simply enough, and what I wrote ended up hard to read and hard to debug. I didn't manage to add test cases, and sure enough, I failed. The feedback was that they wanted someone who understood low-level protocols and networking better.
I was actually pretty interested in this team, so I'll come back and try again another time.
Discussion
Loading comments…