this week I’ve finished reading Programming Interviews Exposed: Secrets to Landing Your Next Job. Actually, I’m not looking for a new job now, but I was a little bit curious about how the book shows the way on solving programming problems. The book discuss a lot of lists, trees, strings and arrays problems and solutions, making a very detailed explanation about each of them and their time cost. Besides of that, it teaches you some secrets of big companies’ interviews process.
The book is divided in 16 chapters. Here they are:
Chapter 1: Before the search
In this chapter, the book talks about tasks that you should perform before looking for a new job. The first one is knowing yourself and what kind of programmer you are. Next, you should know the market and understand the current job you are applying for. Later, you need to develop market skills such as upgrade your credentials, get certified and keep learning. Finally, you must sanitize you online profile to prevent screeners to find online informations that can affect your chances of being hired.
Chapter 2: The Job Application Process
This chapter exposes that networking is the best way to find prospective jobs. However, if you don’t have a good one, contact companies directly. The chapter also talks about the interviews in an job application process. In short, there will be one or two screening interviews, usually done by phone, and later a series of on-site technical interviews.
Chapter 3: Approaches to Programming Problems
This chapter introduces the importance of coding questions in programming interviews because they’re the opportunity to demonstrate that you can do the job. Try making your code solid and pretty and always explain what you are doing to the interviewer.
Chapter4: Linked Lists
This chapter talks about linked list data structures, kinds of linked list and its basic operations, nothing too advanced at all. However, the good part is in the second half of the chapter: linked list problems, the typical problems that you might encounter during an interview. So, I will be a good boy and show you some of them
Discuss the stack data structure. Implement a stack in C using either a linked list or a dynamic array, and justify your decision. Design the interface to your stack to be complete, consistent, and easy to use.
head and tail are global pointers to the first and last element of a singly-linked list of integers. Implement C functions bool remove(Element *elem) and bool insertAfter(Element *elem, int data)
Given a singly-linked list, devise a time – and space-efficient algorithm to find the mth-to-last element of the list. Implement your algorithm taking care to handle relevant error conditions. Define mth to last such that when m = 0, the last element of the list is returned.
Chapter 5: Trees and Graphs
Similar from chapter before, Chapter 5 gives an introduction on trees and graphs data sctructures followed by some problems involving them. Here they are.
Perform a preorder tranversal of binary search tree, printing the value of each node, but you may not use recursion.
Given the value of two nodes in a binary search tree, find the lowest (nearest) common ancestor. You may assume that both values already exist in the tree.
Chapter 6: Arrays and Strings
This chapter focuses on arrays and Strings explanations. The book starts with their concept and the differences of each one in languages such as C/C++, Java e C#. Later, comes problems involving operations with both data types. Here are some of them
- Write an efficient function to find the first nonrepeated character in a string.
- Write a function that reverses the order of the words in a string.
- Write two conversion routines. The first routine converts a string to a signed integer. The second routine converts a signed integer sotred as an int back to a string.
From here, I’ll start just saying the name of the chapters, trying to incentivate you reading the other problems by yourself.
Chapter 7: Recursion
Chapter 8: Concurrency
Chapter 9: Object-Oriented Programming
Chapter 10: Databases
Chapter 11: Other Programming Topics
Chapter 12: Counting, Measuring, and Ordering Puzzels
Chapter 13: Graphical and Spatial Puzzels
Chapter 14: Knowledge-Based Questions
Chapter 15: Nontechnical Questions
Chapter 16: Conclusion
In short, this is a very good book on its purpose. So if you are close to apply to some interview process, reading this book is a very good start.