This repository includes resources which are more than sufficient to prepare for google interview if you are applying for a software engineer position or a site reliability engineer position
# How to prepare for Google's interview for the positions : Software Engineer or Site Reliability Engineer

This repository includes resources which are more than sufficient to prepare for google's interview if you are applying for a software engineer or a site reliability engineer position

Sections in this repository : 
1. [General guidelines](#general-guidelines-quick-reading-before-you-start-) : this section contains resources to understand how the interviewing process should look like and what to expect in general
2. [Algorithms & Data structure](#algorithms-practice-everyday--for-as-much-time-as-you-can) : The most important section, specially the starred list items, try to practice at least 3 problems and read 1 topic
everyday, also try to increase the difficulty of the problems you solve by time, don't stick to easy problems because usually interview problems are medium and hard ones.
3. [System design and architecture](#system-design-and-architecture-) : if you have this as a part of your interviewing process (ask your recruiter) then make sure to finish the starred list items (the most important ones) and then divide the rest according to your time.
4. [Operating systems and programming concepts](#os-and-programming-concepts-) : no more description than the title !
5. [Site reliability engineer books](#for-sre-interview--site-reliability-engineer-books-) : in case your interview is for a site reliability engineer position ... these books are useful but not necessary.
6. [Extra links](#extra-links-if-you-finished-already-what-was-mentioned-before-and-still-have-time-) : these are bonus resources (most of them are algorithm and data structure related) in case you have more time to practice :)

My general advice is to allocate 70% of your time for algorithm and data structure practice, 25% for system design readings (if the recruiter told you you will have it in your interviewing process) and 5% for other topics or readings.
I marked non-free resources with Money emoji :money_with_wings:, you can be super well prepared without them, but I strongly recommend Leetcode subscription.
I also marked the "must" TODO items with star emoji :star:, so make sure to put them in your top priority.


## General guidelines (Quick reading before you start) : 

### PDFs :
 * [Interview preparation guide](https://github.com/mister0/How-to-prepare-for-google-interview-SWE-SRE/blob/master/Interview%20Prep%20Guide.pdf)
 * [More preparation guidelines](https://www.mtu.edu/career/students/networking/interviews/prepare.pdf)

### Links :
 * [How we hire](https://careers.google.com/how-we-hire/)
 * [Tech dev guide by Google](https://techdevguide.withgoogle.com/)
 * [Steve's blog](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)
 * [How can I get my resume shortlisted by Google](https://www.quora.com/How-can-I-get-my-resume-shortlisted-by-Google-for-the-position-of-software-engineer-Can-someone-tell-me-about-the-technical-achievements-or-any-other-details-that-Google-looks-for-on-a-resume)
 * [MIT hacking a google interview](http://courses.csail.mit.edu/iap/interview/materials.php)
### Links for example algorithms and data structure problems :
 * [Example coding interview youtube video](https://www.youtube.com/watch?v=XKu_SEDAykw&feature=em-subs_digest)
 * [Previous google interviews coding questions](https://techdevguide.withgoogle.com/resources/types/coding-interview-question/?courses=foundational&courses=advanced&programming_languages=java&types=coding-interview-question#!)
----------------------------------------------------------------------------------------------------------
## Algorithms & Data structure (practice everyday ... for as much time as you can):

### Solve everyday from : 
* :star: :money_with_wings: Leetcode : [problems](https://leetcode.com/company/google/) & [Google interview card](https://leetcode.com/explore/interview/card/google/) & [Mock an onsite interview](https://leetcode.com/interview/)
* :star: [Hackerrank interview preparation kit](https://www.hackerrank.com/interview/interview-preparation-kit)
* :star: [Pramp](https://www.pramp.com/dashboard#/schedule) : Mock multiple interviews

### Read everyday from : 
* [Programming interview questions](http://www.ardendertat.com/2012/01/09/programming-interview-questions/)
* [Geeks4Geeks](https://www.geeksforgeeks.org/) : [Topics for competitive programming](https://www.geeksforgeeks.org/top-algorithms-and-data-structures-for-competitive-programming/)
* [Leetcode trending posts](https://leetcode.com/discuss/interview-experience?currentPage=1&orderBy=hot&query=)
* [Algo notes](https://github.com/yashasvigirdhar/Interview-Preparation/blob/master/algo-problem-solving/AlgoNotes.md) from the article [11 companies-55 interviews- 9 offers](https://medium.com/@yashgirdhar/11-companies-55-interviews-9-offers-including-google-and-amazon-heres-what-i-have-to-share-293852c1c98f)
* :money_with_wings: [Grokking dynamic programming patterns for interviews (educative course)](https://www.educative.io/courses/grokking-dynamic-programming-patterns-for-coding-interviews/)

### Extra resources : 
* [Careercup](https://careercup.com/)
* [Geeks4Geeks](https://www.geeksforgeeks.org/) : [Dynamic programming](https://www.geeksforgeeks.org/dynamic-programming/) & [backtracking](https://www.geeksforgeeks.org/backtracking-algorithms/)
* [Bit hacks](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive)
* [Google Code Jam distributed systems problems](https://codingcompetitions.withgoogle.com/past-competitions/distributed?fbclid=IwAR1gkpsoHn4AzsgrXTeR6EH9-stjKq5ScFXPXZQcZ0fCdxKWskCCJV197c8) and [How to run locally](https://code.google.com/codejam/resources/quickstart-guide#dcj)
----------------------------------------------------------------------------------------------------------
## System design and architecture :

### Repositories and courses :
 * :star: [System-design-interview-github-repo](https://github.com/checkcheckzz/system-design-interview) specially the [Hot Questions](https://github.com/checkcheckzz/system-design-interview#qs)
 * :star: [System design primer](https://github.com/donnemartin/system-design-primer)
 * :money_with_wings: [Grokking the system design interview](https://www.educative.io/collection/5668639101419520/5649050225344512) specially [System design basics](https://www.educative.io/courses/grokking-the-system-design-interview/)
 
### Articles to read :
 * [Numbers everyone should know](https://gist.github.com/hellerbarde/2843375)
 * [Introduction to architecting systems for scale](https://lethain.com/introduction-to-architecting-systems-for-scale/)
 * [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html)
 * [3 rules to a scalable cloud application architecture](https://medium.com/@DataStax/instagram-engineerings-3-rules-to-a-scalable-cloud-application-architecture-c44afed31406)
 * [Tomcat](https://www.datadoghq.com/blog/tomcat-architecture-and-performance/) and [django](https://stackoverflow.com/questions/25531390/minimum-server-requirements-for-a-django-project)
 * [The practical test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html)
 * [Swift : an activity feed framework](https://github.com/tschellenbach/Stream-Framework)

### Google projects : 
 * [Map Reduce](https://storage.googleapis.com/pub-tools-public-publication-data/pdf/16cb30b4b92fd4989b8619a61752a2387c6dd474.pdf) 
 * [Big table](https://storage.googleapis.com/pub-tools-public-publication-data/pdf/68a74a85e1662fe02ff3967497f31fda7f32225c.pdf)
 * [Google file system](https://storage.googleapis.com/pub-tools-public-publication-data/pdf/035fc972c796d33122033a0614bc94cff1527999.pdf)

 ### Databases :
 * [SQL vs NoSQL](https://www.educative.io/courses/grokking-the-system-design-interview/YQlK1mDPgpK)
 * [ACID](https://en.wikipedia.org/wiki/ACID) vs [CAP](https://en.wikipedia.org/wiki/CAP_theorem)
 * Database [normalization](https://en.wikipedia.org/wiki/Database_normalization) and [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
 * [Cassandra](https://dzone.com/articles/cassandra-indexing-good-bad) vs [postgres](https://www.postgresql.org/docs/9.5/indexes-types.html) "Indexes"
 * Cassandra vs postgres "benchmarking" : [here](https://academy.datastax.com/planet-cassandra/nosql-performance-benchmarks) & [here](https://www.datastax.com/products/compare/nosql-performance-benchmarks) & [here](https://www.phoronix.com/scan.php?page=news_item&px=PostgreSQL-11-JIT-Benchmarks)
 * Cassandra vs postgres "comparisons" : [here](https://thedulinreport.com/2015/08/08/ten-questions-to-consider-before-choosing-cassandra/) & [here](https://db-engines.com/en/system/Cassandra%3BPostgreSQL)

----------------------------------------------------------------------------------------------------------
## OS and programming concepts :
* processes, [threads](https://en.wikipedia.org/wiki/Thread_(computing)) and concurrency issues
* how [context switching](https://en.wikipedia.org/wiki/Context_switch) works
* Locks and mutexes and semaphores and monitors
* Deadlock and livelock and how to avoid them : [here](https://www.google.com/search?q=locks+and+mutexes+and+semaphores+and+monitors&oq=locks+and+mute&aqs=chrome.2.0j69i57j0l4.3946j0j7&sourceid=chrome&ie=UTF-8)
 & [here](https://stackoverflow.com/questions/2332765/lock-mutex-semaphore-whats-the-difference) & [here](https://www.justsoftwaresolutions.co.uk/threading/locks-mutexes-semaphores.html) & [here](https://anandabhisheksingh.me/locks-mutexes-semaphores/)
* [SOLID principles](https://www.geeksforgeeks.org/solid-principle-in-programming-understand-with-real-life-examples/) 
* [MD5 vs SHA 256 hashing](https://iopscience.iop.org/article/10.1088/1742-6596/978/1/012116/pdf)
* Combinatorics and probability
----------------------------------------------------------------------------------------------------------
## For SRE interview : Site reliability engineer [books](https://landing.google.com/sre/books/) :
* [SRE book](https://landing.google.com/sre/sre-book/toc/)
* [SRE workbook](https://landing.google.com/sre/workbook/toc/)
----------------------------------------------------------------------------------------------------------
# Extra links (If you finished already what was mentioned before and still have time !): 

## Algorithm and data structure Books : 
* [What should I know from the CLRS 3rd edition book if my aim is to get into Google](https://www.quora.com/What-should-I-know-from-the-CLRS-3rd-edition-book-if-my-aim-is-to-get-into-Google/answer/Jimmy-Saade?share=1&srid=TAJ1)
* :money_with_wings: Introduction to algorithms 3rd-edition
* :money_with_wings: Skiena The Algorithm Design Manual 
* :money_with_wings: Cracking the coding interview
* :money_with_wings: Elements of programming interview
* :money_with_wings: Programming interviews exposed 3rd edition

## Nice github repositories : 
* [Coding interview university](https://github.com/jwasham/coding-interview-university)
* [Tech interview handbook](https://github.com/yangshun/tech-interview-handbook)
* [andreis interview git repo](https://github.com/andreis/interview)

## How to become a better programmer :
* [How to Level Up as a Developer](https://gist.github.com/fogus/1138647)

## Extra algorithms and data structure resources: 
* [Codility](https://app.codility.com/programmers/challenges/) 
* [Hackerrank](https://www.hackerrank.com/domains/algorithms?filters%5Bstatus%5D%5B%5D=unsolved&filters%5Bdifficulty%5D%5B%5D=medium&badge_type=problem-solving)
* [Glassdoor](https://www.glassdoor.co.uk/Interview/Google-Software-Engineer-Interview-Questions-EI_IE9079.0,6_KO7,24.htm)
* [Interview cake](https://www.interviewcake.com/google-interview-questions)
* [Volland: Awesome big data](https://github.com/Volland/awesome-bigdata?fbclid=IwAR1iLxjaw1SKtv1gvtWck1558tQfhN598KHpsZq5-SXzlkQ86tjZQy4CgUQ#distributed-programming)
* [Python data structure and algorithms](https://github.com/olamedrek/algorithms)

