diff --git a/README.md b/README.md index cd965d6..7f9b94d 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@
Translations: +- [اردو - Urdu](translations/README-ur.md) - [中文版本](translations/README-cn.md) - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) @@ -45,13 +46,12 @@ - [Українська](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) -- [Urdu](https://github.com/jwasham/coding-interview-university/issues/519) - [Thai](https://github.com/jwasham/coding-interview-university/issues/156) - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) - [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) - [Persian - Farsi](https://github.com/jwasham/coding-interview-university/issues/186) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/1030) - [Afrikaans](https://github.com/jwasham/coding-interview-university/issues/1164) -
@@ -73,11 +73,8 @@ This is my multi-month study plan for becoming a software engineer for a large c * Patience * Time -Note this is a study plan for **software engineering**, not web development. Large software companies like Google, Amazon, -Facebook and Microsoft view software engineering as different from web development. For example, Amazon has -Frontend Engineers (FEE) and Software Development Engineers (SDE). These are 2 separate roles and the interviews for -them will not be the same, as each has its own competencies. These companies require computer science knowledge for -software development/engineering roles. +Note this is a study plan for **software engineering**, not frontend engineering or fullstack development. There are really +super roadmaps and coursework for those career paths elsewhere (see https://roadmap.sh/ for more info). There is a lot to learn in a university Computer Science program, but only knowing about 75% is good enough for an interview, so that's what I cover here. For a complete CS self-taught program, the resources for my study plan have been included in Kamran Ahmed's Computer Science Roadmap: https://roadmap.sh/computer-science @@ -250,21 +247,19 @@ Create a new branch so you can check items like this, just put an x in the brack 1. Clone to your local repo: ``` - git clone git@github.com:/coding-interview-university.git + git clone https://github.com//coding-interview-university.git cd coding-interview-university - git checkout -b progress - git remote add jwasham https://github.com/jwasham/coding-interview-university - git fetch --all + git remote add upstream https://github.com/jwasham/coding-interview-university.git + git remote set-url --push upstream DISABLE # so that you don't push your personal progress back to the original repo ``` 1. Mark all boxes with X after you completed your changes: ``` - git add . - git commit -m "Marked x" - git rebase jwasham/main - git push --set-upstream origin progress - git push --force + git commit -am "Marked personal progress" + git pull upstream main # keep your fork up-to-date with changes from the original repo + + git push # just pushes to your fork ``` ## Don't feel you aren't smart enough @@ -781,15 +776,15 @@ if you can identify the runtime complexity of different algorithms. It's a super - [ ] [Delete a node from Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] Implement: - - [ ] insert // insert value into tree + - [ ] [insert // insert value into tree](https://leetcode.com/problems/insert-into-a-binary-search-tree/submissions/987660183/) - [ ] get_node_count // get count of values stored - [ ] print_values // prints the values in the tree, from min to max - [ ] delete_tree - [ ] is_in_tree // returns true if given value exists in the tree - - [ ] get_height // returns the height in nodes (single node's height is 1) + - [ ] [get_height // returns the height in nodes (single node's height is 1)](https://www.geeksforgeeks.org/find-the-maximum-depth-or-height-of-a-tree/) - [ ] get_min // returns the minimum value stored in the tree - [ ] get_max // returns the maximum value stored in the tree - - [ ] is_binary_search_tree + - [ ] [is_binary_search_tree](https://leetcode.com/problems/validate-binary-search-tree/) - [ ] delete_value - [ ] get_successor // returns next-highest value in tree after given value, -1 if none @@ -1107,7 +1102,7 @@ Graphs can be used to represent many problems in computer science, so this secti - Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack) - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy. - Context switching - - How context switching is initiated by the operating system and underlying hardware? + - [How context switching is initiated by the operating system and underlying hardware?](https://www.javatpoint.com/what-is-the-context-switching-in-the-operating-system) - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) - [ ] [CS 377 Spring '14: Operating Systems from University of Massachusetts](https://www.youtube.com/playlist?list=PLacuG5pysFbDQU8kKxbUh4K5c1iL5_k7k) - [ ] concurrency in Python (videos): @@ -1204,8 +1199,9 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1218,7 +1214,6 @@ Graphs can be used to represent many problems in computer science, so this secti - Note by the author: "This is for a US-focused resume. CVs for India and other countries have different expectations, although many of the points will be the same." - ["Step-by-step resume guide" by Tech Interview Handbook](https://www.techinterviewhandbook.org/resume/guide) - Detailed guide on how to set up your resume from scratch, write effective resume content, optimize it, and test your resume - - Detailed guide on how to set up your resume from scratch, write effective resume content, optimize it, and test your resume ## Interview Process & General Interview Prep @@ -1249,6 +1244,7 @@ Mock Interviews: - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/#!/) - I used this and it helped me relax for the phone screen and on-site interview - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously +- [Meetapro: Mock interviews with top FAANG interviewers](https://meetapro.com/?utm_source=ciu) - an Airbnb-style mock interview/coaching platform. ## Be thinking of for when the interview comes @@ -1382,7 +1378,7 @@ You're never really done. - [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - [ ] [How Do I Prepare To Answer Design Questions In A Technical Interview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) -- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/) +- [ ] [8 steps guide to ace your system design interview](https://javascript.plainenglish.io/8-steps-guide-to-ace-a-system-design-interview-7a5a797f4d7d) - [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) - [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below - [ ] [How to ace a systems design interview](https://web.archive.org/web/20120716060051/http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) @@ -1662,6 +1658,7 @@ You're never really done. - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/programming-language-resources.md b/programming-language-resources.md index b1c8c3b..ce83c16 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -47,10 +47,11 @@ - [10 Tips for Pythonic Code (video)](https://www.youtube.com/watch?v=_O23jIXsshs) - [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M) - [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) - - [Coding Interview Essentials](https://github.com/ajinkyal121/coding-interview-university/blob/master/extras/cheat%20sheets/Coding%20Interview%20Python%20Language%20Essentials.pdf) + - [Coding Interview Essentials](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/Coding%20Interview%20Python%20Language%20Essentials.pdf) - [Data Structures And Algorithms in Python](https://www.youtube.com/watch?v=kQDxmjfkIKY) - [Python Programming Tutorial](https://www.scaler.com/topics/python/) - [Python Interview Questions](https://www.interviewbit.com/python-interview-questions) + - [Python Guide for Beginners](https://wiingy.com/learn/python/python-tutorial/) - Java - [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A) - [Java Cheat Sheet](https://www.interviewbit.com/java-cheat-sheet) diff --git a/translations/README-af.md b/translations/README-af.md index 4e2cc3c..804154d 100644 --- a/translations/README-af.md +++ b/translations/README-af.md @@ -1201,8 +1201,9 @@ Grafieke kan gebruik word om baie problmeme in rekenaar wetenskap te verteenwoor - [ ] Reeks van 2-3 minute kort onderwerp videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Reeks van 2-5 minute kort onderwerp videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Reeks van 2-5 minute kort onderwerp videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1667,6 +1668,7 @@ Jy is nooit regtig klaar nie. - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - Prakties: diff --git a/translations/README-ar.md b/translations/README-ar.md index 486e796..a7e3c69 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -1277,8 +1277,9 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1690,6 +1691,7 @@ You're never really done. - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/translations/README-bg.md b/translations/README-bg.md index dd7c1b1..220c824 100644 --- a/translations/README-bg.md +++ b/translations/README-bg.md @@ -1211,8 +1211,9 @@ pобхождам графи. Ако трябваше да напиша сорт - [ ] Серия от 2-3 минутни кратки клипове по различни теми (23 клипа) - [Клипове](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Серия от 2-5 минутни кратки клипове по различни теми - Michael Sambol (40 клипа): - - [Клипове](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Серия от 2-5 минутни кратки клипове по различни теми - Michael Sambol (46 клипа): + - [Клипове](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Алгоритми I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Алгоритми II](https://www.coursera.org/learn/algorithms-part2) @@ -1693,6 +1694,7 @@ Mock интервюта: - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** diff --git a/translations/README-bn.md b/translations/README-bn.md index e4c074d..9d4ef81 100644 --- a/translations/README-bn.md +++ b/translations/README-bn.md @@ -1,16 +1,17 @@ -# কোডিং সাক্ষাত্কার বিশ্ববিদ্যালয় - -> আমি এটি, প্রথমে,একটি সফটওয়্যার ইঞ্জিনিয়ার হওয়ার জন্য অধ্যয়নের বিষয়গুলির একটি স্বল্প-করণীয় তালিকা হিসাবে তৈরি করেছিলাম, -> তবে এটি আজ এক বৃহত তালিকার রুপ ধারণ করেছে যা আপনি দেখতে পাচ্ছেন । এই অধ্যয়নের পরিকল্পনাটি শেষ করার পরে, [আমি অ্যামাজনে সফটওয়্যার ডেভলপমেন্ট ইঞ্জিনিয়ার হিসাবে নিয়োগ পেয়েছি।](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> -> আপনাকে সম্ভবত আমার মতো পড়াশোনা করতে হবে না। যাইহোক, আপনার যা কিছু প্রয়োজন তা এখানেই পাবেন। -> -> আমি বেশ কয়েক মাস ধরে প্রতিদিন প্রায় ৮-১২ ঘন্টা অধ্যয়ন করেছি। এটি আমার গল্প: [গুগল সাক্ষাত্কারের জন্যি কেন আমি ৮ মাস পূর্ণ-সময় অধ্যয়ন করেছি?](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) -> -> **দয়া করে মনে রাখবেন:** আপনাকে আমার মত পড়াশুনা করতে হবে না। আমার জানার প্রয়োজন নেই এমন জিনিসগুলিতে আমি অনেক সময় নষ্ট করেছি। নিচে যে সম্পর্কে আরও তথ্য আছে। আপনার মূল্যবান সময় নষ্ট না করে আমি আপনাকে সেখানে যেতে সাহায্য করব। +# কোডিং সাক্ষাত্কার বিশ্ববিদ্যালয় + +> আমি এটি প্রথমে একটি সফটওয়্যার ইঞ্জিনিয়ার হওয়ার জন্য অধ্যয়নের বিষয়গুলির একটি স্বল্প-করণীয় তালিকা হিসাবে তৈরি করেছিলাম, +> তবে এটি আজ আপনি যে বৃহত তালিকা দেখতে পাচ্ছেন তাতে রুপ নিয়েছে এই শিক্ষা পরিকল্পনাটি পেরিয়ে যাওয়ার পরে, [আমি নিয়োগ পেয়েছি +> অ্যামাজনে সফটওয়্যার ডেভলপমেন্ট ইঞ্জিনিয়ার হিসাবে](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> +> **খেয়াল করুন** আপনাকে সম্ভবত আমার মতো পড়াশোনা করতে হবে না। যাইহোক, আপনার যা কিছু প্রয়োজন তা এখানেই। +> +> আমি বেশ কয়েক মাস ধরে প্রতিদিন প্রায় ৮-১২ ঘন্টা অধ্যয়ন করেছি। এটি আমার গল্প: [গুগল সাক্ষাত্কারের জন্য আমি কেন ৮ মাস পূর্ণ-সময় অধ্যয়ন করেছি](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> এখানে তালিকাভুক্ত আইটেমগুলি যেকোনো সফ্টওয়্যার সংস্থার সম্পর্কে আপনাকে একটি সাক্ষাত্কারের জন্য ভালভাবে প্রস্তুত করবে, +> যার মধ্যে থাকবে বৃহৎ প্রযুক্তি কোম্পানি যেমন: অ্যামাজন, ফেসবুক, গুগল বা মাইক্রোসফ্ট। +> -> এখানে তালিকাভুক্ত আইটেমগুলি আপনাকে, অ্যামাজন, ফেসবুক, গুগল বা মাইক্রোসফ্ট - এর মতো টেক জায়ান্টস সহ যে কোনও সফ্টওয়্যার সংস্থার সম্পর্কে একটি সাক্ষাত্কারের জন্য ভালভাবে প্রস্তুত করবে । -> > *আপনার জন্য শুভকামনা!*
@@ -59,296 +60,282 @@
-##এটা কি? +## এটি কি ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -কোনও বড় প্রতিষ্ঠানের সফটওয়্যার ইঞ্জিনিয়ারের কাছে ওয়েব বিকাশকারী (স্ব-শিক্ষিত, কোনও সিএস ডিগ্রি) থেকে যাওয়ার জন্য এটি আমার বহু মাসের অধ্যয়ন পরিকল্পনা। +এটি আমার বহু মাসের অধ্যয়ন পরিকল্পনা যার মাধ্যমে কোনো বড় প্রতিষ্ঠানের সফটওয়্যার ইঞ্জিনিয়ারের কাজে (স্ব-শিক্ষিত, কোনও সিএস ডিগ্রি ছাড়া) যোগ দেওয়া সম্ভব। -**অপরিহার্যঃ** -* কোডিং নিয়ে একটু অভিজ্ঞতা (variables, loops, methods/functions, etc) + +**গুরুত্বপূর্নঃ** + +* প্রোগ্রামিং এ সামান্য অভিজ্ঞতা (ভ্যারিয়েবলস,লুপ্স,মেথড/ফাংশন,ইত্যাদি) * ধৈর্য -* সময় - -এটা **সফ্টওয়্যার ইঞ্জিনিয়ারিং** এর জন্য অধ্যয়ন পরিকল্পনা, ওয়েব ডেভেলপমেন্টের জন্য নয়। বড় সফটওয়্যার কোম্পানি যেমন গুগল, অ্যামাজন, -ফেসবুক এবং মাইক্রোসফট সফটওয়্যার ইঞ্জিনিয়ারিংকে ওয়েব ডেভেলপমেন্ট থেকে আলাদা বলে মনে করে। উদাহরণস্বরূপ, অ্যামাজন আছে -ফ্রন্টেন্ড ইঞ্জিনিয়ার্স (FEE) এবং সফটওয়্যার ডেভেলপমেন্ট ইঞ্জিনিয়ার্স (SDE)। এই দুটি পৃথক পদ এবং তার জন্য সাক্ষাৎকার -তারা একই হবে না, প্রত্যেকের নিজস্ব দক্ষতা আছে। এই কোম্পানিগুলো চায় কম্পিউটার বিজ্ঞান জ্ঞান -সফ্টওয়্যার ডেভেলপমেন্ট/ইঞ্জিনিয়ারিং পদের জন্য। +* সময় + + বিজ্ঞপ্তি এটি সফ্টওয়্যার ইঞ্জিনিয়ারিং এর অধ্যয়ন পরিকল্পনা, ওয়েব ডেভলপমেন্ট এর নয়। বড় বড় সফ্টওয়্যার কোম্পানি যেমন গুগল, অ্যামাজন,ফেসবুক এবং মাইক্রোসফ্ট সফ্টওয়্যার ইঞ্জিনিয়ারিং কে ওয়েব ডেভলপমেন্ট থেকে আলাদা হিসাবে দেখে। যেমন অ্যামাজন এর ফ্রন্ট এন্ড ইঞ্জিনিয়ার (এফইই) এবং সফ্টওয়্যার ডেভলপমেন্ট ইঞ্জিনিয়ার (এফডিই) দুই ধরনের ইঞ্জিনিয়ার আছে। এই দুইটি আলাদা চাকরি এবং এদের ইন্টারভিউ ও আলাদা ধরনের হবে। কারন এই দুই ধরনের পেশার জন্য আলাদা দক্ষতা প্রয়োজন। এই প্রতিষ্ঠান গুলো সফ্টওয়্যার ডেভলপমেন্ট ইঞ্জিনিয়ার এর চাকরির জন্য কম্পিউটার সাইন্স এর জ্ঞান হাকা আবশ্যক মনে করে। + --- ## সুচিপত্র ### পাঠ পরিকল্পনা - -- [এটি কী?](#এটি-কী) -- [কেন এটি ব্যবহার করবেন?](#এটি-কেন-ব্যবহার-করুন) + +- [এটি কি](#এটি-কি) +- [কেন এটি ব্যবহার করবেন](#কেন-এটি-ব্যবহার-করবেন) - [এটি কীভাবে ব্যবহার করবেন](#এটি-কীভাবে-ব্যবহার-করবেন) -- [মনে হয় আপনি যথেষ্ট স্মার্ট নন](#মনে-করেন-না-আপনি-স্মার্ট-যথেষ্ট) -- [ভিডিও সংস্থান সম্পর্কে](#ভিডিও-সংস্থান-সম্পর্কে) -- [একটি প্রোগ্রামিং ভাষা নির্বাচন করুন](#একটি-প্রোগ্রামিং-ভাষা-নির্বাচন-করুন) -- [ডেটা স্ট্রাকচার এবং অ্যালগরিদমের জন্য বই](#ডেটা-স্ট্রাকচার-এবং-অ্যালগরিদমের-জন্য-বই) -- [ইন্টারভিউ প্রস্তুতি বই](#ইন্টারভিউ-প্রস্তুতি-বই) -- [আমার মত ভুল করবেন না](#আমার-মত-ভুল-করবেন-না) -- [এখানে যে বিষয়গুলো থাকবে না](#এখানে-যে-বিষয়গুলো-থাকবে-না) +- [আপনি কি নিজেকে যথেষ্ট স্মার্ট ভাবেন নাহ](#আপনি-কি-নিজেকে-যথেষ্ট-স্মার্ট-ভাবেন-নাহ) +- [ভিডিও রিসোর্স সম্পর্কে কিছু কথা](#ভিডিও-রিসোর্স-সম্পর্কে-কিছু-কথা) +- [একটি প্রোগ্রামিং ভাষা বেছে নিন](#একটি-প্রোগ্রামিং-ভাষা-বেছে-নিন) +- [ডাটা স্ট্রাকচার এবং এ্যালগোরিদম এর বইসমুহ](#ডাটা-স্ট্রাকচার-এবং-এ্যালগোরিদম-এর-বইসমুহ) +- [ইন্টারভিউ এর প্রস্তুতি এর বইসমুহ](#ইন্টারভিউ-এর-প্রস্তুতি-এর-বইসমুহ) +- [আমার ভুল গুলো করবেন নাহ](#আমার-ভুল-গুলো-করবেন-নাহ) +- [এখানে যা শেখানো হবে না](#কী-আপনি-দেখতে-পাবেন-না) - [দৈনিক পরিকল্পনা](#দৈনিক-পরিকল্পনা) - [কোডিং প্রশ্ন অনুশীলন](#কোডিং-প্রশ্ন-অনুশীলন) -- [কোডিং চ্যালেঞ্জ](#কোডিং-চ্যালেঞ্জ) +- [কোডিং অনুশীলন / চ্যালেঞ্জ](#কোডিং-এক্সারসাইজেশনগুলি) -### অধ্যয়নের বিষয় -- [অ্যালগরিদমিক জটিলতা / বিগ-ও / অ্যাসিপটোটিক বিশ্লেষণ](#অ্যালগোরিদমিক-জটিলতা-বিগ-ও-অ্যাসিপোটোটিক-বিশ্লেষণ) +### অধ্যয়নের বিষয়সমূহ + +- [অ্যালগোরিদমিক জটিলতা / বিগ-ও / অ্যাসিম্পটোটিক বিশ্লেষণ](#অ্যালগোরিদমিক-জটিলতা-বিগ-ও-অ্যাসিপোটোটিক-বিশ্লেষণ) + - [ডেটা স্ট্রাকচার](#ডেটা-স্ট্রাকচার) -[অ্যারে](#অ্যারে) - -[লিঙ্কযুক্ত তালিকা](#লিঙ্কযুক্ত-তালিকাগুলি) + -[লিঙ্কলিস্ট](#লিঙ্কযুক্ত-তালিকাগুলি) -[স্ট্যাক](#স্ট্যাক) - -[সারি](#সারি) + -[কিউ](#সারি) -[হ্যাশ টেবিল](#হ্যাশ-টেবিল) - [আরও জ্ঞান](#আরও-জ্ঞান) - -[বাইনারি অনুসন্ধান](#বাইনারি-অনুসন্ধান) + -[বাইনারি সার্চ](#বাইনারি-অনুসন্ধান) -[বিটওয়াইজ অপারেশন](#বিটওয়াইস-অপারেশন) -- [গাছ](#গাছ) - -[গাছ-নোট ও পটভূমি](#গাছ-নোট-পটভূমি) - -[বাইনারি অনুসন্ধান গাছ: বিএসটিএস](#বাইনারি-অনুসন্ধান-গাছ-বুস্ট) - -[গাদা / অগ্রাধিকার সারি / বাইনারি হিপ](#হিপ-অগ্রাধিকার-সারি-বাইনারি-হিপ) - -সুষম অনুসন্ধান গাছ (সাধারণ ধারণা, বিশদ নয়) - -ট্র্যাভারসাল: প্রির্ডার, ইনর্ডার, পোস্টর্ডার, বিএফএস, ডিএফএস -- [বাছাই করা](#বাছাই-করা) - -নির্বাচন - -সন্নিবেশ - -হিপসোর্ট - -দ্রুত বাছাই - -মার্জ সাজান +- [ট্রি](#গাছ) + - [ট্রি-নোট এবং পটভূমি](#গাছ-নোট-পটভূমি) + - [বাইনারি সার্চ গাছ: বিএসটি](#বাইনারি-অনুসন্ধান-গাছ-বুস্ট) + - [হিপ / প্রায়োরিটি কিউ / বাইনারি হিপ](#হিপ-অগ্রাধিকার-সারি-বাইনারি-হিপ) + - ব্যালান্সড সার্চ ট্রি (সাধারণ ধারণা, বিশদ নয়) + - ট্র্যাভারসালস: প্রিওর্ডার, ইনওর্ডার, পোস্টওর্ডার, বিএফএস, ডিএফএস +- [সোর্টিং](#বাছাই-করা) + - সিলেকশন + - ইন্সার্শন + - হিপসোর্ট + - কুইক সোর্ট + - মার্জ সোর্টি - [গ্রাফ](#গ্রাফ) - -পরিচালিত - -পুনর্নির্দেশ - -অন্তিক ম্যাট্রিক্স - -সংলগ্ন তালিকা + - ডিরেক্টেড + - আনডিরেক্টেড + - সংলগ্ন ম্যাট্রিক্স (adjacency matrix) + - সংলগ্ন লিস্ট (adjacency list) -ট্র্যাভারসাল: বিএফএস, ডিএফএস - [আরও বেশি জ্ঞান](#আরও-বেশি-জ্ঞান) - -[পুনরাবৃত্তি](#পুনরাবৃত্তি) - -[ডায়নামিক প্রোগ্রামিং](#ডায়নামিক-প্রোগ্রামিং) - -[অবজেক্ট-ওরিয়েন্টড প্রোগ্রামিং](#অবজেক্ট-ওরিয়েন্টেড-প্রোগ্রামিং) - -[নকশার ধরণগুলি](#ডিজাইন-নিদর্শন) - -[সংযুক্তি (এন কে নির্বাচন করুন) এবং সম্ভাবনা](#সংযুক্তি-এন-পছন্দ-কে-সম্ভাবনা) - -[এনপি, এনপি-সম্পূর্ণ এবং আনুমানিক অ্যালগরিদম](#এনপি-এনপি-সম্পূর্ণ-এবং-আনুমানিক-অ্যালগোরিদম) - -[ক্যাশে](#ক্যাশে) - -[প্রক্রিয়া এবং থ্রেড](#প্রক্রিয়া-এবং-থ্রেড) - -[পরীক্ষা](#পরীক্ষা) - -[সময়সূচী](#সময়সূচী) - -[স্ট্রিং সন্ধান এবং ম্যানিপুলেশনস](#স্ট্রিং-সন্ধান-ম্যানিপুলেশনস) - -[চেষ্টা](#চেষ্টা) - -[ভাসমান পয়েন্ট নম্বর](#ভাসমান-পয়েন্ট নম্বর) - -[ইউনিকোড](#ইউনিকোড) - -[অন্তিমারতা](#শেষতা) - -[নেটওয়ার্কিং](#নেটওয়ার্কিং) -- [সিস্টেম ডিজাইন, স্কেলাবিলিটি, ডেটা হ্যান্ডলিং](#সিস্টেম-ডিজাইন-স্কেলাবিলিটি-ডেটা-হ্যান্ডলিং) (যদি আপনার 4+ বছরের অভিজ্ঞতা থাকে) -- [চূড়ান্ত পর্যালোচনা](#চূড়ান্ত-পর্যালোচনা) -- [কোডিং প্রশ্ন অনুশীলন](#কোডিং-প্রশ্ন-অনুশীলন) -- [কোডিং অনুশীলন / চ্যালেঞ্জ](#কোডিং-এক্সারসাইজেশনগুলি) -- [একবার আপনি সাক্ষাত্কারের কাছাকাছি এসেছেন](#একবার-আপনি-সাক্ষাত্কারের-কাছাকাছি-এসেছেন) -- [আপনার জীবনবৃত্তান্ত](#আপনার-জীবনবৃত্তান্ত) + - [রিকার্শন](#পুনরাবৃত্তি) + - [ডায়নামিক প্রোগ্রামিং](#ডায়নামিক-প্রোগ্রামিং) + - [অবজেক্ট-ওরিয়েন্টড প্রোগ্রামিং](#অবজেক্ট-ওরিয়েন্টেড-প্রোগ্রামিং) + - [ডিজাইন প্যাটার্ন্স](#ডিজাইন-নিদর্শন) + - [সমাবেশ (এন থেকে কে নির্বাচন করুন) এবং সম্ভাবনা (Combinatorics (n choose k) & Probability)](#সংযুক্তি-এন-পছন্দ-কে-সম্ভাবনা) + - [এনপি, এনপি-সম্পূর্ণ এবং আনুমানিক অ্যালগরিদম](#এনপি-এনপি-সম্পূর্ণ-এবং-আনুমানিক-অ্যালগোরিদম) + - [কম্পিউটার কিভাবে প্রোগ্রাম প্রসেস করে](কম্পিউটার-কিভাবে-প্রোগ্রাম-প্রসেস-করে) + - [ক্যাশ](#ক্যাশে) + - [প্রসেস এবং থ্রেড](#প্রক্রিয়া-এবং-থ্রেড) + - [টেস্টিং](#পরীক্ষা) + - [স্ট্রিং সন্ধান এবং ম্যানিপুলেশনস](#স্ট্রিং-সন্ধান-ম্যানিপুলেশনস) + - [ট্রাইস](#চেষ্টা) + - [ফ্লোটিং পয়েন্ট নম্বর](#ভাসমান-পয়েন্ট-নম্বর) + - [ইউনিকোড](#ইউনিকোড) + - [এন্ডিয়ান্স](#শেষতা) + - [নেটওয়ার্কিং](#নেটওয়ার্কিং) + - [সময়সূচী](#সময়সূচী) +- [চূড়ান্ত পর্যালোচনা](#চূড়ান্ত-পর্যালোচনা) + + ### চাকরি পাওয়ার জন্য + +- [আপনার জীবনবৃত্তান্ত আপডেট করুন](#আপনার-জীবনবৃত্তান্ত) +- [চাকরি খোজা](চাকরি-খোজা) +- [সাক্ষাত্কারের প্রক্রিয়া এবং সাক্ষাত্কার প্রস্তুতি](#একবার-আপনি-সাক্ষাত্কারের-কাছাকাছি-এসেছেন) - [সাক্ষাত্কারটি আসার জন্য চিন্তাভাবনা করুন](#সাক্ষাত্কারটি-কখন-আসবে-এর-জন্য-চিন্তাভাবনা-করুন) -- [সাক্ষাত্কারকারীর জন্য প্রশ্ন রয়েছে](#সাক্ষাত্কারকারীর-জন্য-প্রশ্ন-রয়েছে) -- [একবার আপনি কাজটি পেয়ে যাবেন](#একবার-আপনি-কাজটি-পেয়েছেন) +- [সাক্ষাত্কারকারীর জন্য প্রশ্ন রাখুন](#সাক্ষাত্কারকারীর-জন্য-প্রশ্ন-রয়েছে) +- [চাকরি পাবার পর](#একবার-আপনি-কাজটি-পেয়েছেন) -----------------এই পয়েন্টের নীচে থাকা সমস্ত কিছুই ঐচ্ছিক---------------- +**----------------এই পয়েন্টের নীচে থাকা সমস্ত কিছুই ঐচ্ছিক----------------** -
-অতিরিক্ত সংস্থান +### ঐচ্ছিক অতিরিক্ত বিষয় ও রিসোর্স --[অতিরিক্ত বই](#অতিরিক্ত-বই) --[অতিরিক্ত শিক্ষা](#অতিরিক্ত-শিক্ষণ) - -[সংকলক](#সংকলক) - -[ইম্যাকস এবং ভিআই (এম)](#ইম্যাকস-এবং-ভিএম) - -[ইউনিক্স কমান্ড লাইন সরঞ্জাম](#ইউনিক্স-কমান্ড-লাইন-সরঞ্জাম) - -[তথ্য তত্ত্ব](#তথ্য-তত্ত্ব-ভিডিও) - -[সমতা এবং হামিং কোড](#সমতা-হামিং-কোড-ভিডিও) - -[এন্ট্রপি](#এনট্রপি) - -[ক্রিপ্টোগ্রাফি](#ক্রিপ্টোগ্রাফি) - -[সংক্ষেপণ](#সংক্ষেপণ) - -[কম্পিউটার সুরক্ষা](#কম্পিউটার-সুরক্ষা) - -[আবর্জনা সংগ্রহ](#জঞ্জাল-সংগ্রহ) - -[সমান্তরাল প্রোগ্রামিং](#সমান্তরাল-প্রোগ্রামিং) - -[মেসেজিং, সিরিয়ালাইজেশন, এবং কুইউিং সিস্টেম](#মেসেজিং-সিরিয়ালাইজেশন-এবং-কুইউং-সিস্টেম) - -[এ *](#ক) - -[ফাস্ট ফুরিয়ার ট্রান্সফর্ম](#ফাস্ট-ফুরিয়ার-ট্রান্সফর্ম) - -[ব্লুম ফিল্টার](#ব্লুম-ফিল্টার) - -[হাইপারলগলগ](#হাইপারলগলগ) - -[স্থানীয়তা-সংবেদনশীল হ্যাশিং](#লোকাল-সংবেদনশীল-হ্যাশিং) - -[ভ্যান এমডে বোস ট্রি](#ভ্যান-এমডি-বোস-ট্রি) - -[অগমেন্টেড ডেটা স্ট্রাকচার](#সংযুক্ত-ডেটা-কাঠামো) - -[ভারসাম্যযুক্ত অনুসন্ধান গাছ](#সুষম-অনুসন্ধান-গাছ) - -এভিএল গাছ - -গাছ স্প্লে - -লাল / কালো গাছ - -2-3 অনুসন্ধান গাছ - -২-৩-৪ টি গাছ (ওরফ ২-৪ টি গাছ) - -এন-আরি (কে-আরি, এম-আরি) গাছ - -বি-ট্রি - -[কেডি গাছ](#কেডি-ট্রি) - -[তালিকাগুলি বাদ দিন](#এড়িয়ে-যাওয়া-তালিকাগুলি) - -[নেটওয়ার্ক প্রবাহ](#নেটওয়ার্ক-প্রবাহ) - -[বিচ্ছিন্ন সেট এবং ইউনিয়ন সন্ধান করুন](#বিভেদ-সেট-ইউনিয়ন-অনুসন্ধান) - -[দ্রুত প্রক্রিয়াকরণের জন্য গণিত](#দ্রুত-প্রক্রিয়াজাতকরণের-জন্য-গণিত) - -[ট্রিপ](#ট্রাপ) - -[লিনিয়ার প্রোগ্রামিং](#লিনিয়ার-প্রোগ্রামিং-ভিডিও) - -[জ্যামিতি, উত্তল হাল](#জ্যামিতি-উত্তল-হাল-ভিডিও) - -[স্বতন্ত্র গণিত](#স্বতন্ত্র-গণিত) - -[মেশিন লার্নিং](#মেশিন-লার্নিং) --[কয়েকটি বিষয়ে অতিরিক্ত বিশদ বিবরণ](#কিছু-বিষয়ে-কিছু-অতিরিক্ত-বিশদ-বিবরণ) --[ভিডিও সিরিজ](#ভিডিও-সিরিজ) --[কম্পিউটার বিজ্ঞান কোর্স](#কম্পিউটার-বিজ্ঞান-কোর্স) --[কাগজপত্র](#কাগজপত্র) +-[অধিক বই](#অতিরিক্ত-বই) +- [সিস্টেম ডিজাইন, স্কেলাবিলিটি, ডেটা হ্যান্ডলিং](#সিস্টেম-ডিজাইন-স্কেলাবিলিটি-ডেটা-হ্যান্ডলিং) (যদি আপনার 4+ বছরের অভিজ্ঞতা থাকে) +- [অধিক শিক্ষা](#অতিরিক্ত-শিক্ষণ) + - [কম্পাইলার্স](#সংকলক) + - [ইম্যাকস এবং ভিআই (এম)](#ইম্যাকস-এবং-ভিএম) + - [ইউনিক্স কমান্ড লাইন তুলস](#ইউনিক্স-কমান্ড-লাইন-সরঞ্জাম) + - [ইনফরমেশন থিয়োরি](#তথ্য-তত্ত্ব-ভিডিও) + - [প্যারিটি এবং হামিং কোড](#সমতা-হামিং-কোড-ভিডিও) + - [এন্ট্রপি](#এনট্রপি) + - [ক্রিপ্টোগ্রাফি](#ক্রিপ্টোগ্রাফি) + - [কম্প্রেশন](#সংক্ষেপণ) + - [কম্পিউটার সুরক্ষা](#কম্পিউটার-সুরক্ষা) + - [গারবেজ কালেকশন](#জঞ্জাল-সংগ্রহ) + - [প্যারালাল প্রোগ্রামিং](#সমান্তরাল-প্রোগ্রামিং) + - [মেসেজিং, সিরিয়ালাইজেশন, এবং কিউইং সিস্টেম](#মেসেজিং-সিরিয়ালাইজেশন-এবং-কুইউং-সিস্টেম) + - [এ *](#ক) + - [ফাস্ট ফুরিয়ার ট্রান্সফর্ম](#ফাস্ট-ফুরিয়ার-ট্রান্সফর্ম) + - [ব্লুম ফিল্টার](#ব্লুম-ফিল্টার) + - [হাইপারলগলগ](#হাইপারলগলগ) + - [লোকালিটি-সেনসিটিভ হ্যাশিং](#লোকাল-সংবেদনশীল-হ্যাশিং) + - [ভ্যান এমডে বোস ট্রি](#ভ্যান-এমডি-বোস-ট্রি) + - [অগমেন্টেড ডেটা স্ট্রাকচার](#সংযুক্ত-ডেটা-কাঠামো) + - [ব্যালান্সড সার্চ ট্রি](#সুষম-অনুসন্ধান-গাছ) + - এভিএল ট্রি + - স্প্লে ট্রি + - লাল / কালো গাছ + - 2-3 সার্চ ট্রি + - ২-৩-৪ ট্রি (ওরফ ২-৪ ট্রি) + - এন-আরি (কে-আরি, এম-আরি) ট্রি + - বি-ট্রি + - [কেডি ট্রি](#কেডি-ট্রি) + - [স্কিপ লিস্ট](#এড়িয়ে-যাওয়া-তালিকাগুলি) + - [নেটওয়ার্ক ফ্লো](#নেটওয়ার্ক-প্রবাহ) + - [বিচ্ছিন্ন সেট এবং ইউনিয়ন ফাইন্ড](#বিভেদ-সেট-ইউনিয়ন-অনুসন্ধান) + - [দ্রুত প্রক্রিয়াকরণের জন্য গণিত](#দ্রুত-প্রক্রিয়াজাতকরণের-জন্য-গণিত) + - [ট্রিপ](#ট্রাপ) + - [লিনিয়ার প্রোগ্রামিং](#লিনিয়ার-প্রোগ্রামিং-ভিডিও) + - [জ্যামিতি, উত্তল হাল](#জ্যামিতি-উত্তল-হাল-ভিডিও) + - [ডিসক্রিট ম্যাথ](#স্বতন্ত্র-গণিত) + - [মেশিন লার্নিং](#মেশিন-লার্নিং) +- [কয়েকটি বিষয়ে বিশদ বিবরণ](#কিছু-বিষয়ে-কিছু-অতিরিক্ত-বিশদ-বিবরণ) +- [ভিডিও সিরিজ](#ভিডিও-সিরিজ) +- [কম্পিউটার বিজ্ঞান কোর্স](#কম্পিউটার-বিজ্ঞান-কোর্স) +- [কাগজপত্র](#কাগজপত্র) -
--- -## কেন এটি ব্যবহার করবেন? +## কেন এটি ব্যবহার করবেন + +আপনি যদি সফটওয়্যার ইঞ্জিনিয়ার হিসেভে বড় কোম্পানি তে কাজ করতে চান তাহলে এই বিষয় গুলো আপনার জানা থাকা প্রয়োজন। + +আপনি যদি আমার মতো কম্পিউটার সাইন্স এর ডিগ্রি মা মিয়ে থাকেন তাহলে এটি আপনাকে কম্পিউটার সাইন্স এর চার বছরের কোর্স শিখতে সাহায্য করবে। + +আমি যখন এই প্রকল্পটি শুরু করেছি, তখন আমি একটি হিপ স্ট্যাক কিছুই জানতাম না, বিগ-ও জানতাম না, ট্রি সম্পর্কে কিছুই বা কীভাবে একটি গ্রাফ ট্রাভার্স করব কিছি জানতাম নাহ। যদি আমাকে কোনও সর্টিং অ্যালগরিদম কোড করতে বলা হতো, আমি তোমাকে বলতে পারি এটি খুব ভাল হত না। +আমি যে ডেটা স্ট্রাকচার ব্যবহার করেছি সেগুলি ভাষাতে বিল্ট ইন ছিল এবং তারা কীভাবে কাজ করেছিল তা আমি জানতাম না। আমি যে প্রোগ্রামটি চালাচ্ছিলাম তা যদি আমাকে "মেমোরি আউট অফ বাউন্ড" ইরোর না দেখাতো তাহলে আমি মেমরি ম্যানেজ করতাম নাহ। এবং এই ইরোর দিলে তখন আমি অন্য কোনো পথ বেছে নিতাম। আমি আমার জীবনে বহু বহুমাত্রিক অ্যারে ব্যবহার করেছি এবং সহস্রাধিক অ্যাসোসিয়েটিভ অ্যারে ব্যাবহার করেছি, তবে আমি স্ক্র্যাচ থেকে কখনও ডেটা স্ট্রাকচার তৈরি করি নি। -আপনি যদি একটি বড় কোম্পানির সফটওয়্যার ইঞ্জিনিয়ার হিসেবে কাজ করতে চান, তাহলে এই বিষয়গুলো আপনাকে জানতে হবে। - -আপনি যদি কম্পিউটার সায়েন্সে ডিগ্রী পেতে মিস করেন, যেমন আমি করেছি, এটি আপনাকে ধরবে এবং আপনার জীবনের চার বছর বাঁচাবে। - -যখন আমি এই প্রকল্পটি শুরু করি, তখন আমি একটি স্তূপ থেকে একটি স্ট্যাক জানতাম না, বিগ-ও কিছুই জানতাম না, বা গাছ সম্পর্কে কিছু জানতাম না, বা কীভাবে -একটি গ্রাফ অতিক্রম. যদি আমাকে একটি সাজানোর অ্যালগরিদম কোড করতে হয়, আমি আপনাকে বলতে পারি এটি ভয়ানক হত। -আমার ব্যবহৃত প্রতিটি ডেটা স্ট্রাকচার ভাষাতে তৈরি করা হয়েছিল এবংআমাকে কখনই মেমরি ম্যানেজ করতে হয়নি যদি না আমি যে প্রক্রিয়াটি চালাচ্ছি তা একটি "আউট অফ মেমরি" ইরর দেয়, এবং তারপর আমাকে একটি সমাধান খুঁজে বের করতে হবে। আমি আমার জীবনে কয়েকটি বহুমাত্রিক অ্যারে ব্যবহার করেছি এবং -হাজার হাজার সহযোগী অ্যারে, কিন্তু আমি স্ক্র্যাচ থেকে ডেটা স্ট্রাকচার তৈরি করিনি। - -এটা একটা দীর্ঘ পরিকল্পনা। এটা আপনার মাস লাগতে পারে. আপনি যদি ইতিমধ্যে এটির অনেক কিছুর সাথে পরিচিত হন তবে এটি আপনার অনেক কম সময় লাগবে। +এটি একটি দীর্ঘ পরিকল্পনা। এটি আপনার কয়েক মাস সময় নিতে পারে। আপনি যদি ইতিমধ্যে এর অনেক বিষয়ের সাথে পরিচিত হন তবে আপনাকে অনেক কম সময় লাগবে। -## এটি কিভাবে ব্যবহার করতে +## এটি কীভাবে ব্যবহার করবেন -নীচের সমস্ত কিছুই একটি রূপরেখা এবং আপনার আইটেমগুলি উপরের থেকে নীচে পর্যন্ত অধ্যবসায় করা উচিত। +নীচের সমস্ত কিছুই একটি রূপরেখা এবং আপনার আইটেমগুলি উপরের থেকে নীচে পর্যন্ত অনুসরন করা উচিত। - -অগ্রগতি পরীক্ষা করার জন্য কার্য তালিকা সহ আমি গিটহাবের বিশেষ মার্কডাউন ব্যবহার করছি। - - [গিটহাব মার্কডাউন সম্পর্কে আরও](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) - -### যদি আপনি গিট ব্যবহার করতে না চান - -এই পৃষ্ঠায়, উপরের দিকের কোড বোতামে ক্লিক করুন, তারপর "Download ZIP" এ ক্লিক করুন। ফাইলটি আনজিপ করুন এবং আপনি পাঠ্য ফাইলগুলির সাথে কাজ করতে পারেন। - -আপনি যদি মার্কডাউন বোঝে এমন একটি কোড এডিটরে খোলা থাকেন, তাহলে আপনি সবকিছু সুন্দরভাবে ফরম্যাট করা দেখতে পাবেন। - -![কিভাবে একটি জিপ ফাইল হিসাবে রেপো ডাউনলোড করবেন](https://d3j2pkmjtin6ou.cloudfront.net/how-to-download-as-zip.png) - -### যদি আপনি গিট ব্যবহার করতে চান +আমি নিজের অগ্রগতি নোট করার জন্য আমি গিট-হাবের বিশেষ মার্কডাউন ফ্লেভার এর টাস্ক লিস্ট ব্যবহার করছি। -1. ***গিটহাব রেপো ফোর্ক করুনঃ*** `https://github.com/jwasham/coding-interview-university` by clicking on the Fork button. +**একটি নতুন ব্রাঞ্চ তৈরি করুন যাতে আপনি এভাবে আইটেমগুলিতে টিক চিহ্ন ব্যাবহার করতে পারেন, বন্ধনীগুলিতে কেবল একটি এক্স রাখুন: [x]** + + একটি ব্রাঞ্চ ফর্ক করুন এবং নীচের কমান্ডগুলি অনুসরণ করুন + +এই গিট-হাব রিপো টি ফর্ক করুন +https://github.com/jwasham/coding-interview-university +ফর্ক বাটনে চাপ দিয়ে - ![গিটহাব রেপো ফোর্ক করুন](https://d3j2pkmjtin6ou.cloudfront.net/fork-button.png) +আপনার লোকাল রিপো তে ক্লোন করুন -1. আপনার লোকাল রেপোতে ক্লোন করুনঃ - - ``` git clone git@github.com:/coding-interview-university.git - cd coding-interview-university git checkout -b progress git remote add jwasham https://github.com/jwasham/coding-interview-university git fetch --all - ``` -1. আপনি আপনার পরিবর্তনগুলি সম্পূর্ণ করার পরে X দিয়ে সমস্ত বাক্স চিহ্নিত করুনঃ - - ``` +আপনার পরিবর্তনগুলি শেষ করার পরে এক্স "X" চিহ্ন দিয়ে সমস্ত বাক্স চিহ্নিত করুন + git add . git commit -m "Marked x" git rebase jwasham/main git push --set-upstream origin progress git push --force - ``` + +[গিট-হাব-ফ্লেভার্ড মার্কডাউন সম্পর্কে আরও জানুন](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## মনে হয় না আপনি যথেষ্ট স্মার্ট নন +## আপনি কি নিজেকে যথেষ্ট স্মার্ট ভাবেন নাহ --সফল সফ্টওয়্যার ইঞ্জিনিয়াররা স্মার্ট, তবে অনেকেরই এমন নিরাপত্তাহীনতা রয়েছে যে তারা যথেষ্ট স্মার্ট নয়। -- নিম্নলিখিত ভিডিওগুলি আপনাকে এই নিরাপত্তাহীনতা কাটিয়ে উঠতে সাহায্য করতে পারে: - - [জিনিয়াস প্রোগ্রামারটির রূপকথার কাহিনী](https://www.youtube.com/watch?v=0SARbwvhupQ) - - [একা যাওয়া বিপদজনক: টেকের মধ্যে অদৃশ্য মনস্টারদের লড়াই](https://www.youtube.com/watch?v=1i8ylq4j_EY) +- সফল সফ্টওয়্যার ইঞ্জিনিয়াররা স্মার্ট, তবে অনেকেরই এমন নিরাপত্তাহীনতা রয়েছে যে তারা যথেষ্ট স্মার্ট নয়। +- [জিনিয়াস প্রোগ্রামার নিয়ে মিথ](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [একা যাওয়া বিপদজনক: টেকের মধ্যে অদৃশ্য মনস্টার লড়াই করা](https://www.youtube.com/watch?v=1i8ylq4j_EY) +- [বিশ্বাস আপনি পরিবর্তন করতে পারেন](http://www.aaronsw.com/weblog/dweck) +- [ভাবেন আপনি গুগলে কাজ করার মতো স্মার্ট নন? ঠিক আছে, আবার চিন্তা করুন](https://www.youtube.com/watch?v=uPOJ1PR50ag) -## ভিডিও সংস্থান সম্পর্কে +## ভিডিও রিসোর্স সম্পর্কে কিছু কথা -কিছু ভিডিও শুধুমাত্র একটি Coursera বা EdX ক্লাসে ভর্তির মাধ্যমে পাওয়া যায়। এগুলোকে MOOC বলা হয়। -কখনও কখনও ক্লাস সেশনে থাকে না তাই আপনাকে কয়েক মাস অপেক্ষা করতে হবে, তাই আপনার অ্যাক্সেস নেই। +কিছু ভিডিও কেবল কোর্সেরা (Coursera) বা এডএক্স (EdX) ক্লাসে ভর্তি হয়ে পাওয়া যায়। এগুলিকে এমওওসি বলা হয়। +কখনও কখনও ক্লাসগুলি সেশনে হয় না তাই আপনাকে কয়েক মাস অপেক্ষা করতে হবে, যাতে আপনার অ্যাক্সেস নেই। + +অনলাইন কোর্স এর পরিবর্তে ফ্রি এবং সর্বদা পাওয়া যায় এমন পাব্লিক রিসোর্স যেমন ইউটিউব ভিডিও (আমি বিশ্ববিদ্যালয়ের বক্তৃতা ব্যবহার করতে পছন্দ করি।) ব্যাভয়ার করা ভালো হবে। যেন আপনারা যেকোনো সময় যেকোনো বিষয়ে পড়তে পারেন কোনো বিশেষ সময় কোনো কোর্স এর জন্য অপেক্ষা করতে নাহ হয়। + +## একটি প্রোগ্রামিং ভাষা বেছে নিন -বিনামূল্যে এবং সর্বদা উপলব্ধ পাবলিক সোর্স দিয়ে অনলাইন কোর্সের সংস্থানগুলি প্রতিস্থাপন করা দুর্দান্ত হবে, -যেমন ইউটিউব ভিডিও (বিশেষত ইউনিভার্সিটির বক্তৃতা), যাতে আপনি যেকোন সময় এগুলি অধ্যয়ন করতে পারেন, -শুধুমাত্র যখন একটি নির্দিষ্ট অনলাইন কোর্স সেশনে থাকে তখন নয়। +আপনি যে কোডিং সাক্ষাত্কারগুলি করবেন তার জন্য আপনাকে একটি প্রোগ্রামিং ভাষা পছন্দ করতে হবে, তবে আপনাকে এমন একটি ভাষাও খুঁজে বের করতে হবে যা আপনি কম্পিউটার সাইন্সের ধারণাগুলি অধ্যয়ন করতে ব্যবহার করতে পারবেন। -## একটি প্রোগ্রামিং ভাষা চয়ন করুন +ভালো হয় যদি এই দুইটি কাজে একই ভাষা ব্যাবহার করেন তাহলে আপনাকে একটি ভাষাতেই দক্ষ হতে হবে। -কোডিং ইন্টারভিউয়ের জন্য আপনাকে একটি প্রোগ্রামিং ভাষা বেছে নিতে হবে, -তবে আপনাকে এমন একটি ভাষা খুঁজে বের করতে হবে যা আপনি কম্পিউটার বিজ্ঞানের ধারণাগুলি অধ্যয়ন করতে ব্যবহার করতে পারেন। +### এই শিক্ষা পরিকল্পনার জন্য -পছন্দের ভাষা একই হবে, যাতে আপনাকে শুধুমাত্র একটিতে দক্ষ হতে হবে। +আমি যখন এই শিক্ষা পরিকল্পনা অনুসরন করেছিলাম তখন আমি সি ও পাইথন এই দুইটি ব্যাবহার করেছিলাম। -### এই স্টাডি প্ল্যানের জন্য +- সি: এটি খুব ই লো লেভেল ল্যাংগুয়েজ। এটি আপনাকে পয়েন্টার এবং মেমরি অ্যালোকেশন / ডি-অ্যালোকেশন নিয়ে কাজ করতে দিবে। যার মাধ্যমে আপনি ভালো ভাবে অ্যালগোরিদম ও ডাটা স্ট্রাকচার শিখতে পারবেন। পাইথন ও জাভা হলো হাই লেভেল ল্যাংগুয়েজ এই ল্যাংগুয়েজ গুলোতে আপনার থেকে এই বিষয় গুলো লুকানো থাকে। দৈনিক কাজের ক্ষেত্রে যাহ খুব ই সুবিধা জনক কিন্ত শেখার ক্ষেত্রে যখন আপনি লো লেভেল ডাটা স্ট্রাকচার কিভাবে বানানো হয় শিখছেন তখন যতো লো লেভেল অর্থাৎ হার্ডওয়্যার এর কাছাকাছি এক্সহেখাই ভালো। + - সি এর ব্যাবহার সর্বত্র। এর উদারন আপনি বই, ভিডিও, লেকচার, যেখানেই পড়বেন সেখানেই দেখতে পাবেন। + - [দি সি প্রোগ্রামিং ল্যাংগুয়েজ, ভলিউম ২](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - এটি একটি সংক্ষিপ্ত বই, তবে এটি আপনাকে সি ভাষার উপর একটি দুর্দান্ত দক্ষতা দেবে এবং আপনি যদি এটি একটু অনুশীলন করেন তবে আপনি দ্রুত দক্ষ হয়ে উঠবেন। সি বুঝতে পারলে আপনি প্রোগ্রাম এবং মেমরি কিভাবে কাজ করে তা বুঝতে পারবেন। + - আপনাকে বইটির গভীরে যেতে হবে না (বা এমনকি এটি শেষ করতে হবে না)। শুধু যেটুকু পড়লে আপনি সি-তে পড়তে এবং লিখতে স্বাচ্ছন্দ্য বোধ করেন সেটুকু পড়ুন। + - [বইটির প্রশ্নের উত্তর](https://github.com/lekkas/c-algorithms) +- পাইথন: আধুনিক এবং খুব অভিব্যক্তিপূর্ণ, আমি এটি শিখেছি কারণ এটি খুব দরকারী এবং আমাকে একটি সাক্ষাত্কারে কম কোড লিখতে সাহায্য করে। -যখন আমি অধ্যয়নের পরিকল্পনাটি করেছি, তখন আমি এর বেশিরভাগের জন্য 2টি ভাষা ব্যবহার করেছি: সি এবং পাইথন +এগুলো আমার পছন্দ। কিন্ত আপনার পছন্দ অনুযায়ী আপনি শিখবেন। -* সি: খুব নিম্ন স্তরের। আপনাকে পয়েন্টার এবং মেমরি বরাদ্দ/বরাদ্দকরণের সাথে মোকাবিলা করার অনুমতি দেয়, যাতে আপনি ডেটা স্ট্রাকচার এবং অ্যালগরিদম খুব দৃঢ়ভাবে বুঝতে পারেন। পাইথন বা জাভার মতো উচ্চ স্তরের ভাষাগুলিতে, এগুলি আপনার কাছ থেকে লুকানো থাকে। প্রতিদিনের কাজে, এটি দুর্দান্ত, - কিন্তু যখন আপনি এই নিম্ন-স্তরের ডেটা স্ট্রাকচারগুলি কীভাবে তৈরি করা হয় তা শিখছেন, তখন ধাতুর কাছাকাছি অনুভব করা দুর্দান্ত। - - সি সর্বত্র। আপনি যখন অধ্যয়ন করছেন তখন আপনি বই, বক্তৃতা, ভিডিও, *সব জায়গায়* উদাহরণ দেখতে পাবেন। - - [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - এটি একটি সংক্ষিপ্ত বই, তবে এটি আপনাকে সি ভাষার উপর একটি দুর্দান্ত হ্যান্ডেল দেবে এবং আপনি যদি এটি একটু অনুশীলন করেন - আপনি দ্রুত দক্ষ হয়ে উঠবেন। C বোঝা আপনাকে প্রোগ্রাম এবং মেমরি কিভাবে কাজ করে তা বুঝতে সাহায্য করে। - - আপনাকে বইটির গভীরে যেতে হবে না (বা এমনকি এটি শেষ করতে হবে)। যেখানে আপনি সি-তে পড়তে এবং লিখতে স্বাচ্ছন্দ্যবোধ করেন সেখানে যান। - - [বইয়ের প্রশ্নের উত্তর](https://github.com/lekkas/c-algorithms) -* পাইথন: আধুনিক এবং খুব অভিব্যক্তিপূর্ণ, আমি এটি শিখেছি কারণ এটি খুব দরকারী এবং আমাকে একটি সাক্ষাত্কারে কম কোড লেখার অনুমতি দেয়। - -এই আমার পছন্দ। আপনি অবশ্যই যা পছন্দ করেন তাই করেন। - -আপনার এটির প্রয়োজন নাও হতে পারে, তবে একটি নতুন ভাষা শেখার জন্য এখানে কিছু সাইট রয়েছে: +আপানার হয়তো লাগবে নাহ কিন্ত এখানে নতুন কিছু ল্যাংগুয়েজ শেখার কিছু ওয়েবসাইট দেওয়া হলো: - [Exercism](https://exercism.org/tracks) - [Codewars](http://www.codewars.com) -- [HackerEarth](https://www.hackerearth.com/for-developers/) -- [Scaler Topics (Java, C++)](https://www.scaler.com/topics/) - -### আপনার কোডিং সাক্ষাত্কারের জন্য - -সাক্ষাত্কারের কোডিং অংশটি করতে আপনি স্বাচ্ছন্দ্যযুক্ত একটি ভাষা ব্যবহার করতে পারেন তবে বড় কোম্পানি গুলির জন্য এগুলি কঠোর পছন্দ: - -- সি ++ +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) +- [Codeforces](https://codeforces.com/) + +### আপনার কোডিং সাক্ষাত্কার এর জন্য + +সাক্ষাত্কারের কোডিং অংশটি করতে আপনি যে ভাষাতে স্বাচ্ছন্দ্য বোধ করেন তা ব্যবহার করতে পারেন, তবে বড় কোম্পানিগুলির জন্য, এইগুলি ভালো পছন্দ: +- সি++ - জাভা - পাইথন - -আপনি এগুলি ব্যবহার করতে পারেন তবে প্রথমে পড়তে পারেন। সতর্কতা থাকতে পারে: - -- জাভাস্ক্রিপ্ট + +আপনি এগুলি ও ব্যাবহার করতে পারেন তবে আগে থেকে জেনে নিবেন কারন নানা রকম সমস্যায় ভুগতে পারেন: +- জাভা স্ক্রিপ্ট - রুবি - -এখানে একটি নিবন্ধটি আমি সাক্ষাত্কারের জন্য একটি ভাষা বেছে নেওয়ার বিষয়ে লিখেছি: -[কোডিং সাক্ষাত্কারের জন্য একটি ভাষা বেছে নিন](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) -এই মূল নিবন্ধটি আমার পোস্টের উপর ভিত্তি করে ছিল: [সাক্ষাৎকারের জন্য একটি প্রোগ্রামিং ভাষা নির্বাচন করা](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/) - -আপনার ভাষায় খুব স্বাচ্ছন্দ্য বোধ করা এবং বুদ্ধিমান হওয়া দরকার। - -পছন্দ সম্পর্কে আরও পড়ুন: -- [আপনার কোডিং সাক্ষাৎকারের জন্য সঠিক ভাষা নির্বাচন করুন](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) -[ভাষা ভিত্তিক উৎসগুলো দেখুন](programming-language-resources.md) - -## ডেটা স্ট্রাকচার এবং অ্যালগরিদমের জন্য বই +এখানে আমার লেখা একটি আর্টিকেল আছে যেখানে সাক্ষাত্কারের জন্য ল্যাংগুয়েজ নিয়ে আমি বলেছি। +[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) +এই আর্টিকেল এর উপর ভিত্তি করী আমি আমার আর্টিকেলটি লিখেছিলাম: http://blog.codingforinterviews.com/best-programming-language-jobs/ -এই বইটি কম্পিউটার বিজ্ঞানের জন্য আপনার ভিত্তি তৈরি করবে। +আপনাকে ওই ল্যাংগুয়েজ এ খুব ই দক্ষ ও সাচ্ছন্দবোধ করতে হবে। -শুধু একটি বেছে নিন, এমন একটি ভাষায় যা আপনি স্বাচ্ছন্দ্য বোধ করবেন। আপনাকে অনেক পড়াশুনা এবং কোডিং করতে হবে। +ভাষা পছন্দ সম্পর্কে আরো জানুন: + +- [আপনার কোডিং সাক্ষাত্কারের জন্য সঠিক ল্যাংগুয়েজ সম্পর্কে জানুন](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) + +[ভাষা অনুসারে রিসোর্স এখানে পাবেন](programming-language-resources.md) + +## ডাটা স্ট্রাকচার এবং এ্যালগোরিদম এর বইসমুহ + +এই বইটি কম্পিউটার সাইন্সের জন্য আপনার ভিত্তি তৈরি করবে। + +আপনি স্বাচ্ছন্দ্য বোধ করবেন শুধুমাত্র এমন একটি ভাষা বেছে নিন। আপনি অনেক পড়তে এবং কোডিং করতে হবে। ### সি - - [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080) - - Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms + - বেসিক, ডাটা স্ট্রাকচার, সোর্টিং, সার্চিং, গ্রাফ এবং অ্যালগোরিদম ### পাইথন - [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. + - লেখক Goodrich, Tamassia, Goldwasser + - আমি এই বইটি খুব পছন্দ করেছি। আমি এটার সব পড়েছি - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + - এই বই এর উপর লেখা আমার বুক রিপোর্ট: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ ### জাভা @@ -358,7 +345,7 @@ - [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - Sedgewick and Wayne: - [Algorithms](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - Free Coursera course that covers the book (taught by the authors!): + - ফ্রি কোর্সেরা (Coursera) কোর্স যা এই বইতে পড়ানো হয় তা নিয়ে (বই এর লেখকেরা শেখান!): - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -371,110 +358,227 @@ - Sedgewick and Wayne - [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + + + +## ইন্টারভিউ এর প্রস্তুতি এর বইসমুহ + +আপনি এতগুলো কিনতে হবে না। সত্যি বলতে "ক্রাকিং দ্য কোডিং ইন্টারভিউ" সম্ভবত যথেষ্ট, তবে আমি নিজে আরও অনুশীলন এর জন্য আরও কিছু কিনেছি। কিন্তু আমি সবসময় খুব বেশি করি। + +আমি এই দুটি কিনেছিলাম। এগুলো থেকে আমার প্রচুর প্রাক্টিস হয়েছে + +- [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - সি ++ এবং জাভাতে উত্তর + - কোডিং সাক্ষাত্কার ক্র্যাক করার জন্য এটি একটি ভাল প্রস্তুতি + - খুব বেশি কঠিন নয়, বেশিরভাগ সমস্যাগুলি আপনি একটি সাক্ষাত্কারে যা দেখবেন তার চেয়ে সহজ হতে পারে (আমি যা পড়েছি তা থেকে) +- [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - জাভাতে উত্তর -## সাক্ষাত্কার প্রস্তুতি বই - -আপনি এই একটি গুচ্ছ কিনতে হবে না. সত্যি বলতে "Cracking the Coding Interview" সম্ভবত যথেষ্ট, -কিন্তু আমি নিজেকে আরো অনুশীলন দিতে আরো কেনা. কিন্তু আমি সবসময় খুব বেশি করি। - -আমি এই দুটি কিনলাম। তারা আমাকে প্রচুর অনুশীলন দিয়েছে। - -- [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - উত্তরগুলো সি++ আর জাভাতে - - কোডিং ইন্টারভিউ ক্র্যাক করার জন্য এটি একটি ভাল ওয়ার্ম-আপ - - খুব কঠিন না। আপনি একটি সাক্ষাত্কারে যা দেখতে পাবেন তার চেয়ে বেশিরভাগ সমস্যা সহজ হতে পারে (আমি যা পড়েছি তা থেকে) -- [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - উত্তরগুলো জাভাতে - -### আপনার যদি অতিরিক্ত সময় থাকে: +### আপনার যদি অতিরিক্ত পরিমাণে সময় থাকে তবে একটি পছন্দ করুন: - -- [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) -- [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) -- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) -## আমার মত ভুল করবেন না - -এই তালিকাটি অনেক মাস ধরে বেড়েছে, এবং হ্যাঁ, এটি হাতের বাইরে চলে গেছে। - -এখানে আমি কিছু ভুল করেছি যাতে আপনার আরও ভালো অভিজ্ঞতা হয়। এবং আপনি কয়েক মাস সময় বাঁচাবেন। +- [প্রোগ্রামিং সাক্ষাত্কারের উপাদানগুলি (সি ++ সংস্করণ)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [প্রোগ্রামিং সাক্ষাত্কারের উপাদানগুলি (পাইথন সংস্করণ)](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [প্রোগ্রামিং সাক্ষাত্কারের উপাদানসমূহ (জাভা সংস্করণ)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)- [সহায়ক প্রোজেক্ট-বইয়ের প্রতিটি সমস্যার জন্য মেথড স্টাব এবং টেস্ট কেস](https://github.com/gardncl/elements-of-programming-interviews) -### 1. আপনি সব মনে রাখবেন না - -আমি ঘন্টার পর ঘন্টা ভিডিও দেখেছি এবং প্রচুর নোট নিয়েছি, এবং কয়েক মাস পরেও অনেক কিছু মনে ছিল না। আমার ৩ দিন লেগেছে আমার নোট এবং ফ্ল্যাশকার্ড তৈরি করতে, যাতে আমি পর্যালোচনা করতে পারি। আমার সেই সমস্ত জ্ঞানের প্রয়োজন ছিল না। - -অনুগ্রহ করে পড়ুন যাতে আপনি আমার ভুল করবেন না: - -[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). +## আমার ভুল গুলো করবেন নাহ + +এই তালিকাটি কয়েক মাস ধরে বেড়েছে, এবং হ্যাঁ, এটি একধরণের হাতছাড়া হয়ে যায়। + +এখানে আমি কিছু ভুল করেছি যাতে আপনার আরও ভাল অভিজ্ঞতা হয়। এবং আপান্র অনেক সময় ও বাঁচবে। + +### 1. আপনি সব মনে রাখতে পারবেন না + +আমি কয়েক ঘন্টা ভিডিও দেখেছি এবং প্রচুর নোট নিয়েছি এবং কয়েক মাস পরে এমন অনেক কিছুই ছিল যা আমি মনে রাখতে পারিনি। আমি যেতে ৩ দিন কাটিয়েছি আমার নোটগুলি এবং ফ্ল্যাশকার্ডগুলি তৈরি করে যাতে আমি পর্যালোচনা করতে পারি। কিন্ত আমার এগুলোর দরকার ছিলো নাহ। + +দয়া করে পড়ুন যাতে আপনি আমার ভুল না করেন: + +[কম্পিউটার বিজ্ঞান এর জ্ঞান মনে রাখা](https://startupnextdoor.com/retaining-computer-science-knowledge/) ### 2. ফ্ল্যাশকার্ড ব্যবহার করুন - -সমস্যা সমাধানের জন্য, আমি একটি ছোট ফ্ল্যাশকার্ড সাইট তৈরি করেছি যেখানে আমি 2 ধরনের ফ্ল্যাশকার্ড যোগ করতে পারি: সাধারণ এবং কোড। -প্রতিটি কার্ড আলাদা ফরম্যাটিং আছে। আমি একটি মোবাইল-প্রথম ওয়েবসাইট তৈরি করেছি, যাতে আমি যেখানেই থাকি না কেন আমার ফোন বা ট্যাবলেটে পর্যালোচনা করতে পারি৷ - -বিনামূল্যে আপনার নিজের তৈরি করুন: - -- [ফ্ল্যাশকার্ড সাইট রেপো](https://github.com/jwasham/computer-science-flash-cards) - -**আমি আমার ফ্ল্যাশকার্ডগুলি ব্যবহার করার পরামর্শ দিই না।** অনেকগুলি আছে এবং তাদের বেশিরভাগই তুচ্ছ বিষয় যা আপনার প্রয়োজন নেই। - -কিন্তু আপনি যদি আমার কথা শুনতে না চান তবে এখানে যান: -- [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): -- [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db): - -মনে রাখবেন আমি ওভারবোর্ডে গিয়েছিলাম এবং অ্যাসেম্বলি ভাষা এবং পাইথন ট্রিভিয়া থেকে মেশিন লার্নিং এবং পরিসংখ্যান পর্যন্ত সমস্ত কিছু কভার করে কার্ড আছে। -যা প্রয়োজন তার জন্য এটি অনেক বেশি। - -**ফ্ল্যাশকার্ডে দ্রষ্টব্য:** প্রথমবার যখন আপনি চিনবেন আপনি উত্তরটি জানেন, তখন এটি পরিচিত হিসাবে চিহ্নিত করবেন না। আপনি দেখতে হবে -একই কার্ড এবং আপনি সত্যিই এটি জানার আগে এটি সঠিকভাবে কয়েকবার উত্তর দিন। পুনরাবৃত্তি সেই জ্ঞানকে আরও গভীরে নিয়ে যাবে -আপনার মস্তিষ্ক। - -আমার ফ্ল্যাশকার্ড সাইটটি ব্যবহার করার একটি বিকল্প হল [আনকি](http://ankisrs.net/), যা আমাকে বহুবার সুপারিশ করা হয়েছে। -এটি আপনাকে মনে রাখতে সাহায্য করার জন্য একটি পুনরাবৃত্তি সিস্টেম ব্যবহার করে। এটি ব্যবহারকারী-বান্ধব, সমস্ত প্ল্যাটফর্মে উপলব্ধ এবং একটি ক্লাউড সিঙ্ক সিস্টেম রয়েছে৷ -iOS-এ এটির দাম $25 কিন্তু অন্যান্য প্ল্যাটফর্মে বিনামূল্যে। - -আনকি ফরম্যাটে আমার ফ্ল্যাশকার্ড ডাটাবেজ: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)). - -কিছু ছাত্র ফাকা স্থানের সাথে বিন্যাস সংক্রান্ত সমস্যাগুলি উল্লেখ করেছে যা নিম্নলিখিতগুলি করে ঠিক করা যেতে পারে: ডেক খুলুন, কার্ড সম্পাদনা করুন, কার্ডগুলিতে ক্লিক করুন, "স্টাইলিং" রেডিও বোতাম নির্বাচন করুন, সদস্য যোগ করুন "হোয়াইট-স্পেস: প্রি;" কার্ড ক্লাসে। -### 3. আপনি শেখার সময় কোডিং ইন্টারভিউ প্রশ্ন করুন +সমস্যা সমাধানের জন্য, আমি একটি সামান্য ফ্ল্যাশকার্ডস সাইট তৈরি করেছি যেখানে আমি ২ ধরণের ফ্ল্যাশকার্ড যুক্ত করতে পারি: সাধারণ এবং কোড। +প্রতিটি কার্ডের আলাদা বিন্যাস রয়েছে। + +আমি একটি মোবাইল প্রথম ওয়েবসাইট তৈরি করেছি যাতে আমি যেখানেই থাকি না কেন আমার ফোন এবং ট্যাবলেটে পর্যালোচনা করতে পারি। + +বিনামূল্যে নিজের তৈরি করুন: + +- [ফ্ল্যাশকার্ডস সাইটের রিপো](https://github.com/jwasham/computer-science-flash-cards) -এই অত্যন্ত গুরুত্বপূর্ণ. +**আমি আমার ফ্ল্যাশকার্ডগুলি ব্যবহার করার পরামর্শ দিই না।** অনেকগুলি আছে এবং তাদের মধ্যে অনেকগুলি তুচ্ছ বিষয় যা আপনার প্রয়োজন নেই. -আপনি ডেটা স্ট্রাকচার এবং অ্যালগরিদম শেখার সময় কোডিং ইন্টারভিউ প্রশ্ন করা শুরু করুন। - -সমস্যা সমাধানের জন্য আপনি যা শিখছেন তা প্রয়োগ করতে হবে, নতুবা ভুলে যাবেন। আমি এই ভুল করেছি। - -একবার আপনি একটি বিষয় শিখে গেলে, এবং এটির সাথে কিছুটা স্বাচ্ছন্দ্য বোধ করেন, উদাহরণস্বরূপ, **লিঙ্ক করা তালিকা**: -১. [coding interview books](#interview-prep-books) (বা কোডিং সমস্যা ওয়েবসাইট, নীচে তালিকাভুক্ত) একটি খুলুন -২. লিঙ্ক করা তালিকা সম্পর্কিত ২ বা ৩ প্রশ্ন করুন। -৩. পরবর্তী শেখার বিষয়ে যান। -৪. পরে, ফিরে যান এবং আরও ২ বা ৩ লিঙ্কযুক্ত তালিকা সমস্যাগুলি করুন৷ -৫. আপনি শেখা প্রতিটি নতুন বিষয়ের সাথে এটি করুন। - -**আপনি এই সমস্ত জিনিস শেখার সময় সমস্যা করতে থাকুন, পরে নয়।** - -আপনাকে জ্ঞানের জন্য নিয়োগ করা হচ্ছে না, তবে আপনি কীভাবে জ্ঞান প্রয়োগ করবেন। - -এই জন্য অনেক সম্পদ আছে, নীচে তালিকাভুক্ত। সামনে আগাতে থাকুন। +তবু যদি আপনি আপনি আমার কথা শুনতে নাহ চান। এখানে ফ্ল্যাশ কার্ড গুলি পাবেন: +- [আমার ফ্ল্যাশ কার্ডের ডাটাবেস (পুরাতন-1200 কার্ড)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): +- [আমার ফ্ল্যাশ কার্ডের ডাটাবেস (নতুন-1800 কার্ড)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db): + +মনে রাখবেন আমি ওভারবোর্ডে গিয়েছিলাম এবং সমাবেশগুলির ভাষা এবং পাইথন ট্রিভিয়া থেকে শুরু করে মেশিন লার্নিং এবং পরিসংখ্যানের সমস্ত কিছুর জন্য কার্ড রয়েছে। যা প্রয়োজন তার জন্য এটি অনেক বেশি। + +**ফ্ল্যাশকার্ডগুলিতে দ্রষ্টব্য:** আপনি যখন প্রথমবার উত্তরটি জানেন তখন তা চিহ্নিত হিসাবে চিহ্নিত করবেন না। আপনাকে দেখতে হবে +একই কার্ড এবং এটি জেনে রাখার আগে বেশ কয়েকবার সঠিক উত্তর দিন। পুনরাবৃত্তি সেই জ্ঞানকে আরও গভীর করে দেবে +আপনার মস্তিষ্ক. + +আমার ফ্ল্যাশকার্ড সাইটটি ব্যবহার করার বিকল্প হ'ল [আনকি](http://ankisrs.net/), যা আমার কাছে বহুবার প্রস্তাবিত হয়েছিল। এটি আপনাকে মনে রাখতে সহায়তা করার জন্য একটি পুনরাবৃত্তি সিস্টেম ব্যবহার করে। +এটি ব্যবহারকারী-বান্ধব, সমস্ত প্ল্যাটফর্মে উপলব্ধ এবং একটি ক্লাউড সিঙ্ক সিস্টেম রয়েছে। আইওএসে এটির দাম 25 ডলার তবে অন্যান্য প্ল্যাটফর্মগুলিতে বিনামূল্যে। + +আনকি ফর্ম্যাটে আমার ফ্ল্যাশকার্ড ডাটাবেস: https://ankiweb.net/shared/info/25173560 (ধন্যবাদ [@ এক্সভিউনিয়া](https://github.com/xiewenya)) + +### 3. পর্যালোচনা, পর্যালোচনা, পর্যালোচনা + +আমি ASCII, ওএসআই স্ট্যাক, বিগ-ও স্বরলিপিগুলি এবং আরও অনেক কিছুতে চিট শীটের একটি সেট রাখি। আমার কিছুটা বাজে সময় পেলে আমি সেগুলি অধ্যয়ন করি। + +আধা ঘন্টার জন্য প্রোগ্রামিং সমস্যা থেকে বিরতি নিন এবং আপনার ফ্ল্যাশকার্ডগুলি দিয়ে যান। ### 4. ফোকাস করুন -মূল্যবান সময় নিতে পারে যে বিভ্রান্তি অনেক আছে. ফোকাস এবং একাগ্রতা কঠিন। কিছু সঙ্গীত চালু করুন -গান ছাড়া এবং আপনি বেশ ভাল ফোকাস করতে সক্ষম হবেন। +অনেকগুলি বিভ্রান্তি রয়েছে যা মূল্যবান সময় নিতে পারে। ফোকাস এবং ঘনত্ব শক্ত। + + + +- [এ বি সি: সর্বদা কোডিং থাকুন](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [হোয়াইটবোর্ডিং](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [প্রোগ্রামিং সাক্ষাত্কারের সময় কার্যকর হোয়াইটবোর্ডিং](http://www.coderust.com/blog/2014/04/10/Effective-Witeboarding-during-programming-interviews/) +- [টেক রিক্রুটিং কে ক্ষমা করা](https://www.youtube.com/watch?v=N233T0epWTs) +- কোডিং সাক্ষাত্কারটি ক্র্যাক করা 1: +- [গেইল এল ম্যাকডোয়েল-কোডিং সাক্ষাত্কারের ক্র্যাকিং (ভিডিও)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [লেখক গেইল লাকম্যান ম্যাকডোভেল (ভিডিও) এর সাথে কোডিং সাক্ষাত্কার ক্র্যাক করা](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- বিগ 4 এ কীভাবে চাকরী পাবেন? + - [বিগ 4 এ কীভাবে চাকরী পাবেন-অ্যামাজন, ফেসবুক, গুগল এবং মাইক্রোসফ্ট (ভিডিও)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + +- প্রস্তুতি কোর্স: + - [সফটওয়্যার ইঞ্জিনিয়ার সাক্ষাত্কার প্রকাশিত (বেতনভুক্ত কোর্স)](https://www.udemy.com/software-engineer-interview-unleashed): + -একজন প্রাক্তন গুগল সাক্ষাত্কারকারীর থেকে কীভাবে নিজেকে সফটওয়্যার ইঞ্জিনিয়ার সাক্ষাত্কারের জন্য প্রস্তুত করবেন তা শিখুন। + - [ডেটা স্ট্রাকচার, অ্যালগরিদম এবং সাক্ষাত্কারের জন্য পাইথন! (প্রদত্ত কোর্স)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + -পাইথন কেন্দ্রিক সাক্ষাত্কার প্রস্তুতির কোর্সে ডেটা স্ট্রাকচার, অ্যালগরিদম, মক সাক্ষাত্কার এবং আরও অনেক কিছু রয়েছে। + - [পাইথন ব্যবহার করে ডেটা স্ট্রাকচার এবং অ্যালগরিদমগুলিতে ইন্ট্রো! (উদাসীনতা মুক্ত কোর্স)](https://www.udacity.com/cورس/data-structures-এবং-algorithms-in-python--ud513): + -একটি ফ্রি পাইথন কেন্দ্রিক ডেটা স্ট্রাকচার এবং অ্যালগরিদম কোর্স। + - [ডেটা স্ট্রাকচার এবং অ্যালগোরিদম ন্যানোডগ্রি! (উদাস্তিটি ন্যানোডগ্রি প্রদান করেছে)](https://www.udacity.com/course/data-structures-এবং-algorithms-nanodegree--nd256): + -100 টিরও বেশি ডেটা স্ট্রাকচার এবং অ্যালগরিদম অনুশীলন এবং আপনাকে একটি সাক্ষাত্কারের জন্য এবং কাজের সুযোগে দৃশ্যের জন্য আপনাকে প্রস্তুত করতে ডেডিকেটেড পরামর্শদাতার দিকনির্দেশ দিয়ে অনুশীলন পান। + +### সাক্ষাত্কার প্রস্তুতি + + +## বইএর তালিকা + +আমি যা ব্যবহার করেছি তার চেয়ে এটি একটি সংক্ষিপ্ত তালিকা। এটি আপনার সময় বাঁচাতে সংক্ষেপে বর্ণিত। + + +### কম্পিউটার আর্কিটেকচার + +- [গ্রেট কোড লিখুন: খণ্ড ১: মেশিনটি বোঝা] (https://www.amazon.com/Write-Great-Code-Unders સમજ-ম্যাচাইন / ডিপি / 1593270038) + -বইটি 2004 সালে প্রকাশিত হয়েছিল এবং এটি কিছুটা পুরানো হলেও সংক্ষেপে কম্পিউটার বোঝার জন্য এটি এক ভয়ঙ্কর উত্স। + -লেখক আবিষ্কার করেছেন [এইচএলএ] (https://en.wikedia.org/wiki/High_Level_As आशीर्वाद), তাই লবণের দানা দিয়ে এইচএলএ-তে উল্লেখ এবং উদাহরণ নিন। বিস্তৃতভাবে ব্যবহৃত হয় না, তবে সমাবেশটি কেমন লাগে তার শালীন উদাহরণ। + -এই অধ্যায়গুলি আপনাকে একটি সুন্দর ভিত্তি দেওয়ার জন্য মূল্যবান: +
+ ...... + + -দ্বিতীয় অধ্যায়-সংখ্যা উপস্থাপনা + -অধ্যায় 3-বাইনারি গাণিতিক এবং বিট অপারেশন + -অধ্যায় 4-ভাসমান-পয়েন্ট প্রতিনিধিত্ব + -অধ্যায় 5-চরিত্র উপস্থাপনা + -অধ্যায় 6-মেমরি সংস্থা এবং অ্যাক্সেস + -অধ্যায় 7-সম্মিলিত ডেটা টাইপ এবং মেমরি অবজেক্টস + -অধ্যায় 9-সিপিইউ আর্কিটেকচার + -অধ্যায় 10-নির্দেশ সেট আর্কিটেকচার + -অধ্যায় 11-মেমরি আর্কিটেকচার এবং সংস্থা + +
+ + + + + + ## আপনি কি কভার দেখতে পাবেন না এগুলি প্রচলিত প্রযুক্তি তবে এই অধ্যয়ন পরিকল্পনার অংশ নয়: --জাভাস্ক্রিপ্ট --এইচটিএমএল, সিএসএস এবং অন্যান্য ফ্রন্ট-এন্ড প্রযুক্তি --এসকিউএল +- এসকিউএল +- জাভাস্ক্রিপ্ট +- এইচটিএমএল, সিএসএস এবং অন্যান্য ফ্রন্ট-এন্ড প্রযুক্তি ## দৈনিক পরিকল্পনা +কিছু বিষয় একদিন নেয়, এবং কিছুতে একাধিক দিন সময় লাগবে। কিছু বাস্তবায়নের কিছুই না দিয়ে কেবল শিখছে। + +প্রতিদিন আমি নীচের তালিকা থেকে একটি বিষয় নিয়ে যাই, সেই বিষয় সম্পর্কে ভিডিও দেখি এবং একটি বাস্তবায়ন এখানে লিখি: +- সি-স্ট্রাকস এবং ফাংশনগুলি ব্যবহার করে যা স্ট্রাক * এবং আরজ হিসাবে অন্য কোনও কিছু নেয়। +- সি ++-অন্তর্নির্মিত প্রকারগুলি ব্যবহার না করে +- সি ++-অন্তর্নির্মিত প্রকারগুলি যেমন STL এর std :: লিঙ্কযুক্ত তালিকার জন্য তালিকা ব্যবহার করে +- পাইথন-অন্তর্নির্মিত প্রকারগুলি (পাইথনের অনুশীলন চালিয়ে যেতে) ব্যবহার করে +- এবং আমি এটি সঠিকভাবে করছি তা নিশ্চিত করার জন্য পরীক্ষাগুলি লিখুন, কখনও কখনও কেবল সাধারণ দাবী () বিবৃতি ব্যবহার করে +- আপনি জাভা বা অন্য কিছু করতে পারেন, এটি কেবল আমার জিনিস। + +আপনার এসবের দরকার নেই। আপনার কেবলমাত্র [সাক্ষাত্কারের জন্য একটি ভাষা] প্রয়োজন (#সাক্ষাত্কারের জন্য এক-ভাষা বেছে নিন)। + +এই সবগুলিতে কোড কেন? +-অনুশীলন করুন, অনুশীলন করুন, অনুশীলন করুন, যতক্ষণ না আমি এতে অসুস্থ না হয়ে থাকি এবং কোনও সমস্যা ছাড়াই এটি করতে পারি (কারও কারও কাছে অনেক প্রান্তের কেস এবং স্মরণে রাখার জন্য বইয়ের বিবরণ রয়েছে) +-কাঁচা সীমাবদ্ধতার মধ্যে কাজ করুন (আবর্জনা সংগ্রহের সহায়তা ছাড়াই মেমরি বরাদ্দ / মুক্তকরণ (পাইথন বা জাভা বাদে)) +-অন্তর্নির্মিত ধরণের ব্যবহার করুন যাতে বাস্তব-বিশ্বের ব্যবহারের জন্য অন্তর্নির্মিত সরঞ্জামগুলি ব্যবহার করার অভিজ্ঞতা আমার রয়েছে (উত্পাদনে আমার নিজের লিঙ্কযুক্ত তালিকার প্রয়োগটি লিখতে যাবেন না) + +আমার প্রতিটি বিষয়ের জন্য এগুলি করার জন্য সময় নাও থাকতে পারে তবে আমি চেষ্টা করব। + +আপনি আমার কোডটি এখানে দেখতে পারেন: +-[সি] (https://github.com/jwasham/pੈਕਟ-c) +-[সি ++] (https://github.com/jwasham/pੈਕਟ-cpp) +-[পাইথন] (https://github.com/jwasham/pੈਕਟ-python) + +আপনার প্রতিটি অ্যালগরিদমের সাহস মুখস্থ করার দরকার নেই। + +হোয়াইটবোর্ড বা কাগজে কোড লিখুন, কম্পিউটার নয়। কিছু নমুনা ইনপুট দিয়ে পরীক্ষা করুন। তারপরে এটি কম্পিউটারে পরীক্ষা করে দেখুন। + +## পূর্বশর্ত জ্ঞান + +
+<সংশ্লেষ> পূর্বশর্ত জ্ঞান << সংক্ষিপ্ত> + +- ** সি ** শিখুন + -সি সর্বত্র আছে। আপনি অধ্যয়নরত অবস্থায় আপনি বই, বক্তৃতা, ভিডিও, * সর্বত্র * এর উদাহরণ দেখতে পাবেন। + - [সি প্রোগ্রামিং ল্যাঙ্গুয়েজ, খণ্ড ২] (https://www.amazon.com/Programming-Language-ব্রায়ান-ডব্লিউ-কর্নিগান/dp/0131103628) + -এটি একটি সংক্ষিপ্ত বই, তবে এটি আপনাকে সি ভাষায় দুর্দান্ত হ্যান্ডেল দেবে এবং যদি আপনি এটি কিছুটা অনুশীলন করেন + আপনি দ্রুত দক্ষ হয়ে উঠবেন। সি বোঝা আপনাকে প্রোগ্রাম এবং মেমরি কীভাবে কাজ করে তা বুঝতে সহায়তা করে। + -[প্রশ্নের উত্তর] (https://github.com/lekkas/c-algorithms) + +- ** কম্পিউটার কীভাবে কোনও প্রোগ্রাম প্রক্রিয়া করে: ** + - [সিপিইউ কীভাবে একটি প্রোগ্রাম (ভিডিও) চালায়]] (https://www.youtube.com/watch?v=XM4lGflQFvA) + - [কম্পিউটারগুলি কীভাবে গণনা করে-ALU (ভিডিও)] (https://youtu.be/1I5ZMmrOfnA) + - [নিবন্ধসমূহ এবং র‌্যাম (ভিডিও)] (https://youtu.be/fpnE6UAfbtU) + - [সেন্ট্রাল প্রসেসিং ইউনিট (সিপিইউ) (ভিডিও)] (https://youtu.be/FZGugFqdr60) + - [নির্দেশাবলী এবং প্রোগ্রামগুলি (ভিডিও)] (https://youtu.be/zltgXvg6r3k) + +
+ +## অ্যালগরিদমিক জটিলতা / বিগ-ও / অ্যাসিপোটিক বিশ্লেষণ + +--- + +- বাস্তবায়নের কিছুই নেই +- এখানে প্রচুর ভিডিও রয়েছে। যতক্ষণ না আপনি এটি বুঝতে পারছেন ঠিক ততক্ষণ দেখুন। আপনি সর্বদা ফিরে এসে পর্যালোচনা করতে পারেন। +- কিছু বক্তৃতা যদি খুব ম্যাথিক হয় তবে আপনি ব্যাকগ্রাউন্ডের জ্ঞান পেতে নীচে নেমে গিয়ে আলাদা গণিতের ভিডিওগুলি দেখতে পারেন। +- [ ] [হার্ভার্ড সিএস 50-অ্যাসিপটোটিক নোটেশন (ভিডিও)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [বিগ হে নোটেশনস (সাধারণ দ্রুত টিউটোরিয়াল) (ভিডিও)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [বিগ ও স্বরলিপি (এবং ওমেগা এবং থিতা)-সর্বোত্তম গাণিতিক ব্যাখ্যা (ভিডিও)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] স্কিয়েনা: + - [ভিডিও](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [স্লাইডস](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) +- [অ্যালগরিদম জটিলতা বিশ্লেষণের একটি নম্র ভূমিকা] (http://discrete.gr/complexity/) +- [বৃদ্ধির অর্ডার (ভিডিও)] (https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [অ্যাসিপটোটিকস (ভিডিও)] (https://www.coursera.org/lecture/algorithmic-চিন্তাধারার-1/asyptics-bXAtM) +- [ ] [ইউসি বার্কলে বিগ ও (ভিডিও)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [ইউসি বার্কলে বিগ ওমেগা (ভিডিও)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [ইমোরটাইজড অ্যানালাইসিস (ভিডিও)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [চিত্রিত "বিগ ও" (ভিডিও)] (https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] টপকোডার (পুনরাবৃত্ত সম্পর্ক এবং মাস্টার উপপাদ্য অন্তর্ভুক্ত): + - [গণনামূলক জটিলতা: বিভাগ 1] (https://www.topcoder.com/commune/competitive-pramramming/tutorials/computational-complexity-section-1/) + - [গণনামূলক জটিলতা: বিভাগ 2] (https://www.topcoder.com / সম্প্রদায় / কমপিটিটিভ-প্রোগ্রামিং / টিউটোরিয়ালস / কমপিটেশনাল-কমপ্লিকটি-সেকশন ২/২) +- [ ] [চিট শিট](http://bigocheatsheet.com/) + + + + + এই কোর্সটিতে অনেক বিষয় রয়েছে। প্রতিটি সম্ভবত আপনাকে কয়েক দিন, বা এমনকি এক সপ্তাহ বা তারও বেশি সময় লাগবে। এটা আপনার সময়সূচী উপর নির্ভর করে। প্রতিদিন, তালিকার পরবর্তী বিষয় নিন, সেই বিষয়ে কিছু ভিডিও দেখুন এবং তারপর একটি বাস্তবায়ন লিখুন @@ -1386,8 +1490,9 @@ iOS-এ এটির দাম $25 কিন্তু অন্যান্য - শর্ট সাবজেক্টের ২-৩ মিনিটের সিরিজ (২৩ টি ভিডিও) -[ভিডিও] (https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- 2-5 মিনিটের সংক্ষিপ্ত বিষয় ভিডিওর সিরিজ-মাইকেল সাম্বোল - Michael Sambol (40 টি ভিডিও): - -[ভিডিও] (https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- 2-5 মিনিটের সংক্ষিপ্ত বিষয় ভিডিওর সিরিজ-মাইকেল সাম্বোল - Michael Sambol (46 টি ভিডিও): + - [ভিডিও](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [সেজেজউইক ভিডিও-অ্যালগোরিদম আই] (https://www.coursera.org/learn/algorithms-part1) - [সেজেজিক ভিডিও-দ্বিতীয় অ্যালগোরিদম] (https://www.coursera.org/learn/algorithms-part2) @@ -1790,6 +1895,7 @@ iOS-এ এটির দাম $25 কিন্তু অন্যান্য - [এভিএল ট্রি (ভিডিও)] (https://www.coursera.org/learn/data-structures/ নির্বাচন / Qq5E0/avl-trees) - [এভিএল ট্রি বাস্তবায়ন (ভিডিও)] (https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-বাস্তবায়ন) - [স্প্লিট এবং মার্জ করুন] (https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-विसর) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - ** গাছ স্প্লে ** -প্রস্তুতিতে: diff --git a/translations/README-cn.md b/translations/README-cn.md index b504ec7..150cb9a 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -1,12 +1,13 @@ # 编程面试大学 -原先我为了成为一个软件工程师而建立这份简单的学习主题清单, 但这份清单随着时间的推移而膨胀成今天这样。在做完这份清单上的每个目标后,[我成为了 Amazon 的软件开发工程师](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! 你或许不需要像我一样学习这么多。但是,让你成为一位称职工程师所需要的知识都在这里了。 - -我每天自学8~12小时,这样持续了好几个月。这是我的故事:[为什么我为了 Google 面试而自学了8个月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)。 - -在这份清单内的主题会让你拥有足够的知识去面对几乎每家软件公司的技术面试,包括科技巨头:Amazon、Facebook、Google,以及 Microsoft。 - -祝你好运! +> 原先我为了成为一个软件工程师而建立这份简单的学习主题清单, 但这份清单随着时间的推移而膨胀成今天这样。在做完这份清单上的每个目标后,[我成为了 Amazon 的软件开发工程师](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! 你或许不需要像我一样学习这么多。但是,让你成为一位称职工程师所需要的知识都在这里了。 +> +>我每天自学8~12小时,这样持续了好几个月。这是我的故事:[为什么我为了 Google 面试而自学了8个月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)。 +> +> **请注意:** 你不需要像我一样那么努力学习。我在一些不必要的事情上浪费了很多时间。关于这个问题下面有更多信息。我会帮助你节省宝贵的时间,让你达到目标。 +> 在这份清单内的主题会让你拥有足够的知识去面对几乎每家软件公司的技术面试,包括科技巨头:Amazon、Facebook、Google,以及 Microsoft。 +> +> **祝你好运!**

@@ -18,32 +19,43 @@ ## 这是? -这是我为了从 web 开发者(自学、非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 - ![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -这份清单适用于 **新手软件工程师**,或者想从软件/网站开发转向软件工程(需要计算机科学知识)的人员。如果你有多年的经验,并且声称拥有多年的软件工程经验,并且期待一次更艰难的面试。 +这是我为成为一家大公司的软件工程师制定的多月学习计划。 -如果你具有多年的软件/网页开发经验,请注意,大型软件公司(例如 Google,Amazon,Facebook 和 Microsoft)将软件工程视为不同于软件/网页开发,并且它们需要计算机科学知识。 +**要求:** +* 一点编程经验(变量、循环、方法/函数等) +* 耐心 +* 时间 -如果你想成为可靠性工程师或运维工程师,请从可选列表(网络,安全)中学习更多。 +注意,这是一份关于 **软件工程** 的学习计划,而不是前端工程或全栈开发。 +这些职业路径有很多详细的路线图和课程资料可以在其他地方找到(请参阅 https://roadmap.sh/ 获取更多信息)。 + +在大学计算机科学专业中,有很多知识需要学习,但是只掌握大约75%的内容就足够应对面试了,这也是我在这里涵盖的内容。 +如果你想进行完整的自学计算机科学项目,可以参考Kamran Ahmed的计算机科学路线图:https://roadmap.sh/computer-science。 --- ## 目录 +### 学习计划 + - [这是?](#这是) - [为何要用到它?](#为何要用到它) - [如何使用它](#如何使用它) - [不要觉得自己不够聪明](#不要觉得自己不够聪明) - [相关视频资源](#相关视频资源) -- [面试过程 & 通用的面试准备](#面试过程--通用的面试准备) -- [为你的面试选择一种语言](#为你的面试选择一种语言) -- [书单](#书单) -- [在你开始之前](#在你开始之前) +- [选择编程语言](#选择编程语言) +- [数据结构和算法的书籍](#数据结构和算法的书籍) +- [面试准备书籍](#面试准备书籍) +- [不要犯我的错误](#不要犯我的错误) - [没有包含的内容](#没有包含的内容) -- [必备知识](#必备知识) - [日常计划](#日常计划) +- [编程问题练习](#编程问题练习) +- [编程问题](#编程问题) + +### 学习的主题 + - [算法复杂度 / Big-O / 渐进分析法](#算法复杂度--big-o--渐进分析法) - [数据结构](#数据结构) - [数组(Arrays)](#数组arrays) @@ -55,10 +67,10 @@ - [二分查找(Binary search)](#二分查找binary-search) - [按位运算(Bitwise operations)](#按位运算bitwise-operations) - [树(Trees)](#树trees) - - [树 —— 笔记 & 背景](#树--笔记--背景) + - [树-介绍](#树-介绍) - [二叉查找树(Binary search trees):BSTs](#二叉查找树binary-search-treesbsts) - [堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap)](#堆heap--优先级队列priority-queue--二叉堆binary-heap) - - [平衡查找树(Balanced search trees)(基本概念,非细节)](#平衡查找树balanced-search-trees) + - 平衡搜索树 (总体概念,不涉及细节) - 遍历:前序、中序、后序、BFS、DFS - [排序](#排序sorting) - 选择排序(selection) @@ -75,7 +87,6 @@ - [更多知识](#更多知识) - [递归](#递归recursion) - [动态规划](#动态规划dynamic-programming) - - [面向对象编程](#面向对象编程) - [设计模式](#设计模式) - [组合 & 概率](#组合combinatorics-n-中选-k-个--概率probability) - [NP, NP-完全和近似算法](#np-np-完全和近似算法) @@ -89,19 +100,23 @@ - [Unicode](#unicode) - [字节顺序](#字节序Endianness) - [网络](#网络视频) -- [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理)(如果你有4+年经验) -- [终面](#终面) -- [编程问题练习](#编程问题练习) -- [编程练习和挑战](#编程练习和挑战) -- [当你临近面试时](#当你临近面试时) -- [你的简历](#你的简历) +- [最终复习](#最终复习) + +### 获得工作机会 + +- [更新你的简历](#更新你的简历) +- [找工作](#找工作) +- [面试流程与一般面试准备](#面试流程与一般面试准备) - [当面试来临的时候](#当面试来临的时候) - [问面试官的问题](#问面试官的问题) - [当你获得了梦想的职位](#当你获得了梦想的职位) ----------------- 下面的内容是可选的 ---------------- +**---------------- 以下所有内容均为可选项 ----------------** + +### 可选的额外主题和资源 - [额外书籍](#额外书籍) +- [系统设计、可扩展性和数据处理](#系统设计、可扩展性和数据处理) - [附加学习](#附加学习) - [编译器](#编译器) - [Emacs and vi(m)](#emacs-and-vim) @@ -115,10 +130,10 @@ - [垃圾回收](#垃圾回收) - [并行编程](#并行编程) - [消息传递,序列化和队列化的系统](#消息传递序列化和队列系统) - - [A*搜索算法](#A搜索算法) + - [A*搜索算法](#a*搜索算法) - [快速傅里叶变换](#快速傅里叶变换) - [布隆过滤器](#布隆过滤器) - - [HyperLogLog](#HyperLogLog) + - [HyperLogLog](#hyperloglog) - [局部敏感哈希](#局部敏感哈希) - [van Emde Boas 树](#van-emde-boas-树) - [增强数据结构](#增强数据结构) @@ -130,7 +145,7 @@ - 2-3-4 树(也称 2-4 树) - N-ary (K-ary, M-ary)树 - B 树 - - [k-D 树](#k-D树) + - [k-D 树](#k-d树) - [跳表](#跳表) - [网络流](#网络流) - [不相交集 & 联合查找](#不相交集--联合查找) @@ -139,7 +154,6 @@ - [线性规划](#线性规划linear-programming视频) - [几何:凸包(Geometry, Convex hull)](#几何凸包geometry-convex-hull视频) - [离散数学](#离散数学) - - [机器学习](#机器学习machine-learning) - [一些主题的额外内容](#一些主题的额外内容) - [视频系列](#视频系列) - [计算机科学课程](#计算机科学课程) @@ -149,7 +163,16 @@ ## 为何要用到它? -当我开始这个项目时,我不知道堆和栈的区别,不了解时间复杂度(Big-O)、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,才会去找解决方法。在我的编程生涯中,虽然我有用过多维数组,也用过关联数组成千上万次,但我从来没有自己实现过数据结构。 +如果你想在一家大公司担任软件工程师,这些是你必须了解的事情。 + +如果你错过了计算机科学的学位,就像我一样,这将帮助你迎头赶上,并节省四年的时间。 + +当我开始这个项目时,我对堆栈和堆没有任何了解, +也不知道大O表示法或者关于树的任何东西,也不知道如何遍历图形。 +如果让我编写一个排序算法,相信我它会很糟糕。 +我曾经使用过的每种数据结构都是内置在语言中的,并且我完全不知道它们在底层是如何工作的。 +除非运行中的进程出现“内存不足”错误,否则我从来没有管理过内存,并且那时候就需要找到一种解决方法。 +在我的生活中,我使用过一些多维数组和成千上万个关联数组,但从未从头开始创建数据结构。 这是一个漫长的计划,以至于花费了我数月的时间。若你早已熟悉大部分的知识,那么也许能节省大量的时间。 @@ -158,7 +181,6 @@ 下面所有的东西都只是一个概述。因此,你需要由上而下逐一地去处理它。 在学习过程中,我使用 GitHub 特殊语法的 Markdown 去检查计划的进展,包括使用包含任务进度的任务列表。 - - [更多关于 Github-flavored Markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) ### 如果你不想使用 Git @@ -171,28 +193,28 @@ ### 如果你不介意 Git -1. 通过单击 Fork 按钮来 fork GitHub 仓库:`https://github.com/jwasham/coding-interview-university` +创建一个新的分支,这样你就可以检查类似这样的项目了,只需在方括号中放入一个x:[x] + +1. 在 GitHub 上 Fork 该仓库: 点击 Fork 按钮,将 `https://github.com/jwasham/coding-interview-university` 仓库复制到你的 GitHub 账号中。 ![Fork the GitHub repo](https://d3j2pkmjtin6ou.cloudfront.net/fork-button.png) 2. 克隆项目到本地: - ```sh + ``` git clone git@github.com:/coding-interview-university.git cd coding-interview-university - git checkout -b progress - git remote add jwasham https://github.com/jwasham/coding-interview-university - git fetch --all + git remote add upstream https://github.com/jwasham/coding-interview-university + git remote set-url --push upstream DISABLE # 这样你就不会将个人进展推回到原始仓库了。 ``` 3. 在你完成了一些修改后,在框框中打 x: - ```sh - git add . - git commit -m "Marked x" - git rebase jwasham/main - git push --set-upstream origin progress - git push --force + ``` + git commit -am "Marked personal progress" + git pull upstream main # 将您的分支与原始仓库中的更改保持最新 + + git push # just pushes to your fork ``` ## 不要觉得自己不够聪明 @@ -204,36 +226,44 @@ ## 相关视频资源 -部分视频只能通过在 Coursera 或者 Edx 课程上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。有时候某些课程需要等待好几个月才能获取,这期间你无法观看这些课程的影片。 +部分视频只能通过在 Coursera 或者 Edx 课程上注册登录才能观看。 +这些视频被称为网络公开课程(MOOC)。有时候某些课程需要等待好几个月才能获取,这期间你无法观看这些课程的影片。 -很感谢你能帮我把网络公开课程的视频链接转换成公开的,可持续访问的视频源,比如 YouTube 视频,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 +很感谢你能帮我把网络公开课程的视频链接转换成公开的,可持续访问的视频源, +比如 YouTube 视频,以代替那些在线课程的视频。 +此外,一些大学的讲座视频也是我所青睐的。 -## 面试过程 & 通用的面试准备 +## 选择编程语言 -- [ ] [ABC:不要停止编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) -- [ ] [白板编程(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [揭秘技术招聘](https://www.youtube.com/watch?v=N233T0epWTs) -- [ ] 如何在科技四强企业中获得一份工作: - - [ ] [“如何在科技四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) -- [ ] 解密开发类面试第一集: - - [ ] [Gayle L McDowell —— 解密开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [ ] [解密开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) -- [ ] 解密 Facebook 编码面试: - - [方法](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [问题演练](https://www.youtube.com/watch?v=4UWDyJq8jZg) -- [ ] 准备课程: - - [ ] [软件工程师面试发布(收费课程)](https://www.udemy.com/software-engineer-interview-unleashed): - - 从前 Google 面试官身上学习如何准备自己,让自己能够应付软件工程师的面试。 - - [ ] [Python 数据结构,算法和面试(收费课程)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - Python 面试准备课程,内容涉及数据结构,算法,模拟面试等。 - - [ ] [Python 的数据结构和算法简介(Udacity 免费课程)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - 免费的 Python 数据结构和算法课程。 - - [ ] [数据结构和算法纳米学位!(Udacity 收费纳米学位)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - 获得超过100种数据结构和算法练习以及指导的动手练习,专门导师帮助你在面试和职场中做好准备。 - - [ ] [探究行为面试(Educative 免费课程)](https://www.educative.io/courses/grokking-the-behavioral-interview): - - 很多时候,不是你的技术能力会阻碍你获得理想的工作,而是你在行为面试中的表现。 +你需要为你做的编程面试选择一种编程语言, +但你也需要找到一种可以用来学习计算机科学概念的语言。 -## 为你的面试选择一种语言 +最好是同一种语言,这样你只需精通其中一种。 + +### 对于这个学习计划 + +在这个学习计划中,我主要使用了两种编程语言:C和Python。 + +* C: 非常底层。它允许你处理指针和内存的分配与释放,因此你能够深入理解数据结构和算法。 + 在像Python或Java这样的高级语言中,这些细节被隐藏起来。在日常工作中,这是很好的, + 但当你学习这些底层数据结构时,感受它们与计算机硬件的联系也是非常有益的。 + - C 语言无处不在。在你学习的过程中,你会在书籍、讲座、视频以及**任何地方**看到C语言的例子。 + - [《C程序设计语言(第2版)》](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - 这是一本简短的书,但它会让你很好地掌握C语言,只要稍微练习一下, + 你很快就能熟练使用。理解C语言有助于你了解程序和内存是如何工作的。 + - 你不需要深入研究这本书(甚至不用读完它)。只要阅读到你感觉舒服,并能写一些C语言的代码就可以了。 + - [书中问题的答案](https://github.com/lekkas/c-algorithms) +* Python: 现代且非常灵活,我学习它是因为它非常实用,同时在面试中也能让我写更少的代码。 + +这是我的个人喜好,当然你可以根据自己的偏好来选择。 + +也许你并不需要,但以下是一些学习新编程语言的网站: +- [Exercism](https://exercism.org/tracks) +- [Codewars](http://www.codewars.com) +- [HackerEarth](https://www.hackerearth.com/for-developers/) +- [Scaler Topics (Java, C++)](https://www.scaler.com/topics/) + +### 对于你的编程面试 你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程,但对于大公司,你只有三种固定的选择: @@ -246,77 +276,27 @@ - JavaScript - Ruby -我之前写过一篇关于在面试时选择编程语言的文章:[为编程面试选择一种语言](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)。 +这是我写的一篇关于选择面试语言的文章: +[为编程面试选择一种语言](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)。 +这是我发布帖子所基于的原始文章: [Choosing a Programming Language for Interviews](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/) 你需要对你所选择的语言感到非常舒适且足够了解。 更多关于语言选择的阅读: - -- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ -- http://blog.codingforinterviews.com/best-programming-language-jobs/ +- [选择适合你的编程面试的语言](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) [在此查看相关语言的资源](../programming-language-resources.md) -由于我正在学习C、C++ 和 Python,因此在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 +## 数据结构和算法的书籍 -## 书单 +这本书将为你的计算机科学打下基础。 -为了节省你的时间,以下是比我使用过的更缩减的书单。 +只需选择一种你感到舒适的语言。你将会进行大量阅读和编码工作。 -### 面试准备 +### C -- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - 附有 C++ 和 Java 解答 - - 这是在练习 Cracking the Coding Interview 之前一个很好的热身 - - 不太困难,大多数问题可能比你在面试中看到的要容易(根据我的阅读) -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - 附有 Java 答案 - -### 如果你有额外的时间: - -选择以下之一: - -- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) -- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) -- [ ] Elements of Programming Interviews (Java version) - - [书](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - - [配套项目──书中每个问题的方法和测试用例](https://github.com/gardncl/elements-of-programming-interviews) - -### 编程语言精选 - -**你需要选择面试语言(请参见上文)。** - -这是我按语言给出的建议。我没有所有语言的资源,欢迎贡献。 - -如果你通读其中之一,你应该具备了开始解决编程问题所需的所有数据结构和算法知识。除非你需要复习,否则**你可以跳过此项目中的所有视频讲座**。 - -[额外编程语言的精选资源](https://github.com/jwasham/coding-interview-university/blob/main/programming-language-resources.md) - -### C++ - -我没有读过这两本书,但是它们颇受好评,作者是 Sedgewick,他非常厉害。 - -- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf) - - 丰富而详细的数据结构和算法集合 - - 非常适合初学者 - -如果你有更好的 C++ 书籍,请告诉我。我正在搜集全面的资源。 - -### Java - -- [ ] [算法(Sedgewick 和 Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - 包含课程内容(和Sedgewick!)的视频 - - [第一部分](https://www.coursera.org/learn/algorithms-part1) - - [第二部分](https://www.coursera.org/learn/algorithms-part2) - -或者: - -- [ ] [Java 数据结构和算法](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - 作者:Goodrich、Tamassia、Goldwasser - - 用作 UC Berkeley 的 CS 入门课程的可选教材 - - 请参阅下面有关 Python 版本的我的读书报告,这本书涵盖了相同的主题 +- [C语言中的算法,第1-5部分(捆绑包),第3版](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080) + - 基础知识,数据结构,排序,搜索和图算法 ### Python @@ -324,143 +304,243 @@ - 作者:Goodrich、Tamassia、Goldwasser - 我非常喜爱这本书,它包含了所有东西 - 很 Python 的代码 - - 我的读书报告:[startupnextdoor.com/book-report-data-structures-and-algorithms-in-python](https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/) -- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf) + - 我的读书报告:https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ -## 在你开始之前 +### Java -该列表已经持续更新了很长的一段时间,所以,我们的确很容易会对其失去控制。 +你的选择: -这里列出了一些我所犯过的错误,希望你不要重滔覆辙。 +- Goodrich, Tamassia, Goldwasser + - [Java数据结构与算法](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) +- Sedgewick and Wayne: + - [算法(第4版)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - 免费Coursera课程,涵盖该书内容(由作者授课!): + - [算法I](https://www.coursera.org/learn/algorithms-part1) + - [算法II](https://www.coursera.org/learn/algorithms-part2) + +### C++ + +你的选择: + +- Goodrich, Tamassia, and Mount + - [C++数据结构与算法(第2版)](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275) +- Sedgewick and Wayne + - [C++算法(第1-4部分):基础知识,数据结构,排序,搜索](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) + - [C++算法第5部分:图算法](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +## 面试准备书籍 + +你不需要买一堆这些。老实说,《破解编程面试》可能已经足够了, +但我买了更多来给自己更多的练习。但我总是做得太多。 + +这两个都是我买的,他们给了我大量的练习。 + +- [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - 提供C++和Java语言的答案 + - 这本书是准备《Cracking the Coding Interview》的很好热身书 + - 难度适中。大多数问题可能比实际面试中遇到的问题要简单(根据我所读的内容) +- [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - 提供Java语言的答案 + +### 如果你有很多额外的时间: + +选择一个: + +- [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [配套项目-本书中每个问题的方法存根和测试用例](https://github.com/gardncl/elements-of-programming-interviews) + +## 不要犯我的错误 + +这个列表在很多个月里不断增长,是的,它变得失控了。 + +以下是我犯过的一些错误,这样你就能有更好的体验。而且你将节省数月时间。 ### 1. 你不可能把所有的东西都记住 -就算我观看了数小时的视频,并记录了大量的笔记,几个月后的我,仍然会忘却其中大部分的东西。所以,我花了3天翻阅我的笔记,并制作成抽认卡(flashcard)帮助我复习: +我看了数小时的视频并做了大量笔记,几个月后有很多东西我都不记得了。 +我花了三天时间浏览我的笔记并制作闪卡,以便进行复习。其实,并不需要那么多知识。 请阅读以下的文章以免重蹈覆辙: [记住计算机科学知识](https://startupnextdoor.com/retaining-computer-science-knowledge/)。 -有人推荐给我的课程(但我还沒看过):[学习如何学习](https://www.coursera.org/learn/learning-how-to-learn)。 - ### 2. 使用抽认卡 为了解决善忘的问题,我制作了一个抽认卡的网页,用于添加两种抽认卡:一般的及带有代码的。每种卡都会有不同的格式设计。 - 而且,我还以移动设备为先去设计这些网页,以使得在任何地方,我都能通过我的手机及平板去回顾知识。 你也可以免费制作属于你自己的抽认卡网站: - [抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards) + +**我不建议使用我的闪卡**。它们太多了,而且大部分都是你不需要的琐事。 + +但是如果你不想听我的话,那就随你吧: - [我的抽认卡数据库 ── 旧 1200 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db) - [我的抽认卡数据库 ── 新 1800 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db) -有一点需要记住的是,我做事有点过头,以至于卡片都覆盖到所有的东西上,从汇编语言和 Python 的细枝末节,到机器学习和统计都被覆盖到卡片上。而这种做法,对于要求来说是多余的。 +有一点需要记住的是,我做事有点过头,以至于卡片都覆盖到所有的东西上,从汇编语言和 Python 的细枝末节,到机器学习和统计都被覆盖到卡片上。 +而这种做法,对于要求来说是多余的。 -**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已知”。反复复习这张抽认卡,直到每次都能答对后才是真正学会了这个问题。反复地问答可帮助你深刻记住该知识点。 +**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已知”。 +反复复习这张抽认卡,直到每次都能答对后才是真正学会了这个问题。 +反复地问答可帮助你深刻记住该知识点。 -这里有个替代我抽认卡的网站 [Anki](http://ankisrs.net/),很多人向我推荐过它。这个网站用同一个字卡重复出现的方式让你牢牢地记住知识。这个网站非常容易使用,支持多平台,并且有云端同步功能。在 iOS 平台上收费25美金,其他平台免费。 +这里有个替代我抽认卡的网站 [Anki](http://ankisrs.net/),很多人向我推荐过它。 +这个网站用同一个字卡重复出现的方式让你牢牢地记住知识。 +这个网站非常容易使用,支持多平台,并且有云端同步功能。在 iOS 平台上收费25美金,其他平台免费。 -这是我用 Anki 这个网站里的格式所储存的抽认卡资料库: ankiweb.net/shared/info/25173560 (感谢 [@xiewenya](https://github.com/xiewenya)) +这是我用 Anki 这个网站里的格式所储存的抽认卡资料库: https://ankiweb.net/shared/info/25173560 (感谢 [@xiewenya](https://github.com/xiewenya))。 -### 3. 复习,复习,再复习 +一些学生提到了关于空白间距的格式问题,可以通过以下方法进行修复:打开卡片组,编辑卡片,点击"卡片"选项,选择"样式"单选按钮,在卡片类中添加成员 "white-space: pre;"。 -我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的抽认卡,以便在空余的时候可以学习。 +### 3. 在学习过程中做编程面试题 -编程累了就休息半个小时,并去复习你的抽认卡。 +**这非常重要。** + +在学习数据结构和算法的同时,开始做编程面试题。 + +你需要将所学知识应用于解决问题,否则你会忘记。我曾经犯过这个错误。 + +一旦你学完一个主题,并且对它有了一定的掌握,比如 **链表(linked lists)**: +1. 打开其中一本[编程面试书籍](#interview-prep-books)(或下方列出的编程问题网站之一)。 +1. 关于链表的问题,请提出2或3个。 +1. 继续学习下一个主题。 +1. 稍后,回来再做另外2或3个链表问题。 +1. 使用这种方法来学习每个新主题。 + +**在学习这些内容的过程中不断做问题,而不是之后。** + +你被雇佣的不是因为你的知识,而是因为你如何应用这些知识。 + +下面列出了许多资源供你参考。继续前进吧。 ### 4. 专注 -在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。放点纯音乐能帮上一些忙。 +在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。 +因此,专注和集中注意力是非常困难的。放点纯音乐能帮上一些忙。 ## 没有包含的内容 有一些熟悉且普遍的技术在此未被谈及到: -- SQL - Javascript -- HTML、CSS 和其他前端技术 +- HTML,CSS和其他前端技术 +- SQL ## 日常计划 -部分问题可能会花费一天的时间去学习,而有些则会花费多天。当然,有些学习并不需要我们懂得如何实现。 +这门课涵盖了很多主题。每个主题可能需要你几天的时间,甚至可能需要一周或更长时间。这取决于你的日程安排。 -因此,每一天我都会在下面所列出的列表中选择一项,并观看相关的视频。然后,使用以下的一种语言去实现: - -- C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。 -- C++ —— 不使用内建的数据类型。 -- C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。 -- Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 -- 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。 - -你不需要学会所有的编程语言,你只需要专注在[一种编程语言](##为你的面试选择一种语言)上。 - -为何要在这些语言上分别实现一次? - -- 练习,练习,练习,直至我厌倦它,并正确无误地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆) -- 在纯原生的条件下工作(不需垃圾回收机制的帮助下,手动分配/释放内存(除了 Python)) -- 利用语言内建的数据类型,之后在实际工作的时候才能得心应手(在生产环境中,我不会去实现自己的链表) - -就算我没有时间去每一项都这么做,但我也会尽我所能。 +每天,按照列表中的下一个主题,观看一些关于该主题的视频, +然后用你选择的语言为这门课程编写该数据结构或算法的实现。 在这里你可以查看到我的代码: - - [C](https://github.com/jwasham/practice-c) - [C++](https://github.com/jwasham/practice-cpp) - [Python](https://github.com/jwasham/practice-python) -你不需要记住每一个算法的内部原理。 +你不需要记住每个算法。你只需要能够理解它,以便能够编写自己的实现即可。 -在一个白板上写代码,而不要直接在计算机上编写。在测试完部分简单的输入后,到计算机上再测试一遍。 +## 编程问题练习 -## 必备知识 + 这是为什么?我还没有准备好面试。 -- [ ] **学习C语言** - - C 语言无处不在。在学习的过程中,你会在书籍,讲座,视频等任何地方看到它的身影 - - [ ] [C程序设计语言,第二版](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - 这是一本简短的书,但是它将使你更好地使用 C 语言,并且如果你稍加练习,就会很快熟练。理解 C 可帮助你了解程序和内存的工作方式 - - 问题答案 +[那就回去阅读这部分。](#3-do-coding-interview-questions-while-youre-learning) -- [ ] **计算机是如何处理一段程序:** - - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [计算机如何计算(视频)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [寄存器和内存(视频)](https://youtu.be/fpnE6UAfbtU) - - [ ] [中央处理单元(视频)](https://youtu.be/FZGugFqdr60) - - [ ] [指令和程序(视频)](https://youtu.be/zltgXvg6r3k) +为什么你需要练习编程问题: +- 识别问题,并确定合适的数据结构和算法 +- 收集问题的要求 +- 像在面试中那样口头表达解决问题的过程 +- 在白板或纸上编写代码,而不是在计算机上 +- 为您的解决方案确定时间和空间复杂度(参见下文中的大O表示法)。 +- 对你的解决方案进行测试 + +在面试中,有一种方法论的、有交流的问题解决方法。你可以从编程面试书籍中了解这些, +但我发现下面这个网站也非常出色: +[算法设计画布](http://www.hiredintech.com/algorithm-design/) + +在白板或纸上写代码,而不是在计算机上。使用一些样例输入进行测试。然后在计算机上键入并进行测试。 + +如果家里没有白板,请从艺术用品店购买一个大型的绘图本。 +你可以坐在沙发上练习。这就是我的"沙发白板"。照片中我加了一支笔来衡量尺寸。如果你使用钢笔,你会希望能擦除。 +会很快变得凌乱, **我用铅笔和橡皮擦。** + +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +**编程问题练习并不是为了记住解决编程问题的答案。** + +## 编程问题 + +别忘了参考你的主要编程面试书籍[这里](#interview-prep-books). + +解决问题: +- [如何找到解决方案](https://www.topcoder.com/thrive/articles/How%20To%20Find%20a%20Solution) +- [如何分析Topcoder问题陈述](https://www.topcoder.com/thrive/articles/How%20To%20Dissect%20a%20Topcoder%20Problem%20Statement%20Content) + +编程面试问题视频: +- [IDeserve(88个视频)](https://www.youtube.com/playlist?list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy(5个播放列表)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - 非常适合问题解决方案的演示 +- [Nick White - LeetCode解答(187个视频)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - 解释解决方案和代码的很好 + - 你可以在短时间内观看多个视频 +- [FisherCoder - LeetCode解答](https://youtube.com/FisherCoder) + +挑战/练习网站: +- [LeetCode](https://leetcode.com/) + - 我最喜欢的编程问题网站。对于你准备的1-2个月时间,订阅会费是值得的。 + - 观看上面提到的Nick White和FisherCoder的视频,可以帮助你理解代码解决方案。 +- [HackerRank](https://www.hackerrank.com/) +- [TopCoder](https://www.topcoder.com/) +- [Codeforces](https://codeforces.com/) +- [Codility](https://codility.com/programmers/) +- [Geeks for Geeks](https://practice.geeksforgeeks.org/explore/?page=1) +- [AlgoExpert](https://www.algoexpert.io/product) + - 由谷歌工程师创建,也是提高你技能的优秀资源。 +- [Project Euler](https://projecteuler.net/) + - 主要关注数学问题,并不完全适合编程面试。 + +## 让我们开始吧 + +好了,说得够多了,让我们学习吧! + +但在学习的同时,不要忘记做上面的编码问题! ## 算法复杂度 / Big-O / 渐进分析法 -- 并不需要实现 -- 这里有很多视频,看到你真正了解它为止。你随时可以回来复习。 -- 如果这些课程太过数学的话,你可以去看看最下面离散数学的视频,它能让你更了解这些数学背后的来源以及原理。 -- [ ] [Harvard CS50 —— 渐进表示(视频)](https://www.youtube.com/watch?v=iOq5kSKqeR4) -- [ ] [Big O 记号(通用快速教程)(视频)](https://www.youtube.com/watch?v=V6mKVRU1evU) -- [ ] [Big O 记号(以及 Omega 和 Theta)—— 最佳数学解释(视频)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] Skiena 算法: - - [视频](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [幻灯片](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) -- [ ] [对于算法复杂度分析的一次详细介绍](http://discrete.gr/complexity/) -- [ ] [增长阶数(Orders of Growth)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/59) -- [ ] [渐进性(Asymptotics)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/61) -- [ ] [UC Berkeley Big O(视频)](https://youtu.be/VIS4YDpuP98) -- [ ] [UC Berkeley Big Omega(视频)](https://youtu.be/ca3e7UVmeUc) -- [ ] [平摊分析法(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] [举证“Big O”(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/63) +- 这里没有什么需要实施的,你只是在观看视频并记笔记!耶! +- 这里有很多视频,只要看到你理解为止就好了,你随时可以回来复习。 +- 如果你不理解背后的所有数学,不要担心。 +- 你只需要理解如何用大O表示法来表达算法的复杂度。 +- [ ] [哈佛大学CS50 - 渐进符号(视频)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [大O符号(通用快速教程)(视频)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [大O符号(以及Ω和Θ)- 最佳数学解释(视频)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Skiena(视频)](https://www.youtube.com/watch?v=z1mkCe3kVUA) +- [ ] [加州大学伯克利分校关于大O符号(视频)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [摊还分析(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] TopCoder(包括递归关系和主定理): - - [计算性复杂度:第一部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) - - [计算性复杂度:第二部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) -- [ ] [速查表(Cheat sheet)](http://bigocheatsheet.com/) -- [ ] [[Review] Big-O notation in 5 minutes (video)](https://youtu.be/__vX2sjlpXU) + - [计算复杂性:第1部分](https://www.topcoder.com/thrive/articles/Computational%20Complexity%20part%20one) + - [计算复杂性:第2部分](https://www.topcoder.com/thrive/articles/Computational%20Complexity%20part%20two) +- [ ] [速查表](http://bigocheatsheet.com/) +- [ ] [[复习] 5分钟内了解大O符号(视频)](https://youtu.be/__vX2sjlpXU) + +好吧,差不多就到这里了。 + +当你阅读《破解编程面试》时,有一个章节专门讲述此事,并在最后进行了一次测验, +以测试你是否能够确定不同算法的运行时间复杂度。这是一个非常全面的复习和测试。 ## 数据结构 - ### 数组(Arrays) - - 实现一个可自动调整大小的动态数组。 - [ ] 介绍: - - [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UC Berkeley CS61B - 线性数组和多维数组(视频)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE)(从15分32秒开始) - - [动态数组(视频)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [不规则数组(视频)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [数组 CS50 哈佛大学](https://www.youtube.com/watch?v=tI_tIZFyKBw&t=3009s) + - [数组(视频)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) + - [加州大学伯克利分校CS61B - 线性和多维数组(视频)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE)(从15分32秒开始) + - [动态数组(视频)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) + - [嵌套数组(视频)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [ ] 实现一个动态数组(可自动调整大小的可变数组): - [ ] 练习使用数组和指针去编码,并且指针是通过计算去跳转而不是使用索引 - [ ] 通过分配内存来新建一个原生数据型数组 @@ -489,16 +569,20 @@ - ### 链表(Linked Lists) - [ ] 介绍: - - [ ] [单向链表(视频)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [ ] [CS 61B —— 链表(一)(视频)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [ ] [CS 61B —— 链表(二)(视频)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - - [ ] [[Review] Linked lists in 4 minutes (video)](https://youtu.be/F8AbOfQwl1c) - - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) ── 并非看完整个视频,只需要看关于节点结构和内存分配那一部分即可 + - [ ] [链表 CS50 哈佛大学](https://www.youtube.com/watch?v=2T-A_GFuoTo&t=650s) - 这样建立了直观感。 + - [ ] [单链表(视频)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK) + - [ ] [CS 61B - 链表1(视频)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - 链表 2(视频)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [[复习] 4分钟了解链表(视频)](https://youtu.be/F8AbOfQwl1c) + - [ ] [C代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - 不是整个视频,只是关于Node结构和内存分配的部分。 - [ ] 链表 vs 数组: - - [基本链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) - - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) + - [核心链表与数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) + - [在现实世界中,链表与数组的比较(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - - [ ] 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 + - [ ] 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时, + 该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。 + 但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] 实现(我实现了使用尾指针以及没有使用尾指针这两种情况): - [ ] size() —— 返回链表中数据元素的个数 @@ -538,7 +622,8 @@ - empty() - full() - [ ] 花销: - - 在糟糕的实现情况下,使用链表所实现的队列,其入列和出列的时间复杂度将会是 O(n)。因为,你需要找到下一个元素,以致循环整个队列 + - 在糟糕的实现情况下,使用链表所实现的队列,其入列和出列的时间复杂度将会是 O(n)。 + 因为,你需要找到下一个元素,以致循环整个队列 - enqueue:O(1)(平摊(amortized)、链表和数组 [探测(probing)]) - dequeue:O(1)(链表和数组) - empty:O(1)(链表和数组) @@ -548,25 +633,26 @@ - [ ] [链式哈希表(视频)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - [ ] [Table Doubling 和 Karp-Rabin(视频)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [Open Addressing 和密码型哈希(Cryptographic Hashing)(视频)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [PyCon 2010:The Mighty Dictionary(视频)](https://www.youtube.com/watch?v=C4Kc8xzcA68) - - [ ] [(进阶)随机取样(Randomization):全域哈希(Universal Hashing)& 完美哈希(Perfect Hashing)(视频)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) - - [ ] [(进阶)完美哈希(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - - [ ] [[Review] Hash tables in 4 minutes (video)](https://youtu.be/knV86FlSXJ8) + - [ ] [PyCon 2010:强大的字典(视频)](https://www.youtube.com/watch?v=C4Kc8xzcA68) + - [ ] [PyCon 2017:字典更强大(视频)](https://www.youtube.com/watch?v=66P5FMkWoVU) + - [ ] [(高级) 随机化:通用和完美哈希(视频)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(进阶)完美哈希(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + - [ ] [[复习]4分钟了解哈希表(视频)](https://youtu.be/knV86FlSXJ8) - [ ] 在线课程: - - [ ] [基本哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) - - [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/3) - - [ ] [电话薄问题(Phone Book Problem)(视频)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] [核心哈希表(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP) + - [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/4) + - [ ] [电话簿问题(视频)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) - [ ] 分布式哈希表: - - [Dropbox 中的瞬时上传及存储优化(视频)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) - - [分布式哈希表(视频)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) + - [Dropbox中的即时上传和存储优化(视频)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb) + - [分布式哈希表(视频)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H) - - [ ] 使用线性探测的数组去实现 - - hash(k, m) —— m 是哈希表的大小 - - add(key, value) —— 如果 key 已存在则更新值 - - exists(key) - - get(key) - - remove(key) + - [ ] 使用线性探测法的数组实现 + - hash(k, m) - m是哈希表的大小 + - add(key, value) - 如果键已存在,则更新值 + - exists(key) - 检查键是否存在 + - get(key) - 获取给定键的值 + - remove(key) - 删除给定键的值 ## 更多的知识 @@ -574,7 +660,8 @@ - [ ] [二分查找(视频)](https://www.youtube.com/watch?v=D5SrAga1pno) - [ ] [二分查找(视频)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - [ ] [详情](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) - - [ ] [[Review] Binary search in 4 minutes (video)](https://youtu.be/fDKIpRe8GW4) + - [ ] [蓝图](https://leetcode.com/discuss/general-discussion/786126/python-powerful-ultimate-binary-search-template-solved-many-problems) + - [ ] [【复习】四分钟二分查找(视频)](https://youtu.be/fDKIpRe8GW4) - [ ] 实现: - 二分查找(在一个已排序好的整型数组中查找) - 迭代式二分查找 @@ -608,18 +695,14 @@ ## 树(Trees) -- ### 树 —— 笔记 & 背景 - - [ ] [系列:树(视频)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - - 基本的树形结构 - - 遍历 - - 操作算法 - - [ ] [BFS(广度优先检索,breadth-first search)和 DFS(深度优先检索,depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) +- ### 树-介绍 + - [ ] [树的介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) + - [ ] [树遍历(视频)](https://www.coursera.org/lecture/data-structures/tree-traversal-fr51b) + - [ ] [BFS(广度优先搜索)和DFS(深度优先搜索)(视频)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - BFS 笔记 - - 层序遍历(使用队列的 BFS 算法) + - 层次遍历(BFS,使用队列) - 时间复杂度: O(n) - - 空间复杂度: - - 最好情况:O(1) - - 最坏情况:O(n/2)=O(n) + - 空间复杂度:最佳情况:O(1),最坏情况:O(n/2)=O(n) - DFS 笔记: - 时间复杂度:O(n) - 空间复杂度: @@ -628,14 +711,12 @@ - 中序遍历(DFS:左、节点本身、右) - 后序遍历(DFS:左、右、节点本身) - 先序遍历(DFS:节点本身、左、右) - - [ ] [[Review] Breadth-first search in 4 minutes (video)](https://youtu.be/HZ5YTanv5QE) - - [ ] [[Review] Depth-first search in 4 minutes (video)](https://youtu.be/Urx87-NMm6c) - - [ ] [[Review] Tree Traversal (playlist) in 11 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b) + - [ ] [[复习]4分钟内的广度优先搜索(视频)](https://youtu.be/HZ5YTanv5QE) + - [ ] [[复习] 4分钟内的深度优先搜索(视频)](https://youtu.be/Urx87-NMm6c) + - [ ] [[复习]11分钟内的树遍历(播放列表)(视频)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b) - ### 二叉查找树(Binary search trees):BSTs - - [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [系列(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) - - 从符号表开始到 BST 程序 + - [ ] [二叉搜索树复习(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [MIT(视频)](https://www.youtube.com/watch?v=9Jry5-82I68) - C/C++: @@ -650,12 +731,12 @@ - [ ] [从二叉查找树中删除一个节点(视频)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) - [ ] [二叉查找树中序遍历的后继者(视频)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] 实现: - - [ ] insert // 往树上插值 + - [ ] [insert // 将值插入树中](https://leetcode.com/problems/insert-into-a-binary-search-tree/submissions/987660183/) - [ ] get_node_count // 查找树上的节点数 - [ ] print_values // 从小到大打印树中节点的值 - [ ] delete_tree - [ ] is_in_tree // 如果值存在于树中则返回 true - - [ ] get_height // 返回节点所在的高度(如果只有一个节点,那么高度则为1) + - [ ] [get_height // 以节点为单位返回高度(单个节点的高度为1)](https://www.geeksforgeeks.org/find-the-maximum-depth-or-height-of-a-tree/) - [ ] get_min // 返回树上的最小值 - [ ] get_max // 返回树上的最大值 - [ ] is_binary_search_tree @@ -663,22 +744,21 @@ - [ ] get_successor // 返回给定值的后继者,若没有则返回-1 - ### 堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap) - - 可视化是一棵树,但通常是以线性的形式存储(数组、链表) - - [ ] [堆](https://en.wikipedia.org/wiki/Heap_(data_structure)) - - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) - - [ ] [简单的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - 以树形结构可视化,但通常在存储上是线性的(数组、链表) + - [ ] [堆(Heap)](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [堆简介(视频)](https://www.coursera.org/lecture/data-structures/introduction-2OpTs) - [ ] [二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) - - [ ] [关于树高的讨论(视频)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [树高度备注(视频)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) - [ ] [基本操作(视频)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) - [ ] [完全二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) - [ ] [伪代码(视频)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) - - [ ] [堆排序 —— 跳到起点(视频)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) - - [ ] [堆排序(视频)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) - - [ ] [构建一个堆(视频)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) - - [ ] [MIT:堆与堆排序(视频)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [CS 61B Lecture 24:优先级队列(视频)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) - - [ ] [构建线性时间复杂度的堆(大顶堆)](https://www.youtube.com/watch?v=MiyLo8adrWw) - - [ ] [[Review] Heap (playlist) in 13 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNsyqgPW-DNwUeT8F8uhWc6) + - [ ] [堆排序 - 跳转到开始部分(视频)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [堆排序(视频)](https://www.coursera.org/lecture/data-structures/heap-sort-hSzMO) + - [ ] [构建堆(视频)](https://www.coursera.org/lecture/data-structures/building-a-heap-dwrOS) + - [ ] [MIT:堆和堆排序(视频)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B Lecture 24:优先队列(视频)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [线性时间构建堆(大顶堆)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] [[复习] 13分钟了解堆(视频)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNsyqgPW-DNwUeT8F8uhWc6) - [ ] 实现一个大顶堆: - [ ] insert - [ ] sift_up —— 用于插入元素 @@ -706,17 +786,27 @@ - [链表的归并排序](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) - 关于堆排序,请查看前文堆的数据结构部分。堆排序很强大,不过是非稳定排序。 + - [ ] [Sedgewick ── 归并排序(5个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - [ ] 1. 归并排序 - - [ ] 2. 自下而上的归并排序 - - [ ] 3. 排序复杂度 - - [ ] 4. 比较器 - - [ ] 5. 稳定性 + - [ ] [1. 归并排序(Mergesort)](https://www.coursera.org/lecture/algorithms-part1/mergesort-ARWDq) + - [ ] [2. 自底向上的归并排序(Bottom up Mergesort)](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. 排序复杂性(Sorting Complexity)](https://www.coursera.org/lecture/algorithms-part1/sorting-complexity-xAltF) + - [ ] [4. 比较器(Comparators)](https://www.coursera.org/lecture/algorithms-part1/comparators-9FYhS) + - [ ] [5. 稳定性(Stability)](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + - [ ] [Sedgewick ── 快速排序(4个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - [ ] 1. 快速排序 - - [ ] 2. 选择 - - [ ] 3. 重复键值 - - [ ] 4. 系统排序 + - [ ] [1. 快速排序(Quicksort)](https://www.coursera.org/lecture/algorithms-part1/quicksort-vjvnC) + - [ ] [2. 选择排序(Selection)](https://www.coursera.org/lecture/algorithms-part1/selection-UQxFT) + - [ ] [3. 重复键(Duplicate Keys)](https://www.coursera.org/lecture/algorithms-part1/duplicate-keys-XvjPd) + - [ ] [4. 系统排序(System Sorts)](https://www.coursera.org/lecture/algorithms-part1/system-sorts-QBNZ7) + +- [ ] 加州大学伯克利分校: + - [ ] [CS 61B Lecture 29:排序 I(视频)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30:排序 II(视频)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32:排序 III(视频)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33:排序 V(视频)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + - [ ] [CS 61B 2014-04-21:基数排序(视频)](https://archive.org/details/ucberkeley_webcast_pvbBMd-3NoI) + - [ ] [冒泡排序(视频)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) - [ ] [冒泡排序分析(视频)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) - [ ] [插入排序 & 归并排序(视频)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) @@ -762,11 +852,12 @@ - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法(视频)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] [线性时间内的排序(视频)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) -总结一下,这是[15种排序算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的可视化表示。如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“排序”部分。 +总结一下,这是[15种排序算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的可视化表示。 +如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“排序”部分。 ## 图(Graphs) -图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。 +图表可以用来表示计算机科学中的许多问题,所以这一部分很长,就像树和排序一样。 - 笔记: - 有4种基本方式在内存里表示一个图: @@ -793,19 +884,18 @@ - [ ] 图 (复习和其他): - [ ] [6.006 单源最短路径问题(视频)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.006 Dijkstra 算法(视频)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.006 Bellman-Ford 算法(视频)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) - - [ ] [6.006 Dijkstra 效率优化(视频)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) - - [ ] [Aduni: 图的算法 I - 拓扑排序,最小生成树,Prim 算法 - 第六课(视频)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Aduni: 图的算法 II - 深度优先搜索, 广度优先搜索, Kruskal 算法, 并查集数据结构 - 第七课(视频)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) - - [ ] [Aduni: 图的算法 III: 最短路径 - 第八课(视频)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) - - [ ] [Aduni: 图的算法. IV: 几何算法介绍 - 第九课(视频)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) - - [ ] [CS 61B 2014 (从 58:09 开始)(视频)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) - - [ ] [CS 61B 2014: 加权图(视频)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) - - [ ] [贪心算法: 最小生成树(视频)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [图的算法之强连通分量 Kosaraju 算法(视频)](https://www.youtube.com/watch?v=RpgcYiky7uw) - - [ ] [[Review] Shortest Path Algorithms (playlist) in 16 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO-Y-H3xIC9DGSfVYJng9Yw) - - [ ] [[Review] Minimum Spanning Trees (playlist) in 4 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV) + - [ ] [6.006 Dijkstra算法(视频)](https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare) + - [ ] [6.006 Bellman-Ford算法(视频)](https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare) + - [ ] [6.006 加速Dijkstra算法(视频)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni:图算法 I - 拓扑排序,最小生成树,Prim算法 - 讲座6(视频)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni:图算法 II - DFS,BFS,Kruskal算法,Union Find数据结构 - 讲座7(视频)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni:图算法 III:最短路径 - 讲座8(视频)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni:图算法 IV:几何算法入门 - 讲座9(视频)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014:加权图(视频)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [贪婪算法:最小生成树(视频)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [强连通分量Kosaraju算法图算法(视频)](https://www.youtube.com/watch?v=RpgcYiky7uw) + - [ ] [[复习] 最短路径算法(播放列表)16分钟(视频)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO-Y-H3xIC9DGSfVYJng9Yw) + - [ ] [[复习] 最小生成树(播放列表)4分钟(视频)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV) - 完整的 Coursera 课程: - [ ] [图的算法(视频)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) @@ -826,8 +916,6 @@ - [ ] 列出强连通分量 - [ ] 检查双向图 -可以从 Skiena 的书(参考下面的书推荐小节)和面试书籍中学习更多关于图的实践。 - ## 更多知识 - ### 递归(Recursion) @@ -840,21 +928,26 @@ - 尾递归会更好么? - [ ] [什么是尾递归以及为什么它如此糟糕?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [尾递归(视频)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1) + - [ ] [解决任何递归问题的5个简单步骤(视频)](https://youtu.be/ngCos392W4w) + 回溯蓝图: [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning)) + [Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A) - ### 动态规划(Dynamic Programming) - - 在你的面试中或许没有任何动态规划的问题,但能够知道一个题目可以使用动态规划来解决是很重要的。 + - 在你的面试中或许没有任何动态规划的问题, + 但能够知道一个题目可以使用动态规划来解决是很重要的。 - 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。 - 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。 - [ ] 视频: - - Skiena 的视频可能会有点难跟上,有时候他用白板写的字会比较小,难看清楚。 - - [ ] [Skiena: CSE373 2012 - 课程 19 - 动态规划介绍(视频)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) - - [ ] [Skiena: CSE373 2012 - 课程 20 - 编辑距离(视频)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) - - [ ] [Skiena: CSE373 2012 - 课程 21 - 动态规划举例(视频)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) - - [ ] [Skiena: CSE373 2012 - 课程 22 - 动态规划应用(视频)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) - - [ ] [Simonson: 动态规划 0 (starts at 59:18)(视频)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) - - [ ] [Simonson: 动态规划 I - 课程 11(视频)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Simonson: 动态规划 II - 课程 12(视频)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - - [ ] 单独的 DP 问题 (每一个视频都很短):[动态规划(视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] [Skiena:CSE373 2020 - 讲座19 - 动态规划简介(视频)](https://www.youtube.com/watch?v=wAA0AMfcJHQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=18) + - [ ] [Skiena:CSE373 2020 - 讲座20 - 编辑距离(视频)](https://www.youtube.com/watch?v=T3A4jlHlhtA&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=19) + - [ ] [Skiena:CSE373 2020 - 讲座20 - 编辑距离(续)(视频)](https://www.youtube.com/watch?v=iPnPVcZmRbE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=20) + - [ ] [Skiena:CSE373 2020 - 讲座21 - 动态规划(视频)](https://www.youtube.com/watch?v=2xPE4Wq8coQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=21) + - [ ] [Skiena:CSE373 2020 - 讲座22 - 动态规划和复习(视频)](https://www.youtube.com/watch?v=Yh3RzqQGsyI&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=22) + - [ ] [Simonson:动态规划 0(从59:18开始)(视频)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson:动态规划 I - 第11讲(视频)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson:动态规划 II - 第12讲(视频)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] 单独的动态规划问题列表(每个都很短): + [动态规划(视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - [ ] 耶鲁课程笔记: - [ ] [动态规划](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) - [ ] Coursera 课程: @@ -866,10 +959,6 @@ - [ ] [全局成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) - [ ] [本地成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) -- ### 面向对象编程 - - 可选:[UML 2.0系列(视频)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - SOLID 面向对象编程原则:[SOLID 原则(视频)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - - ### 设计模式 - [ ] [UML 统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - [ ] 主要有如下的设计模式: @@ -890,14 +979,10 @@ - [ ] 迭代器模式(iterator) - [ ] 组合模式(composite) - [ ] 享元模式(flyweight) - - [ ] [第六章 (第 1 部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) - - [ ] [第六章 (第 2 部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [第六章 (第 3 部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy(视频)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] [系列视频(27个)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - - [ ] [Head First 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - - 尽管《设计模式:可复用面向对象软件的基础》才是这方面的经典,但是我还是认为Head First对于新手更加友好。 - - [ ] [实际操作:设计模式和对入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips) - - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + - [ ] [书籍:《Head First设计模式》](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO. + - [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - ### 组合(Combinatorics) (n 中选 k 个) & 概率(Probability) - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择)(视频)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) @@ -909,19 +994,21 @@ - 只有视频 - 41 (每一个都短小精悍): - [ ] [概率解释(视频)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) -- ### NP, NP-完全和近似算法 - - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题,而且能在面试官试图忽悠你的时候识别出他们。 - - 知道 NP 完全是什么意思. +- ### NP, NP-Completeness和近似算法 + - 知道最经典的一些 NP-Completeness 问题,比如旅行商问题和背包问题, + 而且能在面试官试图忽悠你的时候识别出他们。 + - 知道 NP-Completeness 是什么意思. - [ ] [计算复杂度(视频)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) - [ ] Simonson: - - [ ] [贪心算法. II & 介绍 NP-完全性(视频)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) - - [ ] [NP-完全性 II & 归约(视频)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [NP-完全性 III(视频)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [NP-完全性 IV(视频)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) + - [ ] [贪心算法. II & 介绍 NP-Completeness(视频)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP-Completeness II & 归约(视频)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP-Completeness III(视频)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP-Completeness IV(视频)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-完全性 IV(视频)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) - - [ ] [CSE373 2012 - 课程 24 - NP-完全性证明(视频)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - 课程 25 - NP-完全性挑战(视频)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-Completeness IV(视频)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - 课程 24 - NP-Completeness证明(视频)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 25 - NP-Completeness挑战(视频)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2020年 - 第26讲 - NP-Completeness挑战(视频)](https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26) - [ ] [复杂度: P, NP, NP-完全性, 规约(视频)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) - [ ] [复杂度: 近视算法 Algorithms(视频)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) - [ ] [复杂度: 固定参数算法(视频)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) @@ -929,6 +1016,13 @@ - [Jupyter 笔记本](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - 《算法导论》(CLRS)的第 1048 - 1140 页。 +- ### 计算机如何处理程序 + + - [ ] [CPU如何执行程序(视频)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [计算机如何进行计算 - 算术逻辑单元(视频)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [寄存器和RAM(视频)](https://youtu.be/fpnE6UAfbtU) + - [ ] [中央处理器(CPU)(视频)](https://youtu.be/FZGugFqdr60) + - [ ] [指示和程序(视频)](https://youtu.be/zltgXvg6r3k) - ### 缓存(Cache) - [ ] LRU 缓存: - [ ] [LRU 的魔力 (100 Days of Google Dev)(视频)](https://www.youtube.com/watch?v=R5ON3iwx78M) @@ -963,8 +1057,9 @@ - 线程资源需要(在同一个进程内和其他线程共享以上(除了栈)的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈) - Fork 操作是真正的写时复制(只读),直到新的进程写到内存中,才会生成一份新的拷贝。 - 上下文切换 - - 操作系统和底层硬件是如何初始化上下文切换的? + - [操作系统和底层硬件如何启动上下文切换?](https://www.javatpoint.com/what-is-the-context-switching-in-the-operating-system) - [ ] [C++ 的线程 (系列 - 10 个视频)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] [CS 377 春季'14:马萨诸塞大学的操作系统](https://www.youtube.com/playlist?list=PLacuG5pysFbDQU8kKxbUh4K5c1iL5_k7k) - [ ] Python 的并发 (视频): - [ ] [线程系列](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) - [ ] [Python 线程](https://www.youtube.com/watch?v=Bs7vPNbB9JM) @@ -984,16 +1079,11 @@ - [ ] [James Bach 软件测试公开课(视频)](https://www.youtube.com/watch?v=ILkT_HV9DVU) - [ ] [Steve Freeman - 测试驱动的开发(视频)](https://vimeo.com/83960706) - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - - [ ] [Python:测试驱动的 Web 开发](http://www.obeythetestinggoat.com/pages/book.html#toc) - [ ] 依赖注入: - [ ] [视频](https://www.youtube.com/watch?v=IKD2-MAkXyQ) - [ ] [测试之道](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) - [ ] [如何编写测试](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) -- ### 调度 - - 在操作系统中是如何运作的 - - 在操作系统部分的视频里有很多资料 - - ### 字符串搜索和操作 - [ ] [Sedgewick──后缀数组(Suffix Arrays)(视频)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [Sedgewick──子字符串搜寻(视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4) @@ -1025,9 +1115,7 @@ - [ ] [MIT,高阶数据结构,字符串(视频中间有点困难)(视频)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### 浮点数 - - - [ ] 简单8位:[浮点数的表示形式-1(视频──计算中存在错误,请参见视频说明)](https://www.youtube.com/watch?v=ji3SfClm8TU) - - [ ] 32位:[IEEE754 32位浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec) + - [ ] 简单的8位: [浮点数的表示 - 1(视频 - 计算中有错误 - 请查看视频描述)](https://www.youtube.com/watch?v=ji3SfClm8TU) - ### Unicode - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识](http://www.joelonsoftware.com/articles/Unicode.html) @@ -1057,247 +1145,66 @@ - [Java──套接字──介绍(视频)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [套接字编程(视频)](https://www.youtube.com/watch?v=G75vN2mnJeQ) -## 系统设计、可伸缩性、数据处理 +--- -**如果你已经拥有了4年以上的编程经验,那你可以来看看有关系统设计的问题** - -- 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。要花费相当多的时间在这个主题上。 -- 考量: - - 伸缩性 - - 把大数据集提取为单一值 - - 大数据集转换 - - 处理大量的数据集 - - 系统 - - 功能集 - - 接口 - - 类层次结构 - - 在特定的约束下设计系统 - - 轻量和健壮性 - - 权衡和折衷 - - 性能分析和优化 -- [ ] **从这里开始**:[系统设计入门](https://github.com/donnemartin/system-design-primer) -- [ ] [HiredInTech:系统设计](http://www.hiredintech.com/system-design/) -- [ ] [该如何为技术面试里设计方面的问题做准备?](https://www.quora.comHow-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) -- [ ] [在系统设计面试前必须知道的 8 件事](http://blog.gainlo.co/index.php/2015/10/228-things-you-need-to-know-before-system-design-interviews/) -- [ ] [算法设计](http://www.hiredintech.com/algorithm-design/) -- [ ] [数据库范式 - 1NF, 2NF, 3NF and 4NF(视频)](https://www.youtube.com/watch?v=UrYLYV7WSHM) -- [ ] [系统设计面试](https://github.com/checkcheckzz/system-design-interview) - 这一部分有很多的资源浏览一下我放在下面的文章和例子。 -- [ ] [如何在系统设计面试中脱颖而出](http://www.palantir.com/2011/10how-to-rock-a-systems-design-interview/) -- [ ] [每个人都该知道的一些数字](http://everythingisdata.wordpress.com/2009/10/17numbers-everyone-should-know/) -- [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11how-long-does-it-take-to-make-context.html) -- [ ] [跨数据中心的事务(视频)](https://www.youtube.com/watch?v=srOgpXECblk) -- [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) -- [ ] 共识算法: - - [ ] Paxos:[Paxos协议──Computerphile(视频)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - - [ ] Raft: [Raft 分布式共识算法简介(视频)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - - [ ] [易于阅读的论文](https://raft.github.io/) - - [ ] [信息图] -- [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html) -- [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html) -- [ ] 可伸缩性: - - 你不需要知道所有这些。只需挑选一些你感兴趣的东西即可。 - - [ ] [很棒的概述(视频)](https://www.youtube.com/watch?v=-W9F__D3oY4) - - [ ] 简短系列: - - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) - - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) - - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) - - [异步](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) - - [ ] [可伸缩的 Web 架构和分布式系统](http://www.aosabook.org/en/distsys.html) - - [ ] [错误的分布式系统解释](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) - - [ ] [实用编程技术](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) - - [extra: Google Pregel 图形处理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) - - [ ] [Jeff Dean - 在 Goolge 构建软件系统(视频)](https://www.youtube.com/watch?v=modXC5IWTJI) - - [ ] [可伸缩系统架构设计介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/) - - [ ] [使用 App Engine 和云存储扩展面向全球用户的手机游戏架构实践(视频)](https://www.youtube.com/watch?v=9nWyWwY2Onc) - - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra(视频)](https://www.youtube.com/watch?v=H4vMcD7zKM0) - - [ ] [算法的重要性](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/) - - [ ] [分片(Sharding)](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) - - [ ] [Facebook 系统规模扩展实践 (2012), "为 10 亿用户构建"(视频)](https://www.youtube.com/watch?v=oodS71YtkGU) - - [ ] [Long Game 工程实践 - Astrid Atkinson Keynote(视频)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) - - [ ] [30 分钟看完 YouTuBe 7 年系统扩展经验](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) - - [视频](https://www.youtube.com/watch?v=G-lGCC4KKok) - - [ ] [PayPal 如何用 8 台虚拟机扛住 10 亿日交易量系统](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) - - [ ] [如何对大数据集去重](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) - - [ ] [Etsy 的扩展和工程文化探究 Jon Cowie(视频)](https://www.youtube.com/watch?v=3vV4YiqKm1o) - - [ ] [是什么造就了 Amazon 自己的微服务架构](http://thenewstack.io/led-amazon-microservices-architecture/) - - [ ] [压缩还是不压缩,是 Uber 面临的问题](https://eng.uber.com/trip-data-squeeze/) - - [ ] [异步 I/O Tarantool 队列](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html) - - [ ] [什么时候应该用近似查询处理?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) - - [ ] [Google 从单数据中心到故障转移, 到本地多宿主架构的演变](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) - - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) - - [ ] [Egnyte: 构建和扩展 PB 级分布式系统架构的经验教训](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html) - - [ ] [机器学习驱动的编程: 新世界的新编程方式](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html) - - [ ] [日服务数百万请求的图像优化技术](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) - - [ ] [Patreon 架构](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) - - [ ] [Tinder: 推荐引擎是如何决定下一个你将会看到谁的?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) - - [ ] [现代缓存设计](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) - - [ ] [Facebook 实时视频流扩展](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) - - [ ] [在 Amazon AWS 上把服务扩展到 1100 万量级的新手教程](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) - - [ ] [对延时敏感的应用是否应该使用 Docker?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) - - [ ] [360 度解读 Netflix 技术栈](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) - - [ ] [延迟无处不在 - 如何搞定它?](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) - - [ ] [无服务器架构](http://martinfowler.com/articles/serverless.html) - - [ ] [是什么驱动着 Instagram: 上百个实例、几十种技术](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) - - [ ] [Cinchcast 架构 - 每天处理 1500 小时的音频](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html) - - [ ] [Justin.Tv 实时视频播放架构](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) - - [ ] [Playfish's 社交游戏架构 - 每月五千万用户增长](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) - - [ ] [猫途鹰架构 - 40 万访客, 200 万动态页面访问, 30TB 数据](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) - - [ ] [PlentyOfFish 架构](http://highscalability.com/plentyoffish-architecture) - - [ ] [Salesforce 架构 - 如何扛住 13 亿日交易量](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) - - [ ] [ESPN's 架构扩展](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) - - [ ] 下面“消息传递,序列化和队列系统”部分的内容会提到什么样的技术能把各种服务整合到一起 - - [ ] Twitter: - - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter"(视频)](https://www.youtube.com/watch?v=5cKTP36HVgI) - - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) - - 更多内容可以查看[视频系列部分](#视频系列)的“大规模数据挖掘”视频系列。 -- [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。 - - 复习: [系统设计入门](https://github.com/donnemartin/system-design-primer) - - [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/) - - [备忘单](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf) - - 流程: - 1. 理解问题和范围: - - 在面试官的帮助下定义用例 - - 提出附加功能的建议 - - 去掉面试官认定范围以外的内容 - - 假定高可用是必须的,而且要作为一个用例 - 2. 考虑约束: - - 问一下每月请求量 - - 问一下每秒请求量 (他们可能会主动提到或者让你算一下) - - 评估读写所占的百分比 - - 评估的时候牢记 2/8 原则 - - 每秒写多少数据 - - 总的数据存储量要考虑超过 5 年的情况 - - 每秒读多少数据 - 3. 抽象设计: - - 分层 (服务, 数据, 缓存) - - 基础设施: 负载均衡, 消息 - - 粗略的概括任何驱动整个服务的关键算法 - - 考虑瓶颈并指出解决方案 - - 练习: - - [设计一个 CDN 网络](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) - - [设计一个随机唯一 ID 生成系统](https://blog.twitter.com/2010/announcing-snowflake) - - [设计一个在线多人卡牌游戏](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) - - [设计一个键值数据库](http://www.slideshare.net/dvirsky/introduction-to-redis) - - [设计一个图片分享系统](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) - - [设计一个推荐系统](http://ijcai13.org/files/tutorial_slides/td3.pdf) - - [设计一个短域名生成系统](http://www.hiredintech.com/system-design/the-system-design-process/) - - [设计一个缓存系统](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) +## 最终复习 + + 本节将包含一系列短视频,您可以迅速观看,以便复习大部分重要概念。 + 如果您经常需要温习知识,这会很有帮助。 + +- [ ] 一系列2-3分钟的短主题视频(共23个视频) + - [视频链接](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] 一系列2-5分钟的短主题视频 - Michael Sambol(共46个视频): + - [视频链接](https://www.youtube.com/@MichaelSambol) + - [代码示例](https://github.com/msambol/dsa) +- [ ] [Sedgewick的算法课程视频 - 算法I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick的算法课程视频 - 算法II](https://www.coursera.org/learn/algorithms-part2) --- -## 终面 +## 更新你的简历 - 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。 - 这对经常性的巩固很有帮助。 +- 在书籍《Cracking The Coding Interview》和《Programming Interviews Exposed》中查看简历准备信息。 +- [“这就是一个优秀简历的样子” by Gayle McDowell(《Cracking the Coding Interview》的作者)](https://www.careercup.com/resume), + - 作者备注:“这是针对美国的简历。印度和其他国家的简历有不同的期望,尽管许多要点是相同的。” +- [“逐步简历指南” by Tech Interview Handbook](https://www.techinterviewhandbook.org/resume/guide) + - 详细指南,教您如何从零开始设置您的简历,编写有效的简历内容,优化它,并测试您的简历。 -- [ ] 2-3分钟的简短主题视频系列(23个视频) - - [视频](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2-5分钟的简短主题视频系列──Michael Sambol (40个视频): - - [视频](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) -- [ ] [Sedgewick 视频 ── 算法I](https://www.coursera.org/learn/algorithms-part1) -- [ ] [Sedgewick 视频 ── 算法II](https://www.coursera.org/learn/algorithms-part2) +## 面试流程与一般面试准备 -## 编程问题练习 - -现在你已经了解了上面所有的计算机科学主题,是时候练习回答编程问题了。 - -**编程问题的实践并不是要记住编程问题的答案**。 - -为什么需要练习编程问题: - -- 快速识别问题,以及如何应用正确的数据结构及算法 -- 收集问题的要求 -- 像在面试中一样谈论问题 -- 在白板或纸上而非计算机上编码 -- 计算解决方案的时间和空间的复杂性 -- 测试你的解决方案 - -这里有个很棒的入门教学,内容是如何在面试中有条不紊,并且有互动沟通地解决问题。这种能力可以从面试书籍中获得,但我觉得这个也很棒:[算法设计画布](http://www.hiredintech.com/algorithm-design/)。 - -家里没有白板?那讲得通。我是一个怪人,有一个很大的白板。从白板商店买了一个大的绘图板,而不是白板。你可以坐在沙发上练习。这是我的“沙发白板”。我在照片中添加了笔以便进行缩放。如果你使用笔,则希望可以擦除。快速变得凌乱。我用铅笔和橡皮擦。 - -![我的沙发白板](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) - -补充: - -- [Topcoder的数学](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) -- [动态编程──从新手到高级](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) -- [MIT 面试材料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - -**阅读并练习编程问题(按此顺序)**: - -- [ ] [编程面试公开:下一份工作的秘密,第二版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - C,C ++ 和 Java 的答案 -- [ ] [破解编码面试,第六版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - Java 答案 - -请参阅上方的[书单](#书单)。 - -## 编程练习和挑战 - -一旦你学会了理论基础,就应该把它们拿出来练练。 -尽量坚持每天做编码练习,越多越好。 - -- [如何找到解决方案](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) -- [如何剖析 Topcoder 题目描述](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) - -编码面试问题视频: - -- [IDeserve(88个视频)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) -- [Tushar Roy(5个播放列表)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - - 超级解决问题的方法 -- [Nick White──LeetCode 解题(187个视频)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - - 良好的解决方案和代码解释 - - 你可以在短时间内看好几个 -- [FisherCoder──LeetCode 解题](https://youtube.com/FisherCoder) - -编码练习平台: - -- [LeetCode](https://leetcode.com/) - - 我最喜欢的编码问题网站,值得你准备的1-2个月的订阅费用 - - [FisherCoder 的 LeetCode 解题](https://github.com/fishercoder1534/Leetcode) - - 请参阅上面的 Nick White 视频,以获得简短的代码 -- [HackerRank](https://www.hackerrank.com/) -- [TopCoder](https://www.topcoder.com/) -- [InterviewCake](https://www.interviewcake.com/) -- [http://www.geeksforgeeks.org/](http://www.geeksforgeeks.org/) -- [InterviewBit](https://www.interviewbit.com) -- [Project Euler (数学方向为主)](https://projecteuler.net/index.php?section=problems) -- [Code Exercises](https://code-exercises.com/) -- [Scaler Topics](https://www.scaler.com/topics/) - -语言学习网站,附带编码挑战: - -- [Codewars](http://www.codewars.com) -- [Codility](https://codility.com/programmers/) -- [HackerEarth](https://www.hackerearth.com/) -- [Sphere Online Judge (spoj)](http://www.spoj.com/) -- [Codechef](https://www.codechef.com/) - -编码挑战项目: - -- [Python 交互式编码面试挑战](https://github.com/donnemartin/interactive-coding-challenges) +- [ ] [如何在2021年通过工程师面试](https://davidbyttow.medium.com/how-to-pass-the-engineering-interview-in-2021-45f1b389a1) +- [ ] [揭秘技术招聘过程](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 如何在四大科技巨头公司中找到工作: + - [ ] [如何在四大科技巨头公司中找到工作 - 亚马逊、Facebook、谷歌和微软(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [如何在四大科技巨头公司中找到工作1(后续视频)](https://www.youtube.com/watch?v=6790FVXWBw8&feature=youtu.be) +- [ ] 《破解编程面试》第一集: + - [ ] [Gayle L McDowell - Cracking The Coding Interview(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [与作者Gayle Laakmann McDowell一起破解编程面试(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [ ] 破解Facebook编程面试: + - [ ] [方法论](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [问题演示](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- 面试准备课程: + - [数据结构、算法和面试的Python课程(付费课程):](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - 以Python为中心的面试准备课程,涵盖数据结构、算法、模拟面试等内容。 + - [使用Python的数据结构和算法简介(Udacity免费课程):](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - 一个免费的以Python为中心的数据结构和算法课程。 + - [数据结构和算法纳米学位!(Udacity付费纳米学位):](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - 提供超过100个数据结构和算法练习的实际操作体验,并得到专属导师的指导,以帮助您为面试和实际工作做准备。 + - [Grokking行为面试(Educative免费课程):](https://www.educative.io/courses/grokking-the-behavioral-interview): + - 很多时候,阻碍您获得梦想工作的不是您的技术能力,而是您在行为面试中的表现。 + - [AlgoMonster(付费课程,提供免费内容):)](https://algo.monster/?utm_campaign=jwasham&utm_medium=referral&utm_content=coding-interview-university&utm_source=github): + - LeetCode的速成课程。涵盖了从成千上万的问题中提炼出的所有模式。 模拟面试: - -- [Gainlo.co:来自大公司的模拟面试官](http://www.gainlo.co/#!/)──我使用了它,它帮助我减轻了电话屏幕和现场面试的压力 -- [Pramp:模拟来自/与同行的面试](https://www.pramp.com/)──点对点方式练习面试 -- [Refdash:模拟面试和加急面试](https://refdash.com/)──跳过与科技公司的多次面试,帮助求职者快速追踪 -- [interviewing.io:与高级工程师进行模拟面试](https://interviewing.io/)──与来自 FAANG(译者注:Facebook, Amazon, Apple, Netflix and Google) 的高级工程师进行匿名算法/系统设计面试。 - -## 当你临近面试时 - -- 搞定代码面试──第二集 (视频): - - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) - - [Cracking the Coding Interview - 全栈系列](https://www.youtube.com/watch?v=Eg5-tdAwclo) - -## 你的简历 - -- 请参阅“破解编码面试”和“编程面试的背面”中的建立准备项。 - +- [Gainlo.co:来自大公司的模拟面试官](http://www.gainlo.co/#!/) - 我用过这个,帮助我放松进行电话和现场面试。 +- [Pramp:与同行进行模拟面试](https://www.pramp.com/) - 同行模式的实践面试。 +- [interviewing.io:与资深工程师进行模拟面试 ](https://interviewing.io) - 匿名算法/系统设计面试,与FAANG公司的资深工程师进行。 +- [Meetapro:与顶级FAANG面试官进行模拟面试 ](https://meetapro.com/?utm_source=ciu) - 类似Airbnb的模拟面试/指导平台。 + ## 当面试来临的时候 -随着下面列举的问题思考下你可能会遇到的 20 个面试问题,每个问题准备 2-3 种回答。准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事。 +随着下面列举的问题思考下你可能会遇到的 20 个面试问题,每个问题准备 2-3 种回答。 +准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事。 - 你为什么想得到这份工作? - 你解决过的最有难度的问题是什么? @@ -1314,7 +1221,7 @@ ## 问面试官的问题 - 我会问的一些:(可能我已经知道了答案但我想听听面试官的看法或者了解团队的前景): +我会问的一些:(可能我已经知道了答案但我想听听面试官的看法或者了解团队的前景): - 团队多大规模? - 开发周期是怎样的? 会使用瀑布流/极限编程/敏捷开发么? @@ -1339,10 +1246,11 @@ ***************************************************************************************************** ***************************************************************************************************** - + 下面的内容都是可选的。 - 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。你将会成为一个更全面的软件工程师。 - + 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。 + 你将会成为一个更全面的软件工程师。 + ***************************************************************************************************** ***************************************************************************************************** @@ -1362,7 +1270,6 @@ - [设计模式:可复用面向对象软件的基础](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - 也被称为“四人帮”(Gang of Four(GOF)) - 经典设计模式书籍 -- [Linux 和 UNIX 系统管理技术手册(第五版)](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [算法设计手冊(Skiena)](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) - 作为复习以及问题辨别 - 这本书中算法的部分难度已经超过面试会出现的 @@ -1381,12 +1288,10 @@ - 我即将着手进行这部分,一旦完成这部分我会再更新上来 - 可以在 kindle 上租 - 解答: - - [解答](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - - [解答](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) + - [解答](https://web.archive.org/web/20150404194210/http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - [勘误表](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - +- [算法](http://jeffe.cs.illinois.edu/teaching/algorithms/) (Jeff Erickson) - [编程卓越之道(第一卷):深入理解计算机](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - 该书于2004年出版,虽然有些过时,但是对于简单了解计算机而言,这是一个了不起的资源 - 作者发明了[高阶组合语言 HLA](https://en.wikipedia.org/wiki/High_Level_Assembly),所以提到,并且举了一些HLA的例子。里面没有用到很多,但都是很棒的组合语言的例子。 - 这些章节值得阅读,为你提供良好的基础: @@ -1399,22 +1304,130 @@ - 第9章──CPU体系结构 - 第10章──指令集架构 - 第11章──内存体系结构和组织 - -- [算法导论](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) +- [算法导论](https://www.amazon.com/Introduction-Algorithms-fourth-Thomas-Cormen/dp/026204630X) - **重要提示**:读这本书的价值有限。本书很好地回顾了算法和数据结构,但不会教你如何编写良好的代码。你必须能够有效地编写一个不错的解决方案 - 又称 CLR,有时是 CLRS,因为 Stein 最后才加入 +- [计算机体系结构,第六版:定量方法](https://www.amazon.com/dp/0128119055) + - 对于更丰富、更时新(2017年)但较长的处理方式 + +## 系统设计、可扩展性和数据处理 + +**如果您有4年以上的工作经验,可以预期会遇到系统设计问题。** + +- 可扩展性和系统设计是一个非常广泛的主题,涵盖了许多内容和资源, +因为在设计一个可以扩展的软件/硬件系统时需要考虑很多因素。 +预计需要花费相当多的时间来学习这方面的知识。 +- 考虑要点: + - 可扩展性 + - 将大数据集归纳为单一值 + - 将一个数据集转换为另一个数据集 + - 处理海量数据 + - 系统设计 + - 功能集 + - 接口 + - 类层次结构 + - 在特定约束下设计系统 + - 简单性和鲁棒性 + - 权衡 + - 性能分析和优化 +- [ ] **从这里开始**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [HiredInTech的系统设计](http://www.hiredintech.com/system-design/) +- [ ] [如何准备回答技术面试中的设计问题?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) +- [ ] [通过8个步骤掌握系统设计面试](https://javascript.plainenglish.io/8-steps-guide-to-ace-a-system-design-interview-7a5a797f4d7d) +- [ ] [数据库规范化 - 第一范式、第二范式、第三范式和第四范式(视频)](https://www.youtube.com/watch?v=UrYLYV7WSHM) +- [ ] [系统设计面试 ](https://github.com/checkcheckzz/system-design-interview) - 这个资源有很多内容。浏览文章和示例。我列出了一些示例在下面。 +- [ ] [如何在系统设计面试中脱颖而出](https://web.archive.org/web/20120716060051/http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) +- [ ] [每个人都应该了解的数字](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) +- [ ] [进行上下文切换需要多长时间?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) +- [ ] [跨数据中心的事务(视频)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [CAP定理的简明英文介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem) +- [ ] [MIT 6.824:分布式系统,2020年春季(20个视频)](https://www.youtube.com/watch?v=cQP8WApzIQQ&list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) +- [ ] 共识算法: + - [ ] Paxos - [Paxos协议 - Computerphile(视频)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [Raft分布式共识算法简介(视频)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [易于理解的论文](https://raft.github.io/) + - [ ] [信息图](http://thesecretlivesofdata.com/raft/) +- [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] 可扩展性: + - 您不需要掌握所有这些内容,只需选择一些您感兴趣的。 + - [ ] [优秀的概述(视频)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] 短系列: + - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) + - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) + - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) + - [异步性](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) + - [ ] [可扩展的Web架构和分布式系统](http://www.aosabook.org/en/distsys.html) + - [ ] [分布式计算的谬误解释](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) + - [ ] [Jeff Dean - 在Google构建软件系统以及吸取的教训(视频)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [架构师为规模而设计的介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [缩放移动游戏以面向全球受众使用App Engine和Cloud Datastore(视频)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [谷歌是如何进行面向全球基础设施的大规模工程的(视频)](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [算法的重要性](https://www.topcoder.com/thrive/articles/The%20Importance%20of%20Algorithms) + - [ ] [分片](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) + - [ ] [针对长期目标的工程 - Astrid Atkinson主题演讲(视频)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [在30分钟内了解YouTube 7年的可扩展性经验](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) + - [视频](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [PayPal如何使用仅8台VM每天处理数十亿次交易](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) + - [ ] [如何在大型数据集中去重](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) + - [ ] [通过Jon Cowie深入了解Etsy的规模和工程文化(视频)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [Amazon是如何转向自己的微服务架构的](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [压缩还是不压缩,这是Uber面临的问题](https://eng.uber.com/trip-data-squeeze/) + - [ ] [何时应使用近似查询处理?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) + - [ ] [谷歌从单一数据中心到故障转移再到本地多家数据中心架构的转变]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) + - [ ] [为每天处理数百万请求的图像优化技术](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) + - [ ] [Patreon架构简介](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) + - [ ] [如何在Instagram庞大的推荐引擎中决定您将看到谁?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) + - [ ] [现代缓存设计](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) + - [ ] [在Facebook规模下进行直播视频流](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) + - [ ] [在亚马逊AWS上如何扩展到1100万以上的用户](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) + - [ ] [全面了解Netflix整个堆栈](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) + - [ ] [延迟无处不在,而且它会让您丧失销售机会 - 如何应对](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) + - [ ] [Instagram的动力:数百个实例,几十种技术](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [ ] [Salesforce架构 - 如何处理每天13亿次交易](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) + - [ ] [ESPN规模上的架构 - 每秒操作10万次“嘟嘟噜嘟嘟噜”](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) + - [ ] 在下面的“消息、序列化和队列系统”部分查看一些将服务连接在一起的技术信息 + - [ ] Twitter: + - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (视频)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [时间轴扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - 欲知更多信息,请参阅[Video Series](#video-series) 部分中的“Mining Massive Datasets”视频系列 +- [ ] 练习系统设计过程:以下是一些建议您在纸上尝试的想法,每个想法都有一些关于如何在现实世界中处理的文档: + - 复习: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [HiredInTech的系统设计](http://www.hiredintech.com/system-design/) + - [速查表](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf) + - 流程: + 1. 理解问题和范围: + - 定义用例,与面试官的帮助 + - 提出额外的功能 + - 移除面试官认为超出范围的项目 + - 假设需要高可用性,并将其添加为用例 + 2. 考虑限制: + - 询问每月有多少个请求 + - 询问每秒有多少个请求(他们可能会主动提供或让您计算) + - 估计读取与写入的百分比 + - 保持估计时考虑80/20法则 + - 每秒写入多少数据 + - 在5年内所需的总存储量 + - 每秒读取多少数据 + 3. 抽象设计: + - 层(服务、数据、缓存) + - 基础架构:负载均衡、消息传递 + - 驱动服务的任何关键算法的粗略概述 + - 考虑瓶颈并确定解决方案 + - 练习: + - [设计一个随机唯一ID生成系统](https://blog.twitter.com/2010/announcing-snowflake) + - [设计一个键值数据库](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [设计一个图片分享系统](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [设计一个推荐系统](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [设计一个URL缩短系统:来自上面的复制](http://www.hiredintech.com/system-design/the-system-design-process/) + - [设计一个缓存系统](https://web.archive.org/web/20220217064329/https://adayinthelifeof.nl/2011/02/06/memcache-internals/) -- [计算机体系结构:量化研究方法(第6版)](https://www.amazon.com/dp/0128119055) - - 更丰富、更新(2017年),但篇幅较长 -- [编程珠矶](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - 前几章介绍了解决编程问题(非常古老,甚至还用数据磁带)的巧妙解决方案,但这只是一个介绍。这是关于程序设计和体系结构的指南 ## 附加学习 我把它们加进来是为了让你成为更全方位的软件工程师,并且留意一些技术以及算法,让你拥有更大的工具箱。 - ### 编译器 - - [编译器的工作方式,约1分钟(视频)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - [Harvard CS50-编译器(视频)](https://www.youtube.com/watch?v=CSZLNYF4Klo) - [C ++(视频)](https://www.youtube.com/watch?v=twodd1KFfGk) @@ -1439,7 +1452,8 @@ - [Emacs 教程 (初学者 -第 3 部分- 表达式, 声明, ~/.emacs 文件和包机制](https://www.youtube.com/watch?v=paSgzPso-yc) - [Evil 模式: 或许, 我是怎样对 Emacs 路人转粉的 (视频)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) - [使用 Emacs 开发 C 程序](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) - - [(或许) 深度组织模式:管理结构 (视频)](https://www.youtube.com/watch?v=nsGYet02bEk) + - [Emacs 绝对初学者指南(David Wilson的视频)](https://www.youtube.com/watch?v=48JlgiBpw_I&t=0s) + - [Emacs 绝对初学者指南(David Wilson 批注)](https://systemcrafters.net/emacs-essentials/absolute-beginners-guide-to-emacs/) - ### Unix 命令行工具 - 下列内容包含优秀工具 @@ -1542,9 +1556,7 @@ - [Avro](https://avro.apache.org/) - ### A*搜索算法 - - [A 搜索算法](https://en.wikipedia.org/wiki/A*_search_algorithm) - - [A* 路径搜索教程(教程)](https://www.youtube.com/watch?v=KNXfSOx4eEE) - [A* 路径搜索(E01:算法解释)(视频)](https://www.youtube.com/watch?v=-L-WgKMFuhE) - ### 快速傅里叶变换 @@ -1578,22 +1590,36 @@ - ### 平衡查找树(Balanced search trees) - 掌握至少一种平衡查找树(并懂得如何实现): - - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的键。” —— Skiena - - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 + - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。 + 这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。 + 它可以自我管理,且会使用轮换来移除任何访问过根节点的键。” —— Skiena + - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。 + 虽然,通过我的阅读,我发现在面试中并不会被要求实现一棵平衡查找树。 + 但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后, + 我才发现伸展树的实现确实会使得各方面更为高效。 - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下: - 跳过删除函数,直接实现搜索和插入功能 - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据集当中。 - [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - **AVL 树** - - 实际中:我能告诉你的是,该种树并无太多的用途,但我能看到有用的地方在哪里:AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。 + - 实际中: + 我能告诉你的是,该种树并无太多的用途,但我能看到有用的地方在哪里: + AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。 + 它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。 + 只需要构建一次,就可以在不重新构造的情况下读取, + 适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。 - [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) - [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **伸展树** - - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。 + - 实际中: + 伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes + (字符串的一种替代品,用于存储长串的文本字符)、 + Windows NT(虚拟内存、网络及文件系统)等的实现。 - [CS 61B:伸展树(Splay trees)(视频)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) - MIT 教程:伸展树(Splay trees): - 该教程会过于学术,但请观看到最后的10分钟以确保掌握。 @@ -1601,7 +1627,14 @@ - **红黑树** - 这些是2-3棵树的翻译(请参见下文)。 - - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 内核所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,Collection HashMap也从原本用Linked List实现,储存特定元素的哈希码,改为用红黑树实现。 + - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。 + 这些时间值的保障不仅对时间敏感型应用有用,例如实时应用, + 还对在其他数据结构中块的构建非常有用, + 而这些数据结构都提供了最坏情况下的保障; + 例如,许多用于计算几何学的数据结构都可以基于红黑树, + 而目前 Linux 内核所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。 + 在 Java 8中,Collection HashMap也从原本用Linked List实现, + 储存特定元素的哈希码,改为用红黑树实现。 - [Aduni —— 算法 —— 课程4(该链接直接跳到开始部分)(视频)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) - [Aduni —— 算法 —— 课程5(视频)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - [黑树(Black Tree)](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) @@ -1609,14 +1642,19 @@ - [[Review] Red-Black Trees (playlist) in 30 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNqDI8qfOZgzbqahCUmUEin) - **2-3查找树** - - 实际中:2-3树的元素插入非常快速,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。 + - 实际中: + 2-3树的元素插入非常快速,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。 - 你会很少用到2-3树。这是因为,其实现过程中涉及到不同类型的节点。因此,人们更多地会选择红黑树。 - [2-3树的直感与定义(视频)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) - [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [2-3树(学生叙述)(视频)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - **2-3-4树 (亦称2-4树)** - - 实际中:对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。 + - 实际中: + 对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。 + 在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。 + 这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。 + 这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。 - [CS 61B Lecture 26:平衡查找树(视频)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) - [自底向上的2-4树(视频)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [自顶向下的2-4树(视频)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) @@ -1629,7 +1667,11 @@ - **B 树** - 有趣的是:为啥叫 B 仍然是一个神秘。因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者) - - 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 + - 实际中: + B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。 + 除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。 + 但存在着一个基本的问题, + 那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 - [B 树](https://en.wikipedia.org/wiki/B-tree) - [B 树数据结构](http://btechsmartclass.com/data_structures/b-trees.html) - [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) @@ -1640,10 +1682,10 @@ - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小) - [[Review] B-Trees (playlist) in 26 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNFPPv98DjTdD9X6UI9KMHz) + - ### k-D树 - 非常适合在矩形或更高维度的对象中查找点数 - 最适合k近邻 - - [Kd树(视频)](https://www.youtube.com/watch?v=W94M9D_yXKk) - [kNN K-d树算法(视频)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 跳表 @@ -1682,57 +1724,35 @@ - [分而治之: 凸包, 中值查找](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) - ### 离散数学 - - 查看下面的视频 + - [计算机科学70,001 - 2015年春季 - 离散数学与概率论](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + - [离散数学由Shai Simonson(19个视频)](https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t) + - [离散数学由印度理工学院罗帕尔分校NPTEL提供](https://nptel.ac.in/courses/106/106/106106183/) -- ### 机器学习(Machine Learning) - - 为什么学习机器学习? - - [谷歌如何将自己改造成一家「机器学习优先」公司?](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) - - [智能计算机系统的大规模深度学习 (视频)](https://www.youtube.com/watch?v=QSaZGT4-6EY) - - [Peter Norvig:深度学习和理解与软件工程和验证的对比](https://www.youtube.com/watch?v=X769cyzBNVw) - - [谷歌云机器学习工具(视频)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) - - [谷歌开发者机器学习清单 (Scikit Learn 和 Tensorflow) (视频)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) - - [Tensorflow (视频)](https://www.youtube.com/watch?v=oZikw5k_2FM) - - [Tensorflow 教程](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) - - [Python 实现神经网络实例教程(使用 Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) - - 课程: - - [很棒的初级课程:机器学习](https://www.coursera.org/learn/machine-learning) - - [视频教程](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) - - 看第 12-18 集复习线性代数(第 14 集和第 15 集是重复的) - - [机器学习中的神经网络](https://www.coursera.org/learn/neural-networks) - - [Google 深度学习微学位](https://www.udacity.com/course/deep-learning--ud730) - - [Google/Kaggle 机器学习工程师微学位](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) - - [无人驾驶工程师微学位](https://www.udacity.com/drive) - - 资源: - - 书籍: - - [Python 机器学习](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - - [Python 机器学习简介](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - - [软件工程师的机器学习](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - - Data School:http://www.dataschool.io/ - --- +--- ## 一些主题的额外内容 - - 我为前面提到的某些主题增加了一些额外的内容,之所以没有直接添加到前面,是因为这样很容易导致某个主题内容过多。毕竟你想在本世纪找到一份工作,对吧? -- SOLID + 我添加了这些内容来加强上面已经提出的一些观点,但是不想把它们放在上面,因为那样会太多。 + 对于一个主题来说,过度处理很容易。 + 你希望在本世纪被雇佣吗? - - [ ] [Bob Martin SOLID面向对象和敏捷设计的原理(视频)](https://www.youtube.com/watch?v=TMuno5RZNeE) - - [ ] S ── [单一责任原则](http://www.oodesign.com/single-responsibility-principle.html) | [对每个对象的单一责任](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) - - [更多](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) - - [ ] O ── [开放/封闭原则](http://www.oodesign.com/open-close-principle.html) | [在生产级别上,可以扩展对象,但不能修改对象](https://en.wikipedia.org/wiki/Open/closed_principle) - - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) - - [ ] L ── [Liskov 替换原则](http://www.oodesign.com/liskov-s-substitution-principle.html) | [基本类别和派生类别遵循“IS A”原则](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) - - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) - - [ ] I ── [接口隔离原理](http://www.oodesign.com/interface-segregation-principle.html) | 不应强迫客户端实现不使用的接口 - - [5分钟了解接口隔离原理(视频)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) - - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) - - [ ] D ── [依赖倒置原理](http://www.oodesign.com/dependency-inversion-principle.html) | 减少对象组合中的依赖性。 - - [依赖倒置原理为何如此重要?](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) - - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (视频)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] S - [单一职责原则 | 每个对象负责一个单一职责](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) + - [更多解释](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) + - [ ] O - [开闭原则](http://www.oodesign.com/open-close-principle.html) | [在生产级别上,对象应准备好进行扩展,但不进行修改](https://en.wikipedia.org/wiki/Open/closed_principle) + - [更多解释](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) + - [ ] L - [里氏替换原则](http://www.oodesign.com/liskov-s-substitution-principle.html) | [基类和派生类遵循‘是一个’原则](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) + - [更多解释](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) + - [ ] I - [接口隔离原则](http://www.oodesign.com/interface-segregation-principle.html) | 客户端不应被强制实现不使用的接口 + - [5分钟内的接口隔离原则(视频)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) + - [更多解释](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) + - [ ] D -[依赖反转原则](http://www.oodesign.com/dependency-inversion-principle.html) | 在对象的组合中减少依赖 + - [为何依赖反转原则如此重要](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) + - [更多解释](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) -- Union-Find + +- **Union-Find** - [概览](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) - [初级实践](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) - [树状结构](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) @@ -1766,7 +1786,6 @@ - [Simonson: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) - **字符串匹配** - - Rabin-Karp(视频) - [Rabin Karps 算法](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) - [预计算](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) @@ -1788,20 +1807,18 @@ - 斯坦福大学关于排序算法的视频: - [课程 15 | 编程抽象(视频)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) - [课程 16 | 编程抽象(视频)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) - - Shai Simonson 视频,[Aduni.org](http://www.aduni.org/): - [算法 - 排序 - 第二讲(视频)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) - [算法 - 排序2 - 第三讲(视频)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) - - Steven Skiena 关于排序的视频: - - [课程从 26:46 开始(视频)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) - - [课程从 27:40 开始(视频)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [课程从 35:00 开始(视频)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [课程从 23:50 开始(视频)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) + - [CSE373 2020 - 归并排序/快速排序(视频)](https://www.youtube.com/watch?v=jUf-UQ3a0kg&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=8) + - [CSE373 2020 - 线性排序(视频)](https://www.youtube.com/watch?v=0ksyQKmre84&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=9) + +- NAND 到 Tetris: [从第一原理构建现代计算机](https://www.coursera.org/learn/build-a-computer) ## 视频系列 - 坐下来享受一下吧。"netflix 和技能" :P +坐下来,尽情享受。 - [个人的动态规划问题列表 (都是短视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) @@ -1811,14 +1828,7 @@ - [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) -- [计算机科学 70, 001 - 2015 年春季 - 离散数学和概率理论](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) - -- [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t) - -- [离散数学(第一部分),Sarada Herke (5个视频)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - -- CSE373 - 算法分析 (25 个视频) - - [Skiena 的算法设计手册讲座](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) +- [Skiena讲座来自《算法设计手册》- CSE373 2020 - 算法分析(26个视频)](https://www.youtube.com/watch?v=22hwcnXIGgk&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=1) - [UC Berkeley 61B (2014 年春季): 数据结构 (25 个视频)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) @@ -1828,8 +1838,6 @@ - [OOSE:使用 UML 和 Java 进行软件开发 (21 个视频)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) -- [UC Berkeley CS 152: 计算机结构和工程 (20 个视频)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) - - [MIT 6.004: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) - [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) @@ -1868,6 +1876,11 @@ - [在线 CS 课程目录](https://github.com/open-source-society/computer-science) - [CS 课程目录 (一些是在线讲座)](https://github.com/prakhar1989/awesome-courses) +## 算法实现 + +- [普林斯顿大学的多算法实现](https://algs4.cs.princeton.edu/code) + + ## 论文 - [喜欢经典的论文?](https://www.cs.cmu.edu/~crary/819-f09/) @@ -1878,27 +1891,20 @@ - [2004: MapReduce: Simplified Data Processing on Large Clusters](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) - 大多被云数据流取代了? - [2006年:Bigtable:结构化数据的分布式存储系统](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [深入了解Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [2006年:针对松散耦合的分布式系统的Chubby Lock服务](https://research.google.com/archive/chubby-osdi06.pdf) - [2007年:Dynamo:亚马逊的高可用键值存储](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - Dynamo论文启动了NoSQL革命 - [2007: 每个程序员都应该知道的内存知识 (非常长,作者建议跳过某些章节来阅读)](https://www.akkadia.org/drepper/cpumemory.pdf) -- [2010年:Dapper,一个大型分布式系统跟踪基础结构](https://research.google.com/pubs/archive/36356.pdf) -- [2010年:Dremel:Web规模数据集的交互式分析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) -- [2012: Google 的 Colossus](https://www.wired.com/2012/07/google-colossus/) - - 没有论文 - 2012: AddressSanitizer: 快速的内存访问检查器: - [论文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) - [视频](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) - 2013: Spanner: Google 的分布式数据库: - [论文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) - [视频](https://www.usenix.org/node/170855) -- [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) -- [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) -- [2015: 大规模高可用: 构建 Google Ads 的数据基础设施](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) -- [2015: TensorFlow: 异构分布式系统上的大规模机器学习](http://download.tensorflow.org/paper/whitepaper2015.pdf ) -- [2015: 开发者应该如何搜索代码:用例学习](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) -- [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) +- [2015: Google的持续流水线](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) +- [2015: 大规模高可用性:构建Google广告数据基础设施](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) +- [2015: 开发人员如何搜索代码:一个案例研究](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) +- 更多论文: [1,000篇论文](https://github.com/0voice/computer_expert_paper) ## LICENSE diff --git a/translations/README-de.md b/translations/README-de.md index ad2a3b4..937a4b2 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -1367,8 +1367,9 @@ Graphen können genutzt werden, um damit viele verschiedene Probleme in der Info - [ ] Reihe mit kurzen 2-3 Minuten Videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Reihe mit kurzen 2-5 Minuten Videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Reihe mit kurzen 2-5 Minuten Videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1773,6 +1774,7 @@ Algorithmen Bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay Trees** - In der Praxis: diff --git a/translations/README-es.md b/translations/README-es.md index af5eebb..a85a5f7 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -1302,8 +1302,9 @@ Es bueno si quieres repasar frecuentemente. - [ ] Series de videos cortos sobre temas de 2-3 minutos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series de videos cortos sobre temas de 2-5 minutos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series de videos cortos sobre temas de 2-5 minutos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1627,6 +1628,7 @@ Es probable que estos temas no aparezcan en una entrevista, pero los añadí par - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Árboles biselados** - En práctica: diff --git a/translations/README-fa.md b/translations/README-fa.md index 3db8fcc..7cb3895 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -1181,8 +1181,9 @@ Choose one: - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1642,6 +1643,7 @@ Mock Interviews: - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/translations/README-fr.md b/translations/README-fr.md index 8099aa0..a7debf3 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -1275,8 +1275,9 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1683,6 +1684,7 @@ You're never really done. - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay trees** - In practice: diff --git a/translations/README-he.md b/translations/README-he.md index a2c1fa9..43ded72 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -1286,8 +1286,9 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] Series of 2-3 minutes short subject videos (23 videos) - [סרטונים](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [סרטונים](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [סרטונים](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1695,6 +1696,7 @@ You're never really done. - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay trees** - In practice: diff --git a/translations/README-hi.md b/translations/README-hi.md index 40882cc..520d340 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -1202,8 +1202,9 @@ Anki प्रारूप में मेरा फ्लैशकार्ड - [ ] 2-3 मिनट के लघु विषय वीडियो की श्रृंखला (23 वीडियो) - [वीडियो](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2-5 मिनट के लघु विषय वीडियो की श्रृंखला - Michael Sambol (40 वीडियो): - - [वीडियो](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] 2-5 मिनट के लघु विषय वीडियो की श्रृंखला - Michael Sambol (46 वीडियो): + - [वीडियो](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [सेजविक वीडियो - एल्गोरिदम I](https://www.coursera.org/learn/algorithms-part1) - [ ] [सेजविक वीडियो - एल्गोरिदम II](https://www.coursera.org/learn/algorithms-part2) @@ -1663,9 +1664,10 @@ Anki प्रारूप में मेरा फ्लैशकार्ड डेटा संरचनाओं के लिए आकर्षक जिसे एक बार बनाया जा सकता है और पुनर्निर्माण के बिना लोड किया जा सकता है, जैसे भाषा शब्दकोश (या प्रोग्राम डिक्शनरी, जैसे असेंबलर या दुभाषिया के ऑपकोड) - [MIT AVL ट्री / AVL सॉर्ट (वीडियो)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) - - [एवीएल पेड़ (वीडियो)](https://www.coursera.org/learn/data-structs/lecture/Qq5E0/avl-trees) + - [एवीएल पेड़ (वीडियो)](https://www.coursera.org/learn/data-structs/lecture/Qq5E0/avl-trees) - [एवीएल ट्री इंप्लीमेंटेशन (वीडियो)](https://www.coursera.org/learn/data-structs/lecture/PKEBC/avl-tree-implementation) - [स्प्लिट एंड मर्ज](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **स्प्ले ट्री** - प्रयोग में: diff --git a/translations/README-id.md b/translations/README-id.md index 47a7a2b..51e1b09 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -1200,8 +1200,9 @@ Graf (Graphs) dapat digunakan untuk merepresentasikan banyak masalah dalam ilmu - [ ] Seri video subjek pendek berdurasi 2-3 menit (23 video) - [Video](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Seri video subjek pendek berdurasi 2-5 menit - Michael Sambol (40 video): - - [Video](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Seri video subjek pendek berdurasi 2-5 menit - Michael Sambol (46 video): + - [Video](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Video Sedgewick - Algoritma I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Video Sedgewick - Algoritma II](https://www.coursera.org/learn/algorithms-part2) @@ -1605,6 +1606,7 @@ Anda tidak pernah benar-benar selesai. - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [Implementasi AVL Tree (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split Dan Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - Dalam praktek: diff --git a/translations/README-it.md b/translations/README-it.md index 0cc41c8..14a87f3 100644 --- a/translations/README-it.md +++ b/translations/README-it.md @@ -1208,8 +1208,9 @@ I grafi possono essere usati per rappresentare molti problemi in informatica, pe - [ ] Series of 2-3 minutes short subject video (23 video) - [video](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject video - Michael Sambol (40 video): - - [video](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject video - Michael Sambol (46 video): + - [video](https://www.youtube.com/@MichaelSambol) + - [code examples](https://github.com/msambol/dsa) - [ ] [Sedgewick video - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick video - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1674,6 +1675,7 @@ You're never really done. - [AVL Trees (Video in Inglese)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (Video in Inglese)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/translations/README-ja.md b/translations/README-ja.md index 888e118..18e0a40 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -1244,8 +1244,9 @@ Skienaの本(下記の書籍の節を参照)と面接の書籍 - [ ] 2〜3分短編ビデオシリーズ(23ビデオ) - [動画](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2〜5分の短編シリーズビデオ - Michael Sambol(40ビデオ) - - [動画](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] 2〜5分の短編シリーズビデオ - Michael Sambol(46ビデオ) + - [動画](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1635,6 +1636,7 @@ Skienaの本(下記の書籍の節を参照)と面接の書籍 - [ ] [AVL木(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL木実装(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [スプリットアンドマージ](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **スプレッド木**         - 実際には: diff --git a/translations/README-kh.md b/translations/README-kh.md index 0f35007..e6bca72 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -1266,8 +1266,9 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] Series of 2-3 minutes short subject videos (23 វីដេអូ) - [វីដេអូ](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 វីដេអូ): - - [វីដេអូ](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 វីដេអូ): + - [វីដេអូ](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [វីដេអូ Sedgewick - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [វីដេអូ Sedgewick - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1673,6 +1674,7 @@ Mock Interviews: - [AVL Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - ក្នុងការអនុវត្ត ៖ diff --git a/translations/README-ko.md b/translations/README-ko.md index 0ed3888..4d8a537 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -1285,8 +1285,9 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] 2-3분 분량의 주제별 짧은 영상 시리즈 (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2-5분 분량의 주제별 짧은 영상 시리즈 - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] 2-5분 분량의 주제별 짧은 영상 시리즈 - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1694,6 +1695,7 @@ Challenge repos: - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/translations/README-pl.md b/translations/README-pl.md index 080e890..98295aa 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -1239,8 +1239,9 @@ Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)] - [ ] Seria 2-3 minutowych, krótkich filmów tematycznych (23 wideo) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Seria 2–5 minutowych, krótkich filmów tematycznych - Michael Sambol (40 wideo): - - [Wideo](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Seria 2–5 minutowych, krótkich filmów tematycznych - Michael Sambol (46 wideo): + - [Wideo](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorytmy I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorytmy II](https://www.coursera.org/learn/algorithms-part2) @@ -1647,6 +1648,7 @@ Tak na prawdę nigdy nie skończyłeś. - [AVL Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (wideo)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index d52f353..69a3947 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -1308,8 +1308,9 @@ Você ganhará mais prática com grafos no livro do Skiena (veja a seção de li - [ ] Séries de vídeos curtos (2 - 3 minutos) sobre o assunto (23 vídeos) - [Vídeos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Séries de vídeos curtos (2 - 5 minutos) sobre o assunto - Michael Sambol (40 vídeos): - - [Vídeos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Séries de vídeos curtos (2 - 5 minutos) sobre o assunto - Michael Sambol (46 vídeos): + - [Vídeos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1654,6 +1655,7 @@ Esses tópicos provavelmente não aparecerão em uma entrevista, mas eu adicione - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) (Árvores AVl - vídeo) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) (Implementação de Árvores AVL - vídeo) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) (Dividir e Fundir) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Árvores Splay** - Ná prática: diff --git a/translations/README-ru.md b/translations/README-ru.md index cb45ba8..1fb7e91 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1288,8 +1288,9 @@ Google не возьмёт тебя на работу. - [ ] Серия 2-3 минутных короткие видео по темам (23 видео) - [Видео](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Серия коротких 2-5 минутных видео - Michael Sambol (40 видео): - - [Видео](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Серия коротких 2-5 минутных видео - Michael Sambol (46 видео): + - [Видео](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1687,6 +1688,7 @@ Google не возьмёт тебя на работу. - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay trees** - In practice: diff --git a/translations/README-th.md b/translations/README-th.md index 32263f0..3c507b3 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -1282,8 +1282,9 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1625,6 +1626,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay trees** - In practice: diff --git a/translations/README-tr.md b/translations/README-tr.md index 073c8ff..0b784ea 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -1254,8 +1254,9 @@ Graflar, bilgisayar bilimlerinde birçok sorunu temsil etmek için kullanılabil - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1677,6 +1678,7 @@ You're never really done. - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: diff --git a/translations/README-tw.md b/translations/README-tw.md index 8dc0e98..3508158 100644 --- a/translations/README-tw.md +++ b/translations/README-tw.md @@ -1232,8 +1232,9 @@ - [ ] 2-3分鐘快速複習影片系列(23個影片) - [影片](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2-5分鐘快速複習影片系列-Michael Sambol (40個影片) - - [影片](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] 2-5分鐘快速複習影片系列-Michael Sambol (46個影片) + - [影片](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1601,6 +1602,7 @@ Coding面試題目影片: - [AVL Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (影片)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **伸縮樹Splay tree** - 實際上: diff --git a/translations/README-uk.md b/translations/README-uk.md index bd46a4f..00c9464 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -1332,8 +1332,9 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] Series of 2-3 minutes short subject videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (46 videos): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1675,6 +1676,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay trees** - In practice: diff --git a/translations/README-ur.md b/translations/README-ur.md index 950a5dc..702cb98 100644 --- a/translations/README-ur.md +++ b/translations/README-ur.md @@ -13,13 +13,21 @@
ترجمہ: - + - [中文版本](translations/README-cn.md) - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) - [Polish](translations/README-pl.md) -- [Urdu](translations/README-ur.md) +- [繁體中文](translations/README-tw.md) +- [Japanese (日本語)](translations/README-ja.md) +- [Russian](translations/README-ru.md) +- [German](translations/README-de.md) +- [Bahasa Indonesia](translations/README-id.md) +- [ខ្មែរ - Khmer](translations/README-kh.md) +- [Uzbek](translations/README-uz.md) +- [Bulgarian](translations/README-bg.md) +- [বাংলা - Bangla](translations/README-bn.md)
@@ -27,19 +35,18 @@ - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) -- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) - [French](https://github.com/jwasham/coding-interview-university/issues/89) -- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) -- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) +- [Українська](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) -- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) - [Thai](https://github.com/jwasham/coding-interview-university/issues/156) - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) - [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) -- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) +- [Persian - Farsi](https://github.com/jwasham/coding-interview-university/issues/186) +- [Afrikaans](https://github.com/jwasham/coding-interview-university/issues/1164) +
@@ -57,40 +64,51 @@ ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -یہ **نئے سافٹ ویئر انجینئرز** یا سافٹ ویئر/ویب ڈویلپمنٹ سے سافٹ ویئر انجینئرنگ میں تبدیل ہونے والوں کے لیے ہے (جہاں کمپیوٹر سائنس کا علم درکار ہے)۔ اگر آپ کے پاس کئی سالوں کا تجربہ ہے اور آپ سافٹ ویئر انجینئرنگ کے کئی سالوں کے تجربے کا دعویٰ کر رہے ہیں تو ایک مشکل انٹرویو کی توقع کریں۔ +**شرط:** +* کوڈنگ کے ساتھ تھوڑا سا تجربہ (متغیرات، لوپس، فنکشنز وغیرہ) +* صبر +* وقت -اگر آپ کے پاس سافٹ ویئر/ویب ڈویلپمنٹ کا کئی سال کا تجربہ ہے، تو نوٹ کریں کہ بڑی سافٹ ویئر کمپنیاں جیسے گوگل، ایمیزون، فیس بک اور مائیکروسافٹ سافٹ ویئر انجینئرنگ کو سافٹ ویئر/ویب ڈویلپمنٹ سے مختلف سمجھتے ہیں، اور انہیں کمپیوٹر سائنس کے علم کی ضرورت ہوتی ہے۔ +نوٹ کریں کہ یہ **سافٹ ویئر انجینئرنگ** کے لیے مطالعہ کا منصوبہ ہے، ویب ڈویلپمنٹ کے لیے نہیں۔ بڑی سافٹ ویئر کمپنیاں جیسے گوگل، ایمیزون، +فیس بک اور مائیکروسافٹ سافٹ ویئر انجینئرنگ کو ویب ڈویلپمنٹ سے مختلف سمجھتے ہیں۔ مثال کے طور پر، ایمیزون کے پاس فرنٹ اینڈ انجینئرز (FEE) اور سافٹ ویئر ڈویلپمنٹ انجینئرز (SDE)ہیں۔ یہ 2 الگ الگ کردارہیں اوران کےلیے الگ الگ انٹرویوز ہیں۔ کیونکہ ہر ایک کی اپنی ضروریات ہیں۔ ان کمپنیوں کو سافٹ ویئر ڈویلپمنٹ / انجینئرنگ کےلے کمپیوٹر سائنس کا علم درکار ہوتا ہے۔ -اگر آپ ریلائیبلٹی انجینئر یا آپریشنز انجینئر بننا چاہتے ہیں تو اختیاری فہرست (نیٹ ورکنگ، سیکیورٹی) سے مزید مطالعہ کریں۔ +یونیورسٹی کے کمپیوٹر سائنس پروگرام میں سیکھنے کے لیے بہت کچھ ہے، لیکن انٹرویو کے لیے صرف 75% جاننا ہی کافی ہے، اس لیے میں یہاں صرف اتنا ہی احاطہ کرتا ہوں۔ +مکمل خود سیکھے جانے والے سی-ایس پروگرام کے لیے، میرے اسٹڈی پلان کے وسائل کامران احمد کے کمپیوٹر سائنس روڈ میپ میں شامل کیے گئے ہیں: https://roadmap.sh/computer-science --- ## مواد کی فہرست -- [یہ کیا ہے؟](#what-is-it) -- [اسے کیوں استعمال کریں؟](#why-use-it) -- [اسے کیسے استعمال کریں](#how-to-use-it) -- [اپنے آپ کو کم نہ سمجھیں](#dont-feel-you-arent-smart-enough) -- [ویڈیو مواد کے بارے میں](#about-video-resources) -- [انٹرویو کا عمل اور عام انٹرویو کی تیاری](#interview-process--general-interview-prep) -- [انٹرویو کے لیے ایک زبان کا انتخاب کریں۔](#pick-one-language-for-the-interview) -- [کتابوں کی فہرست](#book-list) -- [شروع کرنے سے پہلے](#before-you-get-started) -- [جو آپ نہیں سیکھیں گے۔](#what-you-wont-see-covered) -- [پہلے سے ضروری علم](#prerequisite-knowledge) -- [روزانہ کی منصوبہ بندی](#the-daily-plan) -- [الگورتھمک پیچیدگی / بگ-او / اسیمپٹوٹک تجزیہ(Algorithmic complexity / Big-O / Asymptotic analysis)](#algorithmic-complexity--big-o--asymptotic-analysis) -- [ڈیٹا سٹرکچرز(Data Structures)](#data-structures) +### مطالعہ کا منصوبہ + +- [یہ کیا ہے؟](#یہ-کیا-ہے) +- [اسے کیوں استعمال کریں؟](#اسے-کیوں-استعمال-کریں) +- [اسے کیسے استعمال کریں](#اسے-کیسے-استعمال-کریں) +- [اپنے آپ کو کم نہ سمجھیں](#اپنے-آپ-کو-کم-مت-سمجھو) +- [ویڈیو مواد کے بارے میں](#ویڈیو-وسائل-کے-بارے-میں-ایک-نوٹ) +- [انٹرویو کے لیے ایک پروگرامنگ زبان کا انتخاب کریں۔](#ایک-پروگرامنگ-زبان-کا-انتخاب) +- [ڈیٹا سٹرکچرز اور الگورتھم کے لیے کتابیں](#ڈیٹا-سٹرکچرز-اور-الگورتھم-کے-لیے-کتابیں) +- [انٹرویو کی تیاری کی کتابیں](#انٹرویو-کی-تیاری-کی-کتابیں) +- [میری غلطیاں مت کرنا](#میری-غلطیاں-مت-کرنا) +- [جو آپ نہیں سیکھیں گے۔](#جو-آپ-نہیں-سیکھیں-گے) +- [روزانہ کی منصوبہ بندی](#روزانہ-کا-منصوبہ) +- [کوڈنگ سوال کی مشق](#کوڈنگ-سوال-کی-مشق) +- [کوڈنگ چیلنجز](#کوڈنگ-کے-سوالاتمسائل) + +### مطالعہ کے موضوعات + +- [الگورتھمک پیچیدگی / بگ-او / اسیمپٹوٹک تجزیہ(Algorithmic complexity / Big-O / Asymptotic analysis)](#الگورتھمک-پیچیدگی--بگ-او--اسیمپٹوٹک-تجزیہ) +- [ڈیٹا سٹرکچرز(Data Structures)](#ڈیٹا-سٹرکچرز) - [آرے (Arrays)](#arrays) - [لنکڈلسٹ (Linked Lists)](#linked-lists) - [سٹیک (Stack)](#stack) - [کیو (Queue)](#queue) - [ہیش ٹیبل (Hash table)](#hash-table) -- [مزید معلومات](#more-knowledge) +- [مزید معلومات](#مزید-معلومات) - [بینری سرچ (Binary search)](#binary-search) - [بٹ وائزاپریشنز (Bitwise operations)](#bitwise-operations) - [ٹریز (Trees)](#trees) - - [ٹریز - نوٹس اور پس منظر](#trees---notes--background) + - [ٹریز - تعارف](#trees---intro) - [بینری سرچ ٹریز (Binary search trees: BSTs)](#binary-search-trees-bsts) - [ہیپ / پریاٹری کیو / بینری ہیپ (Heap / Priority Queue / Binary Heap)](#heap--priority-queue--binary-heap) - بیلنسڈ سرچ ٹریز - عمومی جائزہ (balanced search trees - general concept, not details) @@ -107,38 +125,39 @@ - اڈجیسنسی میٹرکس (adjacency matrix) - اڈجیسنسی لسٹ (adjacency list) - ٹریورسل (traversals: BFS, DFS) -- [اس سے بھی زیادہ معلومات](#even-more-knowledge) +- [اس سے بھی زیادہ معلومات](#اس-سے-بھی-زیادہ-معلومات) - [رکرین / تکرار (Recursion)](#recursion) - [ڈینیمک پروگرامنگ](#dynamic-programming) - - [ابجیکٹ پروگرامنگ](#object-oriented-programming) - [ڈیزائن پیٹرن](#design-patterns) - [امتزاج (n منتخب k) اور امکان](#combinatorics-n-choose-k--probability) - [تخمینہ الگورتھم ،NPاورNP-مکمل (NP, NP-Complete and Approximation Algorithms)](#np-np-complete-and-approximation-algorithms) + - [How computers process a program](#how-computers-process-a-program) - [کیچز](#caches) - [پروسسزاور تھریڈز](#processes-and-threads) - [ٹیسٹنگ](#testing) - - [شیڈولنگ](#scheduling) - [سٹرنگ تلاش کرنا اور تبدیل کرنا](#string-searching--manipulations) - [ٹرایز (Tries)](#tries) - [اعشاریہ کے ساتھ نمبر](#floating-point-numbers) - [یونیکوڈ](#unicode) - [اینڈیاننس](#endianness) - [نیٹ ورکنگ](#networking) -- [سسٹم ڈیزائن، اسکیل ایبلٹی، ڈیٹا ہینڈلنگ](#system-design-scalability-data-handling) (اگر آپ کو 4 سال سے زیادہ کا تجربہ ہے۔) -- [حتمی جائزہ](#final-review) -- [کوڈنگ سوال کی مشق](#coding-question-practice) -- [کوڈنگ کی مشقیں/چیلنجز](#coding-exerciseschallenges) -- [ایک بار جب آپ انٹرویو کے قریب پہنچ جائیں۔](#once-youre-closer-to-the-interview) -- [آپ کا رزیومے](#your-resume) -- [اپنے انٹرویو لینے والے کی طرح سوچیں۔](#be-thinking-of-for-when-the-interview-comes) -- [انٹرویو لینے والے کے لیے سوالات](#have-questions-for-the-interviewer) -- [ایک بار جب آپ کو نوکری مل جائے گی۔](#once-youve-got-the-job) +- [حتمی جائزہ](#حتمی-جائزہ) + +### ملازمت حاصل کرنا + +- [اپنا ریزومےاپ ڈیٹ کریں](#اپنے-ریزیومے-کو-اپ-ڈیٹ-کریں) +- [نوکری تلاش کریں](#find-a-job) +- [انٹرویو کا عمل اور عام انٹرویو کی تیاری](#انٹرویو-کا-عمل-اور-عام-انٹرویو-کی-تیاری) +- [اپنے انٹرویو لینے والے کی طرح سوچیں۔](#اپنے-انٹرویو-لینے-والے-کی-طرح-سوچیں) +- [انٹرویو لینے والے کے لیے سوالات](#انٹرویو-لینے-والے-کے-لیے-سوالات) +- [ایک بار جب آپ کو نوکری مل جائے گی۔](#ایک-بار-جب-آپ-کو-نوکری-مل-جائے-گی) ---------------- ذیل کی چیزیں اختیاری ہیں ---------------- -## اضافی مواد +## اختیاری اضافی عنوانات اور مواد - [اضافی کتابیں](#additional-books) +- [سسٹم ڈیزائن، اسکیل ایبلٹی، ڈیٹا ہینڈلنگ](#system-design-scalability-data-handling) (اگر آپ کو 4 سال سے زیادہ کا تجربہ ہے۔) - [اضافی معلومات](#additional-learning) - [کمپائلر](#compilers) - [ایماکس اور vi(m)](#emacs-and-vim) @@ -176,7 +195,6 @@ - [لینیرپروگرامنگ](#linear-programming-videos) - [جیومیٹری، کنویکس ہل](#geometry-convex-hull-videos) - [مجرد ریاضی](#discrete-math) - - [مشین لرننگ](#machine-learning) - [کچھ مضامین پر اضافی تفصیل](#additional-detail-on-some-subjects) - [ویڈیو سیریز](#video-series) - [کمپیوٹر سائنس کورسز](#computer-science-courses) @@ -184,327 +202,377 @@ --- -## Why use it? +## اسے کیوں استعمال کریں؟ -When I started this project, I didn't know a stack from a heap, didn't know Big-O anything, anything about trees, or how to -traverse a graph. If I had to code a sorting algorithm, I can tell ya it wouldn't have been very good. -Every data structure I've ever used was built into the language, and I didn't know how they worked -under the hood at all. I've never had to manage memory unless a process I was running would give an "out of -memory" error, and then I'd have to find a workaround. I've used a few multidimensional arrays in my life and -thousands of associative arrays, but I've never created data structures from scratch. +اگر آپ کسی بڑی کمپنی میں سافٹ ویئر انجینئر کے طور پر کام کرنا چاہتے ہیں تو یہ وہ چیزیں ہیں جو آپ کو جاننا ہوں گی۔ -It's a long plan. It may take you months. If you are familiar with a lot of this already it will take you a lot less time. +اگر آپ میری طرح کمپیوٹر سائنس میں ڈگری حاصل کرنے سے محروم رہ گئے تو اس سے آپ کی زندگی کے چار سال بچ جائیں گے۔ -## How to use it +جب میں نے یہ پروجیکٹ شروع کیا تھا، مجھےہیپ ، بگ-O یا ٹریز جیسا کچھ معلوم نہیں تھا،نہ ہی یہ معلوم تھا کہ گراف کے ساتھ کام کیسے کرتےہیں. اگر مجھے سورٹنگ الگورتھم کو کوڈ کرنا ہوتا تو میں آپ کو بتا سکتا ہوں کہ یہ میے لیے بہت مشکل کام تھا۔ +ہر ڈیٹا سٹرکچر جو میں نے کبھی استعمال کیا تھا مجھے نہیں معلوم تھا کہ وہ کیسے کام کرتاہے۔ مجھے کبھی بھی میموری کو سنبھالنے کی ضرورت نہیں تھی جب تک کہ میں جس پروسس کو چلا رہا ہوں اسے "میموری آؤٹ" کا ایرر نہیں ملتا تھا۔ میں نے اپنی زندگی میں چند کثیر جہتی اریزاورہزاروں ایسوسی ایٹیو ارےکا استعمال کیا، لیکن میں نے کبھی بھی شروع سے ڈیٹا سٹرکچرز نہیں بنائے۔ -Everything below is an outline, and you should tackle the items in order from top to bottom. +یہ ایک طویل منصوبہ ہے۔ اس میں آپ کو مہینے لگ سکتے ہیں۔ اگر آپ پہلے ہی اس میں سے بہت کچھ سے واقف ہیں تو اس میں آپ کو بہت کم وقت لگے گا۔ -I'm using Github's special markdown flavor, including tasks lists to check progress. +## اسے کیسے استعمال کریں -**Create a new branch so you can check items like this, just put an x in the brackets: [x]** +نیچے دی گئی ہر چیز ایک خاکہ ہے، اور آپ کو اشیاء کو اوپر سے نیچے تک ترتیب سے نمٹنا چاہیے۔ +میں GitHub کا خصوصی مارک ڈاؤن ورژن استعمال کر رہا ہوں، جس میں پیش رفت کو ٹریک کرنے کے لیے ٹاسک کی فہرست شامل ہے۔ + - [GitHub-flavored markdown کے بارے میں مزید](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) - Fork a branch and follow the commands below +### اگر آپ گٹ استعمال نہیں کرنا چاہتے -`git checkout -b progress` +اس صفحہ پر، اوپر کے قریب کوڈ(Code) بٹن پر کلک کریں، پھر "زپ ڈاؤن لوڈ کریں(Download Zip)" پر کلک کریں۔ فائل کو ان زپ کریں اور آپ ٹیکسٹ فائلوں کے ساتھ کام کر سکتے ہیں۔ -`git remote add jwasham https://github.com/jwasham/coding-interview-university` +اگر آپ ایک کوڈ ایڈیٹر میں کھول رہے ہیں جو مارک ڈاؤن کو سمجھتا ہے، تو آپ کو ہر چیز اچھی طرح سے فارمیٹ کی ہوئی نظر آئے گی۔ -`git fetch --all` +![ریپو کو زپ فائل کے طور پر کیسے ڈاؤن لوڈ کریں۔](https://d3j2pkmjtin6ou.cloudfront.net/how-to-download-as-zip.png) - Mark all boxes with X after you completed your changes +### اگر آپ گٹ کے ساتھ کام کر سکتے ہیں -`git add .` +ایک نئی برانچ بنائیں تاکہ آپ اس طرح کے آئٹمز کو چیک کر سکیں، صرف بریکٹ میں ایک x لگائیں: [x] -`git commit -m "Marked x"` + ۱. ***گٹ ہب (GitHub) ریپو*** `https://github.com/jwasham/coding-interview-university` کوفورک بٹن پر کلک کرکے فورک کریں۔ -`git rebase jwasham/master` + ![GitHub ریپو کو فورک کریں:](https://d3j2pkmjtin6ou.cloudfront.net/fork-button.png) -`git push --force` +۲. اپنی لوکل ریپو پر کلون کریں: -[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + ``` + git clone git@github.com:/coding-interview-university.git + cd coding-interview-university + git checkout -b progress + git remote add jwasham https://github.com/jwasham/coding-interview-university + git fetch --all + ``` +۳. اپنی تبدیلیاں مکمل کرنے کے بعد تمام خانوں کو X کے ساتھ نشان زد کریں: -## Don't feel you aren't smart enough + ``` + git add . + git commit -m "Marked x" + git rebase jwasham/main + git push --set-upstream origin progress + git push --force + ``` -- Successful software engineers are smart, but many have an insecurity that they aren't smart enough. -- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) -- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) +## اپنے آپ کو کم مت سمجھو -## About Video Resources +- کامیاب سافٹ ویئر انجینئرز ہوشیار ہوتے ہیں، لیکن بہت سے لوگوں کو یہ عدم تحفظ ہوتا ہے کہ وہ اتنے ہوشیار نہیں ہیں۔ +- مندرجہ ذیل ویڈیوز آپ کو اس عدم تحفظ پر قابو پانے میں مدد کر سکتی ہیں: + - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) + - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) -Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. -Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. +## ویڈیو وسائل کے بارے میں ایک نوٹ - I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. - I like using university lectures. +کچھ ویڈیوز صرف Coursera یا EdX کلاس میں داخلہ لے کر دستیاب ہیں۔ یہ MOOCs کہلاتے ہیں۔ +بعض اوقات کلاسز سیشن میں نہیں ہوتیں اس لیے آپ کو چند ماہ انتظار کرنا پڑتا ہے، اس لیے آپ کو رسائی نہیں ہوتی۔ +آن لائن کورس کے وسائل کو مفت اور ہمیشہ دستیاب عوامی ذرائع سے تبدیل کرنا بہت اچھا ہوگا، جیسے یوٹیوب ویڈیوز (ترجیحی طور پر یونیورسٹی کے لیکچرز)، تاکہ آپ لوگ کسی بھی وقت ان کا مطالعہ کر سکیں، بجاے کہ صرف اس وقت کے جب ایک مخصوص آن لائن کورس سیشن میں ہو۔ -## Interview Process & General Interview Prep +## ایک پروگرامنگ زبان کا انتخاب -- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) -- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) -- [ ] How to Get a Job at the Big 4: - - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) -- [ ] Cracking The Coding Interview Set 1: - - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) -- [ ] Cracking the Facebook Coding Interview - - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) -- [ ] Prep Course: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. - - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - A free Python centric data structures and algorithms course. - - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. +آپ جو کوڈنگ انٹرویوز کرتے ہیں اس کے لیے آپ کو پروگرامنگ لینگویج کا انتخاب کرنا ہوگا، +لیکن آپ کو ایک ایسی زبان بھی تلاش کرنے کی ضرورت ہوگی جسے آپ کمپیوٹر سائنس کے تصورات کا مطالعہ کرنے کے لیے استعمال کر سکیں۔ -## Pick One Language for the Interview +ترجیحی طور پر زبان ایک ہی ہونی چاہیے، تانکہ آپ کو صرف ایک میں مہارت حاصل کرنے کی ضرورت ہو۔ -You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: +### اس اسٹڈی پلان کے لیے -- C++ -- Java -- Python +جب میں نے مطالعہ کا منصوبہ بنایا تو میں نے اس کے لیے 2 زبانیں استعمال کیں: C اور Python -You could also use these, but read around first. There may be caveats: +* سی (C): نچلی سطح کی زبان۔ آپ کو پوائنٹرز اور میموری ایلوکیشن/ڈی ایلوکیشن سے نمٹنے کی اجازت دیتا ہے، تاکہ آپ اپنی خون میں ڈیٹا سٹرکچر اور الگورتھم کو محسوس کریں۔ پائتھون یا جاوا جیسی اعلیٰ سطح کی زبانوں میں، یہ آپ سے پوشیدہ ہیں۔ روزمرہ کے کام میں، یہ بہت اچھا ہے، لیکن جب آپ یہ سیکھ رہے ہیں کہ یہ نچلے درجے کے ڈیٹا سٹرکچر کیسے بنائے جاتے ہیں، تو جڑ کے قریب محسوس کرنا بہت اچھا ہے۔ + - سی ہر جگہ ہے۔ جب آپ مطالعہ کر رہے ہوں گے تو آپ کو کتابوں، لیکچرز، ویڈیوز، *ہر جگہ* میں مثالیں نظر آئیں گی۔ + - [سی پروگرامنگ لینگویج، دوسرا ایڈیشن (The C Programming Language, 2nd Edition)](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - یہ ایک مختصر کتاب ہے، لیکن یہ آپ کو C زبان پر بہت اچھا کنٹرول دے گی اور اگر آپ اس پر تھوڑی سی مشق کریں گے تو آپ جلد مہارت حاصل کر لیں گے۔ C کو سمجھنا آپ کو یہ سمجھنے میں مدد کرتا ہے کہ پروگرام اور میموری کیسے کام کرتے ہیں۔ + - آپ کو کتاب کی بہت گہرائی میں جانے کی ضرورت نہیں ہے (نہ ہی اسے ختم کرنے کی)۔ بس اتنی مہارت حاصل کر لیں کے آپ کو C میں پڑھنے اور لکھنے میں آسانی ہو۔ + - [کتاب میں موجود سوالات کے جوابات](https://github.com/lekkas/c-algorithms) +* پائتھون(Python): جدید اور اظہار کرنے میں بہت آسان، میں نے یہ سیکھی کیونکہ یہ بہت مفید ہے اور مجھے انٹرویو میں کم کوڈ لکھنے میں مدد دیتی ہے۔ -- JavaScript -- Ruby +یہ میری ترجیح ہے۔ تم وہی کرو جو تمہیں پسند ہو۔ -Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) +ہو سکتا ہے آپ کو اس کی ضرورت نہ ہو، لیکن نئی زبان سیکھنے کے لیے یہاں کچھ سائٹیں ہیں: +- [Exercism](https://exercism.org/tracks) +- [Codewars](http://www.codewars.com) +- [HackerEarth](https://www.hackerearth.com/for-developers/) +- [Scaler Topics (Java, C++)](https://www.scaler.com/topics/) -You need to be very comfortable in the language and be knowledgeable. +### آپ کے کوڈنگ انٹرویو کے لیے -Read more about choices: -- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ -- http://blog.codingforinterviews.com/best-programming-language-jobs/ +آپ انٹرویو کا کوڈنگ حصہ کرنے کے لیے ایسی زبان استعمال کر سکتے ہیں جس میں آپ کو آسانی ہو، لیکن بڑی کمپنیوں کے لیے یہ بہترین انتخاب ہیں: -[See language resources here](programming-language-resources.md) +- سی++ (C++) +- جاوا (Java) +- پائتھون (Python) -You'll see some C, C++, and Python learning included below, because I'm learning. There are a few books involved, see the bottom. +آپ مندرجہ ذیل کو بھی استعمال کرسکتے ہیں لیکن پہلے پڑھ سکتے ہیں۔ انتباہات ہو سکتے ہیں: -## Book List +- جاوا اسکرپٹ (JavaScript) +- روبی (Ruby) -This is a shorter list than what I used. This is abbreviated to save you time. +یہاں ایک مضمون ہے جو میں نے انٹرویو کے لیے زبان کے انتخاب کے بارے میں لکھا تھا: +[کوڈنگ انٹرویو کے لیے ایک زبان چنیں](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/). +یہ اصل مضمون ہے جس پر میری پوسٹ مبنی تھی: [انٹرویوز کے لیے پروگرامنگ لینگویج کا انتخاب](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/) -### Interview Prep +آپ کو زبان میں بہت مہارت اور علم رکھنے کی ضرورت ہے۔ -- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - answers in C++ and Java - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java +انتخاب کے بارے میں مزید پڑھیں: +- [اپنے کوڈنگ انٹرویو کے لیے صحیح زبان کا انتخاب کریں](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) -### If you have tons of extra time: +[زبان سے متعلق وسائل یہاں دیکھیں](programming-language-resources.md) -Choose one: +## ڈیٹا سٹرکچرز اور الگورتھم کے لیے کتابیں -- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) -- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) -- [ ] Elements of Programming Interviews (Java version) - - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) +یہ کتاب کمپیوٹر سائنس کے لیے آپ کی بنیاد بنائے گی۔ -### Language Specific +صرف ایک کا انتخاب کریں، ایسی زبان میں جس میں آپ کو مہارت حاصل ہو۔ آپ کو بہت زیادہ پڑھنا اور کوڈنگ کرنا ہوگی۔ -**You need to choose a language for the interview (see above).** +### سی (C) -Here are my recommendations by language. I don't have resources for all languages. I welcome additions. +- [سی میں الگورتھم، حصے 1-5 (بنڈل)، تیسرا ایڈیشن](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080) + - بنیادی باتیں، ڈیٹا سٹرکچر، سارٹنگ، تلاش کرنا، اور گراف الگورتھم -If you read through one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. -**You can skip all the video lectures in this project**, unless you'd like a review. +### پا ئیتھون (Python) -[Additional language-specific resources here.](programming-language-resources.md) +- [پا ئیتھون میں ڈیٹا کے سٹرکچر اور الگورتھم](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - مصنف Goodrich, Tamassia, Goldwasser + - مجھے یہ کتاب پسند ہے۔ اس نے ہر چیز کا احاطہ کیا ہے۔ + - پائتھون کے کوڈ + - میری چمکتی ہوئی کتاب کی رپورٹ: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ -### C++ +### جاوا (Java) -I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. +تمھارا انتخاب: -- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) - -If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. - -### Java - -- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!) on coursera: +- Goodrich, Tamassia, Goldwasser + - [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) +- Sedgewick and Wayne: + - [Algorithms](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - مفت کورسیرا کورس جو کتاب کا احاطہ کرتا ہے (مصنفین کے ذریعہ پڑھایا گیا): - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) -OR: +### سی++ (++C) -- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. +تمھارا انتخاب:: -### Python +- Goodrich, Tamassia, and Mount + - [Data Structures and Algorithms in C++, 2nd Edition](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275) +- Sedgewick and Wayne + - [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) + - [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. - - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ +## انٹرویو کی تیاری کی کتابیں +آپ کو ان میں سے بہت زیادہ خریدنے کی ضرورت نہیں ہے۔ ایمانداری سے "کریکنگ دی کوڈنگ انٹرویو(Cracking the Coding Interview)" شاید کافی ہے، +لیکن میں نے خود کو مزید مشق دینے کے لیے بہت کچھ خریدا۔ لیکن میں ہمیشہ بہت زیادہ کرتا ہوں۔ -## Before you Get Started +میں نے یہ دونوں خریدے ہیں۔ انہوں نے مجھے کافی مشق دی۔ -This list grew over many months, and yes, it kind of got out of hand. +- [پروگرامنگ انٹرویوز کا انکشاف: انٹرویو کے ذریعے اپنے راستے کی کوڈنگ، 4th ایڈیشن](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - سی++ (++C) اور جاوا (Java) میں جوابات + - کوڈنگ انٹرویو کو کریک کرنے کے لیے یہ ایک اچھی شروعات ہے۔ + - زیادہ مشکل نہیں۔ زیادہ تر مسائل اس سے آسان ہوسکتے ہیں جو آپ انٹرویو میں دیکھیں گے (اس سے جو میں نے پڑھا ہے) +- [کریکنگ دی کوڈنگ انٹرویو، چھٹا ایڈیشن](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - جاوا میں جوابات -Here are some mistakes I made so you'll have a better experience. +### اگر آپ کے پاس بہت زیادہ وقت ہے: -### 1. You Won't Remember it All +ایک کا انتخاب کرو: -I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going -through my notes and making flashcards so I could review. +- [پروگرامنگ انٹرویوز کے عناصر (C++ ورژن)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [پا ئیتھون میں پروگرامنگ انٹرویوز کے عناصر](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [پروگرامنگ انٹرویوز کے عناصر (جاوا ورژن)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [ساتھی پروجیکٹ - کتاب میں ہر مسئلے کے لیے ٹیسٹ کیسز](https://github.com/gardncl/elements-of-programming-interviews) -Read please so you won't make my mistakes: +## میری غلطیاں مت کرنا -[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). +یہ فہرست کئی مہینوں میں بڑھی، اور ہاں، یہ ہاتھ سے نکل گئی۔ -A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) +یہ کچھ غلطیاں ہیں جو میں نے کی تھی۔ تو آپ کو ایک بہتر تجربہ ملے گا۔ اور آپ مہینوں کا وقت بچائیں گے۔ -### 2. Use Flashcards +### 1. آپ سب یادنہیں رکھ سکیں گے -To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code. -Each card has different formatting. +میں نے گھنٹوں کی ویڈیوز دیکھی اور کافی نوٹ لیے، اور مہینوں بعد مجھے بہت کچھ یاد نہیں تھا۔ میں نے 3 دن گزارے، اپنے نوٹس پڑھے اور فلیش کارڈز بنائے، تاکہ میں جائزہ لے سکوں۔ مجھے اس سارے علم کی ضرورت نہیں تھی۔ -I made a mobile-first website so I could review on my phone and tablet, wherever I am. +براہ کرم، پڑھیں تاکہ آپ میری غلطی نہ کریں: -Make your own for free: +[کمپیوٹر سائنس کا علم برقرار رکھنا](https://startupnextdoor.com/retaining-computer-science-knowledge/). -- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) -- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): -- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): +### 2. فلیش کارڈز استعمال کریں -Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required. +اس مسئلے کو حل کرنے کے لیے، میں نے ایک چھوٹی سی فلیش کارڈز سائٹ بنائی جہاں میں 2 اقسام کے فلیش کارڈز شامل کر سکتا ہوں: جنرل اور کوڈ۔ +ہر کارڈ کی فارمیٹنگ مختلف ہوتی ہے۔ میں نے ایک موبائل مسابقتی ویب سائٹ بنائی ہے، تاکہ میں اپنے فون یا ٹیبلیٹ پر جہاں بھی ہوں، جائزہ لے سکوں۔ -**Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the -same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in -your brain. +اپنےلیے مفت میں بنائیں: -An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. +- [فلیش کارڈز سائٹ ریپو](https://github.com/jwasham/computer-science-flash-cards) -My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) +**میں اپنے فلیش کارڈز استعمال کرنے کا مشورہ نہیں دیتا۔** یہ بہت زیادہ ہیں اور ان میں سے زیادہ تر چیزیں ایسی ہیں جن کی آپ کو ضرورت نہیں ہے۔ -### 3. Start doing coding interview questions while you're learning data structures and algorithms, +لیکن اگر آپ میری بات نہیں سننا چاہتے، تو آپ یہاں جائیں: +- [میرے فلیش کارڈز کا ڈیٹا بیس (1200 کارڈز)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): +- [میرے فلیش کارڈز کا ڈیٹا بیس (انتہائی - 1800 کارڈز)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db): -You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, -and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding -linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, -or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, -but how you apply the knowledge. There are several books and sites I recommend. -See here for more: [Coding Question Practice](#coding-question-practice) +ذہن میں رکھیں کہ میں اوور بورڈ گیا اور میرے جو کارڈز ہیں ان میں اسمبلی لینگویج اور پائیتھون کی چھوٹی معلومات سے لے کر مشین لرننگ اور اعدادوشمار تک ہر چیز کا احاطہ کیا گیا ہے۔ +جو کے ضرورت سے بہت زیادہ ہے۔ -### 4. Review, review, review +**فلیش کارڈز پر نوٹ:** پہلی بار جب آپ پہچانیں گے کہ آپ کو جواب معلوم ہے تو اسے معلوم کے طور پر نشان زد نہ کریں۔ایک ہی کارڈ دیکھیں + اور اس کا کئی بار صحیح جواب دیں اس سے پہلے کہ آپ واقعی اسے نشان زدہ کریں۔ تکرار اس علم کو آپ کا دماغ کی مزید گہرائی میں اتار دے گی۔ -I keep a set of cheat sheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time. +میری فلیش کارڈ سائٹ کو استعمال کرنے کا ایک متبادل ہے [Anki](http://ankisrs.net/)، جو مجھے متعدد بار تجویز کیا گیا ہے۔ +یہ آپ کو یاد رکھنے میں مدد کے لیے تکرار کا نظام استعمال کرتا ہے۔ یہ صارف دوست ہے، تمام پلیٹ فارمز پر دستیاب ہے اور اس میں کلاؤڈ سنک سسٹم ہے۔ +ای-اہ-ایس (iOS) پر اس کی قیمت $25 ہے لیکن دوسرے پلیٹ فارمز پر مفت ہے۔ -Take a break from programming problems for a half hour and go through your flashcards. +انکی (Anki)فارمیٹ میں میرا فلیش کارڈ ڈیٹا بیس: https://ankiweb.net/shared/info/25173560 (شکریہ [@xiewenya](https://github.com/xiewenya)). -### 5. Focus +کچھ طلباء نے سفید جگہ کے ساتھ فارمیٹنگ کے مسائل کا ذکر کیا ہے جنہیں درج ذیل کام کرکے حل کیا جا سکتا ہے: ڈیک کھولیں، کارڈ میں ترمیم کریں، کارڈز پر کلک کریں، "اسٹائلنگ" ریڈیو بٹن کو منتخب کریں، کارڈ کی کلاس میں ";white-space: pre" ممبر کو شامل کریں۔ -There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music -without lyrics and you'll be able to focus pretty well. +### 3. جب آپ سیکھ رہے ہوں تو کوڈنگ انٹرویو کے سوالات کریں -## What you won't see covered +یہ بہت اہم ہے. -These are prevalent technologies but not part of this study plan: +جب آپ ڈیٹا سٹرکچر اور الگورتھم سیکھ رہے ہوں تو انٹرویو کے سوالات کو کوڈنگ کرنا شروع کریں۔ -- SQL -- Javascript -- HTML, CSS, and other front-end technologies +آپ جو سیکھ رہے ہیں اسے مسائل کو حل کرنے کے لیے لاگو کرنے کی ضرورت ہے، ورنہ آپ بھول جائیں گے۔ میں نے یہ غلطی کی۔ -## The Daily Plan +ایک بار جب آپ نے کوئی موضوع سیکھ لیا، اور اس میں کسی حد تک مہارت محسوس کریں، مثال کے طور پر، **لنکڈلسٹ**: +1. ان میں سے ایک کھولیں [کوڈنگ انٹرویو کی کتابیں](#interview-prep-books) (یا مندرجہ ذیل کوڈنگ سوالات ویب سائٹس) +2. لنکڈلسٹ سے متعلق 2 یا 3 سوالات کریں۔ +3. اگلے موضوع کی طرف بڑھیں۔ +4. بعد میں، واپس جائیں اور لنکڈ لسٹ کے مزید 2 یا 3 سوالات کریں۔ +5. یہ ہر نئے موضوع کے ساتھ کریں جو آپ سیکھتے ہیں۔ -Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement. +**جب آپ یہ سب چیزیں سیکھ رہے ہوں تو سوالات کرتے رہیں، اس کے بعد نہیں۔** -Each day I take one subject from the list below, watch videos about that subject, and write an implementation in: -- C - using structs and functions that take a struct * and something else as args. -- C++ - without using built-in types -- C++ - using built-in types, like STL's std::list for a linked list -- Python - using built-in types (to keep practicing Python) -- and write tests to ensure I'm doing it right, sometimes just using simple assert() statements -- You may do Java or something else, this is just my thing. +آپ کو علم کی وجہ سے نوکری پر نہیں رکھا جا رہا ہے، بلکہ آپ کو اس لیے رکھا گیا ہے کہ آپ علم کو کیسے استعمال کرتے ہیں۔ -You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). +ذیل میں اس کے لیے بہت سے وسائل موجود ہیں۔ کام جاری رکھیں۔ -Why code in all of these? -- Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember) -- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python or Java)) -- Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production) +### 4. توجہ -I may not have time to do all of these for every subject, but I'll try. +بہت سارے خلفشار ہیں جن میں قیمتی وقت لگ سکتا ہے۔ توجہ اور ارتکاز مشکل ہے۔ کچھ میوزک آن کریں۔ +دھن کے بغیر اور آپ اچھی طرح توجہ مرکوز کر سکیں گے۔ -You can see my code here: +## جو آپ نہیں سیکھیں گے + +یہ مروجہ ٹیکنالوجیز ہیں لیکن اس اسٹڈی پلان کا حصہ نہیں ہیں: + +- جاوا اسکرپٹ +- فرنٹ اینڈ ٹیکنالوجیز اور HTML، CSS +- ایس کیو ایل (SQL) + +## روزانہ کا منصوبہ + +یہ کورس بہت سارے مضامین پر مشتمل ہے۔ ہر ایک میں شاید آپ کو کچھ دن لگیں گے، یا شاید ایک ہفتہ یا اس سے بھی زیادہ۔ یہ آپ کے شیڈول پر منحصر ہے۔ + +ہر روز، فہرست سے اگلا مضمون لیں، اس موضوع کے بارے میں کچھ ویڈیوز دیکھیں، اور پھر اس ڈیٹا سٹرکچر یا الگورتھم کا، اس زبان میں جو آپ نے اس کورس کے لیے منتخب کی ہے ،کاایک کوڈ لکھیں۔ + +آپ میرا کوڈ یہاں دیکھ سکتے ہیں: - [C](https://github.com/jwasham/practice-c) - [C++](https://github.com/jwasham/practice-cpp) - [Python](https://github.com/jwasham/practice-python) -You don't need to memorize the guts of every algorithm. +آپ کو ہر الگورتھم کو حفظ کرنے کی ضرورت نہیں ہے۔ آپ کو صرف اتنا سمجھنے کی ضرورت ہے کہ آپ اپنا کوڈ لکھ سکیں۔ -Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer. +## کوڈنگ سوال کی مشق -## Prerequisite Knowledge + ابھی کیوں؟ میں انٹرویو کے لیے تیار نہیں ہوں۔ -- [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) +[توپھر واپس جا کر یہ پڑھیں۔](#3-do-coding-interview-questions-while-youre-learning) -- [ ] **How computers process a program:** - - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) +آپ کو پروگرامنگ کی مشقیں کرنے کی کیوں ضرورت ہے: +- سوال کی شناخت، اور کہاں صحیح ڈیٹا اسٹرکچر اور الگورتھم فٹ ہوتے ہیں +- سوال کے تقاضوں کو سمجھنا +- سوال کے ذریعے اپنے طریقے سے بات کرنا جیسا کہ آپ انٹرویو میں کریں گے +- کمپیوٹر کے بجائے وائٹ بورڈ یا کاغذ پر کوڈنگ +- اپنے حل کے لیے وقت اور میموری کی اصلاح کے بارے میں سوچنا (نیچے بگ-او دیکھیں) +- اپنے جوابات کی جانچ کرنا -## Algorithmic complexity / Big-O / Asymptotic analysis +یہ انٹرویو میں سوال حل کرنے کے طریقہ کار، اور بات چیت کے طریقے کا ایک بہترین تعارف ہے۔ آپ کو یہ پروگرامنگ انٹرویو کی کتابوں سے بھی ملے گا، لیکن مجھے یہ شاندار معلوم ہوا: +[الگورتھم ڈیزائن کینوس (Algorithm design canvas)](http://www.hiredintech.com/algorithm-design/) -- Nothing to implement -- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. -- If some of the lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge. +وائٹ بورڈ یا کاغذ پر کوڈ لکھیں، کمپیوٹر پر نہیں۔ کچھ نمونے کے جوابات کے ساتھ ٹیسٹ کریں۔ پھر اسے ٹائپ کریں اور کمپیوٹر پر اس کی جانچ کریں۔ + +اگر آپ کے پاس گھر میں وائٹ بورڈ نہیں ہے تو آرٹ اسٹور سے ایک بڑا ڈرائنگ پیڈ لیں۔ آپ صوفے پر بیٹھ کر مشق کر سکتے ہیں۔ +یہ میرا "صوفہ وائٹ بورڈ" ہے۔ میں نے صرف دکھانے کے لیے تصویر میں قلم شامل کیا۔ اگر آپ قلم استعمال کرتے ہیں، تو آپ چاہیں گے کہ آپ اسے مٹابھی سکیں۔ +کیونکہ یہ جلدی گندا ہو جاتا ہے. **میں پنسل اور صافی کا استعمال کرتا ہوں۔** + +![میرا صوفہ وائٹ بورڈ](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +**کوڈنگ سوال کی مشق پروگرامنگ کے مسائل کے جوابات کو یاد کرنے کے بارے میں نہیں ہے۔** + +## کوڈنگ کے سوالات/مسائل + +اپنی اہم کوڈنگ انٹرویو کی کتابوں کو مت بھولنا [یہاں](#interview-prep-books). + +سوالات حل کرنا: +- [حل تلاش کرنے کا طریقہ](https://www.topcoder.com/thrive/articles/How%20To%20Find%20a%20Solution) +- [ٹاپ کوڈر پرابلم اسٹیٹمنٹ کو ڈسیکٹ کرنے کا طریقہ](https://www.topcoder.com/thrive/articles/How%20To%20Dissect%20a%20Topcoder%20Problem%20Statement%20Content) + +کوڈنگ انٹرویو سوال کی ویڈیوز: +- [IDeserve (88 ویڈیوز)](https://www.youtube.com/playlist?list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 پلے لسٹس)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - سوالات کے حل کے لیے بہترین +- [Nick White - LeetCode Solutions (187 ویڈیوز)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - حل اور کوڈ کی اچھی وضاحت + - آپ مختصر وقت میں کئی دیکھ سکتے ہیں۔ +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) + +چیلنج/پریکٹس سائٹس: +- [لیٹ کوڈ(LeetCode)](https://leetcode.com/) + - میری پسندیدہ کوڈنگ سوالات کی سائٹ۔ یہ کم از کم 1-2 مہینوں کے لئے(جن میں آپ تیاری کر رہے ہوں گے) سبسکرپشن کی رقم کے قابل ہے۔ + - کوڈ واک تھرو کے لیے اوپر نک وائٹ اور فشر کوڈر کی ویڈیوز دیکھیں۔ +- [ہیکر رینک (HackerRank)](https://www.hackerrank.com/) +- [ٹاپ کوڈر (TopCoder)](https://www.topcoder.com/) +- [کوڈفورسز(Codeforces)](https://codeforces.com/) +- [کوڈیلیٹی(Codility)](https://codility.com/programmers/) +- [گیکس فار گیکس(Geeks for Geeks)](https://practice.geeksforgeeks.org/explore/?page=1) +- [الگو ایکسپرٹ(AlgoExpert)](https://www.algoexpert.io/product) + - گوگل انجینئرز کے ذریعہ تخلیق کیا گیا، یہ آپ کی صلاحیتوں کو نکھارنے کا ایک بہترین ذریعہ بھی ہے۔ +- [پروجیکٹ یولر(Project Euler)](https://projecteuler.net/) + - بہت زیادہ ریاضی پر مرکوز ہے، اور انٹرویو کوڈنگ کے لیے واقعی موزوں نہیں ہے۔ + +## آو شروع کریں + +باتیں کافی ہیں، آئیے اب سیکھتے ہیں! + +لیکن سیکھتے وقت اوپر سے کوڈنگ سوالات کرنا نہ بھولیں! + +## الگورتھمک پیچیدگی / بگ-او / اسیمپٹوٹک تجزیہ + +- یہاں کرنے کو کچھ نہیں، آپ صرف ویڈیوز دیکھیں گے اور نوٹ لیں گے! آہا! +- یہاں بہت ساری ویڈیوز ہیں۔ صرف اس وقت تک دیکھیں جب تک آپ اسے سمجھ سکیں۔ آپ ہمیشہ واپس آ کر نظر ثانی کر سکتے ہیں۔ +- پریشان نہ ہوں اگر آپ اس کے پیچھے کی تمام ریاضی کو نہیں سمجھتے ہیں۔ +- آپ کو صرف یہ سمجھنے کی ضرورت ہے کہ بگ-او کے لحاظ سے الگورتھم کی پیچیدگی کو کیسے ظاہر کیا جائے۔ - [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) - [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) - [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] Skiena: - - [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) -- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/) -- [ ] [Orders of Growth (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) -- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [Skiena (video)](https://www.youtube.com/watch?v=z1mkCe3kVUA) - [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) -- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) - [ ] TopCoder (includes recurrence relations and master theorem): - - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) + - [Computational Complexity: Section 1](https://www.topcoder.com/thrive/articles/Computational%20Complexity%20part%20one) + - [Computational Complexity: Section 2](https://www.topcoder.com/thrive/articles/Computational%20Complexity%20part%20two) - [ ] [Cheat sheet](http://bigocheatsheet.com/) - [ ] [[Review] Big-O notation in 5 minutes (video)](https://youtu.be/__vX2sjlpXU) -## Data Structures +یہ اس کے بارے میں کافی ہے. + +جب آپ "کریکنگ دی کوڈنگ انٹرویو" سے گزرتے ہیں، تو اس پر ایک باب ہوتا ہے، اور آخر میں یہ دیکھنے کے لیے ایک کوئز ہوتا ہے کہ آپ مختلف الگورتھم کی رن ٹائم پیچیدگی کی شناخت کر سکتے ہیں یانہیں۔ یہ ایک زبردست جائزہ اور ٹیسٹ ہے۔ + +## ڈیٹا سٹرکچرز - ### Arrays - - Implement an automatically resizing vector. - - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [ ] About Arrays: + - [Arrays CS50 Harvard University](https://www.youtube.com/watch?v=tI_tIZFyKBw&t=3009s) + - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [ ] Implement a vector (mutable array with automatic resizing): - [ ] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing. - - [ ] new raw data array with allocated memory + - [ ] New raw data array with allocated memory - can allocate int array under the hood, just not use its features - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128 - [ ] size() - number of items @@ -530,21 +598,22 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Linked Lists - [ ] Description: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [Linked Lists CS50 Harvard University](https://www.youtube.com/watch?v=2T-A_GFuoTo&t=650s) - this builds the intuition. + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK) - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [[Review] Linked lists in 4 minutes (video)](https://youtu.be/F8AbOfQwl1c) - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - not the whole video, just portions about Node struct and memory allocation. + - not the whole video, just portions about Node struct and memory allocation - [ ] Linked List vs Arrays: - - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) - - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) + - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) + - [ ] [Why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - [ ] Gotcha: you need pointer to pointer knowledge: (for when you pass a pointer to a function that may change the address where that pointer points) This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness. - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) - - [ ] implement (I did with tail pointer & without): + - [ ] Implement (I did with tail pointer & without): - [ ] size() - returns number of data elements in list - [ ] empty() - bool returns true if empty - [ ] value_at(index) - returns the value of the nth item (starting at 0 for first) @@ -560,13 +629,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] reverse() - reverses the list - [ ] remove_value(value) - removes the first item in the list with this value - [ ] Doubly-linked List - - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - [Description (video)](https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD) - No need to implement -- ### Stack - - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) +- ### Stacks + - [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ) - [ ] [[Review] Stacks in 3 minutes (video)](https://youtu.be/KcT3aVgrrpU) - - [ ] Will not implement. Implementing with array is trivial. + - [ ] Will not implement. Implementing with array is trivial - ### Queue - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) @@ -588,44 +657,46 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - dequeue: O(1) (linked list and array) - empty: O(1) (linked list and array) -- ### Hash table +- ### Hash Table - [ ] Videos: - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [PyCon 2010: The Mighty Dictionary (video)](https://www.youtube.com/watch?v=C4Kc8xzcA68) + - [ ] [PyCon 2017: The Dictionary Even Mightier (video)](https://www.youtube.com/watch?v=66P5FMkWoVU) - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] [[Review] Hash tables in 4 minutes (video)](https://youtu.be/knV86FlSXJ8) - [ ] Online Courses: - - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP) - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) - - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) - [ ] distributed hash tables: - - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) - - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) + - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb) + - [Distributed Hash Tables (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H) - - [ ] implement with array using linear probing + - [ ] Implement with array using linear probing - hash(k, m) - m is size of hash table - add(key, value) - if key already exists, update value - exists(key) - get(key) - remove(key) -## More Knowledge +## مزید معلومات - ### Binary search - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - - [ ] [detail](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) + - [ ] [detail](https://www.topcoder.com/thrive/articles/Binary%20Search) + - [ ] [blueprint](https://leetcode.com/discuss/general-discussion/786126/python-powerful-ultimate-binary-search-template-solved-many-problems) - [ ] [[Review] Binary search in 4 minutes (video)](https://youtu.be/fDKIpRe8GW4) - [ ] Implement: - binary search (on sorted array of integers) - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Good intro: @@ -636,27 +707,26 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac) + - [ ] [Practice Operations](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/) - [ ] 2s and 1s complement - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement) - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement) - - [ ] count set bits + - [ ] Count set bits - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc) - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) - [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) - - [ ] swap values: + - [ ] Swap values: - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: + - [ ] Absolute value: - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) ## Trees -- ### Trees - Notes & Background - - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - - basic tree construction - - traversal - - manipulation algorithms +- ### Trees - Intro + - [ ] [Intro to Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda) + - [ ] [Tree Traversal (video)](https://www.coursera.org/lecture/data-structures/tree-traversal-fr51b) - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - BFS notes: - level order (BFS, using queue) @@ -675,11 +745,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [[Review] Tree Traversal (playlist) in 11 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b) - ### Binary search trees: BSTs - - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [Series (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) - - starts with symbol table and goes through BST applications + - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - - [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68) + - [ ] [MIT (video)](https://www.youtube.com/watch?v=76dhtgZt38A&ab_channel=MITOpenCourseWare) - C/C++: - [ ] [Binary search tree - Implementation in C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) - [ ] [BST implementation - memory allocation in stack and heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) @@ -707,16 +775,15 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Heap / Priority Queue / Binary Heap - visualized as a tree, but is usually linear in storage (array, linked list) - [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure)) - - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) - - [ ] [Naive Implementations (video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [Introduction (video)](https://www.coursera.org/lecture/data-structures/introduction-2OpTs) - [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) - [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) - [ ] [Basic Operations (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) - [ ] [Complete Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) - [ ] [Pseudocode (video)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) - [ ] [Heap Sort - jumps to start (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) - - [ ] [Heap Sort (video)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) - - [ ] [Building a heap (video)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [Heap Sort (video)](https://www.coursera.org/lecture/data-structures/heap-sort-hSzMO) + - [ ] [Building a heap (video)](https://www.coursera.org/lecture/data-structures/building-a-heap-dwrOS) - [ ] [MIT: Heaps and Heap Sort (video)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) @@ -729,17 +796,16 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] is_empty() - returns true if heap contains no elements - [ ] extract_max - returns the max item, removing it - [ ] sift_down - needed for extract_max - - [ ] remove(i) - removes item at index x + - [ ] remove(x) - removes item at index x - [ ] heapify - create a heap from an array of elements, needed for heap_sort - - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap - - note: using a min heap instead would save operations, but double the space needed (cannot do in-place). + - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap or min heap ## Sorting - [ ] Notes: - Implement sorts & know best case/worst case, average complexity of each: - no bubble sort - it's terrible - O(n^2), except when n <= 16 - - [ ] stability in sorting algorithms ("Is Quicksort stable?") + - [ ] Stability in sorting algorithms ("Is Quicksort stable?") - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) - [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) - [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) @@ -748,26 +814,27 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - I wouldn't recommend sorting a linked list, but merge sort is doable. - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) -- For heapsort, see Heap data structure above. Heap sort is great, but not stable. +- For heapsort, see Heap data structure above. Heap sort is great, but not stable - [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [1. Mergesort](https://www.coursera.org/lecture/algorithms-part1/mergesort-ARWDq) - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) - - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) - - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [3. Sorting Complexity](https://www.coursera.org/lecture/algorithms-part1/sorting-complexity-xAltF) + - [ ] [4. Comparators](https://www.coursera.org/lecture/algorithms-part1/comparators-9FYhS) - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) - [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) - - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) - - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) - - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + - [ ] [1. Quicksort](https://www.coursera.org/lecture/algorithms-part1/quicksort-vjvnC) + - [ ] [2. Selection](https://www.coursera.org/lecture/algorithms-part1/selection-UQxFT) + - [ ] [3. Duplicate Keys](https://www.coursera.org/lecture/algorithms-part1/duplicate-keys-XvjPd) + - [ ] [4. System Sorts](https://www.coursera.org/lecture/algorithms-part1/system-sorts-QBNZ7) - [ ] UC Berkeley: - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + - [ ] [CS 61B 2014-04-21: Radix Sort(video)](https://archive.org/details/ucberkeley_webcast_pvbBMd-3NoI) - [ ] [Bubble Sort (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) - [ ] [Analyzing Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) @@ -798,15 +865,15 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Mergesort: O(n log n) average and worst case - [ ] Quicksort O(n log n) average case - Selection sort and insertion sort are both O(n^2) average and worst case - - For heapsort, see Heap data structure above. + - For heapsort, see Heap data structure above - [ ] Not required, but I recommended them: - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/lecture/algorithms-part2/key-indexed-counting-2pi1Z) - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) - - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/lecture/algorithms-part2/3-way-radix-quicksort-crkd5) - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38) @@ -819,41 +886,40 @@ If you need more detail on this subject, see "Sorting" section in [Additional De ## Graphs -Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. +گراف کو کمپیوٹر سائنس میں بہت سے مسائل کی نمائندگی کرنے کے لیے استعمال کیا جا سکتا ہے، اس لیے یہ سیکشن لمبا ہے، جیسا کہ ٹریز اور ترتیب / سارٹنگ تھے۔ - Notes: - - There are 4 basic ways to represent a graph in memory: + - میموری میں گراف کی نمائندگی کرنے کے 4 بنیادی طریقے ہیں: - objects and pointers - adjacency matrix - adjacency list - adjacency map - - Familiarize yourself with each representation and its pros & cons - - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code - - When asked a question, look for a graph-based solution first, then move on if none. + - ہر ایک نمائندگی اور اس کے فوائد اور نقصانات سے اپنے آپ کو واقف کریں۔ + - BFS اور DFS - ان کی کمپیوٹیشنل پیچیدگی، ان کے تجارتی معاہدوں، اور انہیں حقیقی کوڈ میں لاگو کرنے کا طریقہ جانیں۔ + - جب کوئی سوال پوچھا جائے تو پہلے گراف پر مبنی حل تلاش کریں، پھر اگر کوئی نہیں تو آگے بڑھیں۔ - [ ] MIT(videos): - - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=oFVYVzlvk9c&t=14s&ab_channel=MITOpenCourseWare) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=IBfWDYSffUU&t=32s&ab_channel=MITOpenCourseWare) - [ ] Skiena Lectures - great intro: - - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) - - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) - - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) - - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2020 - Lecture 10 - Graph Data Structures (video)](https://www.youtube.com/watch?v=Sjk0xqWWPCc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=10) + - [ ] [CSE373 2020 - Lecture 11 - Graph Traversal (video)](https://www.youtube.com/watch?v=ZTwjXj81NVY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=11) + - [ ] [CSE373 2020 - Lecture 12 - Depth First Search (video)](https://www.youtube.com/watch?v=KyordYB3BOs&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=12) + - [ ] [CSE373 2020 - Lecture 13 - Minimum Spanning Trees (video)](https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13) + - [ ] [CSE373 2020 - Lecture 14 - Minimum Spanning Trees (con't) (video)](https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14) + - [ ] [CSE373 2020 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=MUe5DXRhyAo&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=15) - [ ] Graphs (review and more): - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare) + - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare) - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) - - [ ] ~~[CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)~~ - [ ] [CS 61B 2014: Weighted graphs (video)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) @@ -879,7 +945,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] list strongly connected components - [ ] check for bipartite graph -## Even More Knowledge +## اس سے بھی زیادہ معلومات - ### Recursion - [ ] Stanford lectures on recursion & backtracking: @@ -887,21 +953,25 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) - - when it is appropriate to use it - - how is tail recursion better than not? + - When it is appropriate to use it? + - How is tail recursion better than not? - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1) - + - [ ] [5 Simple Steps for Solving Any Recursive Problem(video)](https://youtu.be/ngCos392W4w) + + Backtracking Blueprint: [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning)) + [Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A) - ### Dynamic Programming - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for dynamic programming. + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a + problem as being a candidate for dynamic programming. - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved. - [ ] Videos: - - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see - - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) - - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) - - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) - - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Skiena: CSE373 2020 - Lecture 19 - Introduction to Dynamic Programming (video)](https://www.youtube.com/watch?v=wAA0AMfcJHQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=18) + - [ ] [Skiena: CSE373 2020 - Lecture 20 - Edit Distance (video)](https://www.youtube.com/watch?v=T3A4jlHlhtA&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=19) + - [ ] [Skiena: CSE373 2020 - Lecture 20 - Edit Distance (continued) (video)](https://www.youtube.com/watch?v=iPnPVcZmRbE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=20) + - [ ] [Skiena: CSE373 2020 - Lecture 21 - Dynamic Programming (video)](https://www.youtube.com/watch?v=2xPE4Wq8coQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=21) + - [ ] [Skiena: CSE373 2020 - Lecture 22 - Dynamic Programming and Review (video)](https://www.youtube.com/watch?v=Yh3RzqQGsyI&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=22) - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) @@ -911,17 +981,13 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) - [ ] Coursera: - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) - - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) - - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/a-dynamic-programming-algorithm-PSonq) + - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/illustrating-the-dp-algorithm-oUEK2) - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) - - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/global-pairwise-sequence-alignment-UZ7o6) - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) -- ### Object-Oriented Programming - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - - ### Design patterns - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - [ ] Learn these patterns: @@ -942,15 +1008,10 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] iterator - [ ] composite - [ ] flyweight - - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) - - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - [ ] [Book: Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO. - - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) - + - [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - ### Combinatorics (n choose k) & Probability - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) @@ -973,9 +1034,10 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [NP Completeness III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [NP Completeness IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) - - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2020 - Lecture 23 - NP-Completeness (video)](https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23) + - [ ] [CSE373 2020 - Lecture 24 - Satisfiability (video)](https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24) + - [ ] [CSE373 2020 - Lecture 25 - More NP-Completeness (video)](https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25) + - [ ] [CSE373 2020 - Lecture 26 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26) - [ ] [Complexity: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) - [ ] [Complexity: Approximation Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) - [ ] [Complexity: Fixed-Parameter Algorithms (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) @@ -983,6 +1045,13 @@ Graphs can be used to represent many problems in computer science, so this secti - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - Pages 1048 - 1140 in CLRS if you have it. +- ### How computers process a program + + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) - ### Caches - [ ] LRU cache: - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) @@ -999,26 +1068,27 @@ Graphs can be used to represent many problems in computer science, so this secti - [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) - Covers: - Processes, Threads, Concurrency issues - - difference between processes and threads - - processes - - threads - - locks - - mutexes - - semaphores - - monitors - - how they work - - deadlock - - livelock + - Difference between processes and threads + - Processes + - Threads + - Locks + - Mutexes + - Semaphores + - Monitors + - How they work? + - Deadlock + - Livelock - CPU activity, interrupts, context switching - Modern concurrency constructs with multicore processors - - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Paging, segmentation and virtual memory (video)](https://youtu.be/O4nwUqQodAg) + - [Interrupts (video)](https://youtu.be/iKlAWIKEyuw) - Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o) - Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack) - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy. - Context switching - - How context switching is initiated by the operating system and underlying hardware + - How context switching is initiated by the operating system and underlying hardware? - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] [CS 377 Spring '14: Operating Systems from University of Massachusetts](https://www.youtube.com/playlist?list=PLacuG5pysFbDQU8kKxbUh4K5c1iL5_k7k) - [ ] concurrency in Python (videos): - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM) @@ -1043,26 +1113,22 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) -- ### Scheduling - - in an OS, how it works - - can be gleaned from Operating System videos - - ### String searching & manipulations - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/lecture/algorithms-part2/introduction-to-substring-search-n3ZpG) - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) - - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [5. Rabin-Karp](https://www.coursera.org/lecture/algorithms-part2/rabin-karp-3KiqT) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects). - ### Tries - Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits - to track the path. - - I read through code, but will not implement. + to track the path + - I read through code, but will not implement - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) @@ -1073,13 +1139,12 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) - [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure) - - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/competitive-programming/tutorials/using-tries/) + - [ ] [TopCoder - Using Tries](https://www.topcoder.com/thrive/articles/Using%20Tries) - [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### Floating Point Numbers - [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU) - - [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec) - ### Unicode - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html) @@ -1093,9 +1158,9 @@ Graphs can be used to represent many problems in computer science, so this secti - The first half is enough. - ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - **If you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - Otherwise, this is just good to know + - [ ] [Khan Academy](https://www.khanacademy.org/computing/code-org/computers-and-the-internet) - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) @@ -1109,296 +1174,111 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) -## System Design, Scalability, Data Handling - -**You can expect system design questions if you have 4+ years of experience.** - -- Scalability and System Design are very large topics with many topics and resources, since - there is a lot to consider when designing a software/hardware system that can scale. - Expect to spend quite a bit of time on this. -- Considerations: - - scalability - - Distill large data sets to single values - - Transform one data set to another - - Handling obscenely large amounts of data - - system design - - features sets - - interfaces - - class hierarchies - - designing a system under certain constraints - - simplicity and robustness - - tradeoffs - - performance analysis and optimization -- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) -- [ ] [System Design from HiredInTech](http://www.hiredintech.com/system-design/) -- [ ] [How Do I Prepare To Answer Design Questions In A Technical Inverview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) -- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/) -- [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/) -- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) -- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below. -- [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) -- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) -- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) -- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) -- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) -- [ ] Consensus Algorithms: - - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - - [ ] [Easy-to-read paper](https://raft.github.io/) - - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) -- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) -- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) -- [ ] Scalability: - - You don't need all of these. Just pick a few that interest you. - - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - - [ ] Short series: - - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) - - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) - - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) - - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) - - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html) - - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) - - [ ] [Pragmatic Programming Techniques](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) - - [extra: Google Pregel Graph Processing](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) - - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI) - - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/) - - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) - - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0) - - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/tutorials/the-importance-of-algorithms/) - - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) - - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU) - - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) - - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) - - [video](https://www.youtube.com/watch?v=G-lGCC4KKok) - - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) - - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) - - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) - - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/) - - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/) - - [ ] [Asyncio Tarantool Queue, Get In The Queue](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html) - - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) - - [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) - - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) - - [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html) - - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) - - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) - - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) - - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) - - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) - - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) - - [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) - - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) - - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) - - [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html) - - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) - - [ ] [Cinchcast Architecture - Producing 1,500 Hours Of Audio Every Day](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html) - - [ ] [Justin.Tv's Live Video Broadcasting Architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) - - [ ] [Playfish's Social Gaming Architecture - 50 Million Monthly Users And Growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) - - [ ] [TripAdvisor Architecture - 40M Visitors, 200M Dynamic Page Views, 30TB Data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) - - [ ] [PlentyOfFish Architecture](http://highscalability.com/plentyoffish-architecture) - - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) - - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) - - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together - - [ ] Twitter: - - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI) - - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) - - For even more, see "Mining Massive Datasets" video series in the [Video Series](#video-series) section. -- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world: - - review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - - flow: - 1. Understand the problem and scope: - - define the use cases, with interviewer's help - - suggest additional features - - remove items that interviewer deems out of scope - - assume high availability is required, add as a use case - 2. Think about constraints: - - ask how many requests per month - - ask how many requests per second (they may volunteer it or make you do the math) - - estimate reads vs. writes percentage - - keep 80/20 rule in mind when estimating - - how much data written per second - - total storage required over 5 years - - how much data read per second - 3. Abstract design: - - layers (service, data, caching) - - infrastructure: load balancing, messaging - - rough overview of any key algorithm that drives the service - - consider bottlenecks and determine solutions - - Exercises: - - [Design a CDN network: old article](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) - - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) - - [Design an online multiplayer card game](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) - - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis) - - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) - - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf) - - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/) - - [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) - --- -## Final Review +## حتمی جائزہ - This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. - It's nice if you want a refresher often. + اس سیکشن میں چھوٹی ویڈیوز ہوں گی جنہیں آپ زیادہ تر اہم تصورات کا جائزہ لینے کے لیے بہت تیزی سے دیکھ سکتے ہیں۔ + اگر آپ اکثر ریفریشر چاہتے ہیں تو یہ اچھا ہے۔ -- [ ] Series of 2-3 minutes short subject videos (23 videos) - - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (40 videos): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] 2-3 منٹ کی مختصر سبجیکٹ ویڈیوز کی سیریز (23 ویڈیوز) + - [ویڈیوز](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] 2-5 منٹ کی مختصر موضوع ویڈیوز کی سیریز - مائیکل سمبول (46 ویڈیوز): + - [ویڈیوز](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) --- -## Coding Question Practice +## اپنے ریزیومے کو اپ ڈیٹ کریں -Now that you know all the computer science topics above, it's time to practice answering coding problems. +- درج کتابوں میں ریزیومے کی تیاری کی معلومات دیکھیں: +- "کریکنگ دی کوڈنگ انٹرویو" اور "پروگرامنگ انٹرویوز بے نقاب" +- ["This Is What A GOOD Resume Should Look Like" by Gayle McDowell (author of Cracking the Coding Interview)](https://www.careercup.com/resume), + - مصنف کی طرف سے نوٹ: "یہ یونائیٹڈ سٹیٹس امریکا فوکسڈ ریزیومے کے لیے ہے۔ ہندوستان اور دیگر ممالک کے لیے سی وی کی توقعات مختلف ہیں، حالانکہ بہت سے پوائنٹس ایک جیسے ہوں گے۔" +- ["Step-by-step resume guide" by Tech Interview Handbook](https://www.techinterviewhandbook.org/resume/guide) + - اپنے ریزیومے کو شروع سے ترتیب دینے، موثر ریزیومے کا مواد لکھنے، اسے بہتر بنانے اور اپنے ریزیومے کی جانچ کرنے کے طریقے کے بارے میں تفصیلی گائیڈ -**Coding question practice is not about memorizing answers to programming problems.** +## انٹرویو کا عمل اور عام انٹرویو کی تیاری -Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions - -There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming -interview books, too, but I found this outstanding: -[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) - -No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a -large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil -and eraser. - -![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) - -Supplemental: - -- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) -- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) -- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - -**Read and Do Programming Problems (in this order):** - -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java - -See [Book List above](#book-list) - - -## Coding exercises/challenges - -Once you've learned your brains out, put those brains to work. -Take coding challenges every day, as many as you can. - -- [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) -- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) - -Coding Interview Question Videos: -- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) -- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - - Super for walkthroughs of problem solutions. -- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - - Good explanations of solution and the code. - - You can watch several in a short time. -- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) - -Challenge sites: -- [LeetCode](https://leetcode.com/) - - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. - - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) - - See Nick White Videos above for short code-throughs -- [HackerRank](https://www.hackerrank.com/) -- [TopCoder](https://www.topcoder.com/) -- [InterviewCake](https://www.interviewcake.com/) -- [Geeks for Geeks](http://www.geeksforgeeks.org/) -- [InterviewBit](https://www.interviewbit.com/invite/icjf) -- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) - -Language-learning sites, with challenges: -- [Codewars](http://www.codewars.com) -- [Codility](https://codility.com/programmers/) -- [HackerEarth](https://www.hackerearth.com/) -- [Sphere Online Judge (spoj)](http://www.spoj.com/) -- [Codechef](https://www.codechef.com/) - -Challenge repos: -- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) +- [ ] [How to Pass the Engineering Interview in 2021](https://davidbyttow.medium.com/how-to-pass-the-engineering-interview-in-2021-45f1b389a1) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] How to Get a Job at the Big 4: + - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [How to Get a Job at the Big 4.1 (Follow-up video)](https://www.youtube.com/watch?v=6790FVXWBw8&feature=youtu.be) +- [ ] Cracking The Coding Interview Set 1: + - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [ ] Cracking the Facebook Coding Interview: + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- Prep Courses: + - [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - A free Python centric data structures and algorithms course. + - [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + - [Grokking the Behavioral Interview (Educative free course)](https://www.educative.io/courses/grokking-the-behavioral-interview): + - Many times, it’s not your technical competency that holds you back from landing your dream job, it’s how you perform on the behavioral interview. + - [AlgoMonster (paid course with free content)](https://algo.monster/?utm_campaign=jwasham&utm_medium=referral&utm_content=coding-interview-university&utm_source=github): + - The crash course for LeetCode. Covers all the patterns condensed from thousands of questions. Mock Interviews: -- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/#!/) - I used this and it helped me relax for the phone screen and on-site interview. -- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews -- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/#!/) - میں نے اسے استعمال کیا اور اس نے مجھے فون اسکرین اور آن سائٹ انٹرویو کے لیے آرام دہ رہنے میں مدد کی +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - پریکٹس انٹرویوز کا ہم مرتبہ ماڈل +- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - FAANG کے سینئر انجینئرز کے ساتھ الگورتھم/سسٹم ڈیزائن انٹرویوز، گمنام طور پر +## اپنے انٹرویو لینے والے کی طرح سوچیں۔ -## Once you're closer to the interview +انٹرویو کے تقریباً 20 سوالات کے بارے میں سوچیں جو آپ کو نیچے دیے گئے آئٹمز کی لائنوں کے ساتھ ملیں گے۔ ہر ایک کے لیے کم از کم ایک جواب دیں۔ +ایک کہانی رکھیں، نہ کہ صرف ڈیٹا، کسی ایسی چیز کے بارے میں جو آپ نے حاصل کی ہے۔ -- Cracking The Coding Interview Set 2 (videos): - - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) - - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) +- آپ کو یہ نوکری کیوں چاہیے؟ +- آپ نے کون سا مشکل مسئلہ حل کیا ہے؟ +- سب سے بڑے چیلنجز کا سامنا؟ +- بہترین/بدترین ڈیزائن جو آپ نے دیکھے ہیں؟ +- موجودہ مصنوعات کو بہتر بنانے کے خیالات +- آپ ایک فرد کے طور پر اور ایک ٹیم کے حصے کے طور پر بہترین کام کیسے کرتے ہیں؟ +- آپ کی کونسی مہارت یا تجربات اس کردار میں اثاثہ ہوں گے اور کیوں؟ +- آپ کو کس چیز میں سب سے زیادہ مزہ آیا [job x / project y]؟ +- سب سے بڑا چیلنج جس کا آپ نے سامنا کیا؟ +- سب سے مشکل بگ جس کا آپ نے سامنا کیا؟ +- آپ نے اس میں کیا سیکھا؟ [job x / project y]؟ +- آپ اپنے پروجیکٹ میں کیا بہتر کرتے؟ -## Your Resume +## انٹرویو لینے والے کے لیے سوالات -- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed +میرے کچھ (ہو سکتا ہے کہ میں پہلے سے ہی جوابات جانتا ہوں، لیکن ان کی رائے یا ٹیم کے نقطہ نظر کو سمجھنے کے لیے): +- آپ کی ٹیم کتنی بڑی ہے؟ +- آپ کا دیو سائیکل کیا ہے؟ کیا آپ واٹرفال/سپرنٹ/اجائیل کرتے ہیں؟ +- کیا ڈیڈ لائن پر جلدی کرنا عام ہے؟ یا لچک ہے؟ +- آپ کی ٹیم میں فیصلے کیسے ہوتے ہیں؟ +- آپ فی ہفتہ کتنی میٹنگز کرتے ہیں؟ +- کیا آپ محسوس کرتے ہیں کہ آپ کے کام کا ماحول آپ کو توجہ مرکوز کرنے میں مدد کرتا ہے؟ +- کس پر کام کر رہے ہو؟ +- آپ کو اس کے بارے میں کیا پسند ہے؟ +- کام کی زندگی کیسی ہے؟ +- کام/زندگی کا توازن کیسا ہے؟ -## Be thinking of for when the interview comes +## ایک بار جب آپ کو نوکری مل جائے گی -Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. -Have a story, not just data, about something you accomplished. +مبارک ہو! -- Why do you want this job? -- What's a tough problem you've solved? -- Biggest challenges faced? -- Best/worst designs seen? -- Ideas for improving an existing product. -- How do you work best, as an individual and as part of a team? -- Which of your skills or experiences would be assets in the role and why? -- What did you most enjoy at [job x / project y]? -- What was the biggest challenge you faced at [job x / project y]? -- What was the hardest bug you faced at [job x / project y]? -- What did you learn at [job x / project y]? -- What would you have done better at [job x / project y]? +سیکھتے رہیں۔ -## Have questions for the interviewer - - Some of mine (I already may know answer to but want their opinion or team perspective): - -- How large is your team? -- What does your dev cycle look like? Do you do waterfall/sprints/agile? -- Are rushes to deadlines common? Or is there flexibility? -- How are decisions made in your team? -- How many meetings do you have per week? -- Do you feel your work environment helps you concentrate? -- What are you working on? -- What do you like about it? -- What is the work life like? -- How is work/life balance? - -## Once You've Got The Job - -Congratulations! - -Keep learning. - -You're never really done. +ابھی بھی بہت کچھ کرنا باقی ہے. --- ***************************************************************************************************** ***************************************************************************************************** - Everything below this point is optional. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for - any software engineering job. You'll be a much more well-rounded software engineer. - + اس نقطہ کے نیچے ہر چیز اختیاری ہے۔ داخلہ سطح کے انٹرویو کے لیے اس کی ضرورت نہیں ہے۔ تاہم، ان کا مطالعہ کرنے سےآپ کمپیوٹر سائنس کے + مزید تصورات سے زیادہ روشناس ہوں گے،اور آپ کسی بھی سافٹ ویئر انجینئرنگ کے کام کے لیے بہتر طور پر تیار ہوں گے۔ آپ ایک اچھے سافٹ ویئر انجینئر بنیں گے۔ + ***************************************************************************************************** ***************************************************************************************************** @@ -1409,40 +1289,39 @@ You're never really done. These are here so you can dive into a topic you find interesting. - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - An oldie but a goodie - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - A modern option - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - A gentle introduction to design patterns - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book -- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) + - AKA the "Gang Of Four" book, or GOF + - The canonical design patterns book - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle + - Class textbook on data structures and algorithms + - Pros: + - Is a good review as any algorithms textbook would be + - Nice stories from his experiences solving problems in industry and academia + - Code examples in C + - Cons: + - Can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - Chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - Don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material + - Algorithm catalog: + - This is the real reason you buy this book. + - This book is better as an algorithm reference, and not something you read cover to cover. + - Can rent it on Kindle - Answers: - - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) + - [Solutions](https://web.archive.org/web/20150404194210/http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) +- [Algorithm](http://jeffe.cs.illinois.edu/teaching/algorithms/) (Jeff Erickson) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like - These chapters are worth the read to give you a nice foundation: - Chapter 2 - Numeric Representation - Chapter 3 - Binary Arithmetic and Bit Operations @@ -1453,21 +1332,127 @@ You're never really done. - Chapter 9 - CPU Architecture - Chapter 10 - Instruction Set Architecture - Chapter 11 - Memory Architecture and Organization -- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game - +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-fourth-Thomas-Cormen/dp/026204630X) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently + - AKA CLR, sometimes CLRS, because Stein was late to the game - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - For a richer, more up-to-date (2017), but longer treatment -- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture. +## System Design, Scalability, Data Handling + +**اگر آپ کے پاس 4+ سال کا تجربہ ہے تو آپ سسٹم ڈیزائن کے سوالات کی توقع کر سکتے ہیں۔** + +- Scalability and System Design are very large topics with many topics and resources, since + there is a lot to consider when designing a software/hardware system that can scale. + Expect to spend quite a bit of time on this +- Considerations: + - Scalability + - Distill large data sets to single values + - Transform one data set to another + - Handling obscenely large amounts of data + - System design + - features sets + - interfaces + - class hierarchies + - designing a system under certain constraints + - simplicity and robustness + - tradeoffs + - performance analysis and optimization +- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [System Design from HiredInTech](http://www.hiredintech.com/system-design/) +- [ ] [How Do I Prepare To Answer Design Questions In A Technical Interview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) +- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/) +- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) +- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below +- [ ] [How to ace a systems design interview](https://web.archive.org/web/20120716060051/http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) +- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) +- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) +- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem) +- [ ] [MIT 6.824: Distributed Systems, Spring 2020 (20 videos)](https://www.youtube.com/watch?v=cQP8WApzIQQ&list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) +- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] Scalability: + - آپ کو ان سب کی ضرورت نہیں ہے۔ صرف چند ایک منتخب کریں جو آپ کی دلچسپی رکھتے ہیں۔ + - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] Short series: + - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) + - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) + - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) + - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) + - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html) + - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) + - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [The Importance of Algorithms](https://www.topcoder.com/thrive/articles/The%20Importance%20of%20Algorithms) + - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) + - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) + - [video](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) + - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) + - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/) + - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) + - [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) + - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) + - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) + - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) + - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) + - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) + - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) + - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) + - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) + - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) + - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) + - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together + - [ ] Twitter: + - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - For even more, see "Mining Massive Datasets" video series in the [Video Series](#video-series) section +- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world: + - review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf) + - flow: + 1. سوال اور سوال کے دائرہ کار کو سمجھیں: + - انٹرویو لینے والے کی مدد سے استعمال کے معاملات کی وضاحت کریں + - اضافی خصوصیات تجویز کریں + - ایسے آئٹمز کو ہٹا دیں جن کو انٹرویو لینے والے دائرہ کار سے باہر سمجھتے ہیں + - فرض کریں کہ اعلی دستیابی کی ضرورت ہے، اضرورت کے طور پر شامل کریں + 2. پابندیوں کے بارے میں سوچو: + - پوچھیں کہ ماہانہ کتنی درخواستیں ہیں + - پوچھیں کہ فی سیکنڈ کتنی درخواستیں ہیں (وہ اسے رضاکارانہ طور پر دے سکتے ہیں یا آپ کو حساب کتاب کرنے پر مجبور کر سکتے ہیں) + - تخمینہ پڑھنا بمقابلہ لکھنا فیصد + - تخمینہ لگاتے وقت 80/20 اصول کو ذہن میں رکھیں + - فی سیکنڈ میں کتنا ڈیٹا لکھا جاتا ہے + - 5 سالوں میں کل ذخیرہ درکار ہے + - فی سیکنڈ کتنا ڈیٹا پڑھتا ہے + 3. ڈیزائن کاخلاصہ: + - پرتیں (سروس، ڈیٹا، کیشنگ) + - انفراسٹرکچر: بوجھ میں توازن، پیغام رسانی + - سروس کو چلانے والے کسی بھی کلیدی الگورتھم کا کچا جائزہ + - رکاوٹوں پر غور کریں اور حل کا تعین کریں + - Exercises: + - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) + - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/) + - [Design a cache system](https://web.archive.org/web/20220217064329/https://adayinthelifeof.nl/2011/02/06/memcache-internals/) ## Additional Learning - - I added them to help you become a well-rounded software engineer, and to be aware of certain - technologies and algorithms, so you'll have a bigger toolbox. + + میں نے انہیں شامل کیا تاکہ آپ کو ایک بہترین سافٹ ویئر انجینئر بننے میں مدد ملے، اور کچھ ٹیکنالوجیز اور الگورتھم سے آگاہی ہو، تاکہ آپ کے پاس ایک بڑا ٹول باکس ہو۔ - ### Compilers - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) @@ -1494,6 +1479,8 @@ You're never really done. - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc) - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) + - [The Absolute Beginner's Guide to Emacs (video by David Wilson)](https://www.youtube.com/watch?v=48JlgiBpw_I&t=0s) + - [The Absolute Beginner's Guide to Emacs (notes by David Wilson)](https://systemcrafters.net/emacs-essentials/absolute-beginners-guide-to-emacs/) - ### Unix command line tools - I filled in the list below from good tools. @@ -1511,11 +1498,11 @@ You're never really done. - ### Information theory (videos) - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) - - more about Markov processes: + - More about Markov processes: - [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) - [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) - [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) - - See more in MIT 6.050J Information and Entropy series below. + - See more in MIT 6.050J Information and Entropy series below - ### Parity & Hamming Code (videos) - [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) @@ -1526,19 +1513,19 @@ You're never really done. - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) - ### Entropy - - also see videos below - - make sure to watch information theory videos first + - نیچے دی گئی ویڈیوز بھی دیکھیں + - پہلے انفارمیشن تھیوری کی ویڈیوز ضرور دیکھیں - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176) - ### Cryptography - - also see videos below - - make sure to watch information theory videos first + - نیچے دی گئی ویڈیوز بھی دیکھیں + - پہلے انفارمیشن تھیوری کی ویڈیوز ضرور دیکھیں - [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography) - [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) - [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - ### Compression - - make sure to watch information theory videos first + - پہلے انفارمیشن تھیوری کی ویڈیوز ضرور دیکھیں - Computerphile (videos): - [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) - [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) @@ -1597,7 +1584,6 @@ You're never really done. - ### A* - [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm) - - [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE) - [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE) - ### Fast Fourier Transform @@ -1618,8 +1604,8 @@ You're never really done. - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - Used to determine the similarity of documents + - The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### van Emde Boas Trees @@ -1630,17 +1616,17 @@ You're never really done. - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees - - Know at least one type of balanced binary tree (and know how it's implemented): + - کم از کم ایک قسم کے بیلنسڈ بائنری ٹری کو جانیں (اور جانیں کہ اسے کیسے کوڈ کیا گیا ہے): - "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular. A particularly interesting self-organizing data structure is the splay tree, which uses rotations to move any accessed key to the root." - Skiena - Of these, I chose to implement a splay tree. From what I've read, you won't implement a balanced search tree in your interview. But I wanted exposure to coding one up - and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code. - - splay tree: insert, search, delete functions + and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code + - Splay tree: insert, search, delete functions If you end up implementing red/black tree try just these: - - search and insertion functions, skipping delete - - I want to learn more about B-Tree since it's used so widely with very large data sets. + - Search and insertion functions, skipping delete + - I want to learn more about B-Tree since it's used so widely with very large data sets - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - **AVL trees** @@ -1649,24 +1635,25 @@ You're never really done. The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it attractive for data structures that may be built once and loaded without reconstruction, such as language - dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter). + dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter) - [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - In practice: Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors, data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory, - networking and file system code) etc. + networking and file system code) etc - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - MIT Lecture: Splay Trees: - Gets very mathy, but watch the last 10 minutes for sure. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - **Red/black trees** - - these are a translation of a 2-3 tree (see below) + - These are a translation of a 2-3 tree (see below). - In practice: Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. Not only does this make them valuable in time-sensitive applications such as real-time applications, @@ -1674,7 +1661,7 @@ You're never really done. for example, many data structures used in computational geometry can be based on red–black trees, and the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java, the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor - hashcodes, a Red-Black tree is used. + hashcodes, a Red-Black tree is used - [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) - [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) @@ -1706,12 +1693,12 @@ You're never really done. - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - **B-Trees** - - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) + - Fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor). - In Practice: B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary block in a particular file. The basic problem is turning the file block i address into a disk block - (or perhaps to a cylinder-head-sector) address. + (or perhaps to a cylinder-head-sector) address - [B-Tree](https://en.wikipedia.org/wiki/B-tree) - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) @@ -1724,9 +1711,8 @@ You're never really done. - ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors - - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - Great for finding number of points in a rectangle or higher dimension object + - A good fit for k-nearest neighbors - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### Skip lists @@ -1765,49 +1751,24 @@ You're never really done. - [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) - ### Discrete math - - see videos below - -- ### Machine Learning - - Why ML? - - [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) - - [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY) - - [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw) - - [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) - - [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) - - [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM) - - [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) - - [Practical Guide to implementing Neural Networks in Python (using Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) - - Courses: - - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) - - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) - - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates) - - [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks) - - [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730) - - [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) - - [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive) - - Resources: - - Books: - - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - - Data School: http://www.dataschool.io/ + - [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + - [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t) + - [Discrete Mathematics By IIT Ropar NPTEL](https://nptel.ac.in/courses/106/106/106106183/) --- ## Additional Detail on Some Subjects - I added these to reinforce some ideas already presented above, but didn't want to include them - above because it's just too much. It's easy to overdo it on a subject. - You want to get hired in this century, right? + میں نے ان کو پہلے سے پیش کیے گئے کچھ خیالات کو تقویت دینے کے لیے شامل کیا تھا لیکن میں انھیں اوپر شامل نہیں کرنا چاہتا تھا کیونکہ یہ کافی سے زیادہ ہے۔ کسی ایک موضوع پر اسے زیادہ کرنا آسان ہے۔ +آپ اس صدی میں ملازمت حاصل کرنا چاہتے ہیں، کیا میں ٹھیک کہہ رہا ہوں؟ - **SOLID** - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) - - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) + - [ ] O - [Open/Closed Principle](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) - - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) + - [ ] L - [Liskov Substitution Principle](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ Principle](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) @@ -1826,10 +1787,10 @@ You're never really done. - [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) - **More Dynamic Programming** (videos) - - [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) - - [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) - - [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) - - [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=r4-cftqTcdI&ab_channel=MITOpenCourseWare) + - [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=KLBCUx1is2c&ab_channel=MITOpenCourseWare) + - [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=TDo3r5M1LNo&ab_channel=MITOpenCourseWare) + - [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=i9OAOk0CUQE&ab_channel=MITOpenCourseWare) - [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) - [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) @@ -1852,7 +1813,7 @@ You're never really done. - **String Matching** - Rabin-Karp (videos): - - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) + - [Rabin Karps Algorithm](https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw) - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) @@ -1872,18 +1833,18 @@ You're never really done. - Stanford lectures on sorting: - [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) - [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) - - Shai Simonson, [Aduni.org](http://www.aduni.org/): + - Shai Simonson: - [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) - [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) - Steven Skiena lectures on sorting: - - [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) - - [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) + - [CSE373 2020 - Mergesort/Quicksort (video)](https://www.youtube.com/watch?v=jUf-UQ3a0kg&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=8) + - [CSE373 2020 - Linear Sorting (video)](https://www.youtube.com/watch?v=0ksyQKmre84&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=9) + +- NAND To Tetris: [Build a Modern Computer from First Principles](https://www.coursera.org/learn/build-a-computer) ## Video Series -Sit back and enjoy. "Netflix and skill" :P +Sit back and enjoy. - [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) @@ -1893,14 +1854,7 @@ Sit back and enjoy. "Netflix and skill" :P - [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) -- [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) - -- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t) - -- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - -- CSE373 - Analysis of Algorithms (25 videos) - - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) +- [Skiena lectures from Algorithm Design Manual - CSE373 2020 - Analysis of Algorithms (26 videos)](https://www.youtube.com/watch?v=22hwcnXIGgk&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=1) - [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) @@ -1910,8 +1864,6 @@ Sit back and enjoy. "Netflix and skill" :P - [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) -- ~~[UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)~~ - - [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) - [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) @@ -1926,7 +1878,7 @@ Sit back and enjoy. "Netflix and skill" :P - [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) -- [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) +- [MIT 6.824: Distributed Systems, Spring 2020 (20 videos)](https://www.youtube.com/watch?v=cQP8WApzIQQ&list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) - [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) @@ -1950,6 +1902,11 @@ Sit back and enjoy. "Netflix and skill" :P - [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) - [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) +## Algorithms implementation + +- [Multiple Algorithms implementation by Princeton University](https://algs4.cs.princeton.edu/code) + + ## Papers - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) @@ -1960,28 +1917,20 @@ Sit back and enjoy. "Netflix and skill" :P - [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) - mostly replaced by Cloud Dataflow? - [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - The Dynamo paper kicked off the NoSQL revolution - [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf) -- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) -- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) -- [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) - - paper not available - 2012: AddressSanitizer: A Fast Address Sanity Checker: - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) - 2013: Spanner: Google’s Globally-Distributed Database: - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) - [video](https://www.usenix.org/node/170855) -- [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) - [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) - [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) -- [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf ) - [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) -- [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) - +- More papers: [1,000 papers](https://github.com/0voice/computer_expert_paper) ## LICENSE diff --git a/translations/README-uz.md b/translations/README-uz.md index a80d639..d4e4426 100644 --- a/translations/README-uz.md +++ b/translations/README-uz.md @@ -607,6 +607,14 @@ Birinchi kodizni doskada yoki qog'ozda yozing, kompyuterda emas. Og'zaki test qi - exists(key) - get(key) - remove(key) + +## Ma'lumotlar tuzilmasi vizualizatsiya (Data structure Visualizations) + +Animatsiya orqali ma'lumotlar tuzilmalari va algoritmlarini vizualizatsiya qilish. +Quyidagi havolada siz ma'lumotlar tuzilmasi aslida qanday ishlashini tushunib olasiz. + + - [ ] [Visualizing Algorithms](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) + - [ ] [Visualgo](https://visualgo.net/en) ## Qo'shimcha bilimlar @@ -1235,8 +1243,9 @@ Computer science da graflar bir talay masalalarni tasvirlashda ishlatiladi. Shun - [ ] 2-3 minutlik qisqa mavzuga oid videolar seriyasi (23 video) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2-5 minutlik qisqa mavzuga oid videolar seriyasi - Michael Sambol (40 video): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] 2-5 minutlik qisqa mavzuga oid videolar seriyasi - Michael Sambol (46 video): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1648,6 +1657,7 @@ Hech qachon tugatgan bo'lmaymiz. - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - **Splay trees** - Amalda: diff --git a/translations/README-vi.md b/translations/README-vi.md index c62ef3f..2424de0 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -1320,8 +1320,9 @@ Bạn sẽ biết thêm nhiều ứng dụng của đồ thị trong sách của - [ ] Các video ngắn 2-3 phút (23 video) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Các video ngắn 2-5 phút - Michael Sambol (40 video) - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] Các video ngắn 2-5 phút - Michael Sambol (46 video) + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) --- @@ -1648,6 +1649,7 @@ Bạn không bao giờ thực sự học xong! - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) - [ ] **Splay trees** - Trong thực tế: