Well I've been hitting the books wherever I can. I have an interview coming up, first one via phone, for a software engineer position. I've read all the blog posts, I've read all the accounts of interviews (some pretty old), and Google itself even suggested a reading list of books, none of which would surprise anyone here. Still, after some time preparing, I can't shake that feeling that there is such a large ground to cover, and I'm never sure whether to go with depth or breadth. I've found myself re-learning a whole area of compsci, only to forget most of the nitty details as I move on to another.

So, I don't know that there's a good answer to this question, but I'm looking for any practical advice on how to tackle the remaining weeks in advance of the interview. Part of my brain is tired from cramming, and of course the rest of it has to be utilized for some tough problems at my current place of employment.

  • 3
    This could be more suited at careeroverflow.com IMHO. Also, you don't say the level of the position, such as beginner, senior, etc, and your background, leaving a lot for assumption.
    – vpit3833
    Dec 5 '10 at 4:13
  • 3
    @Fast Fish: Tell you what, just chill. Take an IQ Test, and if you score 135+ Google or no Google you know you have it.
    – Fanatic23
    Dec 5 '10 at 4:56
  • 9
    It's great here, as it's about programmers??? Why do people with higher rep like to classify and organize things down to the quark?
    – Jonathan.
    Dec 5 '10 at 10:25
  • 3
    There are already many job-interview questions. How is your question any different? If your answer is "Google", then that's why it's not right here. There are countless sites dealing with Google interviews, many of them will get you better information than this one.
    – Nicole
    Dec 6 '10 at 3:54
  • 2
    And you assume your upcoming interviewer doesn't lurk on P.SE ? :)
    – haylem
    Dec 6 '10 at 9:02

Things you should know

  • Google wants to hire you!

    The life-blood of any software company is its employees and Google is no different. It's looking to hire the best and the brightest and the people conducting the interview(s) want you to succede just as much as you do.

  • Google will do it's best to evaluate you as accurately as possible. It's their job.

    Google is a data-driven company. Hiring decisions are not decided by manager fiat. Instead, each interviewer takes extensive notes during the interview which gets combined into a packet. That packet will then get reviewed by a separate committee, which will ultimately make the decision. So if you just weren't 'gelling' with one of your interviewers don't worry! What matters is how well you perform on the interview.

Skills you should have

Be sure to brush up on the following skills/techniques before your interview. Even if you don't get asked a question on these directly, reviewing them can certainly get your head into the right mindset.

  • Data structures

    What is the difference between an Array and a Linked List? A Tree and a Graph? When would you use one over the other? How would that impact speed/memory tradeoffs?

    An interview question doesn't end at a working solution. Be able to explain the runtime of your approach and what sorts of trade offs you could make. For example, "if I cached everything it would take X gigs of RAM but would perform faster because...". Or, "if I kept the binary tree sorted while I performed the operations X would be slower, Y would be faster, etc."

  • Algorithms

    Basic graph traversal algorithms, tree traversal algorithms, and two good approaches for sorting numbers.

    Make sure to practice solving a non-trivial problem using Dynamic Programming. That is your ace in the hole when it comes to tough interview questions!

  • Hash tables

    This is huge. Know everything there is to know about hash tables, from being able to implement one yourself, to knowing about hashing functions, to why the number of buckets should be a prime number. The concepts involved with hash tables are relevant to just about every area of Computer Science.

  • Talking points about yourself

    That first few minutes of chit-chat with the interviewer is an important time to explain any sort of experience which sets you apart. Relevant projects, significant technical accomplishments, and the like. Remember, the person conducting the interview has interviewed dozens if not hundreds of smart people just like you. So what can you say that would surprise them?

    For example, in an interview I spoke to the interviewer about a program I wrote to play the game of Go in college. It is very difficult to write an AI for the game of Go, and I have a horrible Go-bot to prove it! The bottom line is be yourself, and not just some smart person who knows how to program.

Don't stress out too much, it's just an interview like any other. Rest assured that nobody will ask you stupid questions about manhole covers or Mt. Fuji.



if your interview is anything like mine was, the interviewer is not there to grill you into submission, he's there to see how you think.

EDIT: this was just the initial phone interview, i don't know about anything further than that...and if i did i probably couldn't tell you anyway!

  • 3
    Did you got the job?
    – Manoj R
    Dec 5 '10 at 4:19
  • 1
    @Manoj: lol - no, but that's not the point. i didn't actually want the job they were interviewing for, but was curious about the process and what the opportunities were. i had/have no intention of moving to California! Dec 5 '10 at 4:24

Borrowed the following article from http://get-that-job-at-google.blogspot.in/

Coding Knowledge C/C++ and Java are the preferred programming languages for Google Interviewers. You must know at least one of them really well. You will be expected to write code in the phone screen interviews and in the onsite interviews as well.

Recommended books for CS interviews: Introduction To Algorithms - By Cormen

Programming Interviews Exposed

Cracking the Coding Interviews

Algorithms for Interviews

Recommended websites for coding practice: InterviewStreet, Topcoder

Big-O This should be the starting point in preparing for an algorithmic interview. You must not struggle with basic complexity analysis, as it will guarantee not being hired. You should be familiar and understand the O, Θ and Ω notations. I recommend reading section on complexity analysis from Data Structures and Algorithms book.

Sorting You should be able to write algorithms O(n*lgn) like QuickSort and MergeSort with ease. Compare and understand the best, worst and average case complexities. I found this table on wiki to be very handy; it lists important properties of all sorting algorithms. Don’t neglect the basic O(n^2) algorithms like Bubble sort or Insertion sort, since other algorithms improve over these. Interviews are more about improving a basic idea, sorting algorithms will help with this process.

Hash Tables When in doubt, think of hash tables. They are useful in most of the problems and frequently help us improve the time complexity of some problems by caching results.

Trees Go through basic tree construction, traversal and manipulation algorithms. You should be able to implement algorithms based on binary search trees. You should be familiar with balanced trees although you are not expected to write code for them in the interview: AVL trees, Red-Black trees, Trie, n-ary trees etc. Thorough knowledge about inorder, postorder and preorder traversals is necessary, because we can solve many tree problems by doing simple modifications to one of these traversals.

Graphs Graphs are a very important concept in Computer Science. Practice the three basic representation of graphs (objects and pointers, matrix, and adjacency list) and familiarize yourself with their pros & cons. There is not much time during the interview so you should not expect something very complex. However, basic graph traversal algorithms (DFS and BFS) are a must, you should implement them in all basic representations. You should be able to implement the Dijkstra or Floyd-Warshall algorithms as well as minimum spanning tree algorithms (Kruskal and Prim). Learn about topological sorting, since it is surprisingly very useful in many ordering problems.

Dynamic Programming This is probably the most important subject as the implementations are small. You should be able to implement 2-3 dynamic algorithms during a 35-40 minutes time. As you’ll check the resources on this blog or on the web, you’ll find that you should expect at least one dynamic programming question per interview.

Operating Systems Learn about processes, threads and concurrency issues. Know about mutexes, semaphores, monitors and how they work. Understand what deadlock and livelock are and how to avoid them. Learn about context switching, scheduling etc.

Mathematics You should familiarize yourself with counting, combinatorics and probability.

Google's publications Read up Google's path-breaking publications listed below if you have time. Google File System

Google Bigtable

Google MapReduce

  • 1
    You should post the relevant text here and avoid link-rot.
    – deadly
    Feb 1 '13 at 9:42
  • Sorry, I am new to this forum. I have improved my answer
    – chinmay
    Feb 1 '13 at 10:49
  • 2
    "... Java...preferred programming languages for Google " I didn't know that. Explains why Chrome uses 3x the resources as other browsers. (Knock knock. Who's there? ... long pause ... Java!) Feb 1 '13 at 11:09

If you have spent the last couple of months at careercup you can afford to relax. What happens at that moment in the interview can not be planned but better be relaxed and have the energy to last the rounds.

Not the answer you're looking for? Browse other questions tagged or ask your own question.