From 770bb523da5225f66fa532c80021762ed5cd4426 Mon Sep 17 00:00:00 2001 From: Yangshun Tay Date: Mon, 25 Dec 2017 13:10:39 -0800 Subject: [PATCH] Mention Grokking the System Design Interview and Coderust --- design/README.md | 1 + preparing/README.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/design/README.md b/design/README.md index 7cdbc88e..08004f55 100644 --- a/design/README.md +++ b/design/README.md @@ -3,6 +3,7 @@ Design Questions ## Guides +- [Grokking the System Design Interview](https://www.educative.io/collection/5668639101419520/5649050225344512) - https://github.com/donnemartin/system-design-primer - https://github.com/checkcheckzz/system-design-interview - https://github.com/shashank88/system_design diff --git a/preparing/README.md b/preparing/README.md index 58cb14b4..80776abc 100644 --- a/preparing/README.md +++ b/preparing/README.md @@ -27,7 +27,7 @@ If you are interested in how data structures are implemented, check out [Lago](h Next, gain familiarity and mastery of the algorithms and data structures in your chosen programming language: -1. Practice coding algorithms using your chosen language. While [Cracking the Coding Interview](http://www.crackingthecodinginterview.com/) is a good resource for practice, I prefer being able to type code, run it and get instant feedback. There are various Online Judges such as [LeetCode](https://leetcode.com/), [HackerRank](https://www.hackerrank.com/) and [CodeForces](http://codeforces.com/) for you to practice questions online and get used to the language. From experience, LeetCode questions are the most similar to the kind of questions being asked in interviews whereas HackerRank and CodeForces questions are more similar to competitive programming questions. If you practice enough LeetCode questions, there is a good chance that you would have seen/done your actual interview question (or some variant) on LeetCode before. +1. Practice coding algorithms using your chosen language. While [Cracking the Coding Interview](http://www.crackingthecodinginterview.com/) is a good resource for practice, I prefer being able to type code, run it and get instant feedback. There are various Online Judges such as [LeetCode](https://leetcode.com/), [HackerRank](https://www.hackerrank.com/) and [CodeForces](http://codeforces.com/) for you to practice questions online and get used to the language. From experience, LeetCode questions are the most similar to the kind of questions being asked in interviews whereas HackerRank and CodeForces questions are more similar to competitive programming questions. If you practice enough LeetCode questions, there is a good chance that you would have seen/done your actual interview question (or some variant) on LeetCode before. If you are more of a visual person, [Coderust](https://www.educative.io/collection/5642554087309312/5679846214598656) explains the common algorithm questions through step-by-step visualizations which makes understanding the solutions much easier. 2. Learn and understand the time and space complexities of the common operations in your chosen language. For Python, this [page](https://wiki.python.org/moin/TimeComplexity) will come in handy. Also find out the underlying sorting algorithm that is being used in the language's `sort()` function and its time and space complexity (in Python its Timsort which is a hybrid sort). After completing a question on LeetCode, I usually add the time and space complexities of the written code as comments above the function body to remind myself to analyze the algorithm after I am done with the implementation. 3. Read up on the recommended coding style for your language and stick to it. If you have chosen Python, refer to the PEP 8 Style Guide. If you have chosen Java, refer to Google's Java Style Guide. 4. Find out and be familiar with the common pitfalls and caveats of the language. If you point out them out during the interview and intelligently avoid falling into them, you will usually impress the interviewer and that results in bonus points in your feedback, regardless of whether the interviewer is familiar with the language or not.