### Introduction

If you're a programmer aspiring to work in a top-tier tech company like Google, Microsoft, Apple, or Facebook - you're probably concerned with the interview process.

These interviews can be daunting, especially if you're not familiar with the type of questions that you'll be expected to answer.

This is the reason why we've decided to compile this selection of programming interview questions you might face in an interview tomorrow, hopefully helping you both learn about them, understanding their nature, as well as reinforcing your knowledge.

Most of these questions revolve around Data Structures and Algorithms so the most attention is given to them. Although the focus is on Data Structures and Algorithms, we'll cover a few logical questions you might run into as well!

Most of these questions and examples will also contain some basic-level explanations, since, in my humble opinion, a lot of terminologies are being used without proper understanding of what they actually mean.

It's worth mentioning that a certain degree of mathematical knowledge here is important. Don't worry, you don't have to be a mathematical genius, but knowing Discrete Mathematics is a huge advantage.

### Data Structure and Algorithms

A **Data Structure** is a fundamental and simple concept. It's a way of organizing data and their relationship to allow efficient operations to be performed on them.

There are many data structures that programmers and developers regularly use such as:

- Arrays
- Binary Trees
- Graphs
- Linked Lists
- Matrixes
- Stacks
- Queues
- Heaps
- Hash Tables

If you'd like to see the whole list, it's quite lengthy.

An **algorithm** is a piece of code that represents a certain set of instructions, usually selected to act as a finder to the solution of a specific problem.

They should be efficient and fast, which means that they both take the least possible time to complete as well as consume the least possible memory space, depending on the nature of the algorithm and the problem at hand.

Knowing your data structures and algorithms is important. It allows you to understand the underlying logic behind the tools you use every single day. Knowing which algorithms to use and which data structures to employ is a valuable thing in a production environment.

The ability to pick out an efficient solution compared to another is crucial. It also incites intuitive ways to solve problems that you might be faced with, and depending on what kind of person you are - it might be fun to refresh a bit on some high-school mathematics.

#### Graph Data Structure Interview Questions

- Breadth First Search
- Depth First Search
- A* Search
- Dijkstra Algorithm
- Comparing BFS, DFS, A* and Dijkstra

#### Linked List Interview Questions *(coming soon)*

- Inserting and Removing nodes
- Comparing Strings
- Reversing a List
- Selecting a Random Node

#### Dynamic Programming Interview Questions *(coming soon)*

- Fibonacci Number Sequence
- Longest Common Subsequence

#### Sorting an Searching Interview Questions *(coming soon)*

- Binary Search
- Bubble Sort
- Insertion Sort
- Merge Sort
- Heap Sort
- Quick Sort
- Interpolation
- Tree/Binary Search Tree
- Minimum Depth
- Maximum Path Sum

#### Number Theory Interview Questions *(coming soon)*

- Euclid's GCD Algorithm
- Extending Euclid's GCD Algorithm
- Diophantine Equation
- Chinese Remainder Theorem
- Modular Inverse
- Semi-Perfect Numbers

#### String Interview Questions *(coming soon)*

- Reversing a String
- Checking if String contains only digits
- Finding Duplicate Characters in a String
- How to Convert a String to Integer
- Removing Duplicate Characters in a String
- Finding the Maximum Occuring Character in a String
- Find the First Non-Repeating Character in a String
- Checking if Two Strings are Anagrams of Each Other
- Counting the Number of Words in a String

#### Array Interview Questions *(coming soon)*

- Finding the Missing Number from Array
- Finding Duplicate Integers in an Array
- Finding the Largest and Smallest Number in Unsorted Array
- Removing Duplicates from an Array
- Reversing an Array
- Finding the
*k*-th Smallest Integer in an Unsorted Array - Finding Common Elements Between Multiple Arrays

### Practice and Strategies

That being said, a service we most definitely recommend is - Daily Coding Problem.

Daily Coding Problem is a simple and very useful platform that emails you one coding problem to solve every morning. This ensures that you practice consistently and often enough to stay in shape over a long period of time. We wrote up a more in-depth review of the DCP if you want to find out more.

While solving these problems, you'll notice a lot of the aforementioned data structures and algorithms, as well as the importance of innovative thinking.