├── .gitignore ├── extras ├── future-googler.pdf ├── future-googler-preview.png └── cheat sheets │ ├── Cpp_reference.pdf │ ├── system-design.pdf │ ├── bits-cheat-cheet.pdf │ ├── python-cheat-sheet-v1.pdf │ ├── STL Quick Reference 1.29.pdf │ └── C Reference Card (ANSI) 2.2.pdf ├── programming-language-resources.md ├── LICENSE.txt └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | personal-9894.md 3 | -------------------------------------------------------------------------------- /extras/future-googler.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/future-googler.pdf -------------------------------------------------------------------------------- /extras/future-googler-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/future-googler-preview.png -------------------------------------------------------------------------------- /extras/cheat sheets/Cpp_reference.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/cheat sheets/Cpp_reference.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/system-design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/cheat sheets/system-design.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/bits-cheat-cheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/cheat sheets/bits-cheat-cheet.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/python-cheat-sheet-v1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/cheat sheets/python-cheat-sheet-v1.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/STL Quick Reference 1.29.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/cheat sheets/STL Quick Reference 1.29.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/C Reference Card (ANSI) 2.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P1xt/google-interview-university/HEAD/extras/cheat sheets/C Reference Card (ANSI) 2.2.pdf -------------------------------------------------------------------------------- /programming-language-resources.md: -------------------------------------------------------------------------------- 1 | ## Programming Language Resources 2 | 3 | - C 4 | - [ANSI C Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/C%20Reference%20Card%20(ANSI)%202.2.pdf) 5 | - K&R C book (ANSI C) 6 | - [Make, Clang (video)](https://www.youtube.com/watch?v=U3zCxnj2w8M) 7 | - GDB: 8 | - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=USPvePv1uzE) 9 | - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=y5JmQItfFck) 10 | - [Valgrind (video)](https://www.youtube.com/watch?v=fvTsFjDuag8) 11 | 12 | - C++ 13 | - [C++ Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/Cpp_reference.pdf) 14 | - [STL Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) 15 | - basics 16 | - pointers 17 | - functions 18 | - references 19 | - templates 20 | - compilation 21 | - scope & linkage 22 | - namespaces 23 | - OOP 24 | - STL 25 | - [functors](http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html) 26 | - [C++ at Google (video)](https://www.youtube.com/watch?v=NOCElcMcFik) 27 | - [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) 28 | - Google uses clang-format (there is a command line "style" argument: -style=google) 29 | - [Efficiency with Algorithms, Performance with Data Structures (video)](https://youtu.be/fHNmRkzxHWs) 30 | - [Review of C++ concepts (video)](https://www.youtube.com/watch?v=Rub-JsjMhWY) 31 | 32 | - Python 33 | - [Python Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) 34 | - [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA) 35 | - [Series on 3.4 (video)](https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_) 36 | - [Zero to Hero (video)](https://www.youtube.com/watch?v=emY34tSKXc4) 37 | - [Statistics for Hackers (video)](https://www.youtube.com/watch?v=Iq9DzN6mvYA) 38 | - [Faster Python (video)](https://www.youtube.com/watch?v=JDSGVvMwNM8) 39 | - [CPython Walk (video)](https://www.youtube.com/watch?v=LhadeL7_EIU&list=PLzV58Zm8FuBL6OAv1Yu6AwXZrnsFbbR0S&index=6) 40 | - [10 Tips for Pythonic Code (video)](https://www.youtube.com/watch?v=_O23jIXsshs) 41 | - [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M) 42 | 43 | - Java 44 | - [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A) 45 | - [Software Construction In Java (video)](https://www.edx.org/course/software-construction-java-mitx-6-005-1x) 46 | - [Introduction To Programming In Java](http://introcs.cs.princeton.edu/java/home/) 47 | - [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/) 48 | - Go 49 | - [The Go programming Language](https://golang.org/) 50 | - [The Go programming Language (book)](http://www.gopl.io/) 51 | - [A Tour of Go](https://tour.golang.org/) 52 | - [Effective Go](https://golang.org/doc/effective_go.html) 53 | - [Go Wiki](https://golang.org/wiki) 54 | - [Go at Google: Language Design in the Service of Software Engineering](https://talks.golang.org/2012/splash.article) 55 | - [Go Proverbs](http://go-proverbs.github.io/) 56 | - [Go Proverbs - Rob Pike (video)](https://www.youtube.com/watch?v=PAAkCSZUG1c) 57 | - Other Language 1 58 | - Other Language 2 59 | - etc 60 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Attribution-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-ShareAlike 4.0 International Public 58 | License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-ShareAlike 4.0 International Public License ("Public 63 | License"). To the extent this Public License may be interpreted as a 64 | contract, You are granted the Licensed Rights in consideration of Your 65 | acceptance of these terms and conditions, and the Licensor grants You 66 | such rights in consideration of benefits the Licensor receives from 67 | making the Licensed Material available under these terms and 68 | conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. Share means to provide material to the public by any means or 126 | process that requires permission under the Licensed Rights, such 127 | as reproduction, public display, public performance, distribution, 128 | dissemination, communication, or importation, and to make material 129 | available to the public including in ways that members of the 130 | public may access the material from a place and at a time 131 | individually chosen by them. 132 | 133 | l. Sui Generis Database Rights means rights other than copyright 134 | resulting from Directive 96/9/EC of the European Parliament and of 135 | the Council of 11 March 1996 on the legal protection of databases, 136 | as amended and/or succeeded, as well as other essentially 137 | equivalent rights anywhere in the world. 138 | 139 | m. You means the individual or entity exercising the Licensed Rights 140 | under this Public License. Your has a corresponding meaning. 141 | 142 | 143 | Section 2 -- Scope. 144 | 145 | a. License grant. 146 | 147 | 1. Subject to the terms and conditions of this Public License, 148 | the Licensor hereby grants You a worldwide, royalty-free, 149 | non-sublicensable, non-exclusive, irrevocable license to 150 | exercise the Licensed Rights in the Licensed Material to: 151 | 152 | a. reproduce and Share the Licensed Material, in whole or 153 | in part; and 154 | 155 | b. produce, reproduce, and Share Adapted Material. 156 | 157 | 2. Exceptions and Limitations. For the avoidance of doubt, where 158 | Exceptions and Limitations apply to Your use, this Public 159 | License does not apply, and You do not need to comply with 160 | its terms and conditions. 161 | 162 | 3. Term. The term of this Public License is specified in Section 163 | 6(a). 164 | 165 | 4. Media and formats; technical modifications allowed. The 166 | Licensor authorizes You to exercise the Licensed Rights in 167 | all media and formats whether now known or hereafter created, 168 | and to make technical modifications necessary to do so. The 169 | Licensor waives and/or agrees not to assert any right or 170 | authority to forbid You from making technical modifications 171 | necessary to exercise the Licensed Rights, including 172 | technical modifications necessary to circumvent Effective 173 | Technological Measures. For purposes of this Public License, 174 | simply making modifications authorized by this Section 2(a) 175 | (4) never produces Adapted Material. 176 | 177 | 5. Downstream recipients. 178 | 179 | a. Offer from the Licensor -- Licensed Material. Every 180 | recipient of the Licensed Material automatically 181 | receives an offer from the Licensor to exercise the 182 | Licensed Rights under the terms and conditions of this 183 | Public License. 184 | 185 | b. Additional offer from the Licensor -- Adapted Material. 186 | Every recipient of Adapted Material from You 187 | automatically receives an offer from the Licensor to 188 | exercise the Licensed Rights in the Adapted Material 189 | under the conditions of the Adapter's License You apply. 190 | 191 | c. No downstream restrictions. You may not offer or impose 192 | any additional or different terms or conditions on, or 193 | apply any Effective Technological Measures to, the 194 | Licensed Material if doing so restricts exercise of the 195 | Licensed Rights by any recipient of the Licensed 196 | Material. 197 | 198 | 6. No endorsement. Nothing in this Public License constitutes or 199 | may be construed as permission to assert or imply that You 200 | are, or that Your use of the Licensed Material is, connected 201 | with, or sponsored, endorsed, or granted official status by, 202 | the Licensor or others designated to receive attribution as 203 | provided in Section 3(a)(1)(A)(i). 204 | 205 | b. Other rights. 206 | 207 | 1. Moral rights, such as the right of integrity, are not 208 | licensed under this Public License, nor are publicity, 209 | privacy, and/or other similar personality rights; however, to 210 | the extent possible, the Licensor waives and/or agrees not to 211 | assert any such rights held by the Licensor to the limited 212 | extent necessary to allow You to exercise the Licensed 213 | Rights, but not otherwise. 214 | 215 | 2. Patent and trademark rights are not licensed under this 216 | Public License. 217 | 218 | 3. To the extent possible, the Licensor waives any right to 219 | collect royalties from You for the exercise of the Licensed 220 | Rights, whether directly or through a collecting society 221 | under any voluntary or waivable statutory or compulsory 222 | licensing scheme. In all other cases the Licensor expressly 223 | reserves any right to collect such royalties. 224 | 225 | 226 | Section 3 -- License Conditions. 227 | 228 | Your exercise of the Licensed Rights is expressly made subject to the 229 | following conditions. 230 | 231 | a. Attribution. 232 | 233 | 1. If You Share the Licensed Material (including in modified 234 | form), You must: 235 | 236 | a. retain the following if it is supplied by the Licensor 237 | with the Licensed Material: 238 | 239 | i. identification of the creator(s) of the Licensed 240 | Material and any others designated to receive 241 | attribution, in any reasonable manner requested by 242 | the Licensor (including by pseudonym if 243 | designated); 244 | 245 | ii. a copyright notice; 246 | 247 | iii. a notice that refers to this Public License; 248 | 249 | iv. a notice that refers to the disclaimer of 250 | warranties; 251 | 252 | v. a URI or hyperlink to the Licensed Material to the 253 | extent reasonably practicable; 254 | 255 | b. indicate if You modified the Licensed Material and 256 | retain an indication of any previous modifications; and 257 | 258 | c. indicate the Licensed Material is licensed under this 259 | Public License, and include the text of, or the URI or 260 | hyperlink to, this Public License. 261 | 262 | 2. You may satisfy the conditions in Section 3(a)(1) in any 263 | reasonable manner based on the medium, means, and context in 264 | which You Share the Licensed Material. For example, it may be 265 | reasonable to satisfy the conditions by providing a URI or 266 | hyperlink to a resource that includes the required 267 | information. 268 | 269 | 3. If requested by the Licensor, You must remove any of the 270 | information required by Section 3(a)(1)(A) to the extent 271 | reasonably practicable. 272 | 273 | b. ShareAlike. 274 | 275 | In addition to the conditions in Section 3(a), if You Share 276 | Adapted Material You produce, the following conditions also apply. 277 | 278 | 1. The Adapter's License You apply must be a Creative Commons 279 | license with the same License Elements, this version or 280 | later, or a BY-SA Compatible License. 281 | 282 | 2. You must include the text of, or the URI or hyperlink to, the 283 | Adapter's License You apply. You may satisfy this condition 284 | in any reasonable manner based on the medium, means, and 285 | context in which You Share Adapted Material. 286 | 287 | 3. You may not offer or impose any additional or different terms 288 | or conditions on, or apply any Effective Technological 289 | Measures to, Adapted Material that restrict exercise of the 290 | rights granted under the Adapter's License You apply. 291 | 292 | 293 | Section 4 -- Sui Generis Database Rights. 294 | 295 | Where the Licensed Rights include Sui Generis Database Rights that 296 | apply to Your use of the Licensed Material: 297 | 298 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 299 | to extract, reuse, reproduce, and Share all or a substantial 300 | portion of the contents of the database; 301 | 302 | b. if You include all or a substantial portion of the database 303 | contents in a database in which You have Sui Generis Database 304 | Rights, then the database in which You have Sui Generis Database 305 | Rights (but not its individual contents) is Adapted Material, 306 | 307 | including for purposes of Section 3(b); and 308 | c. You must comply with the conditions in Section 3(a) if You Share 309 | all or a substantial portion of the contents of the database. 310 | 311 | For the avoidance of doubt, this Section 4 supplements and does not 312 | replace Your obligations under this Public License where the Licensed 313 | Rights include other Copyright and Similar Rights. 314 | 315 | 316 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 317 | 318 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 319 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 320 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 321 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 322 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 323 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 324 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 325 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 326 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 327 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 328 | 329 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 330 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 331 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 332 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 333 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 334 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 335 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 336 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 337 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 338 | 339 | c. The disclaimer of warranties and limitation of liability provided 340 | above shall be interpreted in a manner that, to the extent 341 | possible, most closely approximates an absolute disclaimer and 342 | waiver of all liability. 343 | 344 | 345 | Section 6 -- Term and Termination. 346 | 347 | a. This Public License applies for the term of the Copyright and 348 | Similar Rights licensed here. However, if You fail to comply with 349 | this Public License, then Your rights under this Public License 350 | terminate automatically. 351 | 352 | b. Where Your right to use the Licensed Material has terminated under 353 | Section 6(a), it reinstates: 354 | 355 | 1. automatically as of the date the violation is cured, provided 356 | it is cured within 30 days of Your discovery of the 357 | violation; or 358 | 359 | 2. upon express reinstatement by the Licensor. 360 | 361 | For the avoidance of doubt, this Section 6(b) does not affect any 362 | right the Licensor may have to seek remedies for Your violations 363 | of this Public License. 364 | 365 | c. For the avoidance of doubt, the Licensor may also offer the 366 | Licensed Material under separate terms or conditions or stop 367 | distributing the Licensed Material at any time; however, doing so 368 | will not terminate this Public License. 369 | 370 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 371 | License. 372 | 373 | 374 | Section 7 -- Other Terms and Conditions. 375 | 376 | a. The Licensor shall not be bound by any additional or different 377 | terms or conditions communicated by You unless expressly agreed. 378 | 379 | b. Any arrangements, understandings, or agreements regarding the 380 | Licensed Material not stated herein are separate from and 381 | independent of the terms and conditions of this Public License. 382 | 383 | 384 | Section 8 -- Interpretation. 385 | 386 | a. For the avoidance of doubt, this Public License does not, and 387 | shall not be interpreted to, reduce, limit, restrict, or impose 388 | conditions on any use of the Licensed Material that could lawfully 389 | be made without permission under this Public License. 390 | 391 | b. To the extent possible, if any provision of this Public License is 392 | deemed unenforceable, it shall be automatically reformed to the 393 | minimum extent necessary to make it enforceable. If the provision 394 | cannot be reformed, it shall be severed from this Public License 395 | without affecting the enforceability of the remaining terms and 396 | conditions. 397 | 398 | c. No term or condition of this Public License will be waived and no 399 | failure to comply consented to unless expressly agreed to by the 400 | Licensor. 401 | 402 | d. Nothing in this Public License constitutes or may be interpreted 403 | as a limitation upon, or waiver of, any privileges and immunities 404 | that apply to the Licensor or You, including from the legal 405 | processes of any jurisdiction or authority. 406 | 407 | 408 | ======================================================================= 409 | 410 | Creative Commons is not a party to its public 411 | licenses. Notwithstanding, Creative Commons may elect to apply one of 412 | its public licenses to material it publishes and in those instances 413 | will be considered the “Licensor.” The text of the Creative Commons 414 | public licenses is dedicated to the public domain under the CC0 Public 415 | Domain Dedication. Except for the limited purpose of indicating that 416 | material is shared under a Creative Commons public license or as 417 | otherwise permitted by the Creative Commons policies published at 418 | creativecommons.org/policies, Creative Commons does not authorize the 419 | use of the trademark "Creative Commons" or any other trademark or logo 420 | of Creative Commons without its prior written consent including, 421 | without limitation, in connection with any unauthorized modifications 422 | to any of its public licenses or any other arrangements, 423 | understandings, or agreements concerning use of licensed material. For 424 | the avoidance of doubt, this paragraph does not form part of the 425 | public licenses. 426 | 427 | Creative Commons may be contacted at creativecommons.org. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Google Interview University 2 | 3 | ## What is it? 4 | 5 | This is my multi-month study plan for going from web developer (self-taught, no CS degree) to Google software engineer. 6 | 7 | ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) 8 | 9 | This long list has been extracted and expanded from **Google's coaching notes**, so these are the things you need to know. 10 | There are extra items I added at the bottom that may come up in the interview or be helpful in solving a problem. Many items are from 11 | Steve Yegge's "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" and are reflected 12 | sometimes word-for-word in Google's coaching notes. 13 | 14 | --- 15 | 16 | ## Table of Contents 17 | 18 | - [What is it?](#what-is-it) 19 | - [Why use it?](#why-use-it) 20 | - [How to use it](#how-to-use-it) 21 | - [Get in a Googley Mood](#get-in-a-googley-mood) 22 | - [Did I Get the Job?](#did-i-get-the-job) 23 | - [Follow Along with Me](#follow-along-with-me) 24 | - [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough) 25 | - [About Google](#about-google) 26 | - [About Video Resources](#about-video-resources) 27 | - [Interview Process & General Interview Prep](#interview-process--general-interview-prep) 28 | - [Pick One Language for the Interview](#pick-one-language-for-the-interview) 29 | - [Before you Get Started](#before-you-get-started) 30 | - [What you Won't See Covered](#what-you-wont-see-covered) 31 | - [Prerequisite Knowledge](#prerequisite-knowledge) 32 | - [The Daily Plan](#the-daily-plan) 33 | - [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis) 34 | - [Data Structures](#data-structures) 35 | - [Arrays](#arrays) 36 | - [Linked Lists](#linked-lists) 37 | - [Stack](#stack) 38 | - [Queue](#queue) 39 | - [Hash table](#hash-table) 40 | - [More Knowledge](#more-knowledge) 41 | - [Binary search](#binary-search) 42 | - [Bitwise operations](#bitwise-operations) 43 | - [Trees](#trees) 44 | - [Trees - Notes & Background](#trees---notes--background) 45 | - [Binary search trees: BSTs](#binary-search-trees-bsts) 46 | - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) 47 | - [Tries](#tries) 48 | - [Balanced search trees](#balanced-search-trees) 49 | - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) 50 | - [Sorting](#sorting) 51 | - [Graphs](#graphs) 52 | - [Even More Knowledge](#even-more-knowledge) 53 | - [Recursion](#recursion) 54 | - [Dynamic Programming](#dynamic-programming) 55 | - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) 56 | - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) 57 | - [Caches](#caches) 58 | - [Processes and Threads](#processes-and-threads) 59 | - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) 60 | - [Papers](#papers) 61 | - [Testing](#testing) 62 | - [Scheduling](#scheduling) 63 | - [Implement system routines](#implement-system-routines) 64 | - [String searching & manipulations](#string-searching--manipulations) 65 | - [Final Review](#final-review) 66 | - [Books](#books) 67 | - [Coding exercises/challenges](#coding-exerciseschallenges) 68 | - [Once you're closer to the interview](#once-youre-closer-to-the-interview) 69 | - [Your Resume](#your-resume) 70 | - [Be thinking of for when the interview comes](#be-thinking-of-for-when-the-interview-comes) 71 | - [Have questions for the interviewer](#have-questions-for-the-interviewer) 72 | - [Once You've Got The Job](#once-youve-got-the-job) 73 | 74 | ---------------- Everything below this point is optional ---------------- 75 | 76 | - [Additional Learning](#additional-learning) 77 | - [Unicode](#unicode) 78 | - [Endianness](#endianness) 79 | - [Emacs and vi(m)](#emacs-and-vim) 80 | - [Unix command line tools](#unix-command-line-tools) 81 | - [Information theory](#information-theory) 82 | - [Parity & Hamming Code](#parity--hamming-code) 83 | - [Entropy](#entropy) 84 | - [Cryptography](#cryptography) 85 | - [Compression](#compression) 86 | - [Networking](#networking) 87 | - [Computer Security](#computer-security) 88 | - [Garbage collection](#garbage-collection) 89 | - [Parallel Programming](#parallel-programming) 90 | - [Design patterns](#design-patterns) 91 | - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) 92 | - [Fast Fourier Transform](#fast-fourier-transform) 93 | - [Bloom Filter](#bloom-filter) 94 | - [van Emde Boas Trees](#van-emde-boas-trees) 95 | - [Augmented Data Structures](#augmented-data-structures) 96 | - [Skip lists](#skip-lists) 97 | - [Network Flows](#network-flows) 98 | - [Disjoint Sets & Union Find](#disjoint-sets--union-find) 99 | - [Math for Fast Processing](#math-for-fast-processing) 100 | - [Treap](#treap) 101 | - [Linear Programming](#linear-programming) 102 | - [Geometry, Convex hull](#geometry-convex-hull) 103 | - [Discrete math](#discrete-math) 104 | - [Machine Learning](#machine-learning) 105 | - [Go](#go) 106 | - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) 107 | - [Video Series](#video-series) 108 | - [Computer Science Courses](#computer-science-courses) 109 | 110 | --- 111 | 112 | ## Why use it? 113 | 114 | I'm following this plan to prepare for my Google interview. I've been building the web, building 115 | services, and launching startups since 1997. I have an economics degree, not a CS degree. I've 116 | been very successful in my career, but I want to work at Google. I want to progress into larger systems 117 | and get a real understanding of computer systems, algorithmic efficiency, data structure performance, 118 | low-level languages, and how it all works. And if you don't know any of it, Google won't hire you. 119 | 120 | 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 121 | traverse a graph. If I had to code a sorting algorithm, I can tell ya it wouldn't have been very good. 122 | Every data structure I've ever used was built into the language, and I didn't know how they worked 123 | under the hood at all. I've never had to manage memory, unless a process I was running would give an "out of 124 | memory" error, and then I'd have to find a workaround. I've used a few multi-dimensional arrays in my life and 125 | thousands of associative arrays, but I've never created data structures from scratch. 126 | 127 | But after going through this study plan I have high confidence I'll be hired. It's a long plan. It's going to take me 128 | months. If you are familiar with a lot of this already it will take you a lot less time. 129 | 130 | ## How to use it 131 | 132 | Everything below is an outline, and you should tackle the items in order from top to bottom. 133 | 134 | I'm using Github's special markdown flavor, including tasks lists to check progress. 135 | 136 | - [x] Create a new branch so you can check items like this, just put an x in the brackets: [x] 137 | 138 | [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) 139 | 140 | ## Get in a Googley Mood 141 | 142 | Print out a "[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize. 143 | 144 | [![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf) 145 | 146 | ## Did I Get the Job? 147 | 148 | I haven't applied yet. 149 | 150 | I still have a few days in the learning phase (finishing up this crazy list), and starting next week all 151 | I'll be doing is programming questions all day long. That will continue for a few weeks, and then I'll 152 | apply through a referral I've been holding onto since February (yes, February). 153 | 154 | Thanks for the referral, JP. 155 | 156 | ## Follow Along with Me 157 | 158 | I'm on the journey, too. Follow along on my blog at [GoogleyAsHeck.com](https://googleyasheck.com/) 159 | 160 | - Twitter: [@googleyasheck](https://twitter.com/googleyasheck) 161 | - Twitter: [@StartupNextDoor](https://twitter.com/StartupNextDoor) 162 | - Google+: [+Googleyasheck](https://plus.google.com/+Googleyasheck) 163 | - LinkedIn: [johnawasham](https://www.linkedin.com/in/johnawasham) 164 | 165 | ![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) 166 | 167 | ## Don't feel you aren't smart enough 168 | - Google engineers are smart, but many have an insecurity that they aren't smart enough, even though they work at Google. 169 | - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) 170 | 171 | ## About Google 172 | 173 | - [ ] For students - [Google Careers: Technical Development Guide](https://www.google.com/about/careers/students/guide-to-technical-development.html) 174 | - [ ] How Search Works: 175 | - [ ] [The Evolution of Search (video)](https://www.youtube.com/watch?v=mTBShTwCnD4) 176 | - [ ] [How Search Works - the story](https://www.google.com/insidesearch/howsearchworks/thestory/) 177 | - [ ] [How Search Works](https://www.google.com/insidesearch/howsearchworks/) 178 | - [ ] [How Search Works - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs) 179 | - [ ] [How Google makes improvements to its search algorithm (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) 180 | - [ ] Series: 181 | - [ ] [How Google Search Dealt With Mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) 182 | - [ ] [Google's Secret Study To Find Out Our Needs](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) 183 | - [ ] [Google Search Will Be Your Next Brain](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) 184 | - [ ] [The Deep Mind Of Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) 185 | - [ ] [Book: How Google Works](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) 186 | - [ ] [Made by Google announcement - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI) 187 | 188 | ## About Video Resources 189 | 190 | Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. 191 | It is free to do so, but sometimes the classes are not in session so you have to wait a couple of months, so you have no access. 192 | 193 | I'd appreciate your help converting the MOOC video links to public sources to replace the online course videos over time. I like using university lectures. 194 | 195 | 196 | ## Interview Process & General Interview Prep 197 | 198 | - [ ] Videos: 199 | - [ ] [How to Work at Google - Candidate Coaching Session (video)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be) 200 | - [ ] [Google Recruiters Share Technical Interview Tips (video)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be) 201 | - [ ] [How to Work at Google: Tech Resume Preparation (video)](https://www.youtube.com/watch?v=8npJLXkcmu8) 202 | 203 | - [ ] Articles: 204 | - [ ] [Becoming a Googler in Three Steps](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/) 205 | - [ ] [Get That Job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html) 206 | - all the things he mentions that you need to know are listed below 207 | - [ ] _(very dated)_ [How To Get A Job At Google, Interview Questions, Hiring Process](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html) 208 | - [ ] [Phone Screen Questions](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions) 209 | 210 | - [ ] Additional (not suggested by Google but I added): 211 | - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) 212 | - [ ] [Four Steps To Google Without A Degree](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) 213 | - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) 214 | - [ ] [How Google Thinks About Hiring, Management And Culture](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) 215 | - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) 216 | - [ ] Cracking The Coding Interview Set 1: 217 | - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) 218 | - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) 219 | - [ ] How to Get a Job at the Big 4: 220 | - [ ] ['How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) 221 | - [ ] [Failing at Google Interviews](http://alexbowe.com/failing-at-google-interviews/) 222 | 223 | ## Pick One Language for the Interview 224 | 225 | I wrote this short article about it: [Important: Pick One Language for the Google Interview](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) 226 | 227 | You can use a language you are comfortable in to do the coding part of the interview, but for Google, these are solid choices: 228 | 229 | - C++ 230 | - Java 231 | - Python 232 | 233 | You could also use these, but read around first. There may be caveats: 234 | 235 | - JavaScript 236 | - Ruby 237 | 238 | You need to be very comfortable in the language, and be knowledgeable. 239 | 240 | Read more about choices: 241 | - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ 242 | - http://blog.codingforinterviews.com/best-programming-language-jobs/ 243 | - https://www.quora.com/What-is-the-best-language-to-program-in-for-an-in-person-Google-interview 244 | 245 | [See language resources here](programming-language-resources.md) 246 | 247 | You'll see some C, C++, and Python learning included below, because I'm learning. There are a few books involved, see the bottom. 248 | 249 | ## Before you Get Started 250 | 251 | This list grew over many months, and yes, it kind of got out of hand. 252 | 253 | Here are some mistakes I made so you'll have a better experience. 254 | 255 | ### 1. You Won't Remember it All 256 | 257 | I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going 258 | through my notes and making flashcards so I could review (see below). 259 | 260 | ### 2. Use Flashcards 261 | 262 | To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code. 263 | Each card has different formatting. 264 | 265 | I made a mobile-first website so I could review on my phone and tablet, whereever I am. 266 | 267 | Make your own for free: 268 | 269 | - [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) 270 | - [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): 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 by Google. 271 | 272 | **Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the 273 | same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in 274 | your brain. 275 | 276 | ### 3. Review, review, review 277 | 278 | I keep a set of cheatsheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time. 279 | 280 | Take a break from programming problems for a half hour and go through your flashcards. 281 | 282 | ### 4. Focus 283 | 284 | There are a lot of distractions that can take up valuable time. Focus and concentration is hard. 285 | 286 | ## What you won't see covered 287 | 288 | This big list all started as a personal to-do list made from Google interview coaching notes. These are prevalent 289 | technologies but were not mentioned in those notes: 290 | 291 | - SQL 292 | - Javascript 293 | - HTML, CSS, and other front-end technologies 294 | 295 | ## The Daily Plan 296 | 297 | Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement. 298 | 299 | Each day I take one subject from the list below, watch videos about that subject, and write an implementation in: 300 | C - using structs and functions that take a struct * and something else as args. 301 | C++ - without using built-in types 302 | C++ - using built-in types, like STL's std::list for a linked list 303 | Python - using built-in types (to keep practicing Python) 304 | and write tests to ensure I'm doing it right, sometimes just using simple assert() statements 305 | You may do Java or something else, this is just my thing. 306 | 307 | Why code in all of these? 308 | 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) 309 | Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python)) 310 | 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) 311 | 312 | I may not have time to do all of these for every subject, but I'll try. 313 | 314 | You can see my code here: 315 | - [C] (https://github.com/jwasham/practice-c) 316 | - [C++] (https://github.com/jwasham/practice-cpp) 317 | - [Python] (https://github.com/jwasham/practice-python) 318 | 319 | You don't need to memorize the guts of every algorithm. 320 | 321 | Write code on a whiteboard, not a computer. Test with some sample inputs. Then test it out on a computer. 322 | 323 | ## Prerequisite Knowledge 324 | 325 | - [ ] **How computers process a program:** 326 | - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) 327 | - [ ] [Machine Code Instructions (video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) 328 | 329 | - [ ] **Compilers** 330 | - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) 331 | - [ ] [Hardvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo) 332 | - [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk) 333 | - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) 334 | 335 | - [ ] **How floating point numbers are stored:** 336 | - [ ] 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) 337 | - [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec) 338 | 339 | ## Algorithmic complexity / Big-O / Asymptotic analysis 340 | - nothing to implement 341 | - [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) 342 | - [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) 343 | - [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) 344 | - [ ] Skiena: 345 | - [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 346 | - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) 347 | - [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/) 348 | - [ ] [Orders of Growth (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59) 349 | - [ ] [Asymptotics (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) 350 | - [ ] [UC Berkeley Big O (video)](https://youtu.be/VIS4YDpuP98) 351 | - [ ] [UC Berkeley Big Omega (video)](https://youtu.be/ca3e7UVmeUc) 352 | - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) 353 | - [ ] [Illustrating "Big O" (video)](https://class.coursera.org/algorithmicthink1-004/lecture/63) 354 | - [ ] TopCoder (includes recurrence relations and master theorem): 355 | - [Computational Complexity: Section 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) 356 | - [Computational Complexity: Section 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) 357 | - [ ] [Cheat sheet](http://bigocheatsheet.com/) 358 | 359 | 360 | If some of the lectures are too mathy, you can jump down to the bottom and 361 | watch the discrete mathematics videos to get the background knowledge. 362 | 363 | ## Data Structures 364 | 365 | - ### Arrays 366 | - Implement an automatically resizing vector. 367 | - [ ] Description: 368 | - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) 369 | - [Basic Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) 370 | - [Multi-dim (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) 371 | - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) 372 | - [Jagged Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) 373 | - [Resizing arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) 374 | - [ ] Implement a vector (mutable array with automatic resizing): 375 | - [ ] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing. 376 | - [ ] new raw data array with allocated memory 377 | - can allocate int array under the hood, just not use its features 378 | - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128 379 | - [ ] size() - number of items 380 | - [ ] capacity() - number of items it can hold 381 | - [ ] is_empty() 382 | - [ ] at(index) - returns item at given index, blows up if index out of bounds 383 | - [ ] push(item) 384 | - [ ] insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right 385 | - [ ] prepend(item) - can use insert above at index 0 386 | - [ ] pop() - remove from end, return value 387 | - [ ] delete(index) - delete item at index, shifting all trailing elements left 388 | - [ ] remove(item) - looks for value and removes index holding it (even if in multiple places) 389 | - [ ] find(item) - looks for value and returns first index with that value, -1 if not found 390 | - [ ] resize(new_capacity) // private function 391 | - when you reach capacity, resize to double the size 392 | - when popping an item, if size is 1/4 of capacity, resize to half 393 | - [ ] Time 394 | - O(1) to add/remove at end (amortized for allocations for more space), index, or update 395 | - O(n) to insert/remove elsewhere 396 | - [ ] Space 397 | - contiguous in memory, so proximity helps performance 398 | - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) 399 | 400 | - ### Linked Lists 401 | - [ ] Description: 402 | - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) 403 | - [ ] [CS 61B - Linked Lists (video)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) 404 | - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) 405 | - not the whole video, just portions about Node struct and memory allocation. 406 | - [ ] Linked List vs Arrays: 407 | - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) 408 | - [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) 409 | - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) 410 | - [ ] Gotcha: you need pointer to pointer knowledge: 411 | (for when you pass a pointer to a function that may change the address where that pointer points) 412 | 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. 413 | - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) 414 | - [ ] implement (I did with tail pointer & without): 415 | - [ ] size() - returns number of data elements in list 416 | - [ ] empty() - bool returns true if empty 417 | - [ ] value_at(index) - returns the value of the nth item (starting at 0 for first) 418 | - [ ] push_front(value) - adds an item to the front of the list 419 | - [ ] pop_front() - remove front item and return its value 420 | - [ ] push_back(value) - adds an item at the end 421 | - [ ] pop_back() - removes end item and returns its value 422 | - [ ] front() - get value of front item 423 | - [ ] back() - get value of end item 424 | - [ ] insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index 425 | - [ ] erase(index) - removes node at given index 426 | - [ ] value_n_from_end(n) - returns the value of the node at nth position from the end of the list 427 | - [ ] reverse() - reverses the list 428 | - [ ] remove_value(value) - removes the first item in the list with this value 429 | - [ ] Doubly-linked List 430 | - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) 431 | - No need to implement 432 | 433 | - ### Stack 434 | - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) 435 | - [ ] [Using Stacks Last-In First-Out (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) 436 | - [ ] Will not implement. Implementing with array is trivial. 437 | 438 | - ### Queue 439 | - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) 440 | - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) 441 | - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) 442 | - [ ] [Priority Queues (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) 443 | - [ ] Implement using linked-list, with tail pointer: 444 | - enqueue(value) - adds value at position at tail 445 | - dequeue() - returns value and removes least recently added element (front) 446 | - empty() 447 | - [ ] Implement using fixed-sized array: 448 | - enqueue(value) - adds item at end of available storage 449 | - dequeue() - returns value and removes least recently added element 450 | - empty() 451 | - full() 452 | - [ ] Cost: 453 | - a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n) 454 | because you'd need the next to last element, causing a full traversal each dequeue 455 | - enqueue: O(1) (amortized, linked list and array [probing]) 456 | - dequeue: O(1) (linked list and array) 457 | - empty: O(1) (linked list and array) 458 | 459 | - ### Hash table 460 | - [ ] Videos: 461 | - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) 462 | - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 463 | - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 464 | - [ ] [PyCon 2010: The Mighty Dictionary (video)](https://www.youtube.com/watch?v=C4Kc8xzcA68) 465 | - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) 466 | - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) 467 | 468 | - [ ] Online Courses: 469 | - [ ] [Understanding Hash Functions (video](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) 470 | - [ ] [Using Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) 471 | - [ ] [Supporting Hashing (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) 472 | - [ ] [Language Support Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) 473 | - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) 474 | - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3) 475 | - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) 476 | - [ ] distributed hash tables: 477 | - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) 478 | - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) 479 | 480 | - [ ] implement with array using linear probing 481 | - hash(k, m) - m is size of hash table 482 | - add(key, value) - if key already exists, update value 483 | - exists(key) 484 | - get(key) 485 | - remove(key) 486 | 487 | ## More Knowledge 488 | 489 | - ### Binary search 490 | - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) 491 | - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) 492 | - [ ] [detail](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) 493 | - [ ] Implement: 494 | - binary search (on sorted array of integers) 495 | - binary search using recursion 496 | 497 | - ### Bitwise operations 498 | - [ ] [Bits cheat sheet](https://github.com/jwasham/google-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) 499 | - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, << 500 | - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) 501 | - [ ] Good intro: 502 | [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) 503 | - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0) 504 | - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation) 505 | - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation) 506 | - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) 507 | - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/) 508 | - [ ] [The Bit Twiddler Interactive](http://bits.stephan-brumme.com/interactive.html) 509 | - [ ] 2s and 1s complement 510 | - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) 511 | - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement) 512 | - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement) 513 | - [ ] count set bits 514 | - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc) 515 | - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) 516 | - [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) 517 | - [ ] round to next power of 2: 518 | - [Round Up To Next Power Of Two](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) 519 | - [ ] swap values: 520 | - [Swap](http://bits.stephan-brumme.com/swap.html) 521 | - [ ] absolute value: 522 | - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) 523 | 524 | ## Trees 525 | 526 | - ### Trees - Notes & Background 527 | - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) 528 | - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) 529 | - basic tree construction 530 | - traversal 531 | - manipulation algorithms 532 | - BFS (breadth-first search) 533 | - [MIT (video)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) 534 | - level order (BFS, using queue) 535 | time complexity: O(n) 536 | space complexity: best: O(1), worst: O(n/2)=O(n) 537 | - DFS (depth-first search) 538 | - [MIT (video)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) 539 | - notes: 540 | time complexity: O(n) 541 | space complexity: 542 | best: O(log n) - avg. height of tree 543 | worst: O(n) 544 | - inorder (DFS: left, self, right) 545 | - postorder (DFS: left, right, self) 546 | - preorder (DFS: self, left, right) 547 | 548 | - ### Binary search trees: BSTs 549 | - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 550 | - [ ] [Series (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) 551 | - starts with symbol table and goes through BST applications 552 | - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) 553 | - [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68) 554 | - C/C++: 555 | - [ ] [Binary search tree - Implementation in C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) 556 | - [ ] [BST implementation - memory allocation in stack and heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) 557 | - [ ] [Find min and max element in a binary search tree (video)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 558 | - [ ] [Find height of a binary tree (video)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) 559 | - [ ] [Binary tree traversal - breadth-first and depth-first strategies (video)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) 560 | - [ ] [Binary tree: Level Order Traversal (video)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 561 | - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (video)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 562 | - [ ] [Check if a binary tree is binary search tree or not (video)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 563 | - [ ] [Delete a node from Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) 564 | - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 565 | - [ ] Implement: 566 | - [ ] insert // insert value into tree 567 | - [ ] get_node_count // get count of values stored 568 | - [ ] print_values // prints the values in the tree, from min to max 569 | - [ ] delete_tree 570 | - [ ] is_in_tree // returns true if given value exists in the tree 571 | - [ ] get_height // returns the height in nodes (single node's height is 1) 572 | - [ ] get_min // returns the minimum value stored in the tree 573 | - [ ] get_max // returns the maximum value stored in the tree 574 | - [ ] is_binary_search_tree 575 | - [ ] delete_value 576 | - [ ] get_successor // returns next-highest value in tree after given value, -1 if none 577 | 578 | - ### Heap / Priority Queue / Binary Heap 579 | - visualized as a tree, but is usually linear in storage (array, linked list) 580 | - [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure)) 581 | - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) 582 | - [ ] [Naive Implementations (video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) 583 | - [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) 584 | - [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) 585 | - [ ] [Basic Operations (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) 586 | - [ ] [Complete Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) 587 | - [ ] [Pseudocode (video)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) 588 | - [ ] [Heap Sort - jumps to start (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) 589 | - [ ] [Heap Sort (video)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) 590 | - [ ] [Building a heap (video)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) 591 | - [ ] [MIT: Heaps and Heap Sort (video)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 592 | - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) 593 | - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) 594 | - [ ] Implement a max-heap: 595 | - [ ] insert 596 | - [ ] sift_up - needed for insert 597 | - [ ] get_max - returns the max item, without removing it 598 | - [ ] get_size() - return number of elements stored 599 | - [ ] is_empty() - returns true if heap contains no elements 600 | - [ ] extract_max - returns the max item, removing it 601 | - [ ] sift_down - needed for extract_max 602 | - [ ] remove(i) - removes item at index x 603 | - [ ] heapify - create a heap from an array of elements, needed for heap_sort 604 | - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap 605 | - note: using a min heap instead would save operations, but double the space needed (cannot do in-place). 606 | 607 | - ### Tries 608 | - Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits 609 | to track the path. 610 | - I read through code, but will not implement. 611 | - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) 612 | - [ ] Short course videos: 613 | - [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) 614 | - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) 615 | - [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) 616 | - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure) 617 | - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) 618 | - [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) 619 | - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) 620 | 621 | - ### Balanced search trees 622 | - Know least one type of balanced binary tree (and know how it's implemented): 623 | - "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular. 624 | A particularly interesting self-organizing data structure is the splay tree, which uses rotations 625 | to move any accessed key to the root." - Skiena 626 | - Of these, I chose to implement a splay tree. From what I've read, you won't implement a 627 | balanced search tree in your interview. But I wanted exposure to coding one up 628 | and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code. 629 | - splay tree: insert, search, delete functions 630 | If you end up implementing red/black tree try just these: 631 | - search and insertion functions, skipping delete 632 | - I want to learn more about B-Tree since it's used so widely with very large data sets. 633 | - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) 634 | 635 | - [ ] **AVL trees** 636 | - In practice: 637 | From what I can tell, these aren't used much in practice, but I could see where they would be: 638 | The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly 639 | balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it 640 | attractive for data structures that may be built once and loaded without reconstruction, such as language 641 | dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter). 642 | - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) 643 | - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) 644 | - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) 645 | - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) 646 | 647 | - [ ] **Splay trees** 648 | - In practice: 649 | Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors, 650 | data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory, 651 | networking, and file system code) etc. 652 | - [ ] [CS 61B: Splay Trees (video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) 653 | - [ ] MIT Lecture: Splay Trees: 654 | - Gets very mathy, but watch the last 10 minutes for sure. 655 | - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) 656 | 657 | - [ ] **2-3 search trees** 658 | - In practice: 659 | 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees). 660 | - You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees. 661 | - [ ] [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) 662 | - [ ] [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 663 | - [ ] [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 664 | 665 | - [ ] **2-3-4 Trees (aka 2-4 trees)** 666 | - In practice: 667 | For every 2-4 tree, there are corresponding red–black trees with data elements in the same order. The insertion and deletion 668 | operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an 669 | important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce 670 | 2-4 trees just before red–black trees, even though **2-4 trees are not often used in practice**. 671 | - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) 672 | - [ ] [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 673 | - [ ] [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) 674 | 675 | - [ ] **B-Trees** 676 | - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) 677 | - In Practice: 678 | B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to 679 | its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary 680 | block in a particular file. The basic problem is turning the file block i address into a disk block 681 | (or perhaps to a cylinder-head-sector) address. 682 | - [ ] [B-Tree](https://en.wikipedia.org/wiki/B-tree) 683 | - [ ] [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) 684 | - [ ] [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 685 | - [ ] [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 686 | - [ ] [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) 687 | - covers cache-oblivious B-Trees, very interesting data structures 688 | - the first 37 minutes are very technical, may be skipped (B is block size, cache line size) 689 | 690 | - [ ] **Red/black trees** 691 | - In practice: 692 | Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. 693 | Not only does this make them valuable in time-sensitive applications such as real-time applications, 694 | but it makes them valuable building blocks in other data structures which provide worst-case guarantees; 695 | for example, many data structures used in computational geometry can be based on red–black trees, and 696 | the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java, 697 | the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor 698 | hashcodes, a Red-Black tree is used. 699 | - [ ] [Aduni - Algorithms - Lecture 4 700 | (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) 701 | - [ ] [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) 702 | - [ ] [Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) 703 | - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/) 704 | 705 | - ### N-ary (K-ary, M-ary) trees 706 | - note: the N or K is the branching factor (max branches) 707 | - binary trees are a 2-ary tree, with branching factor = 2 708 | - 2-3 trees are 3-ary 709 | - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) 710 | 711 | ## Sorting 712 | 713 | - [ ] Notes: 714 | - Implement sorts & know best case/worst case, average complexity of each: 715 | - no bubble sort - it's terrible - O(n^2), except when n <= 16 716 | - [ ] stability in sorting algorithms ("Is Quicksort stable?") 717 | - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) 718 | - [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) 719 | - [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) 720 | - [Sorting Algorithms - Stability](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) 721 | - [ ] Which algorithms can be used on linked lists? Which on arrays? Which on both? 722 | - I wouldn't recommend sorting a linked list, but merge sort is doable. 723 | - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) 724 | 725 | - For heapsort, see Heap data structure above. Heap sort is great, but not stable. 726 | 727 | - [ ] [Bubble Sort (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) 728 | - [ ] [Analyzing Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) 729 | - [ ] [Insertion Sort, Merge Sort (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 730 | - [ ] [Insertion Sort (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) 731 | - [ ] [Merge Sort (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) 732 | - [ ] [Quicksort (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) 733 | - [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) 734 | 735 | - [ ] Stanford lectures on sorting: 736 | - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) 737 | - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) 738 | 739 | - [ ] Shai Simonson, [Aduni.org](http://www.aduni.org/): 740 | - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) 741 | - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) 742 | 743 | - [ ] Steven Skiena lectures on sorting: 744 | - [ ] [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) 745 | - [ ] [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 746 | - [ ] [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 747 | - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) 748 | 749 | - [ ] UC Berkeley: 750 | - [ ] [CS 61B Lecture 29: Sorting I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) 751 | - [ ] [CS 61B Lecture 30: Sorting II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) 752 | - [ ] [CS 61B Lecture 32: Sorting III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) 753 | - [ ] [CS 61B Lecture 33: Sorting V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) 754 | 755 | - [ ] - Merge sort code: 756 | - [ ] [Using output array](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) 757 | - [ ] [In-place](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) 758 | - [ ] - Quick sort code: 759 | - [ ] [Implementation](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) 760 | - [ ] [Implementation](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) 761 | 762 | - [ ] Implement: 763 | - [ ] Mergesort: O(n log n) average and worst case 764 | - [ ] Quicksort O(n log n) average case 765 | - Selection sort and insertion sort are both O(n^2) average and worst case 766 | - For heapsort, see Heap data structure above. 767 | 768 | - [ ] For curiosity - not required: 769 | - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) 770 | - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38) 771 | - [ ] [Radix Sort, Counting Sort (linear time given constraints) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 772 | - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 773 | - [ ] [Sorting in Linear Time (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) 774 | 775 | ## Graphs 776 | 777 | Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. 778 | 779 | - Notes from Yegge: 780 | - There are three basic ways to represent a graph in memory: 781 | - objects and pointers 782 | - matrix 783 | - adjacency list 784 | - Familiarize yourself with each representation and its pros & cons 785 | - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code 786 | - When asked a question, look for a graph-based solution first, then move on if none. 787 | 788 | - [ ] Skiena Lectures - great intro: 789 | - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) 790 | - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) 791 | - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) 792 | - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 793 | - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 794 | - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 795 | 796 | - [ ] Graphs (review and more): 797 | 798 | - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 799 | - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 800 | - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) 801 | - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) 802 | - [ ] [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) 803 | - [ ] [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) 804 | - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) 805 | - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) 806 | - [ ] [CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) 807 | - [ ] [CS 61B 2014: Weighted graphs (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) 808 | - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 809 | - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) 810 | 811 | - Full Coursera Course: 812 | - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) 813 | 814 | - Yegge: If you get a chance, try to study up on fancier algorithms: 815 | - [ ] Dijkstra's algorithm - see above - 6.006 816 | - [ ] A* 817 | - [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm) 818 | - [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE) 819 | - [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE) 820 | 821 | - I'll implement: 822 | - [ ] DFS with adjacency list (recursive) 823 | - [ ] DFS with adjacency list (iterative with stack) 824 | - [ ] DFS with adjacency matrix (recursive) 825 | - [ ] DFS with adjacency matrix (iterative with stack) 826 | - [ ] BFS with adjacency list 827 | - [ ] BFS with adjacency matrix 828 | - [ ] single-source shortest path (Dijkstra) 829 | - [ ] minimum spanning tree 830 | - DFS-based algorithms (see Aduni videos above): 831 | - [ ] check for cycle (needed for topological sort, since we'll check for cycle before starting) 832 | - [ ] topological sort 833 | - [ ] count connected components in a graph 834 | - [ ] list strongly connected components 835 | - [ ] check for bipartite graph 836 | 837 | You'll get more graph practice in Skiena's book (see Books section below) and the interview books 838 | 839 | ## Even More Knowledge 840 | 841 | - ### Recursion 842 | - [ ] Stanford lectures on recursion & backtracking: 843 | - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) 844 | - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) 845 | - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) 846 | - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) 847 | - when it is appropriate to use it 848 | - how is tail recursion better than not? 849 | - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) 850 | - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) 851 | 852 | - ### Dynamic Programming 853 | - 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. 854 | - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved. 855 | - [ ] Videos: 856 | - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see 857 | - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) 858 | - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) 859 | - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) 860 | - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) 861 | - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) 862 | - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 863 | - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) 864 | - [ ] List of individual DP problems (each is short): 865 | [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) 866 | - [ ] Yale Lecture notes: 867 | - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) 868 | - [ ] Coursera: 869 | - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) 870 | - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) 871 | - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) 872 | - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) 873 | - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) 874 | - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) 875 | - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) 876 | 877 | - ### Combinatorics (n choose k) & Probability 878 | - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) 879 | - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) 880 | - [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ) 881 | - [ ] Khan Academy: 882 | - Course layout: 883 | - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) 884 | - Just the videos - 41 (each are simple and each are short): 885 | - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) 886 | 887 | - ### NP, NP-Complete and Approximation Algorithms 888 | - Know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem, 889 | and be able to recognize them when an interviewer asks you them in disguise. 890 | - Know what NP-complete means. 891 | - [ ] [Computational Complexity (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) 892 | - [ ] Simonson: 893 | - [ ] [Greedy Algs. II & Intro to NP Completeness (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) 894 | - [ ] [NP Completeness II & Reductions (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 895 | - [ ] [NP Completeness III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 896 | - [ ] [NP Completeness IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) 897 | - [ ] Skiena: 898 | - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-CompletenessNP Completeness IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) 899 | - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 900 | - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 901 | - [ ] [Complexity: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) 902 | - [ ] [Complexity: Approximation Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) 903 | - [ ] [Complexity: Fixed-Parameter Algorithms (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 904 | - Peter Norvik discusses near-optimal solutions to traveling salesman problem: 905 | - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) 906 | - Pages 1048 - 1140 in CLRS if you have it. 907 | 908 | - ### Caches 909 | - [ ] LRU cache: 910 | - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) 911 | - [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) 912 | - [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) 913 | - [ ] CPU cache: 914 | - [ ] [MIT 6.004 L15: The Memory Hierarchy (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) 915 | - [ ] [MIT 6.004 L16: Cache Issues (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) 916 | 917 | - ### Processes and Threads 918 | - [ ] Computer Science 162 - Operating Systems (25 videos): 919 | - for precesses and threads see videos 1-11 920 | - [Operating Systems and System Programming (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) 921 | - [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) 922 | - Covers: 923 | - Processes, Threads, Concurrency issues 924 | - difference between processes and threads 925 | - processes 926 | - threads 927 | - locks 928 | - mutexes 929 | - semaphores 930 | - monitors 931 | - how they work 932 | - deadlock 933 | - livelock 934 | - CPU activity, interrupts, context switching 935 | - Modern concurrency constructs with multicore processors 936 | - Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o) 937 | - Thread resource needs (shares above (minus stack) with other threads in same process but each has its own pc, stack counter, registers and stack) 938 | - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy. 939 | - Context switching 940 | - How context switching is initiated by the operating system and underlying hardware 941 | - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) 942 | - [ ] concurrency in Python (videos): 943 | - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) 944 | - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM) 945 | - [ ] [Understanding the Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s) 946 | - [reference](http://www.dabeaz.com/GIL) 947 | - [ ] [David Beazley - Python Concurrency From the Ground Up: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) 948 | - [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) 949 | - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) 950 | 951 | 952 | Scalability and System Design are very large topics with many topics and resources, since there is a lot to consider 953 | when designing a software/hardware system that can scale. Expect to spend quite a bit of time on this. 954 | 955 | - ### System Design, Scalability, Data Handling 956 | - Considerations from Yegge: 957 | - scalability 958 | - Distill large data sets to single values 959 | - Transform one data set to another 960 | - Handling obscenely large amounts of data 961 | - system design 962 | - features sets 963 | - interfaces 964 | - class hierarchies 965 | - designing a system under certain constraints 966 | - simplicity and robustness 967 | - tradeoffs 968 | - performance analysis and optimization 969 | - [ ] **START HERE**: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) 970 | - [ ] [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) 971 | - [ ] [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/) 972 | - [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/) 973 | - [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) 974 | - [ ] [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. 975 | - [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) 976 | - [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) 977 | - [ ] [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) 978 | - [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) 979 | - [ ] [A plain english introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) 980 | - [ ] Paxos Consensus algorithm: 981 | - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM) 982 | - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o) 983 | - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) 984 | - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) 985 | - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) 986 | - [ ] [Optional: UML 2.0 Series (vido)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) 987 | - [ ] OOSE: Software Dev Using UML and Java (21 videos): 988 | - Can skip this if you have a great grasp of OO and OO design practices. 989 | - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) 990 | - [ ] SOLID OOP Principles: 991 | - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) 992 | - [ ] [SOLID Design Patterns in C# (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ) 993 | - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) 994 | - [ ] 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) 995 | - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) 996 | - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) 997 | - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) 998 | - [ ] 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) 999 | - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) 1000 | - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use 1001 | - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) 1002 | - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) 1003 | - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects. 1004 | - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) 1005 | - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) 1006 | - [ ] Scalability: 1007 | - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) 1008 | - [ ] Short series: 1009 | - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) 1010 | - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) 1011 | - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) 1012 | - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) 1013 | - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html) 1014 | - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) 1015 | - [ ] [Pragmatic Programming Techniques](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) 1016 | - [extra: Google Pregel Graph Processing](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) 1017 | - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI) 1018 | - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/) 1019 | - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) 1020 | - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0) 1021 | - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/) 1022 | - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) 1023 | - [ ] [Scale at Facebook (2009)](https://www.infoq.com/presentations/Scale-at-Facebook) 1024 | - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU) 1025 | - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) 1026 | - [ ] [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) 1027 | - [video](https://www.youtube.com/watch?v=G-lGCC4KKok) 1028 | - [ ] [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) 1029 | - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) 1030 | - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) 1031 | - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/) 1032 | - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/) 1033 | - [ ] [Asyncio Tarantool Queue, Get In The Queue](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html) 1034 | - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) 1035 | - [ ] [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) 1036 | - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) 1037 | - [ ] [Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html) 1038 | - [ ] [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) 1039 | - [ ] [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) 1040 | - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) 1041 | - [ ] [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) 1042 | - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) 1043 | - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) 1044 | - [ ] [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) 1045 | - [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) 1046 | - [ ] [Does AMP Counter An Existential Threat To Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html) 1047 | - [ ] [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) 1048 | - [ ] [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) 1049 | - [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html) 1050 | - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) 1051 | - [ ] [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) 1052 | - [ ] [Justin.Tv's Live Video Broadcasting Architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) 1053 | - [ ] [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) 1054 | - [ ] [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) 1055 | - [ ] [PlentyOfFish Architecture](http://highscalability.com/plentyoffish-architecture) 1056 | - [ ] [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) 1057 | - [ ] [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) 1058 | - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together 1059 | - [ ] Twitter: 1060 | - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI) 1061 | - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) 1062 | - For even more, see "Mining Massive Datasets" video series in the Video Series section. 1063 | - [ ] 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: 1064 | - review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) 1065 | - [cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) 1066 | - flow: 1067 | 1. Understand the problem and scope: 1068 | - define the use cases, with interviewer's help 1069 | - suggest additional features 1070 | - remove items that interviewer deems out of scope 1071 | - assume high availability is required, add as a use case 1072 | 2. Think about constraints: 1073 | - ask how many requests per month 1074 | - ask how many requests per second (they may volunteer it or make you do the math) 1075 | - estimate reads vs. writes percentage 1076 | - keep 80/20 rule in mind when estimating 1077 | - how much data written per second 1078 | - total storage required over 5 years 1079 | - how much data read per second 1080 | 3. Abstract design: 1081 | - layers (service, data, caching) 1082 | - infrastructure: load balancing, messaging 1083 | - rough overview of any key algorithm that drives the service 1084 | - consider bottlenecks and determine solutions 1085 | - Exercises: 1086 | - [Design a CDN network: old article](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) 1087 | - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) 1088 | - [Design an online multiplayer card game](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) 1089 | - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis) 1090 | - [Design a function to return the top k requests during past time interval]( https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf) 1091 | - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) 1092 | - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf) 1093 | - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/) 1094 | - [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) 1095 | 1096 | - ### Papers 1097 | - These are Google papers and well-known papers. 1098 | - Reading all from end to end with full comprehension will likely take more time than you have. I recommend being selective on papers and their sections. 1099 | - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) 1100 | - [implemented in Go](https://godoc.org/github.com/thomas11/csp) 1101 | - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) 1102 | - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) 1103 | - replaced by Colossus in 2012 1104 | - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) 1105 | - mostly replaced by Cloud Dataflow? 1106 | - [ ] [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) 1107 | - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) 1108 | - paper not available 1109 | - [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker: 1110 | - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) 1111 | - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) 1112 | - [ ] 2013: Spanner: Google’s Globally-Distributed Database: 1113 | - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) 1114 | - [video](https://www.usenix.org/node/170855) 1115 | - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) 1116 | - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) 1117 | - [ ] [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) 1118 | - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf ) 1119 | - [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) 1120 | - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) 1121 | 1122 | - ### Testing 1123 | - To cover: 1124 | - how unit testing works 1125 | - what are mock objects 1126 | - what is integration testing 1127 | - what is dependency injection 1128 | - [ ] [Agile Software Testing with James Bach (video)](https://www.youtube.com/watch?v=SAhJf36_u5U) 1129 | - [ ] [Open Lecture by James Bach on Software Testing (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU) 1130 | - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (video)](https://vimeo.com/83960706) 1131 | - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) 1132 | - [ ] [TDD is dead. Long live testing.](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) 1133 | - [ ] [Is TDD dead? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo) 1134 | - [ ] [Video series (152 videos) - not all are needed (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) 1135 | - [ ] [Test-Driven Web Development with Python](http://www.obeythetestinggoat.com/pages/book.html#toc) 1136 | - [ ] Dependency injection: 1137 | - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) 1138 | - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) 1139 | - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) 1140 | 1141 | - ### Scheduling 1142 | - in an OS, how it works 1143 | - can be gleaned from Operating System videos 1144 | 1145 | - ### Implement system routines 1146 | - understand what lies beneath the programming APIs you use 1147 | - can you implement them? 1148 | 1149 | - ### String searching & manipulations 1150 | - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) 1151 | - [ ] Rabin-Karp (videos): 1152 | - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) 1153 | - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) 1154 | - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) 1155 | - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) 1156 | - [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) 1157 | - [ ] Knuth-Morris-Pratt (KMP): 1158 | - [Pratt Algorithm](https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm) 1159 | - [Tutorial: The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=2ogqPWJSftE) 1160 | - [ ] Boyer–Moore string search algorithm 1161 | - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) 1162 | - [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10) 1163 | - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) 1164 | 1165 | --- 1166 | 1167 | ## Final Review 1168 | 1169 | This section will have shorter videos that can you watch pretty quickly to review most of the important concepts. 1170 | It's nice if you want a refresher often. 1171 | (More items will be added here) 1172 | 1173 | #### General: 1174 | 1175 | - [ ] Series of 2-3 minutes short subject videos (23 videos) 1176 | - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) 1177 | - [ ] Series of 2-5 minutes short subject videos - Michael Sambol (18 videos): 1178 | - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) 1179 | 1180 | #### Sorts: 1181 | 1182 | - [ ] Merge Sort: https://www.youtube.com/watch?v=GCae1WNvnZM 1183 | 1184 | 1185 | ## Books 1186 | 1187 | ### Mentioned in Google Coaching 1188 | 1189 | **Read and do exercises:** 1190 | 1191 | - [ ] The Algorithm Design Manual (Skiena) 1192 | - Book (can rent on kindle): 1193 | - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) 1194 | - Half.com is a great resource for textbooks at good prices. 1195 | - Answers: 1196 | - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) 1197 | - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) 1198 | - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) 1199 | 1200 | Once you've understood everything in the daily plan, and read and done exercises from the the books above, 1201 | read and do exercises from the books below. Then move to coding challenges (further down below) 1202 | 1203 | **Read first:** 1204 | - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) 1205 | 1206 | **Read second (recommended by many, but not in Google coaching docs):** 1207 | - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) 1208 | - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". 1209 | 1210 | ### Additional books 1211 | 1212 | These were not suggested by Google but I added because I needed the background knowledge 1213 | 1214 | - [ ] C Programming Language, Vol 2 1215 | - [answers to questions](https://github.com/lekkas/c-algorithms) 1216 | 1217 | - [ ] C++ Primer Plus, 6th Edition 1218 | 1219 | - [ ] [The Unix Programming Environment](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info) 1220 | 1221 | - [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) 1222 | 1223 | - [ ] [Algorithms and Programming: Problems and Solutions](http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474) 1224 | 1225 | ### If you have time 1226 | 1227 | - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) 1228 | - Half.com is a great resource for textbooks at good prices. 1229 | 1230 | - [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) 1231 | - all code is in C++, if you're looking to use C++ in your interview 1232 | - good book on problem solving in general. 1233 | 1234 | ## Coding exercises/challenges 1235 | 1236 | Once you've learned your brains out, put those brains to work. 1237 | Take coding challenges every day, as many as you can. 1238 | 1239 | Programming Question Prep: 1240 | 1241 | - [ ] [Great intro (copied from System Design section): Algorithm design:](http://www.hiredintech.com/algorithm-design/) 1242 | - [ ] [How to Find a Solution](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/) 1243 | - [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) 1244 | - [ ] [Mathematics for Topcoders](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/) 1245 | - [ ] [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) 1246 | 1247 | - [MIT Interview Materials](https://courses.csail.mit.edu/iap/interview/materials.php) 1248 | 1249 | - [Exercises for getting better at a given language](http://exercism.io/languages) 1250 | 1251 | Programming: 1252 | 1253 | - [LeetCode](https://leetcode.com/) 1254 | - [TopCoder](https://www.topcoder.com/) 1255 | - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) 1256 | - [Codewars](http://www.codewars.com) 1257 | - [HackerRank](https://www.hackerrank.com/) 1258 | - [Codility](https://codility.com/programmers/) 1259 | - [InterviewCake](https://www.interviewcake.com/) 1260 | - [InterviewBit](https://www.interviewbit.com/invite/icjf) 1261 | 1262 | - [Mock interviewers from big companies](http://www.gainlo.co/) 1263 | 1264 | ## Once you're closer to the interview 1265 | 1266 | - [ ] Cracking The Coding Interview Set 2 (videos): 1267 | - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) 1268 | - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) 1269 | - [Ask Me Anything: Gayle Laakmann McDowell (author of Cracking the Coding Interview)](https://www.youtube.com/watch?v=1fqxMuPmGak) 1270 | 1271 | ## Your Resume 1272 | 1273 | - [Ten Tips for a (Slightly) Less Awful Resume](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) 1274 | - Great stuff at the back of Cracking The Coding Interview 1275 | 1276 | 1277 | ## Be thinking of for when the interview comes 1278 | 1279 | Think of about 20 interview questions you'll get, along the lines of the items below. 1280 | Have 2-3 answers for each 1281 | Have a story, not just data, about something you accomplished 1282 | 1283 | - Why do you want this job? 1284 | - What's a tough problem you've solved? 1285 | - Biggest challenges faced? 1286 | - Best/worst designs seen? 1287 | - Ideas for improving an existing Google product. 1288 | - How do you work best, as an individual and as part of a team? 1289 | - Which of your skills or experiences would be assets in the role and why? 1290 | - What did you most enjoy at [job x / project y]? 1291 | - What was the biggest challenge you faced at [job x / project y]? 1292 | - What was the hardest bug you faced at [job x / project y]? 1293 | - What did you learn at [job x / project y]? 1294 | - What would you have done better at [job x / project y]? 1295 | 1296 | ## Have questions for the interviewer 1297 | 1298 | Some of mine (I already may know answer to but want their opinion or team perspective): 1299 | 1300 | - How large is your team? 1301 | - What is your dev cycle look like? Do you do waterfall/sprints/agile? 1302 | - Are rushes to deadlines common? Or is there flexibility? 1303 | - How are decisions made in your team? 1304 | - How many meetings do you have per week? 1305 | - Do you feel your work environment helps you concentrate? 1306 | - What are you working on? 1307 | - What do you like about it? 1308 | - What is the work life like? 1309 | 1310 | ## Once You've Got The Job 1311 | 1312 | Congratulations! 1313 | 1314 | - [10 things I wish I knew on my first day at Google](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) 1315 | 1316 | Keep learning. 1317 | 1318 | You're never really done. 1319 | 1320 | --- 1321 | 1322 | ***************************************************************************************************** 1323 | ***************************************************************************************************** 1324 | 1325 | Everything below this point is optional. These are my recommendations, not Google's. 1326 | By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for 1327 | any software engineering job. 1328 | 1329 | ***************************************************************************************************** 1330 | ***************************************************************************************************** 1331 | 1332 | --- 1333 | 1334 | ## Additional Learning 1335 | 1336 | - ### Unicode 1337 | - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html) 1338 | - [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/) 1339 | 1340 | - ### Endianness 1341 | - [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) 1342 | - [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo) 1343 | - [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) 1344 | - Very technical talk for kernel devs. Don't worry if most is over your head. 1345 | - The first half is enough. 1346 | 1347 | - ### Emacs and vi(m) 1348 | - suggested by Yegge, from an old Amazon recruiting post: Familiarize yourself with a unix-based code editor 1349 | - vi(m): 1350 | - [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) 1351 | - [VIM Adventures](http://vim-adventures.com/) 1352 | - set of 4 videos: 1353 | - [The vi/vim editor - Lesson 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) 1354 | - [The vi/vim editor - Lesson 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) 1355 | - [The vi/vim editor - Lesson 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) 1356 | - [The vi/vim editor - Lesson 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) 1357 | - [Using Vi Instead of Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) 1358 | - emacs: 1359 | - [Basics Emacs Tutorial (video)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) 1360 | - set of 3 (videos): 1361 | - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q) 1362 | - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II) 1363 | - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc) 1364 | - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) 1365 | - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) 1366 | - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk) 1367 | 1368 | - ### Unix command line tools 1369 | - suggested by Yegge, from an old Amazon recruiting post. I filled in the list below from good tools. 1370 | - [ ] bash 1371 | - [ ] cat 1372 | - [ ] grep 1373 | - [ ] sed 1374 | - [ ] awk 1375 | - [ ] curl or wget 1376 | - [ ] sort 1377 | - [ ] tr 1378 | - [ ] uniq 1379 | - [ ] [strace](https://en.wikipedia.org/wiki/Strace) 1380 | - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) 1381 | 1382 | - ### Information theory (videos) 1383 | - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) 1384 | - [ ] more about Markov processes: 1385 | - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) 1386 | - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) 1387 | - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) 1388 | - See more in MIT 6.050J Information and Entropy series below. 1389 | 1390 | - ### Parity & Hamming Code (videos) 1391 | - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) 1392 | - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) 1393 | - [ ] Hamming Code: 1394 | - [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc) 1395 | - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o) 1396 | - [ ] [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) 1397 | 1398 | - ### Entropy 1399 | - also see videos below 1400 | - make sure to watch information theory videos first 1401 | - [ ] [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176) 1402 | 1403 | - ### Cryptography 1404 | - also see videos below 1405 | - make sure to watch information theory videos first 1406 | - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography) 1407 | - [ ] [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) 1408 | - [ ] [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1409 | 1410 | - ### Compression 1411 | - make sure to watch information theory videos first 1412 | - [ ] Computerphile (videos): 1413 | - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) 1414 | - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) 1415 | - [ ] [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI) 1416 | - [ ] [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g) 1417 | - [ ] [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA) 1418 | - [ ] [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU) 1419 | - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) 1420 | - [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) 1421 | 1422 | - ### Networking (videos) 1423 | - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) 1424 | - [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8) 1425 | - [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0) 1426 | - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial.](https://www.youtube.com/watch?v=nomyRJehhnM) 1427 | - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As) 1428 | - [ ] [SSL and HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0) 1429 | - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM) 1430 | - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8) 1431 | - [ ] [Video Series (21 videos)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) 1432 | - [ ] [Subnetting Demystified - Part 5 CIDR Notation](https://www.youtube.com/watch?v=t5xYI0jzOf4) 1433 | 1434 | - ### Computer Security 1435 | - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1436 | - [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1437 | - [ ] [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) 1438 | - [ ] [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3) 1439 | - [ ] [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1440 | - [ ] [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1441 | - [ ] [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6) 1442 | - [ ] [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1443 | - [ ] [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1444 | - [ ] [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1445 | - [ ] [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1446 | - [ ] [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1447 | - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1448 | 1449 | - ### Garbage collection 1450 | - [ ] [Garbage collection (Java); Augmenting data str (video)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) 1451 | - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) 1452 | - [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) 1453 | - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits) 1454 | - [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) 1455 | 1456 | - ### Parallel Programming 1457 | - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) 1458 | - [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk) 1459 | 1460 | - ### Design patterns 1461 | - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) 1462 | - [ ] Learn these patterns: 1463 | - [ ] strategy 1464 | - [ ] singleton 1465 | - [ ] adapter 1466 | - [ ] prototype 1467 | - [ ] decorator 1468 | - [ ] visitor 1469 | - [ ] factory, abstract factory 1470 | - [ ] facade 1471 | - [ ] observer 1472 | - [ ] proxy 1473 | - [ ] delegate 1474 | - [ ] command 1475 | - [ ] state 1476 | - [ ] memento 1477 | - [ ] iterator 1478 | - [ ] composite 1479 | - [ ] flyweight 1480 | - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) 1481 | - [ ] [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) 1482 | - [ ] [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) 1483 | - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) 1484 | - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) 1485 | - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO. 1486 | - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) 1487 | 1488 | - ### Messaging, Serialization, and Queueing Systems 1489 | - [ ] [Thrift](https://thrift.apache.org/) 1490 | - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) 1491 | - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/) 1492 | - [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials) 1493 | - [ ] [gRPC](http://www.grpc.io/) 1494 | - [gRPC 101 for Java Developers (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) 1495 | - [ ] [Redis](http://redis.io/) 1496 | - [Tutorial](http://try.redis.io/) 1497 | - [ ] [Amazon SQS (queue)](https://aws.amazon.com/sqs/) 1498 | - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) 1499 | - [ ] [RabbitMQ](https://www.rabbitmq.com/) 1500 | - [Get Startet](https://www.rabbitmq.com/getstarted.html) 1501 | - [ ] [Celery](http://www.celeryproject.org/) 1502 | - [First Steps With Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) 1503 | - [ ] [ZeroMQ](http://zeromq.org/) 1504 | - [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual) 1505 | - [ ] [ActiveMQ](http://activemq.apache.org/) 1506 | - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction) 1507 | - [ ] [MessagePack](http://msgpack.org/index.html) 1508 | - [ ] [Avro](https://avro.apache.org/) 1509 | 1510 | - ### Fast Fourier Transform 1511 | - [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) 1512 | - [ ] [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) 1513 | - [ ] [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) 1514 | - [ ] [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) 1515 | 1516 | - ### Bloom Filter 1517 | - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) 1518 | - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs) 1519 | - [Bloom Filters | Mining of Massive Datasets | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78) 1520 | - [Tutorial](http://billmill.org/bloomfilter-tutorial/) 1521 | - [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) 1522 | 1523 | - ### van Emde Boas Trees 1524 | - [ ] [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) 1525 | - [ ] [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf) 1526 | 1527 | - ### Augmented Data Structures 1528 | - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) 1529 | 1530 | - ### Skip lists 1531 | - "These are somewhat of a cult data structure" - Skiena 1532 | - [ ] [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1533 | - [ ] [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list) 1534 | 1535 | - ### Network Flows 1536 | - [ ] [Ford-Fulkerson in 5 minutes (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) 1537 | - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) 1538 | - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) 1539 | 1540 | - ### Disjoint Sets & Union Find 1541 | - [ ] [Disjoint Set](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) 1542 | - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) 1543 | - [ ] Coursera (not needed since the above video explains it great): 1544 | - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) 1545 | - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) 1546 | - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) 1547 | - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank) 1548 | - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) 1549 | - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) 1550 | 1551 | - ### Math for Fast Processing 1552 | - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 1553 | - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) 1554 | 1555 | - ### Treap 1556 | - Combination of a binary search tree and a heap 1557 | - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) 1558 | - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) 1559 | - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) 1560 | 1561 | - ### Linear Programming (videos) 1562 | - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ) 1563 | - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U) 1564 | - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik) 1565 | 1566 | - ### Geometry, Convex hull (videos) 1567 | - [ ] [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) 1568 | - [ ] [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 1569 | - [ ] [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) 1570 | 1571 | - ### Discrete math 1572 | - see videos below 1573 | 1574 | - ### Machine Learning 1575 | - [ ] Why ML? 1576 | - [ ] [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) 1577 | - [ ] [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY) 1578 | - [ ] [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw) 1579 | - [ ] [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) 1580 | - [ ] [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) 1581 | - [ ] [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM) 1582 | - [ ] [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) 1583 | - [ ] [Practical Guide to implementing Neural Networks in Python](using Theano)])http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) 1584 | - Courses: 1585 | - [ ] [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) 1586 | - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) 1587 | - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates) 1588 | - [ ] [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks) 1589 | - [ ] [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730) 1590 | - [ ] [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) 1591 | - [ ] [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive) 1592 | - [ ] [Metis Online Course ($99 for 2 months)](http://www.thisismetis.com/explore-data-science) 1593 | - Resources: 1594 | - Great book: Data Science from Scratch: First Principles with Python: https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X 1595 | - Data School: http://www.dataschool.io/ 1596 | 1597 | - ### Go 1598 | - [ ] Videos: 1599 | - [ ] [Why Learn Go?](https://www.youtube.com/watch?v=FTl0tl9BGdc) 1600 | - [ ] [Go Programming](https://www.youtube.com/watch?v=CF9S4QZuV30) 1601 | - [ ] [A Tour of Go](https://www.youtube.com/watch?v=ytEkHepK08c) 1602 | - [ ] Books: 1603 | - [ ] [An Introduction to Programming in Go (read free online)](https://www.golang-book.com/books/intro) 1604 | - [ ] [The Go Programming Language (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440) 1605 | - [ ] [Bootcamp](https://www.golang-book.com/guides/bootcamp) 1606 | 1607 | -- 1608 | 1609 | ## Additional Detail on Some Subjects 1610 | 1611 | I added these to reinforce some ideas already presented above, but didn't want to include them 1612 | above because it's just too much. It's easy to overdo it on a subject. 1613 | You want to get hired in this century, right? 1614 | 1615 | - [ ] **More Dynamic Programming** (videos) 1616 | - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) 1617 | - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) 1618 | - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) 1619 | - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 1620 | - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1621 | - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) 1622 | - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) 1623 | 1624 | - [ ] **Advanced Graph Processing** (videos) 1625 | - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) 1626 | - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) 1627 | 1628 | - [ ] MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos): 1629 | - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) 1630 | - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B) 1631 | - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B) 1632 | - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21) 1633 | - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B) 1634 | - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B) 1635 | - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B) 1636 | - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25) 1637 | 1638 | - [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) 1639 | 1640 | ## Video Series 1641 | 1642 | Sit back and enjoy. "netflix and skill" :P 1643 | 1644 | - [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) 1645 | 1646 | - [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) 1647 | 1648 | - [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) 1649 | 1650 | - [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) 1651 | 1652 | - [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) 1653 | 1654 | - [ ] [Discrete Mathematics (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) 1655 | 1656 | - [ ] CSE373 - Analysis of Algorithms (25 videos) 1657 | - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) 1658 | 1659 | - [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) 1660 | 1661 | - [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) 1662 | 1663 | - [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) 1664 | 1665 | - [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) 1666 | 1667 | - [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) 1668 | 1669 | - [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) 1670 | 1671 | - [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) 1672 | 1673 | - [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) 1674 | 1675 | - [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) 1676 | 1677 | - [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) 1678 | 1679 | - [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) 1680 | 1681 | - [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1682 | 1683 | - [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) 1684 | 1685 | - [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) 1686 | 1687 | - [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) 1688 | 1689 | - [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1690 | 1691 | - [ ] Stanford: Programming Paradigms (17 videos) 1692 | - [Course on C and C++](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False) 1693 | 1694 | - [ ] [Introduction to Cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) 1695 | - [more in series (not in order)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) 1696 | 1697 | - [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) 1698 | 1699 | ## Computer Science Courses 1700 | 1701 | - [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) 1702 | - [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) 1703 | 1704 | --------------------------------------------------------------------------------