So last Friday I had a big opportunity to get an internship at Facebook. Made it to the final round and had to do one last technical interview.
Those are not the most fun to do, but hey I took a shot. It was pretty clear that the data structures I learned about in my first bachelor year needed some dusting.
I had my first exam Friday morning and was stressed to the max, afterwards I tried to prepare for the interview by doing some exercises from “Cracking the Coding Interview”. Excellent book, I would really recommend it. In the evening at 21.16 an American landline number showed up on my cell screen. Jup, there it was.
Interview started rather chill and the engineer (awesome guy btw) at the other end of the line asked about: what drives me for becoming a software engineer, and what I considered were the less fun parts of being a software engineer (CLASS DIAGRAMS !). We continued on to the technical part, oh boy stress was building up.
So the question was :
Consider a professor that wants to check two paper assignments from two different students on cheating. Design a function hasCheated(String s1, String s2, int N) that returns true if the two papers, represented by the strings, have a common content of at least length N.
I think I went into a limbo. The first 5 minutes I had it visualized what I wanted to do, but it felt like I forgot how to code. The engineer calmed me down and said to just start with a naive approach. So I started and came up with an O(n^3) approach, worst algorithm I had ever written. But now I started to feel confident again, and I improved the code to an average linear complexity. The engineer then told me to imagine that the String.contains() and String.substring() do not exist in Java and you only have an array of characters. Implement these functions and reflect again on your complexity.
After 30 minutes of coding we stopped and he asked if I had questions for him, about his work,life,..
Hell yeah ! How often do you get a chance to speak with a Facebook engineer. So I asked him how they handle the massive scaling issues at Facebook (he is on the memcache-team) and how a typical day at the office looks like. After that my time was up, was on the phone for about 50 minutes. Pretty exhausted and glad the day ended.
And about half an hour ago I got a message that my technical skills we’re not quite of the level they expect from their interns. But the engineer stated that he would certainly recommend to re-apply next year as I finish my masters degree then. (I can go straight to the last round, jeej !) I don’t feel I could have done more, maybe on a day where I didn’t had an exam and I had to only stress about the interview, the conditions could be better. As I look back now, I could implement this without a problem and choose better data structures than the ones I used during the talk. But things went how they went, and I’m already glad I had this huge experience !
Prior to Facebook, I already had an awesome offer in Switzerland which is more security related than I would be doing at Facebook. So I’ll spend my summer in Switzerland, which is also very cool, especially doing an internship that contains all aspects of my (cyber) passions : Android and Security !