Skip to content

iarobinson/google_style_algorithm_study

Repository files navigation

How I Would Prepare for an Interview as a Front End Developer at Google

Broad Algorithms and Concepts

Sort

Think about efficiency in terms of runtime and space used. To visualize this, nothing is better than TopTal's Sorting Algorithms Animations.

  • sorting
  • insertion-sort
  • radix-sort
  • QuickSort
  • MergeSort
  • HeapSort

Algorithm

For algorithms, know the complexity of the algorithm and how to improve/change it.

Here is a good description of how to thinki of the choice between memoization and dynamicprogramming

  • greediness

  • Big-o-notation

    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

...

...

Data Structures

  • You should know data structures
    • arrays
    • linked lists
    • stacks
    • queues
    • hash-sets
    • hash-maps
    • hash-tables
    • dictionary
    • trees
    • binary trees
    • heaps
    • graphs
  • You should know which algorithms go with which data structurhttps://en.wikipedia.org/wiki/Combinatoricses

Mathematics

Graphs

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
  • matrix
  • 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.

Recursion

It's possible you'll want to use recursion to have more elegant solutions.

"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

Podcasts

  • Evan You on IndieHackers Previously a Googler who created a front-end framework called Vue.js which is quite popular.

Videos

About

thinking about algorithms

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published