I contacted Google through their website and applied for a software engineer in the Tel Aviv Office. There was an initial phone call with an HR recruiter (I think a day after I submitted my online application) - Just general questions about who I am and what I am looking for.
After around 1 week I came to the on-site screening interview - 45 minutes of relatively simple graph questions - DFS/BFS stuff, and maybe a bit more complex questions regarding binary trees, but nothing too special. The interviewer told me I did well, but that I should be a bit more careful about the aesthetics of the code.
2 weeks later I came to my whole day interview session - There were 6 interviews - I would say 3 which were more algorithmic, 1 which was almost pure coding, and 2 which were "design".
The design interviews I remember -
1) Design an online battlefield game - What would be the protocols between the server and the client, the algorithms and game flow to decide the state of the game, some basic networking (which I struggled with).
2) How would you design Google images? The premise was that I should be able to search regarding specific features, for example the blue content, or images that are in pages that contain specific keywords. This was a very open-ended question, we thought "together" about solutions, what will be the size of my data which maps words to images, where would I store the images, how many servers I would need, etc... I had no previous experience in large scale design - The interviewer said that it wasn't expected of me. I thought I did relatively well, but I guess they ARE looking for people with previous experience in large scale design, from the input I got later on.
Algorithmic interviews I remember -
1) How would you design an efficient algorithm to find out in a sorted array which number appears the most times. I started from the simple solution, and continued to a more complex one ( with some hints along the way from the interviewer) that in summary does a binary search of the number of times the most frequent number appear - (think about it - I have an array of size N, if the most frequent number appears N/2 times, then I can infer this just from sampling the values at indexes (0,N/4,N/2,N*3/4,N). I thought I did well in that interview.
2) Write code that prints the Cartesian product (row by row for each combination) of a given list of lists (that contain integers). Since you don't know from beforehand how many lists there are, you obviously can't just hard-code lots of for loops. During the interview I gave two solutions - A recursive one, and after writing it out, they asked me to also write a non-recursive one - Which I did with a counter which maps each times to a different combination of values (with some mod mathematics).
I think I also did well in that interview.
There was a lunch break where it was obvious they simply told someone that today "you have to eat lunch with a candidate". It was a bit awkward at first, but it did give me a chance to interrogate him about how it is to work in Google. The food was extra yummy.
After one week I got a response that I didn't pass the interview process. The guy stressed that I was "Close", that I did really good on 2 interviews and a bit less good on the other 4. Oh well.
My preparation to the interview consisted of doing all the regular algorithmic/coding questions - I think that did prepare me well to the relevant interviews. But there was no real preparation to the more general "System Design" interviews - I think it's a bit more difficult to prepare for those, but I guess I still would have invested in that more time, retrospectively. Otherwise - I thought I did pretty well in the interview day - I guess that they can be REALLY picky about taking people who really did perfect in each and every interview. Just for reference I had an interview day at Facebook a few days later - I thought I did much better at the Google interview day, but ended getting an offer from Facebook and not Google. I guess also some luck doesn't hurt.
The responsive of the hiring recruiter was always prompt. He was very nice, though at times it was a bit ridiculous - telling me again and again to call him If I have any problems, even if it's during the weekend or late at night. I mean it was nice to have a sponsor that "cares for me" during the process, but there's no need to push it...