Cracking the Coding Interview

For background information on this post, please see Preparing for Programming Interviews.

Like the book The Google Resume, Cracking the Coding Interview is also written by Gayle Laakmann McDowell. She is the founder of CareerCup and a software engineer at Google who interviewed over 100 candidates for engineering positions. This book tends to focus more heavily on sample programming questions and answers. The book is divided into three major parts. The first 50 pages cover general job searching advice. The next 50 pages include sample questions about programming and other software topics. The last 200 pages discuss solutions to the sample questions.

Here are some major points from the first part of the book:

• Showing interviewers that you are dependable and easy to work with

• Demonstrating that you can get the job done

• Making an accomplishment-based resume that shows what you did, how you did it, and the results

• Listing programming languages that you’ve used along with your experience level

• Preparing for behavioral interviews by reviewing stories that illustrate what you’ve accomplished and structuring answers using the Situation, Action, Result format

• Preparing good questions in advance to ask the interviewers

• Gaining knowledge of data structures, algorithms, and design patterns

• Steps for answering technical questions and solving algorithm problems

The sample questions and answers cover these areas (items in parentheses are called out for extra emphasis in the book):

• Data Structures (Hash Tables, ArrayList, and StringBuffer)

• Linked Lists (creating a linked list and deleting a node from a singly linked list)

• Stacks and Queues (implementing a stack and implementing a queue)

• Trees and Graphs (binary trees and graph traversal)

• Bit Manipulation (left shift and right shift)

• Brain Teasers (strategies include talking out the problem, simplifying, generalizing, and working backwards)

• Object Oriented Design

• Recursion (thinking about sub-problems, solving for a base case, and generalizing)

• Sorting and Searching (bubble sort, selection sort, merge sort, quick sort, bucket sort)

• Mathematical (Bayes’ rule and probability)

• Testing (how you would test a piece of software or write test cases/test code)

• System Design and Memory Limits

• C++ (pointer syntax, class syntax, C++ vs. Java)

• Java (classes & interfaces)

• Databases (designing both small and large databases)

• Low level (big vs. little endian, stack, heap, malloc)

• Networking (http requests, tcp)

• Threads and Locks (deadlock conditions, deadlock prevention)

Comments are closed.