Wednesday, May 31, 2006

Google Interview

Today I had my first phone interview with google.

A few months ago, I was contacted by a google recruiter. At that time, I was quite happy at the company I work, but (for reasons I do not mention here), that has changed. So first I ignored that mail completely, and a few weeks ago she asked me again. I had almost forgotten about it, but now I replied that maybe I am interested. Two weeks ago I had the first phone conversation with the recruiter, where she asked just a few, simple questions like:

  • what is the nearest power of two to 2 billions (31, 2^31 ~ 2 billions)
  • in C++, when you allocate an array using new, how do you free it (use delete[], do not forget the square brackets)
  • What data structures are there in Perl (I mentioned hashes and arrays)

Later she told me per mail that I had one answer wrong - I guess I somehow misunderstood the perl question, because everything else is correct. Or maybe it is because I first forgot the square brackets for the delete, but I did mention them after further inquiry.... (I know perl and C++, but I am rusty in both. I just used C recently, and that a lot).

We scheduled a 45 min. phone interview for Last Friday at 12pm. So I patiently, and nervous as a wreck, waited for the the phone call in my car, but noone called. After 15 minutes I went back to work, and complained per mail at 1pm. Turned out that the interviewer had something else to do, and we scheduled another interview for today, 12:15pm.

I (again) waited in my car for the call. But I noticed that the reception there is bad, so I decide to go somewhere where the reception is better, but still undisturbed. Turned out to be a longer walk to an artificial creek with nice trees, which gave some shade. Unfortunately, I forgot pen and paper. On the way, almost there, the phone rang and the fun started.

It began pretty straight forward. First quetstion: In C, what does the line while(*p++ = *t++); do? Easy (it is copying a string from t to p. Is there a function that does the same? (Yes, it is strcpy()).

Next step was a little harder: of these data structures, what is the worst case scenario: a linked list, a binary tree, a black and white tree (?), a B tree and a hash. I have no idea what a 'black and white tree' is ( have to look it up later), but the rest is easy enough, although I wasn't sure about the B-tree: linked list is O(n), binary tree O(log n), B tree also O(log n) and hash is O(1).

After that, I probably messed it up. We had a long discussion about a test scenario where a server is tested to give answers to requests. In a test scenarion, we find that a server needs 25ms for a request. Now we suddenly find that it takes on average 250 ms. It went back and forth, and we talked about all sorts of things to test, and I got confused. We talked about how to calculate the round trip time, changing the client to do parallel requests and so on, using ifconfig and w to look for network congestion, CPU load and so on. It was terrible. I hope that at least some of my answers were oky, but I do not have a very good feeling. One thing to remember: if the client does 3 requests at the same time, the first response comes after 25ms, the next after 50ms, the next after 75ms, what is the average? 50ms. Duh.

At the end, we talked about what he is doing at google, what I expect to do there, my ideas and so on.

Well, now I wait for an answer, which should come within a week or so. I hope for the best, but my confidence is shattered.

Site Meter