How I Would Prepare for an Interview as a Front End Developer at Google
Broad Algorithms and Concepts
Think about efficiency in terms of runtime and space used. To visualize this, nothing is better than TopTal's Sorting Algorithms Animations.
For algorithms, know the complexity of the algorithm and how to improve/change it.
Bottom Down Algorithms vs. Top Down Algorithms
Here is a good description of how to thinki of the choice between memoization and dynamicprogramming
Simply put, Big-0 notation is a way to calculate the runtime of an algorithm in a back of the envelope sort of way. It's not rigorous mathematical perfection... but it will give you a fairly good idea for how fast your program will work when it encounters a huge data set.
Specific Algorithms To Study
- You should know data structures
- linked lists
- binary trees
- You should know which algorithms go with which data structurhttps://en.wikipedia.org/wiki/Combinatoricses
- basic discrete math
- elementary probability theory
- n choose k problems
- Problems of the "ilk" of n-choose-k?
Consider a problem that can be addressed with a graph algorithm. Topics that can be solved with graphs often involve distance, search connectivity, cycle-detection and whatever else you can think of.
Learn these three representations.
- objects and pointers
- adjacency list
Know the good things and bad things about each.
Here is another list of useful things to learn related to graphs:
- basic graph traversal algorithms
- breadth-first search
- depth-first search
Of these three categories of search, know the computational complexity of each. Use your understanding of these subjects to develop ways to select algorithm types to implement in real code.
It's possible you'll want to use recursion to have more
"In order to understand recursion, one must first understand recursion" - Unknown
Recursion is best visualized when you hold a mirror up to another mirror in just the perfect angle so that you can see what infinity looks like. One mirror reflects another mirror forever.
But when writing software, we can create a base case and use recursion to evaluate complex data structures without us needing to think of every edge case explicitly.
If you wanted to write a simple recursive function that counted down from a chosen number to one, here is an example.
Resources for Learning About Google
- Evan You on IndieHackers Previously a Googler who created a front-end framework called Vue.js which is quite popular.