I had applied for Software Developer Intern positions with Google North America in the first week of September 2012.
Phase 1: Resume Shortlisting
After I filled in the online application form; I received the first mail from my recruiter by mid-September, that my resume looked good to them. I had applied for a winter internship instead of a summer one, unaware of the time-span of the programme. My recruiter informed me that the winter Iinternship period would be 10 – 12 weeks, but my college – IIT Bombay allowed only about 4 weeks of vacation during that season and hence, I requested her to get me in touch with a recruiter for the Summer Internship Programme as my resume was already shortlisted and the application process for Summer Internship had just began. She was extremely helpful and a week later I was in to the next phase of the Summer Internship application process.
Phase 2: Technical Interviews
The recruiter sent me a couple of forms that I had to fill in and submit before the technical interviews. One of them was a non-disclosure agreement. The other was some general stuff on my educational qualifications and past projects. Two consecutive technical interviews were scheduled within the next couple of weeks.
The interviews were each of 45 – 60 mins duration with may be a 5 – 10 mins break in between. The interviewers typically ask both algorithm-intensive questions and some basic coding problems, but unlike in most other technical interviews, Google interviewers didn’t ask me to write code in any particular language. Just writing pseudo-code was enough in almost all the problems they asked me. They ask some really interesting real life challenges to test application skills.
After the technical interviews, the recruiter informed me that she would contact me in about 2 weeks after Google reviews my information. Though she took about 3 weeks, she finally had good news for me.
Phase 3: Project Matching
My recruiter called me up to discuss the next steps in the process. She said that I had to fill some more forms; this time they were much longer. The idea was to portray your skills and your interests as accurately as possible and at length, so that the hosts would be able to identify you as a potential candidate for their projects. I had to rate on scale of 5, both my proficiency and my interest in working on a particular area of Computer Science. Preferences for location of Google offices was also to be mentioned in these forms, where I went for their HQ in Mountain View(MTV).
My recruiter warned me that making it this far didn’t not mean they could find a project that aligns with my skills and interests. So, there was no guarantee that I would be selected for a project.
Anyway, there was a long hibernation period. I didn’t hear from my recruiter till about 1 and half months. Then she said there was a host from Google LA who wanted to talk to me about her project, but at that time I had to decline the interview because I was leaving for Japan.
Again after an agonizing wait of about 1 month, she informed me about two hosts in MTV who wanted to interview me. I was quite excited and soon she scheduled both interviews. Both the project matching interviews were non-technical and were of 30 mins duration. The interviewer explains his/her project for about 10 – 15 mins, and for the remaining time, he/she asked me about past experiences, projects, course work, interests and may be a couple of questions related to his/her project.
Unfortunately, I was not selected in either of those. I had to wait again, but now opportunities became more frequent – about 1 interview every 2 weeks. After 3 more interviews, I’ve finally received an offer from a host in Infrastructure and Testing project.
Google’s intern selection process is quite long (4 – 6 months) and painfully slow. So, start early and have patience.
The questions in technical interviews would be nothing extra-ordinarily tough. Keep calm and think. Most questions asked to me were fundamental programming or algorithmic questions.
Tech Interview 1
– Average Calculation.
– Given a list of integers, write a function calculate their average.
- Calculate running average after each integer.
- Find (and fix) possible boundary cases that might cause exceptions.
Hint: Easy question. Mention problems with overflows and handle them. Remember to divide floating points not integers! If you accept an array into the function, do remember to check if it’s NULL.
– Given a string matrix containing the information of running flights (columns like source, destination, arrival time, departure time ). Use any tools known to you.
- Extract the info of all flights from source X to destination Y.
- Extract a summary info of how many flights leave from each source and how many flights arrive at each destination.
- Justify your choice for the specific tool / language you would use.
Hint: I used awk because it’s available on any *nix system, is blazing fast and can be invoked right from the shell without compilation or blah.
– Gray codes: My interviewer asked me if I had heard about gray codes. He said, he was planning to ask me to code it, but was quite satisfied with my explanation and skipped over to next question.
Hint: Gray code.
– I have a huge set of files that we want to sync between two workstations (A, B). Suppose I know which workstation I was last logged into (A). But I cannot figure out which files I have changed because somehow all time stamps are lost! So now I have a few modified files and many old files on A and B still has the old copies of all files. I do not want to transfer all files from A to B blindly because that would consume a lot of network bandwidth.
- Is there any way I could do this more efficiently?
- Are there any possible exceptions that might occur if I do it like <answer to above question>?
- How would I try to fix these exceptions or how would I minimize them at least?
Hint: Compute hash (checksum) of the files on both systems in parallel. Transfer only the checksums from one system to another (mention the assumptions on checksum size and how much bandwidth would be consumed in transfer). Finally mention a good estimate for what size of checksum you should go for (and any popular checksums that you can readily use: CRC/MD5/SHA)
Tech Interview 2
- What’s the best sorting algorithm known to you?
- What’s its time complexity?
- Why did you chose to speak about this particular sort?
- Do you think sorting can be performed with better time complexity than that? Why / Why not?
- Suppose we make a variant of merge sort (that would no more sort anything) like this: partition the list into 3 parts instead of 2. And then choose any 2 parts of these 3 and recursively apply our algorithm.
- What would it’s time complexity be?
- Can you briefly outline a proof?
Hint: Sorting cannot be done in better than (n log n). Read about the “Ω(n log n) Barrier”: performance – What are the rules for the “Ω(n log n) barrier” for sorting algorithms? – Stack Overflow. Complexity of the modified algo is O(n).
– Bit reverse
- Given a long string (array of characters), reverse the bits in the entire string. The first bit of the first character would be the last bit of the last character in the new string.
- Write pseudo-code and explain it’s working on a small example
- Find any possible exceptions that might exist and how you could fix them?
- Can you think of ways to make your algorithm faster?
Hint: Create a map from char to char and don’t reverse each char.
– A New File System
- You are given the responsibility of developing a new file system for your company. Your supervisor is a non-technical person and so you cannot ask any technical questions to him. Instead, you would have to ask him non-technical questions that you expect he can answer; and then decide yourself the technical parameters based on his answers.
- What technical factors should you consider before starting to develop the FS? What decisions do you have to take and how would you extract the necessary features to be present in the FS, from the non-tech supervisor?
Hint: What would the FS store specifically? Graphs/Images/Arbitrary files/…? Do we need version control? Concurrency control? Other open ended questions.
This article is an excerpt from Saswat Padhi’s answer on Quora.
You might also like:
How to get a job at Google | 5 Secrets Revealed!
Paul Baltescu on his internship experience at Twitter, Google and Facebook.
Utkarsh Mishra tells us about his time as the Google Student Ambassador!