January 2011, Mt. View campus
Visited Google five years ago; I was rejected that time. This time, a recruiter contacted me again and offered me the chance to interview again.
The Silicon Valley rumor mill brought several facts about interview practices: each interviewer has to submit a rather detailed report to the hiring committee, recording everything written on the whiteboard and allegedly even what you say. Sometimes, two interviewers talk to the candidate; in such cases, the second person is a trainee. Sometimes, there are two rounds if Google is uncertain. The candidate has to select their preferred programming language for the interview. My choice was C, as I was applying for what the recruiter called "kernel" positions in the ChromeOS team.
I was first met by the recruiter. He spent 10 minutes with me. I asked about the practices above. Although he confirmed them, he downplayed the "exact recording of what the candidate says" part. He answered that the written report on a candidate is about 1-2 typed pages on average.
I met a total of 6 people: 5 technical, and one at lunch.
First Interviewer:
Second Interviewer:
I presented a recursive implementation. I was asked to do a non-recursive version (the question wasn't about a better solution, say, with constant memory). I proposed to change the recursive algorithm to a non-recursive one using a user-defined stack (a formal transformation, rather boring but doable, like FORTRAN people do it). I demonstrated that, but the code was messy with gotos, etc. I was asked about complexity. Both recursive and non-recursive versions required linear stack space in the worst case of pathological one-sided trees.
Third Interviewer:
Fourth Interviewer:
After two weeks, I received a rejection, stating I did not match current open positions.
Given two binary search trees, write a function which tells if two such trees are the same (i.e., same info in the nodes, same branching to left and right at every node).
Given two large files with 64-bit integers, produce a file with integers which are present in both files and estimate the O(?) complexity of your algorithm.
How to find a median in a large file of 64-bit integers.
Input is a 4x4 table with letters. One starts from any of the 16 elements and can move in one step to any of the 8 neighboring cells not visited before (up, down, left, right, up-left, etc., no hyperspace jumps between rows 1 & 4, columns 1 & 4).
Every time a step is made, the letter in that cell is added, so a word is built as we walk. These generated words are looked up in an external dictionary (a function to look up in the dictionary is provided; I did not understand the significance of this dictionary well). The goal of the exercise is to output all words generated by all possible table walks and which are contained in the dictionary.
When you are doing a "read()" call, what is happening under the hood in user space?
The following metrics were computed from 748 interview experiences for the Google Software Engineer role in Mountain View, California.
Google's interview process for their Software Engineer roles in Mountain View, California is very selective, failing most engineers who go through it.
Candidates reported having very good feelings for Google's Software Engineer interview process in Mountain View, California.