├── .github ├── FUNDING.yml └── workflows │ └── links_checker.yml ├── .gitignore ├── LICENSE.txt ├── README.md ├── extras └── cheat sheets │ ├── C Reference Card (ANSI) 2.2.pdf │ ├── Coding Interview Python Language Essentials.pdf │ ├── Cpp_reference.pdf │ ├── Java Fundamentals Cheatsheet.pdf │ ├── STL Quick Reference 1.29.pdf │ ├── big-o-cheatsheet.pdf │ ├── bits-cheat-sheet.pdf │ ├── python-cheat-sheet-v1.pdf │ └── system-design.pdf ├── programming-language-resources.md └── translations ├── README-af.md ├── README-ar.md ├── README-bg.md ├── README-bn.md ├── README-cn.md ├── README-de.md ├── README-el.md ├── README-es.md ├── README-fa.md ├── README-fr.md ├── README-he.md ├── README-hi.md ├── README-id.md ├── README-it.md ├── README-ja.md ├── README-kh.md ├── README-ko.md ├── README-pl.md ├── README-ptbr.md ├── README-ru.md ├── README-th.md ├── README-tr.md ├── README-tw.md ├── README-uk.md ├── README-ur.md ├── README-uz.md ├── README-vi.md └── how-to.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: jwasham 2 | -------------------------------------------------------------------------------- /.github/workflows/links_checker.yml: -------------------------------------------------------------------------------- 1 | name: Links Checker 2 | 3 | on: 4 | ## Allow triggering this workflow manually via GitHub CLI/web 5 | workflow_dispatch: 6 | 7 | ## Run this workflow automatically every month 8 | schedule: 9 | - cron: '0 0 1 * *' 10 | 11 | jobs: 12 | link_checker: 13 | name: Check links and create automated issue if needed 14 | runs-on: ubuntu-latest 15 | env: 16 | REPORT_FILE: links-report 17 | steps: 18 | ## Check out code using Git 19 | - uses: actions/checkout@v3 20 | 21 | - name: Check all links at README.md but skips translations files 22 | id: lychee 23 | uses: lycheeverse/lychee-action@v1.4.1 24 | with: 25 | output: ${{ env.REPORT_FILE }} 26 | format: markdown 27 | ## Do not fail this step on broken links 28 | fail: false 29 | ## Allow pages replying with 200 (Ok), 204 (No Content), 30 | ## 206 (Partial Content) in at most 20 seconds with HTML content. 31 | args: >- 32 | --verbose 33 | --accept 200,204,206 34 | --headers "accept=text/html" 35 | --timeout 20 36 | --max-concurrency 10 37 | --no-progress 38 | README.md 39 | env: 40 | ## Avoid rate limiting when checking github.com links 41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | 43 | - name: Lychee's exit code 44 | ## https://github.com/lycheeverse/lychee#exit-codes 45 | run: echo Lychee exit with ${{ steps.lychee.outputs.exit_code }} 46 | 47 | - name: Find the last report issue open 48 | uses: micalevisk/last-issue-action@v1.2 49 | id: last_issue 50 | with: 51 | state: open 52 | labels: | 53 | report 54 | automated issue 55 | env: 56 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 57 | 58 | - name: Create issue from report file 59 | if: ${{ steps.last_issue.outputs.has_found == 'false' }} 60 | uses: peter-evans/create-issue-from-file@v4 61 | with: 62 | title: Link checker report 63 | content-filepath: ${{ env.REPORT_FILE }} 64 | issue-number: ${{ steps.last_issue.outputs.issue_number }} 65 | labels: | 66 | report 67 | automated issue 68 | 69 | - name: Update last report open issue created 70 | if: ${{ steps.last_issue.outputs.has_found == 'true' }} 71 | uses: peter-evans/create-issue-from-file@v4 72 | with: 73 | title: Link checker report 74 | content-filepath: ${{ env.REPORT_FILE }} 75 | issue-number: ${{ steps.last_issue.outputs.issue_number }} 76 | labels: | 77 | report 78 | automated issue 79 | 80 | - name: Close last report open issue 81 | if: ${{ steps.lychee.outputs.exit_code == 0 }} 82 | uses: peter-evans/close-issue@v2 83 | with: 84 | issue-number: ${{ steps.last_issue.outputs.issue_number }} 85 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | personal-9894.md 4 | 5 | # Targets Windows & Unix temporary files 6 | ~$* 7 | *~ 8 | 9 | # OS generated files # 10 | ###################### 11 | .DS_Store 12 | .DS_Store? 13 | ._* 14 | .Spotlight-V100 15 | .Trashes 16 | ehthumbs.db 17 | Thumbs.db 18 | 19 | # Sublime Files 20 | .sublime -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /extras/cheat sheets/C Reference Card (ANSI) 2.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/C Reference Card (ANSI) 2.2.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/Coding Interview Python Language Essentials.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/Coding Interview Python Language Essentials.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/Cpp_reference.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/Cpp_reference.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/Java Fundamentals Cheatsheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/Java Fundamentals Cheatsheet.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/STL Quick Reference 1.29.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/STL Quick Reference 1.29.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/big-o-cheatsheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/big-o-cheatsheet.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/bits-cheat-sheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/bits-cheat-sheet.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/python-cheat-sheet-v1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/python-cheat-sheet-v1.pdf -------------------------------------------------------------------------------- /extras/cheat sheets/system-design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hemansnation/coding-interview-university/c124e2d70bf96c81dac7e4a8a425c03152e55024/extras/cheat sheets/system-design.pdf -------------------------------------------------------------------------------- /programming-language-resources.md: -------------------------------------------------------------------------------- 1 | ## Programming Language Resources 2 | 3 | - C 4 | - [ANSI C Cheat Sheet]() 5 | - [K&R C book (ANSI C)](https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628) 6 | - [Make, Clang (video)](https://www.youtube.com/watch?v=U3zCxnj2w8M) 7 | - [Top C Programming Interview Questions](https://www.interviewbit.com/c-interview-questions) 8 | - GDB: 9 | - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=USPvePv1uzE) 10 | - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=y5JmQItfFck) 11 | - [Valgrind (video)](https://www.youtube.com/watch?v=fvTsFjDuag8) 12 | - [Let us C](https://books.google.co.in/books/about/Let_Us_C.html?id=7HrjAAAACAAJ) 13 | - [Complete C programming for beginners](https://youtu.be/KJgsSFOSQv0) 14 | 15 | - C++ 16 | - [C++ Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/Cpp_reference.pdf) 17 | - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) 18 | - [basics](https://www.tutorialspoint.com/cplusplus/cpp_basic_syntax.htm) 19 | - [pointers](https://www.cprogramming.com/tutorial/lesson6.html) 20 | - [class and object](https://www.cprogramming.com/tutorial/lesson12.html) 21 | - [functions](https://www.cprogramming.com/tutorial/lesson4.html) 22 | - [references](https://www.geeksforgeeks.org/references-in-c/) 23 | - [templates](https://www.cprogramming.com/tutorial/templates.html) 24 | - [compilation](https://www.youtube.com/watch?v=ZTu0kf-7h08) 25 | - [scope & linkage](https://www.learncpp.com/cpp-tutorial/scope-duration-and-linkage-summary/) 26 | - [namespaces](https://www.tutorialspoint.com/cplusplus/cpp_namespaces.htm) 27 | - [OOP](https://www.geeksforgeeks.org/object-oriented-programming-in-cpp/) 28 | - [STL](https://www.hackerearth.com/practice/notes/standard-template-library/) 29 | - [functors](http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html) 30 | - [C++ at Google (video)](https://www.youtube.com/watch?v=NOCElcMcFik) 31 | - [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) 32 | - Google uses clang-format (there is a command line "style" argument: -style=google) 33 | - [Efficiency with Algorithms, Performance with Data Structures (video)](https://youtu.be/fHNmRkzxHWs) 34 | - [Review of C++ concepts (video)](https://www.youtube.com/watch?v=Rub-JsjMhWY) 35 | - [Let us C++](https://books.google.co.in/books/about/Let_Us_C++.html?id=6HrjAAAACAAJ) 36 | - [C++ Primer](https://books.google.co.in/books/about/C++_Primer.html?id=J1HMLyxqJfgC&redir_esc=y) 37 | - [C++ Tutorial for Beginners](https://www.youtube.com/watch?v=vLnPwxZdW4Y) 38 | - [C++ Interview Questions](https://www.interviewbit.com/cpp-interview-questions) 39 | - Python 40 | - [Python Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) 41 | - [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA) 42 | - [Series on 3.4 (video)](https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_) 43 | - [Statistics for Hackers (video)](https://www.youtube.com/watch?v=Iq9DzN6mvYA) 44 | - [Faster Python (video)](https://www.youtube.com/watch?v=JDSGVvMwNM8) 45 | - [CPython Walk (video)](https://www.youtube.com/watch?v=LhadeL7_EIU&list=PLzV58Zm8FuBL6OAv1Yu6AwXZrnsFbbR0S&index=6) 46 | - [10 Tips for Pythonic Code (video)](https://www.youtube.com/watch?v=_O23jIXsshs) 47 | - [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M) 48 | - [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) 49 | - [Coding Interview Essentials](https://github.com/ajinkyal121/coding-interview-university/blob/master/extras/cheat%20sheets/Coding%20Interview%20Python%20Language%20Essentials.pdf) 50 | - [Data Structures And Algorithms in Python](https://www.youtube.com/watch?v=kQDxmjfkIKY) 51 | - [Python Programming Tutorial](https://www.scaler.com/topics/python/) 52 | - [Python Interview Questions](https://www.interviewbit.com/python-interview-questions) 53 | - Java 54 | - [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A) 55 | - [Java Cheat Sheet](https://www.interviewbit.com/java-cheat-sheet) 56 | - [Introduction To Programming In Java](http://introcs.cs.princeton.edu/java/home/) 57 | - [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/) 58 | - [Effective Java 3rd Edition](https://www.amazon.com/Effective-Java-Joshua-Bloch-ebook/dp/B078H61SCH) 59 | - [Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer](https://www.youtube.com/watch?v=RBSGKlAvoiM&t=1744s) 60 | - [Top Java Interview Questions and Answers](https://www.interviewbit.com/java-interview-questions) 61 | - [Data Structures in Java](https://www.youtube.com/playlist?list=PL9gnSGHSqcnr_DxHsP7AW9ftq0AtAyYqJ) 62 | - Go 63 | - [The Go programming Language](https://golang.org/) 64 | - [The Go programming Language (book)](http://www.gopl.io/) 65 | - [A Tour of Go](https://tour.golang.org/) 66 | - [Effective Go](https://golang.org/doc/effective_go.html) 67 | - [Go Wiki](https://golang.org/wiki) 68 | - [Go at Google: Language Design in the Service of Software Engineering](https://talks.golang.org/2012/splash.article) 69 | - [Go Proverbs](http://go-proverbs.github.io/) 70 | - [Go Proverbs - Rob Pike (video)](https://www.youtube.com/watch?v=PAAkCSZUG1c) 71 | - [Gophercises - Free course on Coding Exercises in Go](https://gophercises.com) 72 | - HTML 73 | - [HTML Cheat Sheet](https://www.interviewbit.com/html-cheat-sheet) 74 | - [Quick HTML Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf_ZNmuQSXdS197Oyr1L9sPB) 75 | - [HTML Crash Course for Beginners (1 hr)](https://www.youtube.com/watch?v=UB1O30fR-EE) 76 | - [Basic HTML and HTML5](https://www.freecodecamp.org/learn/responsive-web-design/basic-html-and-html5/) 77 | - [W3 Schools](https://www.w3schools.com/html/) 78 | - [Html Interview Questions](https://www.interviewbit.com/html-interview-questions) 79 | - CSS 80 | - [Quick CSS Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf8JIgLcu3sHigvQjTw_aC9C) 81 | - [CSS Crash Course for absolute Beginners](https://www.youtube.com/watch?v=yfoY53QXEnI) 82 | - [Basic CSS](https://www.freecodecamp.org/learn/responsive-web-design/basic-css/) 83 | - [W3 Schools](https://www.w3schools.com/css/) 84 | - [Top 30+ CSS Interview Questions](https://www.interviewbit.com/css-interview-questions) 85 | - Javascript 86 | - [JavaScript Cheat Sheet](https://www.interviewbit.com/javascript-cheat-sheet) 87 | - [Learn Javascript in 12 minutes](https://www.youtube.com/watch?v=Ukg_U3CnJWI) 88 | - [Javascript Beginner Tutorials](https://www.youtube.com/playlist?list=PL41lfR-6DnOrwYi5d824q9-Y6z3JdSgQa) 89 | - [Javascript Algorithms and Data Structures](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/) 90 | - [Javascript Algorithms With Explanations](https://github.com/trekhleb/javascript-algorithms) 91 | - [Javascript Tutorial - Learn From Scratch](https://www.scaler.com/topics/javascript/) 92 | - [Javascript Interview Questions and Answers](https://www.interviewbit.com/javascript-interview-questions) 93 | - Rust 94 | - [The Rust Programming Language](https://doc.rust-lang.org/book/title-page.html) 95 | - [Rust by Example](https://doc.rust-lang.org/stable/rust-by-example/) 96 | - [Rust Tutorial by Doug Milford from Lambda Valley](https://www.youtube.com/playlist?list=PLLqEtX6ql2EyPAZ1M2_C0GgVd4A-_L4_5) 97 | - [Introduction - Easy Rust](https://www.youtube.com/playlist?list=PLLqEtX6ql2EyPAZ1M2_C0GgVd4A-_L4_5) 98 | - [Rust overview](https://learning-rust.github.io/docs/index.html) 99 | - [A Gentle Introduction to Rust](https://stevedonovan.github.io/rust-gentle-intro/readme.html) 100 | 101 | - Ruby 102 | 103 | - [The Ruby Programming Language](https://book4you.org/book/1219034/7c9a4b) 104 | - [Polished Ruby Programming](https://book4you.org/book/16678106/f61159) 105 | - [Ruby Fu](https://rubyfu.net/) 106 | - [Ruby Koans](http://rubykoans.com/) 107 | 108 | - Other Language 2 109 | - etc 110 | -------------------------------------------------------------------------------- /translations/README-cn.md: -------------------------------------------------------------------------------- 1 | # 编程面试大学 2 | 3 | 原先我为了成为一个软件工程师而建立这份简单的学习主题清单, 但这份清单随着时间的推移而膨胀成今天这样。在做完这份清单上的每个目标后,[我成为了 Amazon 的软件开发工程师](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! 你或许不需要像我一样学习这么多。但是,让你成为一位称职工程师所需要的知识都在这里了。 4 | 5 | 我每天自学8~12小时,这样持续了好几个月。这是我的故事:[为什么我为了 Google 面试而自学了8个月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)。 6 | 7 | 在这份清单内的主题会让你拥有足够的知识去面对几乎每家软件公司的技术面试,包括科技巨头:Amazon、Facebook、Google,以及 Microsoft。 8 | 9 | 祝你好运! 10 | 11 |
12 |
13 |

14 | 成为赞助商 并支持编程大学! 15 |

16 |

17 | 特别感谢: 18 |

19 |

20 | 21 |

22 | Gitpod 23 |
24 |
25 |

26 | 为云构建的开发环境 27 |

28 |
29 |
30 | Gitpod、GitLab、GitHub 和 Bitbucket 原生集合,自动且持续地为你的所有分支预构建开发环境。因此,团队成员可以立即开始为每项新任务使用全新的开发环境进行编码 - 无论您是在构建新功能、想要修复错误还是进行代码审查。 31 |
32 |
33 |

34 |
35 |
36 | 37 | ## 这是? 38 | 39 | 这是我为了从 web 开发者(自学、非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 40 | 41 | ![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) 42 | 43 | 这份清单适用于 **新手软件工程师**,或者想从软件/网站开发转向软件工程(需要计算机科学知识)的人员。如果你有多年的经验,并且声称拥有多年的软件工程经验,并且期待一次更艰难的面试。 44 | 45 | 如果你具有多年的软件/网页开发经验,请注意,大型软件公司(例如 Google,Amazon,Facebook 和 Microsoft)将软件工程视为不同于软件/网页开发,并且它们需要计算机科学知识。 46 | 47 | 如果你想成为可靠性工程师或运维工程师,请从可选列表(网络,安全)中学习更多。 48 | 49 | --- 50 | 51 | ## 目录 52 | 53 | - [这是?](#这是) 54 | - [为何要用到它?](#为何要用到它) 55 | - [如何使用它](#如何使用它) 56 | - [不要觉得自己不够聪明](#不要觉得自己不够聪明) 57 | - [相关视频资源](#相关视频资源) 58 | - [面试过程 & 通用的面试准备](#面试过程--通用的面试准备) 59 | - [为你的面试选择一种语言](#为你的面试选择一种语言) 60 | - [书单](#书单) 61 | - [在你开始之前](#在你开始之前) 62 | - [没有包含的内容](#没有包含的内容) 63 | - [必备知识](#必备知识) 64 | - [日常计划](#日常计划) 65 | - [算法复杂度 / Big-O / 渐进分析法](#算法复杂度--big-o--渐进分析法) 66 | - [数据结构](#数据结构) 67 | - [数组(Arrays)](#数组arrays) 68 | - [链表(Linked Lists)](#链表linked-lists) 69 | - [堆栈(Stack)](#堆栈stack) 70 | - [队列(Queue)](#队列queue) 71 | - [哈希表(Hash table)](#哈希表hash-table) 72 | - [更多的知识](#更多的知识) 73 | - [二分查找(Binary search)](#二分查找binary-search) 74 | - [按位运算(Bitwise operations)](#按位运算bitwise-operations) 75 | - [树(Trees)](#树trees) 76 | - [树 —— 笔记 & 背景](#树--笔记--背景) 77 | - [二叉查找树(Binary search trees):BSTs](#二叉查找树binary-search-treesbsts) 78 | - [堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap)](#堆heap--优先级队列priority-queue--二叉堆binary-heap) 79 | - [平衡查找树(Balanced search trees)(基本概念,非细节)](#平衡查找树balanced-search-trees) 80 | - 遍历:前序、中序、后序、BFS、DFS 81 | - [排序](#排序sorting) 82 | - 选择排序(selection) 83 | - 插入排序(insertion) 84 | - 堆排序(heapsort) 85 | - 快速排序(quicksort) 86 | - 归并排序(merge sort) 87 | - [图(Graphs)](#图graphs) 88 | - 有向图(directed) 89 | - 无向图(undirected) 90 | - 邻接矩阵(adjacency matrix) 91 | - 邻接表(adjacency list) 92 | - 遍历:广度优先(BFS), 深度优先(DFS) 93 | - [更多知识](#更多知识) 94 | - [递归](#递归recursion) 95 | - [动态规划](#动态规划dynamic-programming) 96 | - [面向对象编程](#面向对象编程) 97 | - [设计模式](#设计模式) 98 | - [组合 & 概率](#组合combinatorics-n-中选-k-个--概率probability) 99 | - [NP, NP-完全和近似算法](#np-np-完全和近似算法) 100 | - [缓存](#缓存cache) 101 | - [进程和线程](#进程processe和线程thread) 102 | - [测试](#测试) 103 | - [调度](#调度) 104 | - [字符串搜索和操作](#字符串搜索和操作) 105 | - [字典树(Tries)](#字典树tries) 106 | - [浮点数](#浮点数) 107 | - [Unicode](#unicode) 108 | - [字节顺序](#字节序Endianness) 109 | - [网络](#网络视频) 110 | - [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理)(如果你有4+年经验) 111 | - [终面](#终面) 112 | - [编程问题练习](#编程问题练习) 113 | - [编程练习和挑战](#编程练习和挑战) 114 | - [当你临近面试时](#当你临近面试时) 115 | - [你的简历](#你的简历) 116 | - [当面试来临的时候](#当面试来临的时候) 117 | - [问面试官的问题](#问面试官的问题) 118 | - [当你获得了梦想的职位](#当你获得了梦想的职位) 119 | 120 | ---------------- 下面的内容是可选的 ---------------- 121 | 122 | - [额外书籍](#额外书籍) 123 | - [附加学习](#附加学习) 124 | - [编译器](#编译器) 125 | - [Emacs and vi(m)](#emacs-and-vim) 126 | - [Unix 命令行工具](#unix-命令行工具) 127 | - [信息论](#信息论-视频) 128 | - [奇偶校验位 & 汉明码 (视频)](#奇偶校验位--汉明码-视频) 129 | - [系统熵值](#系统熵值Entropy) 130 | - [密码学](#密码学) 131 | - [压缩](#压缩) 132 | - [计算机安全](#计算机安全) 133 | - [垃圾回收](#垃圾回收) 134 | - [并行编程](#并行编程) 135 | - [消息传递,序列化和队列化的系统](#消息传递序列化和队列系统) 136 | - [A*搜索算法](#A搜索算法) 137 | - [快速傅里叶变换](#快速傅里叶变换) 138 | - [布隆过滤器](#布隆过滤器) 139 | - [HyperLogLog](#HyperLogLog) 140 | - [局部敏感哈希](#局部敏感哈希) 141 | - [van Emde Boas 树](#van-emde-boas-树) 142 | - [增强数据结构](#增强数据结构) 143 | - [平衡查找树](#平衡查找树balanced-search-trees) 144 | - AVL 树 145 | - 伸缩树(Splay tree) 146 | - 红黑树 147 | - 2-3 查找树 148 | - 2-3-4 树(也称 2-4 树) 149 | - N-ary (K-ary, M-ary)树 150 | - B 树 151 | - [k-D 树](#k-D树) 152 | - [跳表](#跳表) 153 | - [网络流](#网络流) 154 | - [不相交集 & 联合查找](#不相交集--联合查找) 155 | - [快速处理的数学](#快速处理的数学) 156 | - [树堆 (Treap)](#树堆-treap) 157 | - [线性规划](#线性规划linear-programming视频) 158 | - [几何:凸包(Geometry, Convex hull)](#几何凸包geometry-convex-hull视频) 159 | - [离散数学](#离散数学) 160 | - [机器学习](#机器学习machine-learning) 161 | - [一些主题的额外内容](#一些主题的额外内容) 162 | - [视频系列](#视频系列) 163 | - [计算机科学课程](#计算机科学课程) 164 | - [论文](#论文) 165 | 166 | --- 167 | 168 | ## 为何要用到它? 169 | 170 | 当我开始这个项目时,我不知道堆和栈的区别,不了解时间复杂度(Big-O)、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,才会去找解决方法。在我的编程生涯中,虽然我有用过多维数组,也用过关联数组成千上万次,但我从来没有自己实现过数据结构。 171 | 172 | 这是一个漫长的计划,以至于花费了我数月的时间。若你早已熟悉大部分的知识,那么也许能节省大量的时间。 173 | 174 | ## 如何使用它 175 | 176 | 下面所有的东西都只是一个概述。因此,你需要由上而下逐一地去处理它。 177 | 178 | 在学习过程中,我使用 GitHub 特殊语法的 Markdown 去检查计划的进展,包括使用包含任务进度的任务列表。 179 | 180 | - [更多关于 Github-flavored Markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) 181 | 182 | ### 如果你不想使用 Git 183 | 184 | 在该页面上,单击顶部附近的 Code 按钮,然后单击“Download ZIP”。解压文件,就可以使用文本文件了。 185 | 186 | 如果你打开一个代码编辑器,你会看到所有格式都很好。 187 | 188 | ![How to download the repo as a zip file](https://d3j2pkmjtin6ou.cloudfront.net/how-to-download-as-zip.png) 189 | 190 | ### 如果你不介意 Git 191 | 192 | 1. 通过单击 Fork 按钮来 fork GitHub 仓库:`https://github.com/jwasham/coding-interview-university` 193 | 194 | ![Fork the GitHub repo](https://d3j2pkmjtin6ou.cloudfront.net/fork-button.png) 195 | 196 | 2. 克隆项目到本地: 197 | 198 | ```sh 199 | git clone git@github.com:/coding-interview-university.git 200 | cd coding-interview-university 201 | git checkout -b progress 202 | git remote add jwasham https://github.com/jwasham/coding-interview-university 203 | git fetch --all 204 | ``` 205 | 206 | 3. 在你完成了一些修改后,在框框中打 x: 207 | 208 | ```sh 209 | git add . 210 | git commit -m "Marked x" 211 | git rebase jwasham/main 212 | git push --set-upstream origin progress 213 | git push --force 214 | ``` 215 | 216 | ## 不要觉得自己不够聪明 217 | 218 | - 大多数成功的软件工程师都非常聪明,但他们都有一种觉得自己不够聪明的不安全感。 219 | - 下面的视频可以帮助你克服这种不安全感: 220 | - [天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ) 221 | - [不要单打独斗:面对技术中的隐形怪物](https://www.youtube.com/watch?v=1i8ylq4j_EY) 222 | 223 | ## 相关视频资源 224 | 225 | 部分视频只能通过在 Coursera 或者 Edx 课程上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。有时候某些课程需要等待好几个月才能获取,这期间你无法观看这些课程的影片。 226 | 227 | 很感谢你能帮我把网络公开课程的视频链接转换成公开的,可持续访问的视频源,比如 YouTube 视频,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 228 | 229 | ## 面试过程 & 通用的面试准备 230 | 231 | - [ ] [ABC:不要停止编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) 232 | - [ ] [白板编程(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) 233 | - [ ] [揭秘技术招聘](https://www.youtube.com/watch?v=N233T0epWTs) 234 | - [ ] 如何在科技四强企业中获得一份工作: 235 | - [ ] [“如何在科技四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) 236 | - [ ] 解密开发类面试第一集: 237 | - [ ] [Gayle L McDowell —— 解密开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) 238 | - [ ] [解密开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) 239 | - [ ] 解密 Facebook 编码面试: 240 | - [方法](https://www.youtube.com/watch?v=wCl9kvQGHPI) 241 | - [问题演练](https://www.youtube.com/watch?v=4UWDyJq8jZg) 242 | - [ ] 准备课程: 243 | - [ ] [软件工程师面试发布(收费课程)](https://www.udemy.com/software-engineer-interview-unleashed): 244 | - 从前 Google 面试官身上学习如何准备自己,让自己能够应付软件工程师的面试。 245 | - [ ] [Python 数据结构,算法和面试(收费课程)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): 246 | - Python 面试准备课程,内容涉及数据结构,算法,模拟面试等。 247 | - [ ] [Python 的数据结构和算法简介(Udacity 免费课程)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): 248 | - 免费的 Python 数据结构和算法课程。 249 | - [ ] [数据结构和算法纳米学位!(Udacity 收费纳米学位)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): 250 | - 获得超过100种数据结构和算法练习以及指导的动手练习,专门导师帮助你在面试和职场中做好准备。 251 | - [ ] [探究行为面试(Educative 免费课程)](https://www.educative.io/courses/grokking-the-behavioral-interview): 252 | - 很多时候,不是你的技术能力会阻碍你获得理想的工作,而是你在行为面试中的表现。 253 | 254 | ## 为你的面试选择一种语言 255 | 256 | 你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程,但对于大公司,你只有三种固定的选择: 257 | 258 | - C++ 259 | - Java 260 | - Python 261 | 262 | 你也可以使用下面两种编程语言,但可能会有某些限制,你需要事先查明: 263 | 264 | - JavaScript 265 | - Ruby 266 | 267 | 我之前写过一篇关于在面试时选择编程语言的文章:[为编程面试选择一种语言](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)。 268 | 269 | 你需要对你所选择的语言感到非常舒适且足够了解。 270 | 271 | 更多关于语言选择的阅读: 272 | 273 | - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ 274 | - http://blog.codingforinterviews.com/best-programming-language-jobs/ 275 | 276 | [在此查看相关语言的资源](../programming-language-resources.md) 277 | 278 | 由于我正在学习C、C++ 和 Python,因此在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 279 | 280 | ## 书单 281 | 282 | 为了节省你的时间,以下是比我使用过的更缩减的书单。 283 | 284 | ### 面试准备 285 | 286 | - [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) 287 | - 附有 C++ 和 Java 解答 288 | - 这是在练习 Cracking the Coding Interview 之前一个很好的热身 289 | - 不太困难,大多数问题可能比你在面试中看到的要容易(根据我的阅读) 290 | - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) 291 | - 附有 Java 答案 292 | 293 | ### 如果你有额外的时间: 294 | 295 | 选择以下之一: 296 | 297 | - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) 298 | - [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) 299 | - [ ] Elements of Programming Interviews (Java version) 300 | - [书](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) 301 | - [配套项目──书中每个问题的方法和测试用例](https://github.com/gardncl/elements-of-programming-interviews) 302 | 303 | ### 编程语言精选 304 | 305 | **你需要选择面试语言(请参见上文)。** 306 | 307 | 这是我按语言给出的建议。我没有所有语言的资源,欢迎贡献。 308 | 309 | 如果你通读其中之一,你应该具备了开始解决编程问题所需的所有数据结构和算法知识。除非你需要复习,否则**你可以跳过此项目中的所有视频讲座**。 310 | 311 | [额外编程语言的精选资源](https://github.com/jwasham/coding-interview-university/blob/main/programming-language-resources.md) 312 | 313 | ### C++ 314 | 315 | 我没有读过这两本书,但是它们颇受好评,作者是 Sedgewick,他非常厉害。 316 | 317 | - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) 318 | - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) 319 | - [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf) 320 | - 丰富而详细的数据结构和算法集合 321 | - 非常适合初学者 322 | 323 | 如果你有更好的 C++ 书籍,请告诉我。我正在搜集全面的资源。 324 | 325 | ### Java 326 | 327 | - [ ] [算法(Sedgewick 和 Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) 328 | - 包含课程内容(和Sedgewick!)的视频 329 | - [第一部分](https://www.coursera.org/learn/algorithms-part1) 330 | - [第二部分](https://www.coursera.org/learn/algorithms-part2) 331 | 332 | 或者: 333 | 334 | - [ ] [Java 数据结构和算法](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) 335 | - 作者:Goodrich、Tamassia、Goldwasser 336 | - 用作 UC Berkeley 的 CS 入门课程的可选教材 337 | - 请参阅下面有关 Python 版本的我的读书报告,这本书涵盖了相同的主题 338 | 339 | ### Python 340 | 341 | - [ ] [Python数据结构和算法](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) 342 | - 作者:Goodrich、Tamassia、Goldwasser 343 | - 我非常喜爱这本书,它包含了所有东西 344 | - 很 Python 的代码 345 | - 我的读书报告:[startupnextdoor.com/book-report-data-structures-and-algorithms-in-python](https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/) 346 | - [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf) 347 | 348 | ## 在你开始之前 349 | 350 | 该列表已经持续更新了很长的一段时间,所以,我们的确很容易会对其失去控制。 351 | 352 | 这里列出了一些我所犯过的错误,希望你不要重滔覆辙。 353 | 354 | ### 1. 你不可能把所有的东西都记住 355 | 356 | 就算我观看了数小时的视频,并记录了大量的笔记,几个月后的我,仍然会忘却其中大部分的东西。所以,我花了3天翻阅我的笔记,并制作成抽认卡(flashcard)帮助我复习: 357 | 358 | 请阅读以下的文章以免重蹈覆辙: 359 | 360 | [记住计算机科学知识](https://startupnextdoor.com/retaining-computer-science-knowledge/)。 361 | 362 | 有人推荐给我的课程(但我还沒看过):[学习如何学习](https://www.coursera.org/learn/learning-how-to-learn)。 363 | 364 | ### 2. 使用抽认卡 365 | 366 | 为了解决善忘的问题,我制作了一个抽认卡的网页,用于添加两种抽认卡:一般的及带有代码的。每种卡都会有不同的格式设计。 367 | 368 | 而且,我还以移动设备为先去设计这些网页,以使得在任何地方,我都能通过我的手机及平板去回顾知识。 369 | 370 | 你也可以免费制作属于你自己的抽认卡网站: 371 | 372 | - [抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards) 373 | - [我的抽认卡数据库 ── 旧 1200 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db) 374 | - [我的抽认卡数据库 ── 新 1800 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db) 375 | 376 | 有一点需要记住的是,我做事有点过头,以至于卡片都覆盖到所有的东西上,从汇编语言和 Python 的细枝末节,到机器学习和统计都被覆盖到卡片上。而这种做法,对于要求来说是多余的。 377 | 378 | **在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已知”。反复复习这张抽认卡,直到每次都能答对后才是真正学会了这个问题。反复地问答可帮助你深刻记住该知识点。 379 | 380 | 这里有个替代我抽认卡的网站 [Anki](http://ankisrs.net/),很多人向我推荐过它。这个网站用同一个字卡重复出现的方式让你牢牢地记住知识。这个网站非常容易使用,支持多平台,并且有云端同步功能。在 iOS 平台上收费25美金,其他平台免费。 381 | 382 | 这是我用 Anki 这个网站里的格式所储存的抽认卡资料库: ankiweb.net/shared/info/25173560 (感谢 [@xiewenya](https://github.com/xiewenya)) 383 | 384 | ### 3. 复习,复习,再复习 385 | 386 | 我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的抽认卡,以便在空余的时候可以学习。 387 | 388 | 编程累了就休息半个小时,并去复习你的抽认卡。 389 | 390 | ### 4. 专注 391 | 392 | 在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。放点纯音乐能帮上一些忙。 393 | 394 | ## 没有包含的内容 395 | 396 | 有一些熟悉且普遍的技术在此未被谈及到: 397 | 398 | - SQL 399 | - Javascript 400 | - HTML、CSS 和其他前端技术 401 | 402 | ## 日常计划 403 | 404 | 部分问题可能会花费一天的时间去学习,而有些则会花费多天。当然,有些学习并不需要我们懂得如何实现。 405 | 406 | 因此,每一天我都会在下面所列出的列表中选择一项,并观看相关的视频。然后,使用以下的一种语言去实现: 407 | 408 | - C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。 409 | - C++ —— 不使用内建的数据类型。 410 | - C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。 411 | - Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 412 | - 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。 413 | 414 | 你不需要学会所有的编程语言,你只需要专注在[一种编程语言](##为你的面试选择一种语言)上。 415 | 416 | 为何要在这些语言上分别实现一次? 417 | 418 | - 练习,练习,练习,直至我厌倦它,并正确无误地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆) 419 | - 在纯原生的条件下工作(不需垃圾回收机制的帮助下,手动分配/释放内存(除了 Python)) 420 | - 利用语言内建的数据类型,之后在实际工作的时候才能得心应手(在生产环境中,我不会去实现自己的链表) 421 | 422 | 就算我没有时间去每一项都这么做,但我也会尽我所能。 423 | 424 | 在这里你可以查看到我的代码: 425 | 426 | - [C](https://github.com/jwasham/practice-c) 427 | - [C++](https://github.com/jwasham/practice-cpp) 428 | - [Python](https://github.com/jwasham/practice-python) 429 | 430 | 你不需要记住每一个算法的内部原理。 431 | 432 | 在一个白板上写代码,而不要直接在计算机上编写。在测试完部分简单的输入后,到计算机上再测试一遍。 433 | 434 | ## 必备知识 435 | 436 | - [ ] **学习C语言** 437 | - C 语言无处不在。在学习的过程中,你会在书籍,讲座,视频等任何地方看到它的身影 438 | - [ ] [C程序设计语言,第二版](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) 439 | - 这是一本简短的书,但是它将使你更好地使用 C 语言,并且如果你稍加练习,就会很快熟练。理解 C 可帮助你了解程序和内存的工作方式 440 | - 问题答案 441 | 442 | - [ ] **计算机是如何处理一段程序:** 443 | - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=XM4lGflQFvA) 444 | - [ ] [计算机如何计算(视频)](https://youtu.be/1I5ZMmrOfnA) 445 | - [ ] [寄存器和内存(视频)](https://youtu.be/fpnE6UAfbtU) 446 | - [ ] [中央处理单元(视频)](https://youtu.be/FZGugFqdr60) 447 | - [ ] [指令和程序(视频)](https://youtu.be/zltgXvg6r3k) 448 | 449 | ## 算法复杂度 / Big-O / 渐进分析法 450 | 451 | - 并不需要实现 452 | - 这里有很多视频,看到你真正了解它为止。你随时可以回来复习。 453 | - 如果这些课程太过数学的话,你可以去看看最下面离散数学的视频,它能让你更了解这些数学背后的来源以及原理。 454 | - [ ] [Harvard CS50 —— 渐进表示(视频)](https://www.youtube.com/watch?v=iOq5kSKqeR4) 455 | - [ ] [Big O 记号(通用快速教程)(视频)](https://www.youtube.com/watch?v=V6mKVRU1evU) 456 | - [ ] [Big O 记号(以及 Omega 和 Theta)—— 最佳数学解释(视频)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) 457 | - [ ] Skiena 算法: 458 | - [视频](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 459 | - [幻灯片](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) 460 | - [ ] [对于算法复杂度分析的一次详细介绍](http://discrete.gr/complexity/) 461 | - [ ] [增长阶数(Orders of Growth)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/59) 462 | - [ ] [渐进性(Asymptotics)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/61) 463 | - [ ] [UC Berkeley Big O(视频)](https://youtu.be/VIS4YDpuP98) 464 | - [ ] [UC Berkeley Big Omega(视频)](https://youtu.be/ca3e7UVmeUc) 465 | - [ ] [平摊分析法(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) 466 | - [ ] [举证“Big O”(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/63) 467 | - [ ] TopCoder(包括递归关系和主定理): 468 | - [计算性复杂度:第一部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) 469 | - [计算性复杂度:第二部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) 470 | - [ ] [速查表(Cheat sheet)](http://bigocheatsheet.com/) 471 | 472 | ## 数据结构 473 | 474 | - ### 数组(Arrays) 475 | - 实现一个可自动调整大小的动态数组。 476 | - [ ] 介绍: 477 | - [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) 478 | - [UC Berkeley CS61B - 线性数组和多维数组(视频)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE)(从15分32秒开始) 479 | - [动态数组(视频)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) 480 | - [不规则数组(视频)](https://www.youtube.com/watch?v=1jtrQqYpt7g) 481 | - [ ] 实现一个动态数组(可自动调整大小的可变数组): 482 | - [ ] 练习使用数组和指针去编码,并且指针是通过计算去跳转而不是使用索引 483 | - [ ] 通过分配内存来新建一个原生数据型数组 484 | - 可以使用 int 类型的数组,但不能使用其语法特性 485 | - 从大小为16或更大的数(使用2的倍数 —— 16、32、64、128)开始编写 486 | - [ ] size() —— 数组元素的个数 487 | - [ ] capacity() —— 可容纳元素的个数 488 | - [ ] is_empty() 489 | - [ ] at(index) —— 返回对应索引的元素,且若索引越界则愤然报错 490 | - [ ] push(item) 491 | - [ ] insert(index, item) —— 在指定索引中插入元素,并把后面的元素依次后移 492 | - [ ] prepend(item) —— 可以使用上面的 insert 函数,传参 index 为 0 493 | - [ ] pop() —— 删除在数组末端的元素,并返回其值 494 | - [ ] delete(index) —— 删除指定索引的元素,并把后面的元素依次前移 495 | - [ ] remove(item) —— 删除指定值的元素,并返回其索引(即使有多个元素) 496 | - [ ] find(item) —— 寻找指定值的元素并返回其中第一个出现的元素其索引,若未找到则返回 -1 497 | - [ ] resize(new_capacity) // 私有函数 498 | - 若数组的大小到达其容积,则变大一倍 499 | - 获取元素后,若数组大小为其容积的1/4,则缩小一半 500 | - [ ] 时间复杂度 501 | - 在数组末端增加/删除、定位、更新元素,只允许占 O(1) 的时间复杂度(平摊(amortized)去分配内存以获取更多空间) 502 | - 在数组任何地方插入/移除元素,只允许 O(n) 的时间复杂度 503 | - [ ] 空间复杂度 504 | - 因为在内存中分配的空间邻近,所以有助于提高性能 505 | - 空间需求 = (大于或等于 n 的数组容积)* 元素的大小。即便空间需求为 2n,其空间复杂度仍然是 O(n) 506 | 507 | - ### 链表(Linked Lists) 508 | - [ ] 介绍: 509 | - [ ] [单向链表(视频)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) 510 | - [ ] [CS 61B —— 链表(一)(视频)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) 511 | - [ ] [CS 61B —— 链表(二)(视频)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) 512 | - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) ── 并非看完整个视频,只需要看关于节点结构和内存分配那一部分即可 513 | - [ ] 链表 vs 数组: 514 | - [基本链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) 515 | - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) 516 | - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) 517 | - [ ] 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 518 | - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) 519 | - [ ] 实现(我实现了使用尾指针以及没有使用尾指针这两种情况): 520 | - [ ] size() —— 返回链表中数据元素的个数 521 | - [ ] empty() —— 若链表为空则返回一个布尔值 true 522 | - [ ] value_at(index) —— 返回第 n 个元素的值(从0开始计算) 523 | - [ ] push_front(value) —— 添加元素到链表的首部 524 | - [ ] pop_front() —— 删除首部元素并返回其值 525 | - [ ] push_back(value) —— 添加元素到链表的尾部 526 | - [ ] pop_back() —— 删除尾部元素并返回其值 527 | - [ ] front() —— 返回首部元素的值 528 | - [ ] back() —— 返回尾部元素的值 529 | - [ ] insert(index, value) —— 插入值到指定的索引,并把当前索引的元素指向到新的元素 530 | - [ ] erase(index) —— 删除指定索引的节点 531 | - [ ] value_n_from_end(n) —— 返回倒数第 n 个节点的值 532 | - [ ] reverse() —— 逆序链表 533 | - [ ] remove_value(value) —— 删除链表中指定值的第一个元素 534 | - [ ] 双向链表 535 | - [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) 536 | - 并不需要实现 537 | 538 | - ### 堆栈(Stack) 539 | - [ ] [堆栈(视频)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) 540 | - [ ] 可以不实现,因为使用数组来实现并不重要 541 | 542 | - ### 队列(Queue) 543 | - [ ] [队列(视频)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) 544 | - [ ] [原型队列/先进先出(FIFO)](https://en.wikipedia.org/wiki/Circular_buffer) 545 | - [ ] 使用含有尾部指针的链表来实现: 546 | - enqueue(value) —— 在尾部添加值 547 | - dequeue() —— 删除最早添加的元素并返回其值(首部元素) 548 | - empty() 549 | - [ ] 使用固定大小的数组实现: 550 | - enqueue(value) —— 在可容的情况下添加元素到尾部 551 | - dequeue() —— 删除最早添加的元素并返回其值 552 | - empty() 553 | - full() 554 | - [ ] 花销: 555 | - 在糟糕的实现情况下,使用链表所实现的队列,其入列和出列的时间复杂度将会是 O(n)。因为,你需要找到下一个元素,以致循环整个队列 556 | - enqueue:O(1)(平摊(amortized)、链表和数组 [探测(probing)]) 557 | - dequeue:O(1)(链表和数组) 558 | - empty:O(1)(链表和数组) 559 | 560 | - ### 哈希表(Hash table) 561 | - [ ] 视频: 562 | - [ ] [链式哈希表(视频)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) 563 | - [ ] [Table Doubling 和 Karp-Rabin(视频)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 564 | - [ ] [Open Addressing 和密码型哈希(Cryptographic Hashing)(视频)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 565 | - [ ] [PyCon 2010:The Mighty Dictionary(视频)](https://www.youtube.com/watch?v=C4Kc8xzcA68) 566 | - [ ] [(进阶)随机取样(Randomization):全域哈希(Universal Hashing)& 完美哈希(Perfect Hashing)(视频)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) 567 | - [ ] [(进阶)完美哈希(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) 568 | 569 | - [ ] 在线课程: 570 | - [ ] [基本哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) 571 | - [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/3) 572 | - [ ] [电话薄问题(Phone Book Problem)(视频)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) 573 | - [ ] 分布式哈希表: 574 | - [Dropbox 中的瞬时上传及存储优化(视频)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) 575 | - [分布式哈希表(视频)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) 576 | 577 | - [ ] 使用线性探测的数组去实现 578 | - hash(k, m) —— m 是哈希表的大小 579 | - add(key, value) —— 如果 key 已存在则更新值 580 | - exists(key) 581 | - get(key) 582 | - remove(key) 583 | 584 | ## 更多的知识 585 | 586 | - ### 二分查找(Binary search) 587 | - [ ] [二分查找(视频)](https://www.youtube.com/watch?v=D5SrAga1pno) 588 | - [ ] [二分查找(视频)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) 589 | - [ ] [详情](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) 590 | - [ ] 实现: 591 | - 二分查找(在一个已排序好的整型数组中查找) 592 | - 迭代式二分查找 593 | 594 | - ### 按位运算(Bitwise operations) 595 | - [ ] [Bits 速查表](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) ── 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32) 596 | - [ ] 好好理解位操作符的含义:&、|、^、~、>>、<< 597 | - [ ] [字码(words)](https://en.wikipedia.org/wiki/Word_(computer_architecture)) 598 | - [ ] 好的介绍: 599 | [位操作(视频)](https://www.youtube.com/watch?v=7jkIUgLC29I) 600 | - [ ] [C 语言编程教程 2-10:按位运算(视频)](https://www.youtube.com/watch?v=d0AwjSpNXR0) 601 | - [ ] [位操作](https://en.wikipedia.org/wiki/Bit_manipulation) 602 | - [ ] [按位运算](https://en.wikipedia.org/wiki/Bitwise_operation) 603 | - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) 604 | - [ ] [位元抚弄者(The Bit Twiddler)](http://bits.stephan-brumme.com/) 605 | - [ ] [交互式位元抚弄者(The Bit Twiddler Interactive)](http://bits.stephan-brumme.com/interactive.html) 606 | - [ ] [位操作技巧(Bit Hacks)(视频)](https://www.youtube.com/watch?v=ZusiKXcz_ac) 607 | - [ ] [练习位操作](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/) 608 | - [ ] 一补数和补码 609 | - [二进制:利 & 弊(为什么我们要使用补码)(视频)](https://www.youtube.com/watch?v=lKTsv6iVxV4) 610 | - [一补数(1s Complement)](https://en.wikipedia.org/wiki/Ones%27_complement) 611 | - [补码(2s Complement)](https://en.wikipedia.org/wiki/Two%27s_complement) 612 | - [ ] 计算置位(Set Bits) 613 | - [计算一个字节中置位(Set Bits)的四种方式(视频)](https://youtu.be/Hzuzo9NJrlc) 614 | - [计算比特位](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) 615 | - [如何在一个 32 位的整型中计算置位(Set Bits)的数量](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) 616 | - [ ] 交换值: 617 | - [交换(Swap)](http://bits.stephan-brumme.com/swap.html) 618 | - [ ] 绝对值: 619 | - [绝对整型(Absolute Integer)](http://bits.stephan-brumme.com/absInteger.html) 620 | 621 | ## 树(Trees) 622 | 623 | - ### 树 —— 笔记 & 背景 624 | - [ ] [系列:树(视频)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) 625 | - 基本的树形结构 626 | - 遍历 627 | - 操作算法 628 | - [ ] [BFS(广度优先检索,breadth-first search)和 DFS(深度优先检索,depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) 629 | - BFS 笔记 630 | - 层序遍历(使用队列的 BFS 算法) 631 | - 时间复杂度: O(n) 632 | - 空间复杂度: 633 | - 最好情况:O(1) 634 | - 最坏情况:O(n/2)=O(n) 635 | - DFS 笔记: 636 | - 时间复杂度:O(n) 637 | - 空间复杂度: 638 | - 最好情况:O(log n) - 树的平均高度 639 | - 最坏情况:O(n) 640 | - 中序遍历(DFS:左、节点本身、右) 641 | - 后序遍历(DFS:左、右、节点本身) 642 | - 先序遍历(DFS:节点本身、左、右) 643 | 644 | - ### 二叉查找树(Binary search trees):BSTs 645 | - [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 646 | - [ ] [系列(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) 647 | - 从符号表开始到 BST 程序 648 | - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) 649 | - [ ] [MIT(视频)](https://www.youtube.com/watch?v=9Jry5-82I68) 650 | - C/C++: 651 | - [ ] [二叉查找树 —— 在 C/C++ 中实现(视频)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) 652 | - [ ] [BST 的实现 —— 在堆栈和堆中的内存分配(视频)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) 653 | - [ ] [在二叉查找树中找到最小和最大的元素(视频)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 654 | - [ ] [寻找二叉树的高度(视频)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) 655 | - [ ] [二叉树的遍历 —— 广度优先和深度优先策略(视频)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) 656 | - [ ] [二叉树:层序遍历(视频)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 657 | - [ ] [二叉树的遍历:先序、中序、后序(视频)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 658 | - [ ] [判断一棵二叉树是否为二叉查找树(视频)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 659 | - [ ] [从二叉查找树中删除一个节点(视频)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) 660 | - [ ] [二叉查找树中序遍历的后继者(视频)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) 661 | - [ ] 实现: 662 | - [ ] insert // 往树上插值 663 | - [ ] get_node_count // 查找树上的节点数 664 | - [ ] print_values // 从小到大打印树中节点的值 665 | - [ ] delete_tree 666 | - [ ] is_in_tree // 如果值存在于树中则返回 true 667 | - [ ] get_height // 返回节点所在的高度(如果只有一个节点,那么高度则为1) 668 | - [ ] get_min // 返回树上的最小值 669 | - [ ] get_max // 返回树上的最大值 670 | - [ ] is_binary_search_tree 671 | - [ ] delete_value 672 | - [ ] get_successor // 返回给定值的后继者,若没有则返回-1 673 | 674 | - ### 堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap) 675 | - 可视化是一棵树,但通常是以线性的形式存储(数组、链表) 676 | - [ ] [堆](https://en.wikipedia.org/wiki/Heap_(data_structure)) 677 | - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) 678 | - [ ] [简单的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) 679 | - [ ] [二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) 680 | - [ ] [关于树高的讨论(视频)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) 681 | - [ ] [基本操作(视频)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) 682 | - [ ] [完全二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) 683 | - [ ] [伪代码(视频)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) 684 | - [ ] [堆排序 —— 跳到起点(视频)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) 685 | - [ ] [堆排序(视频)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) 686 | - [ ] [构建一个堆(视频)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) 687 | - [ ] [MIT:堆与堆排序(视频)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 688 | - [ ] [CS 61B Lecture 24:优先级队列(视频)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) 689 | - [ ] [构建线性时间复杂度的堆(大顶堆)](https://www.youtube.com/watch?v=MiyLo8adrWw) 690 | - [ ] 实现一个大顶堆: 691 | - [ ] insert 692 | - [ ] sift_up —— 用于插入元素 693 | - [ ] get_max —— 返回最大值但不移除元素 694 | - [ ] get_size() —— 返回存储的元素数量 695 | - [ ] is_empty() —— 若堆为空则返回 true 696 | - [ ] extract_max —— 返回最大值并移除 697 | - [ ] sift_down —— 用于获取最大值元素 698 | - [ ] remove(i) —— 删除指定索引的元素 699 | - [ ] heapify —— 构建堆,用于堆排序 700 | - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆或者小顶堆进行就地排序 701 | 702 | ## 排序(Sorting) 703 | 704 | - [ ] 笔记: 705 | - 实现各种排序,知道每种排序的最坏、最好和平均的复杂度分别是什么场景: 706 | - 不要用冒泡排序 - 效率太差 - 时间复杂度 O(n^2), 除非 n <= 16 707 | - [ ] 排序算法的稳定性 ("快排是稳定的么?") 708 | - [排序算法的稳定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) 709 | - [排序算法的稳定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) 710 | - [排序算法的稳定性](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) 711 | - [排序算法 - 稳定性](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) 712 | - [ ] 哪种排序算法可以用链表?哪种用数组?哪种两者都可? 713 | - 并不推荐对一个链表排序,但归并排序是可行的. 714 | - [链表的归并排序](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) 715 | 716 | - 关于堆排序,请查看前文堆的数据结构部分。堆排序很强大,不过是非稳定排序。 717 | - [ ] [Sedgewick ── 归并排序(5个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3) 718 | - [ ] 1. 归并排序 719 | - [ ] 2. 自下而上的归并排序 720 | - [ ] 3. 排序复杂度 721 | - [ ] 4. 比较器 722 | - [ ] 5. 稳定性 723 | - [ ] [Sedgewick ── 快速排序(4个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3) 724 | - [ ] 1. 快速排序 725 | - [ ] 2. 选择 726 | - [ ] 3. 重复键值 727 | - [ ] 4. 系统排序 728 | - [ ] [冒泡排序(视频)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) 729 | - [ ] [冒泡排序分析(视频)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) 730 | - [ ] [插入排序 & 归并排序(视频)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 731 | - [ ] [插入排序(视频)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) 732 | - [ ] [归并排序(视频)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) 733 | - [ ] [快排(视频)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) 734 | - [ ] [选择排序(视频)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) 735 | 736 | - [ ] 归并排序代码: 737 | - [ ] [使用外部数组(C语言)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) 738 | - [ ] [使用外部数组(Python语言)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) 739 | - [ ] [对原数组直接排序(C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) 740 | - [ ] 快速排序代码: 741 | - [ ] [实现(C语言)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) 742 | - [ ] [实现(C语言)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) 743 | - [ ] [实现(Python语言)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) 744 | 745 | - [ ] 实现: 746 | - [ ] 归并:平均和最差情况的时间复杂度为 O(n log n)。 747 | - [ ] 快排:平均时间复杂度为 O(n log n)。 748 | - 选择排序和插入排序的最坏、平均时间复杂度都是 O(n^2)。 749 | - 关于堆排序,请查看前文堆的数据结构部分。 750 | 751 | - [ ] 有兴趣的话,还有一些补充,但并不是必须的: 752 | - [Sedgewick──基数排序 (6个视频)](https://www.coursera.org/learn/algorithms-part2/home/week/3) 753 | - [ ] [1. Java 中的字符串](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) 754 | - [ ] [2. 键值索引计数(Key Indexed Counting)](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) 755 | - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) 756 | - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) 757 | - [ ] [5. 3中基数快速排序](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) 758 | - [ ] [6. 后继数组(Suffix Arrays)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) 759 | - [ ] [基数排序](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) 760 | - [ ] [基数排序(视频)](https://www.youtube.com/watch?v=xhr26ia4k38) 761 | - [ ] [基数排序, 计数排序 (线性时间内)(视频)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 762 | - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法(视频)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 763 | - [ ] [线性时间内的排序(视频)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) 764 | 765 | 总结一下,这是[15种排序算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的可视化表示。如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“排序”部分。 766 | 767 | ## 图(Graphs) 768 | 769 | 图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。 770 | 771 | - 笔记: 772 | - 有4种基本方式在内存里表示一个图: 773 | - 对象和指针 774 | - 邻接矩阵 775 | - 邻接表 776 | - 邻接图 777 | - 熟悉以上每一种图的表示法,并了解各自的优缺点 778 | - 广度优先搜索和深度优先搜索:知道它们的计算复杂度和设计上的权衡以及如何用代码实现它们 779 | - 遇到一个问题时,首先尝试基于图的解决方案,如果没有再去尝试其他的。 780 | 781 | - MIT(视频): 782 | - [广度优先搜索](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) 783 | - [深度优先搜索](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) 784 | 785 | - [ ] Skiena 教授的课程 - 很不错的介绍: 786 | - [ ] [CSE373 2012 - 课程 11 - 图的数据结构(视频)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) 787 | - [ ] [CSE373 2012 - 课程 12 - 广度优先搜索(视频)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) 788 | - [ ] [CSE373 2012 - 课程 13 - 图的算法(视频)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) 789 | - [ ] [CSE373 2012 - 课程 14 - 图的算法 (1)(视频)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 790 | - [ ] [CSE373 2012 - 课程 15 - 图的算法 (2)(视频)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 791 | - [ ] [CSE373 2012 - 课程 16 - 图的算法 (3)(视频)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 792 | 793 | - [ ] 图 (复习和其他): 794 | 795 | - [ ] [6.006 单源最短路径问题(视频)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 796 | - [ ] [6.006 Dijkstra 算法(视频)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 797 | - [ ] [6.006 Bellman-Ford 算法(视频)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) 798 | - [ ] [6.006 Dijkstra 效率优化(视频)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) 799 | - [ ] [Aduni: 图的算法 I - 拓扑排序,最小生成树,Prim 算法 - 第六课(视频)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 800 | - [ ] [Aduni: 图的算法 II - 深度优先搜索, 广度优先搜索, Kruskal 算法, 并查集数据结构 - 第七课(视频)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) 801 | - [ ] [Aduni: 图的算法 III: 最短路径 - 第八课(视频)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) 802 | - [ ] [Aduni: 图的算法. IV: 几何算法介绍 - 第九课(视频)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) 803 | - [ ] [CS 61B 2014 (从 58:09 开始)(视频)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) 804 | - [ ] [CS 61B 2014: 加权图(视频)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) 805 | - [ ] [贪心算法: 最小生成树(视频)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 806 | - [ ] [图的算法之强连通分量 Kosaraju 算法(视频)](https://www.youtube.com/watch?v=RpgcYiky7uw) 807 | 808 | - 完整的 Coursera 课程: 809 | - [ ] [图的算法(视频)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) 810 | 811 | - 我会实现: 812 | - [ ] DFS 邻接表 (递归) 813 | - [ ] DFS 邻接表 (栈迭代) 814 | - [ ] DFS 邻接矩阵 (递归) 815 | - [ ] DFS 邻接矩阵 (栈迭代) 816 | - [ ] BFS 邻接表 817 | - [ ] BFS 邻接矩阵 818 | - [ ] 单源最短路径问题 (Dijkstra) 819 | - [ ] 最小生成树 820 | - 基于 DFS 的算法 (根据上文 Aduni 的视频): 821 | - [ ] 检查环 (我们会先检查是否有环存在以便做拓扑排序) 822 | - [ ] 拓扑排序 823 | - [ ] 计算图中的连通分支 824 | - [ ] 列出强连通分量 825 | - [ ] 检查双向图 826 | 827 | 可以从 Skiena 的书(参考下面的书推荐小节)和面试书籍中学习更多关于图的实践。 828 | 829 | ## 更多知识 830 | 831 | - ### 递归(Recursion) 832 | - [ ] Stanford 大学关于递归 & 回溯的课程: 833 | - [ ] [课程 8 | 抽象编程(视频)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) 834 | - [ ] [课程 9 | 抽象编程(视频)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) 835 | - [ ] [课程 10 | 抽象编程(视频)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) 836 | - [ ] [课程 11 | 抽象编程(视频)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) 837 | - 什么时候适合使用 838 | - 尾递归会更好么? 839 | - [ ] [什么是尾递归以及为什么它如此糟糕?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) 840 | - [ ] [尾递归(视频)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1) 841 | 842 | - ### 动态规划(Dynamic Programming) 843 | - 在你的面试中或许没有任何动态规划的问题,但能够知道一个题目可以使用动态规划来解决是很重要的。 844 | - 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。 845 | - 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。 846 | - [ ] 视频: 847 | - Skiena 的视频可能会有点难跟上,有时候他用白板写的字会比较小,难看清楚。 848 | - [ ] [Skiena: CSE373 2012 - 课程 19 - 动态规划介绍(视频)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) 849 | - [ ] [Skiena: CSE373 2012 - 课程 20 - 编辑距离(视频)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) 850 | - [ ] [Skiena: CSE373 2012 - 课程 21 - 动态规划举例(视频)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) 851 | - [ ] [Skiena: CSE373 2012 - 课程 22 - 动态规划应用(视频)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) 852 | - [ ] [Simonson: 动态规划 0 (starts at 59:18)(视频)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) 853 | - [ ] [Simonson: 动态规划 I - 课程 11(视频)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 854 | - [ ] [Simonson: 动态规划 II - 课程 12(视频)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) 855 | - [ ] 单独的 DP 问题 (每一个视频都很短):[动态规划(视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) 856 | - [ ] 耶鲁课程笔记: 857 | - [ ] [动态规划](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) 858 | - [ ] Coursera 课程: 859 | - [ ] [RNA 二级结构问题(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) 860 | - [ ] [动态规划算法(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) 861 | - [ ] [DP 算法描述(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) 862 | - [ ] [DP 算法的运行时间(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) 863 | - [ ] [DP vs 递归实现(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) 864 | - [ ] [全局成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) 865 | - [ ] [本地成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) 866 | 867 | - ### 面向对象编程 868 | - 可选:[UML 2.0系列(视频)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) 869 | - SOLID 面向对象编程原则:[SOLID 原则(视频)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) 870 | 871 | - ### 设计模式 872 | - [ ] [UML 统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) 873 | - [ ] 主要有如下的设计模式: 874 | - [ ] 策略模式(strategy) 875 | - [ ] 单例模式(singleton) 876 | - [ ] 适配器模式(adapter) 877 | - [ ] 原型模式(prototype) 878 | - [ ] 装饰器模式(decorator) 879 | - [ ] 访问者模式(visitor) 880 | - [ ] 工厂模式,抽象工厂模式(factory, abstract factory) 881 | - [ ] 外观模式(facade) 882 | - [ ] 观察者模式(observer) 883 | - [ ] 代理模式(proxy) 884 | - [ ] 委托模式(delegate) 885 | - [ ] 命令模式(command) 886 | - [ ] 状态模式(state) 887 | - [ ] 备忘录模式(memento) 888 | - [ ] 迭代器模式(iterator) 889 | - [ ] 组合模式(composite) 890 | - [ ] 享元模式(flyweight) 891 | - [ ] [第六章 (第 1 部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) 892 | - [ ] [第六章 (第 2 部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) 893 | - [ ] [第六章 (第 3 部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy(视频)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) 894 | - [ ] [系列视频(27个)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) 895 | - [ ] [Head First 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) 896 | - 尽管《设计模式:可复用面向对象软件的基础》才是这方面的经典,但是我还是认为Head First对于新手更加友好。 897 | - [ ] [实际操作:设计模式和对入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips) 898 | - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) 899 | 900 | - ### 组合(Combinatorics) (n 中选 k 个) & 概率(Probability) 901 | - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择)(视频)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) 902 | - [ ] [来点学校的东西: 概率(视频)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) 903 | - [ ] [来点学校的东西: 概率和马尔可夫链(视频)](https://www.youtube.com/watch?v=dNaJg-mLobQ) 904 | - [ ] 可汗学院: 905 | - 课程设置: 906 | - [ ] [概率理论基础](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) 907 | - 只有视频 - 41 (每一个都短小精悍): 908 | - [ ] [概率解释(视频)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) 909 | 910 | - ### NP, NP-完全和近似算法 911 | - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题,而且能在面试官试图忽悠你的时候识别出他们。 912 | - 知道 NP 完全是什么意思. 913 | - [ ] [计算复杂度(视频)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) 914 | - [ ] Simonson: 915 | - [ ] [贪心算法. II & 介绍 NP-完全性(视频)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) 916 | - [ ] [NP-完全性 II & 归约(视频)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 917 | - [ ] [NP-完全性 III(视频)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 918 | - [ ] [NP-完全性 IV(视频)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) 919 | - [ ] Skiena: 920 | - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-完全性 IV(视频)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) 921 | - [ ] [CSE373 2012 - 课程 24 - NP-完全性证明(视频)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 922 | - [ ] [CSE373 2012 - 课程 25 - NP-完全性挑战(视频)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 923 | - [ ] [复杂度: P, NP, NP-完全性, 规约(视频)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) 924 | - [ ] [复杂度: 近视算法 Algorithms(视频)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) 925 | - [ ] [复杂度: 固定参数算法(视频)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 926 | - Peter Norvik 讨论旅行商问题的近似最优解: 927 | - [Jupyter 笔记本](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) 928 | - 《算法导论》(CLRS)的第 1048 - 1140 页。 929 | 930 | - ### 缓存(Cache) 931 | - [ ] LRU 缓存: 932 | - [ ] [LRU 的魔力 (100 Days of Google Dev)(视频)](https://www.youtube.com/watch?v=R5ON3iwx78M) 933 | - [ ] [实现 LRU(视频)](https://www.youtube.com/watch?v=bq6N7Ym81iI) 934 | - [ ] [LeetCode - 146 LRU Cache (C++)(视频)](https://www.youtube.com/watch?v=8-FZRAjR7qU) 935 | - [ ] CPU 缓存: 936 | - [ ] [MIT 6.004 L15: 存储体系(视频)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) 937 | - [ ] [MIT 6.004 L16: 缓存的问题(视频)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) 938 | 939 | - ### 进程(Processe)和线程(Thread) 940 | - [ ] 计算机科学 162 - 操作系统 (25 个视频): 941 | - 视频 1-11 是关于进程和线程 942 | - [操作系统和系统编程(视频)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) 943 | - [进程和线程的区别是什么?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) 944 | - 涵盖了: 945 | - 进程、线程、协程 946 | - 进程和线程的区别 947 | - 进程 948 | - 线程 949 | - 锁 950 | - 互斥 951 | - 信号量 952 | - 监控 953 | - 他们是如何工作的 954 | - 死锁 955 | - 活锁 956 | - CPU 活动, 中断, 上下文切换 957 | - 现代多核处理器的并发式结构 958 | - [分页(paging),分段(segmentation)和虚拟内存(视频)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) 959 | - [中断(视频)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) 960 | - 进程资源需要(内存:代码、静态存储器、栈、堆、文件描述符、I/O) 961 | - 线程资源需要(在同一个进程内和其他线程共享以上(除了栈)的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈) 962 | - Fork 操作是真正的写时复制(只读),直到新的进程写到内存中,才会生成一份新的拷贝。 963 | - 上下文切换 964 | - 操作系统和底层硬件是如何初始化上下文切换的? 965 | - [ ] [C++ 的线程 (系列 - 10 个视频)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) 966 | - [ ] Python 的并发 (视频): 967 | - [ ] [线程系列](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) 968 | - [ ] [Python 线程](https://www.youtube.com/watch?v=Bs7vPNbB9JM) 969 | - [ ] [理解 Python 的 GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s) 970 | - [参考](http://www.dabeaz.com/GIL) 971 | - [ ] [David Beazley - Python 协程 - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) 972 | - [ ] [Keynote David Beazley - 兴趣主题 (Python 异步 I/O)](https://www.youtube.com/watch?v=ZzfHjytDceU) 973 | - [ ] [Python 中的互斥](https://www.youtube.com/watch?v=0zaPs8OtyKY) 974 | 975 | - ### 测试 976 | - 涵盖了: 977 | - 单元测试是如何工作的 978 | - 什么是模拟对象 979 | - 什么是集成测试 980 | - 什么是依赖注入 981 | - [ ] [James Bach 讲敏捷软件测试(视频)](https://www.youtube.com/watch?v=SAhJf36_u5U) 982 | - [ ] [James Bach 软件测试公开课(视频)](https://www.youtube.com/watch?v=ILkT_HV9DVU) 983 | - [ ] [Steve Freeman - 测试驱动的开发(视频)](https://vimeo.com/83960706) 984 | - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) 985 | - [ ] [Python:测试驱动的 Web 开发](http://www.obeythetestinggoat.com/pages/book.html#toc) 986 | - [ ] 依赖注入: 987 | - [ ] [视频](https://www.youtube.com/watch?v=IKD2-MAkXyQ) 988 | - [ ] [测试之道](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) 989 | - [ ] [如何编写测试](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) 990 | 991 | - ### 调度 992 | - 在操作系统中是如何运作的 993 | - 在操作系统部分的视频里有很多资料 994 | 995 | - ### 字符串搜索和操作 996 | - [ ] [Sedgewick──后缀数组(Suffix Arrays)(视频)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) 997 | - [ ] [Sedgewick──子字符串搜寻(视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4) 998 | - [ ] [1. 子字符串搜寻导论](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) 999 | - [ ] [2. 子字符串搜寻──暴力法](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) 1000 | - [ ] [3. KMP算法](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) 1001 | - [ ] [4. Boyer-Moore算法](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) 1002 | - [ ] [5. Rabin-Karp算法](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) 1003 | - [ ] [文本的搜索模式(视频)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) 1004 | 1005 | 如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“字符串匹配”部分。 1006 | 1007 | - ### 字典树(Tries) 1008 | 1009 | - 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。 1010 | - 阅读代码,但不实现。 1011 | - [Sedgewick──字典树(3个视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4) 1012 | - [ ] [1. R Way字典树](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) 1013 | - [ ] [2. 三元搜索树](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) 1014 | - [ ] [3. 基于字符串的操作](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) 1015 | - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) 1016 | - [ ] 短课程视频: 1017 | - [ ] [对字典树的介绍(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) 1018 | - [ ] [字典树的性能(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) 1019 | - [ ] [实现一棵字典树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) 1020 | - [ ] [字典树:一个被忽略的数据结构](https://www.toptal.com/java/the-trie-a-neglected-data-structure) 1021 | - [ ] [TopCoder —— 使用字典树](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) 1022 | - [ ] [标准教程(现实中的用例)(视频)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) 1023 | - [ ] [MIT,高阶数据结构,字符串(视频中间有点困难)(视频)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) 1024 | 1025 | - ### 浮点数 1026 | 1027 | - [ ] 简单8位:[浮点数的表示形式-1(视频──计算中存在错误,请参见视频说明)](https://www.youtube.com/watch?v=ji3SfClm8TU) 1028 | - [ ] 32位:[IEEE754 32位浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec) 1029 | 1030 | - ### Unicode 1031 | - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识](http://www.joelonsoftware.com/articles/Unicode.html) 1032 | - [ ] [关于处理文本需要的编码和字符集,每个程序员绝对需要知道的知识](http://kunststube.net/encoding/) 1033 | 1034 | - ### 字节序(Endianness) 1035 | - [大/小端序](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html) 1036 | - [大端序 Vs 小端序(视频)](https://www.youtube.com/watch?v=JrNF0KRAlyo) 1037 | - [由里入内的大端序与小端序(视频)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) 1038 | - 对于内核开发非常具有技术性,如果大多数的内容听不懂也没关系。 1039 | - 前半部就已经足够了。 1040 | 1041 | - ### 网络(视频) 1042 | - **如果你具有网络经验或想成为可靠性工程师或运维工程师,期待你的问题** 1043 | - 知道这些有益无害,多多益善! 1044 | - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) 1045 | - [ ] [UDP 和 TCP:网络传输协议中的数据压缩(视频)](https://www.youtube.com/watch?v=Vdc8TCESIg8) 1046 | - [ ] [TCP/IP 和 OSI 模型解释!(视频)](https://www.youtube.com/watch?v=e5DEVa9eSN0) 1047 | - [ ] [互联网上的数据包传输。网络和 TCP/IP 教程。(视频)](https://www.youtube.com/watch?v=nomyRJehhnM) 1048 | - [ ] [HTTP(视频)](https://www.youtube.com/watch?v=WGJrLqtX7As) 1049 | - [ ] [SSL 和 HTTPS(视频)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) 1050 | - [ ] [SSL/TLS(视频)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) 1051 | - [ ] [HTTP 2.0(视频)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) 1052 | - [ ] [视频系列(21个视频)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) 1053 | - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记(视频)](https://www.youtube.com/watch?v=t5xYI0jzOf4) 1054 | - [ ] 套接字(Sockets): 1055 | - [Java──套接字──介绍(视频)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) 1056 | - [套接字编程(视频)](https://www.youtube.com/watch?v=G75vN2mnJeQ) 1057 | 1058 | ## 系统设计、可伸缩性、数据处理 1059 | 1060 | **如果你已经拥有了4年以上的编程经验,那你可以来看看有关系统设计的问题** 1061 | 1062 | - 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。要花费相当多的时间在这个主题上。 1063 | - 考量: 1064 | - 伸缩性 1065 | - 把大数据集提取为单一值 1066 | - 大数据集转换 1067 | - 处理大量的数据集 1068 | - 系统 1069 | - 功能集 1070 | - 接口 1071 | - 类层次结构 1072 | - 在特定的约束下设计系统 1073 | - 轻量和健壮性 1074 | - 权衡和折衷 1075 | - 性能分析和优化 1076 | - [ ] **从这里开始**:[系统设计入门](https://github.com/donnemartin/system-design-primer) 1077 | - [ ] [HiredInTech:系统设计](http://www.hiredintech.com/system-design/) 1078 | - [ ] [该如何为技术面试里设计方面的问题做准备?](https://www.quora.comHow-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) 1079 | - [ ] [在系统设计面试前必须知道的 8 件事](http://blog.gainlo.co/index.php/2015/10/228-things-you-need-to-know-before-system-design-interviews/) 1080 | - [ ] [算法设计](http://www.hiredintech.com/algorithm-design/) 1081 | - [ ] [数据库范式 - 1NF, 2NF, 3NF and 4NF(视频)](https://www.youtube.com/watch?v=UrYLYV7WSHM) 1082 | - [ ] [系统设计面试](https://github.com/checkcheckzz/system-design-interview) - 这一部分有很多的资源浏览一下我放在下面的文章和例子。 1083 | - [ ] [如何在系统设计面试中脱颖而出](http://www.palantir.com/2011/10how-to-rock-a-systems-design-interview/) 1084 | - [ ] [每个人都该知道的一些数字](http://everythingisdata.wordpress.com/2009/10/17numbers-everyone-should-know/) 1085 | - [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11how-long-does-it-take-to-make-context.html) 1086 | - [ ] [跨数据中心的事务(视频)](https://www.youtube.com/watch?v=srOgpXECblk) 1087 | - [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) 1088 | - [ ] 共识算法: 1089 | - [ ] Paxos:[Paxos协议──Computerphile(视频)](https://www.youtube.com/watch?v=s8JqcZtvnsM) 1090 | - [ ] Raft: [Raft 分布式共识算法简介(视频)](https://www.youtube.com/watch?v=P9Ydif5_qvE) 1091 | - [ ] [易于阅读的论文](https://raft.github.io/) 1092 | - [ ] [信息图] 1093 | - [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html) 1094 | - [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html) 1095 | - [ ] 可伸缩性: 1096 | - 你不需要知道所有这些。只需挑选一些你感兴趣的东西即可。 1097 | - [ ] [很棒的概述(视频)](https://www.youtube.com/watch?v=-W9F__D3oY4) 1098 | - [ ] 简短系列: 1099 | - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) 1100 | - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) 1101 | - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) 1102 | - [异步](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) 1103 | - [ ] [可伸缩的 Web 架构和分布式系统](http://www.aosabook.org/en/distsys.html) 1104 | - [ ] [错误的分布式系统解释](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) 1105 | - [ ] [实用编程技术](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) 1106 | - [extra: Google Pregel 图形处理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) 1107 | - [ ] [Jeff Dean - 在 Goolge 构建软件系统(视频)](https://www.youtube.com/watch?v=modXC5IWTJI) 1108 | - [ ] [可伸缩系统架构设计介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/) 1109 | - [ ] [使用 App Engine 和云存储扩展面向全球用户的手机游戏架构实践(视频)](https://www.youtube.com/watch?v=9nWyWwY2Onc) 1110 | - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra(视频)](https://www.youtube.com/watch?v=H4vMcD7zKM0) 1111 | - [ ] [算法的重要性](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/) 1112 | - [ ] [分片(Sharding)](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) 1113 | - [ ] [Facebook 系统规模扩展实践 (2012), "为 10 亿用户构建"(视频)](https://www.youtube.com/watch?v=oodS71YtkGU) 1114 | - [ ] [Long Game 工程实践 - Astrid Atkinson Keynote(视频)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) 1115 | - [ ] [30 分钟看完 YouTuBe 7 年系统扩展经验](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) 1116 | - [视频](https://www.youtube.com/watch?v=G-lGCC4KKok) 1117 | - [ ] [PayPal 如何用 8 台虚拟机扛住 10 亿日交易量系统](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) 1118 | - [ ] [如何对大数据集去重](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) 1119 | - [ ] [Etsy 的扩展和工程文化探究 Jon Cowie(视频)](https://www.youtube.com/watch?v=3vV4YiqKm1o) 1120 | - [ ] [是什么造就了 Amazon 自己的微服务架构](http://thenewstack.io/led-amazon-microservices-architecture/) 1121 | - [ ] [压缩还是不压缩,是 Uber 面临的问题](https://eng.uber.com/trip-data-squeeze/) 1122 | - [ ] [异步 I/O Tarantool 队列](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html) 1123 | - [ ] [什么时候应该用近似查询处理?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) 1124 | - [ ] [Google 从单数据中心到故障转移, 到本地多宿主架构的演变](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) 1125 | - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) 1126 | - [ ] [Egnyte: 构建和扩展 PB 级分布式系统架构的经验教训](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html) 1127 | - [ ] [机器学习驱动的编程: 新世界的新编程方式](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html) 1128 | - [ ] [日服务数百万请求的图像优化技术](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) 1129 | - [ ] [Patreon 架构](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) 1130 | - [ ] [Tinder: 推荐引擎是如何决定下一个你将会看到谁的?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) 1131 | - [ ] [现代缓存设计](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) 1132 | - [ ] [Facebook 实时视频流扩展](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) 1133 | - [ ] [在 Amazon AWS 上把服务扩展到 1100 万量级的新手教程](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) 1134 | - [ ] [对延时敏感的应用是否应该使用 Docker?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) 1135 | - [ ] [360 度解读 Netflix 技术栈](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) 1136 | - [ ] [延迟无处不在 - 如何搞定它?](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) 1137 | - [ ] [无服务器架构](http://martinfowler.com/articles/serverless.html) 1138 | - [ ] [是什么驱动着 Instagram: 上百个实例、几十种技术](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) 1139 | - [ ] [Cinchcast 架构 - 每天处理 1500 小时的音频](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html) 1140 | - [ ] [Justin.Tv 实时视频播放架构](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) 1141 | - [ ] [Playfish's 社交游戏架构 - 每月五千万用户增长](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) 1142 | - [ ] [猫途鹰架构 - 40 万访客, 200 万动态页面访问, 30TB 数据](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) 1143 | - [ ] [PlentyOfFish 架构](http://highscalability.com/plentyoffish-architecture) 1144 | - [ ] [Salesforce 架构 - 如何扛住 13 亿日交易量](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) 1145 | - [ ] [ESPN's 架构扩展](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) 1146 | - [ ] 下面“消息传递,序列化和队列系统”部分的内容会提到什么样的技术能把各种服务整合到一起 1147 | - [ ] Twitter: 1148 | - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter"(视频)](https://www.youtube.com/watch?v=5cKTP36HVgI) 1149 | - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) 1150 | - 更多内容可以查看[视频系列部分](#视频系列)的“大规模数据挖掘”视频系列。 1151 | - [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。 1152 | - 复习: [系统设计入门](https://github.com/donnemartin/system-design-primer) 1153 | - [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/) 1154 | - [备忘单](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf) 1155 | - 流程: 1156 | 1. 理解问题和范围: 1157 | - 在面试官的帮助下定义用例 1158 | - 提出附加功能的建议 1159 | - 去掉面试官认定范围以外的内容 1160 | - 假定高可用是必须的,而且要作为一个用例 1161 | 2. 考虑约束: 1162 | - 问一下每月请求量 1163 | - 问一下每秒请求量 (他们可能会主动提到或者让你算一下) 1164 | - 评估读写所占的百分比 1165 | - 评估的时候牢记 2/8 原则 1166 | - 每秒写多少数据 1167 | - 总的数据存储量要考虑超过 5 年的情况 1168 | - 每秒读多少数据 1169 | 3. 抽象设计: 1170 | - 分层 (服务, 数据, 缓存) 1171 | - 基础设施: 负载均衡, 消息 1172 | - 粗略的概括任何驱动整个服务的关键算法 1173 | - 考虑瓶颈并指出解决方案 1174 | - 练习: 1175 | - [设计一个 CDN 网络](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) 1176 | - [设计一个随机唯一 ID 生成系统](https://blog.twitter.com/2010/announcing-snowflake) 1177 | - [设计一个在线多人卡牌游戏](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) 1178 | - [设计一个键值数据库](http://www.slideshare.net/dvirsky/introduction-to-redis) 1179 | - [设计一个图片分享系统](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) 1180 | - [设计一个推荐系统](http://ijcai13.org/files/tutorial_slides/td3.pdf) 1181 | - [设计一个短域名生成系统](http://www.hiredintech.com/system-design/the-system-design-process/) 1182 | - [设计一个缓存系统](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) 1183 | 1184 | --- 1185 | 1186 | ## 终面 1187 | 1188 | 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。 1189 | 这对经常性的巩固很有帮助。 1190 | 1191 | - [ ] 2-3分钟的简短主题视频系列(23个视频) 1192 | - [视频](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) 1193 | - [ ] 2-5分钟的简短主题视频系列──Michael Sambol (38个视频): 1194 | - [视频](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) 1195 | - [ ] [Sedgewick 视频 ── 算法I](https://www.coursera.org/learn/algorithms-part1) 1196 | - [ ] [Sedgewick 视频 ── 算法II](https://www.coursera.org/learn/algorithms-part2) 1197 | 1198 | ## 编程问题练习 1199 | 1200 | 现在你已经了解了上面所有的计算机科学主题,是时候练习回答编程问题了。 1201 | 1202 | **编程问题的实践并不是要记住编程问题的答案**。 1203 | 1204 | 为什么需要练习编程问题: 1205 | 1206 | - 快速识别问题,以及如何应用正确的数据结构及算法 1207 | - 收集问题的要求 1208 | - 像在面试中一样谈论问题 1209 | - 在白板或纸上而非计算机上编码 1210 | - 计算解决方案的时间和空间的复杂性 1211 | - 测试你的解决方案 1212 | 1213 | 这里有个很棒的入门教学,内容是如何在面试中有条不紊,并且有互动沟通地解决问题。这种能力可以从面试书籍中获得,但我觉得这个也很棒:[算法设计画布](http://www.hiredintech.com/algorithm-design/)。 1214 | 1215 | 家里没有白板?那讲得通。我是一个怪人,有一个很大的白板。从白板商店买了一个大的绘图板,而不是白板。你可以坐在沙发上练习。这是我的“沙发白板”。我在照片中添加了笔以便进行缩放。如果你使用笔,则希望可以擦除。快速变得凌乱。我用铅笔和橡皮擦。 1216 | 1217 | ![我的沙发白板](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) 1218 | 1219 | 补充: 1220 | 1221 | - [Topcoder的数学](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) 1222 | - [动态编程──从新手到高级](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) 1223 | - [MIT 面试材料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) 1224 | 1225 | **阅读并练习编程问题(按此顺序)**: 1226 | 1227 | - [ ] [编程面试公开:下一份工作的秘密,第二版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) 1228 | - C,C ++ 和 Java 的答案 1229 | - [ ] [破解编码面试,第六版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) 1230 | - Java 答案 1231 | 1232 | 请参阅上方的[书单](#书单)。 1233 | 1234 | ## 编程练习和挑战 1235 | 1236 | 一旦你学会了理论基础,就应该把它们拿出来练练。 1237 | 尽量坚持每天做编码练习,越多越好。 1238 | 1239 | - [如何找到解决方案](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) 1240 | - [如何剖析 Topcoder 题目描述](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) 1241 | 1242 | 编码面试问题视频: 1243 | 1244 | - [IDeserve(88个视频)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) 1245 | - [Tushar Roy(5个播放列表)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) 1246 | - 超级解决问题的方法 1247 | - [Nick White──LeetCode 解题(187个视频)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) 1248 | - 良好的解决方案和代码解释 1249 | - 你可以在短时间内看好几个 1250 | - [FisherCoder──LeetCode 解题](https://youtube.com/FisherCoder) 1251 | 1252 | 编码练习平台: 1253 | 1254 | - [LeetCode](https://leetcode.com/) 1255 | - 我最喜欢的编码问题网站,值得你准备的1-2个月的订阅费用 1256 | - [FisherCoder 的 LeetCode 解题](https://github.com/fishercoder1534/Leetcode) 1257 | - 请参阅上面的 Nick White 视频,以获得简短的代码 1258 | - [HackerRank](https://www.hackerrank.com/) 1259 | - [TopCoder](https://www.topcoder.com/) 1260 | - [InterviewCake](https://www.interviewcake.com/) 1261 | - [http://www.geeksforgeeks.org/](http://www.geeksforgeeks.org/) 1262 | - [InterviewBit](https://www.interviewbit.com) 1263 | - [Project Euler (数学方向为主)](https://projecteuler.net/index.php?section=problems) 1264 | - [Code Exercises](https://code-exercises.com/) 1265 | - [Scaler Topics](https://www.scaler.com/topics/) 1266 | 1267 | 语言学习网站,附带编码挑战: 1268 | 1269 | - [Codewars](http://www.codewars.com) 1270 | - [Codility](https://codility.com/programmers/) 1271 | - [HackerEarth](https://www.hackerearth.com/) 1272 | - [Sphere Online Judge (spoj)](http://www.spoj.com/) 1273 | - [Codechef](https://www.codechef.com/) 1274 | 1275 | 编码挑战项目: 1276 | 1277 | - [Python 交互式编码面试挑战](https://github.com/donnemartin/interactive-coding-challenges) 1278 | 1279 | 模拟面试: 1280 | 1281 | - [Gainlo.co:来自大公司的模拟面试官](http://www.gainlo.co/#!/)──我使用了它,它帮助我减轻了电话屏幕和现场面试的压力 1282 | - [Pramp:模拟来自/与同行的面试](https://www.pramp.com/)──点对点方式练习面试 1283 | - [Refdash:模拟面试和加急面试](https://refdash.com/)──跳过与科技公司的多次面试,帮助求职者快速追踪 1284 | - [interviewing.io:与高级工程师进行模拟面试](https://interviewing.io/)──与来自 FAANG(译者注:Facebook, Amazon, Apple, Netflix and Google) 的高级工程师进行匿名算法/系统设计面试。 1285 | 1286 | ## 当你临近面试时 1287 | 1288 | - 搞定代码面试──第二集 (视频): 1289 | - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) 1290 | - [Cracking the Coding Interview - 全栈系列](https://www.youtube.com/watch?v=Eg5-tdAwclo) 1291 | 1292 | ## 你的简历 1293 | 1294 | - 请参阅“破解编码面试”和“编程面试的背面”中的建立准备项。 1295 | 1296 | ## 当面试来临的时候 1297 | 1298 | 随着下面列举的问题思考下你可能会遇到的 20 个面试问题,每个问题准备 2-3 种回答。准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事。 1299 | 1300 | - 你为什么想得到这份工作? 1301 | - 你解决过的最有难度的问题是什么? 1302 | - 面对过的最大挑战是什么? 1303 | - 见过的最好或者最坏的设计是怎么样的? 1304 | - 对某个产品提出改进建议。 1305 | - 你作为一个个体同时也是团队的一员,如何达到最好的工作状态? 1306 | - 你的什么技能或者经验是你的角色中不可或缺的,为什么? 1307 | - 你在某份工作或某个项目中最享受的是什么? 1308 | - 你在某份工作或某个项目中面临过的最大挑战是什么? 1309 | - 你在某份工作或某个项目中遇到过的最硬的 Bug 是什么样的? 1310 | - 你在某份工作或某个项目中学到了什么? 1311 | - 你在某份工作或某个项目中哪些地方还可以做的更好? 1312 | 1313 | ## 问面试官的问题 1314 | 1315 | 我会问的一些:(可能我已经知道了答案但我想听听面试官的看法或者了解团队的前景): 1316 | 1317 | - 团队多大规模? 1318 | - 开发周期是怎样的? 会使用瀑布流/极限编程/敏捷开发么? 1319 | - 经常会为截止日期(deadlines)加班么? 或者是有弹性的? 1320 | - 团队里怎么做技术选型? 1321 | - 每周平均开多少次会? 1322 | - 你觉得工作环境有助于员工集中精力吗? 1323 | - 目前正在做什么工作? 1324 | - 喜欢这些事情吗? 1325 | - 工作期限是怎么样的? 1326 | - 工作生活怎么平衡? 1327 | 1328 | ## 当你获得了梦想的职位 1329 | 1330 | 恭喜你! 1331 | 1332 | 继续学习。 1333 | 1334 | 活到老,学到老。 1335 | 1336 | --- 1337 | 1338 | ***************************************************************************************************** 1339 | ***************************************************************************************************** 1340 | 1341 | 下面的内容都是可选的。 1342 | 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。你将会成为一个更全面的软件工程师。 1343 | 1344 | ***************************************************************************************************** 1345 | ***************************************************************************************************** 1346 | 1347 | --- 1348 | 1349 | ## 额外书籍 1350 | 1351 | 你可以从以下的书单挑选你有兴趣的主题来研读。 1352 | 1353 | - [UNIX环境高级编程](https://www.amazon.com/dp/013937681X) 1354 | - 老,但却很棒 1355 | - [Linux 命令行大全](https://www.amazon.com/dp/1593273894/) 1356 | - 现代选择 1357 | - [TCP-IP详解系列](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) 1358 | - [Head First 设计模式](https://www.amazon.com/gp/product/0596007124/) 1359 | - 设计模式入门介绍 1360 | - [设计模式:可复用面向对象软件的基础](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) 1361 | - 也被称为“四人帮”(Gang of Four(GOF)) 1362 | - 经典设计模式书籍 1363 | - [Linux 和 UNIX 系统管理技术手册(第五版)](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) 1364 | - [算法设计手冊(Skiena)](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) 1365 | - 作为复习以及问题辨别 1366 | - 这本书中算法的部分难度已经超过面试会出现的 1367 | - 本书分为两个部分: 1368 | - 数据结构和算法课本 1369 | - 优点: 1370 | - 跟其他算法课本一样是个很棒的复习素材 1371 | - 包含作者以往解决工业及学术上问题的经验的故事 1372 | - 含C语言代码示例 1373 | - 缺点: 1374 | - 某些地方跟《算法导论》(CLRS)一样艰深,但在某些主题,算法导论或许是更好的选择。 1375 | - 第7、8、9章有点难以消化,因为某些地方并没有解释得很清楚,或者根本上我就是个学渣 1376 | - 别会错意了,我很喜欢 Skiena 的教学方法以及他的风格。 1377 | - 算法目录: 1378 | - 这个部分是买这本书的最大原因 1379 | - 我即将着手进行这部分,一旦完成这部分我会再更新上来 1380 | - 可以在 kindle 上租 1381 | - 解答: 1382 | - [解答](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) 1383 | - [解答](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) 1384 | - [勘误表](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) 1385 | 1386 | - [编程卓越之道(第一卷):深入理解计算机](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) 1387 | 1388 | - 该书于2004年出版,虽然有些过时,但是对于简单了解计算机而言,这是一个了不起的资源 1389 | - 作者发明了[高阶组合语言 HLA](https://en.wikipedia.org/wiki/High_Level_Assembly),所以提到,并且举了一些HLA的例子。里面没有用到很多,但都是很棒的组合语言的例子。 1390 | - 这些章节值得阅读,为你提供良好的基础: 1391 | - 第2章──数字表示 1392 | - 第3章──二进制算术和位运算 1393 | - 第4章──浮点表示 1394 | - 第5章──字符表示 1395 | - 第6章──内存组织和访问 1396 | - 第7章──组合数据类型和内存对象 1397 | - 第9章──CPU体系结构 1398 | - 第10章──指令集架构 1399 | - 第11章──内存体系结构和组织 1400 | 1401 | - [算法导论](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) 1402 | - **重要提示**:读这本书的价值有限。本书很好地回顾了算法和数据结构,但不会教你如何编写良好的代码。你必须能够有效地编写一个不错的解决方案 1403 | - 又称 CLR,有时是 CLRS,因为 Stein 最后才加入 1404 | 1405 | - [计算机体系结构:量化研究方法(第6版)](https://www.amazon.com/dp/0128119055) 1406 | - 更丰富、更新(2017年),但篇幅较长 1407 | - [编程珠矶](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) 1408 | - 前几章介绍了解决编程问题(非常古老,甚至还用数据磁带)的巧妙解决方案,但这只是一个介绍。这是关于程序设计和体系结构的指南 1409 | 1410 | ## 附加学习 1411 | 1412 | 我把它们加进来是为了让你成为更全方位的软件工程师,并且留意一些技术以及算法,让你拥有更大的工具箱。 1413 | 1414 | - ### 编译器 1415 | 1416 | - [编译器的工作方式,约1分钟(视频)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) 1417 | - [Harvard CS50-编译器(视频)](https://www.youtube.com/watch?v=CSZLNYF4Klo) 1418 | - [C ++(视频)](https://www.youtube.com/watch?v=twodd1KFfGk) 1419 | - [了解编译器优化(C ++)(视频)](https://www.youtube.com/watch?v=FnGCDLhaxKU) 1420 | 1421 | - ### Emacs and vi(m) 1422 | - 熟悉基于 unix 的代码编辑器 1423 | - vi(m): 1424 | - [使用 vim 进行编辑 01 - 安装, 设置和模式 (视频)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) 1425 | - [VIM 的冒险之旅](http://vim-adventures.com/) 1426 | - 4 个视频集: 1427 | - [vi/vim 编辑器 - 课程 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) 1428 | - [vi/vim 编辑器 - 课程 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) 1429 | - [vi/vim 编辑器 - 课程 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) 1430 | - [vi/vim 编辑器 - 课程 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) 1431 | - [使用 Vi 而不是 Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) 1432 | - emacs: 1433 | - [基础 Emacs 教程 (视频)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) 1434 | - 3 个视频集: 1435 | - [Emacs 教程 (初学者) -第 1 部分- 文件命令, 剪切/复制/粘贴, 自定义命令](https://www.youtube.com/watch?v=ujODL7MD04Q) 1436 | - [Emacs 教程 (初学者 -第 2 部分- Buffer 管理, 搜索, M-x grep 和 rgrep 模式](https://www.youtube.com/watch?v=XWpsRupJ4II) 1437 | - [Emacs 教程 (初学者 -第 3 部分- 表达式, 声明, ~/.emacs 文件和包机制](https://www.youtube.com/watch?v=paSgzPso-yc) 1438 | - [Evil 模式: 或许, 我是怎样对 Emacs 路人转粉的 (视频)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) 1439 | - [使用 Emacs 开发 C 程序](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) 1440 | - [(或许) 深度组织模式:管理结构 (视频)](https://www.youtube.com/watch?v=nsGYet02bEk) 1441 | 1442 | - ### Unix 命令行工具 1443 | - 下列内容包含优秀工具 1444 | - bash 1445 | - cat 1446 | - grep 1447 | - sed 1448 | - awk 1449 | - curl or wget 1450 | - sort 1451 | - tr 1452 | - uniq 1453 | - [strace](https://en.wikipedia.org/wiki/Strace) 1454 | - [tcpdump](https://danielmiessler.com/study/tcpdump/) 1455 | 1456 | - ### 信息论 (视频) 1457 | - [Khan Academy 可汗学院](https://www.khanacademy.org/computing/computer-science/informationtheory) 1458 | - 更多有关马尔可夫的内容: 1459 | - [马尔可夫内容生成(Core Markov Text Generation)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) 1460 | - [Core Implementing Markov Text Generation马尔可夫内容生成实现](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) 1461 | - [一个马尔可夫内容生成器的项目(Project = Markov Text Generation Walk Through)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) 1462 | - 关于更多信息,请参照下方 MIT 6.050J 信息和系统复杂度的内容。 1463 | 1464 | - ### 奇偶校验位 & 汉明码 (视频) 1465 | - [入门](https://www.youtube.com/watch?v=q-3BctoUpHE) 1466 | - [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M) 1467 | - 汉明码(Hamming Code): 1468 | - [发现错误](https://www.youtube.com/watch?v=1A_NcXxdoCc) 1469 | - [修正错误](https://www.youtube.com/watch?v=JAMLuxdHH8o) 1470 | - [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk) 1471 | 1472 | - ### 系统熵值(Entropy) 1473 | - 请参考下方视频 1474 | - 观看之前,请先确定观看了信息论的视频 1475 | - [信息理论, 克劳德·香农, 熵值, 系统冗余, 数据比特压缩 (视频)](https://youtu.be/JnJq3Py0dyM?t=176) 1476 | 1477 | - ### 密码学 1478 | - 请参考下方视频 1479 | - 观看之前,请先确定观看了信息论的视频 1480 | - [可汗学院](https://www.khanacademy.org/computing/computer-science/密码学) 1481 | - [密码学: 哈希函数](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) 1482 | - [密码学: 加密](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1483 | 1484 | - ### 压缩 1485 | - 观看之前,请先确定观看了信息论的视频 1486 | - Computerphile (视频): 1487 | - [压缩](https://www.youtube.com/watch?v=Lto-ajuqW3w) 1488 | - [压缩熵值](https://www.youtube.com/watch?v=M5c_RFKVkko) 1489 | - [由上而下的树 (霍夫曼编码树)](https://www.youtube.com/watch?v=umTbivyJoiI) 1490 | - [额外比特 - 霍夫曼编码树](https://www.youtube.com/watch?v=DV8efuB3h2g) 1491 | - [优雅的压缩数据 (无损数据压缩方法)](https://www.youtube.com/watch?v=goOa3DGezUA) 1492 | - [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU) 1493 | - [数据压缩的艺术](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) 1494 | - [(可选) 谷歌开发者:GZIP 还差远了呢!](https://www.youtube.com/watch?v=whGwm0Lky2s) 1495 | 1496 | - ### 计算机安全 1497 | - [MIT(23个视频)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1498 | - [威胁模型:入门](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1499 | - [控制劫持攻击](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) 1500 | - [缓冲区溢出漏洞攻击和防御](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3) 1501 | - [优先权区分](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1502 | - [能力](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1503 | - [在沙盒中运行原生代码](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6) 1504 | - [网络安全模型](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1505 | - [网络安全应用](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1506 | - [标志化执行](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1507 | - [网络安全](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1508 | - [网络协议](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1509 | - [旁路攻击](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1510 | 1511 | - ### 垃圾回收 1512 | - [ ] [Python 中的垃圾回收 (视频)](https://www.youtube.com/watch?v=iHVs_HkjdmI) 1513 | - [ ] [深度解析:论垃圾回收在 JAVA 中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits) 1514 | - [ ] [深度解析:论垃圾回收在 Python 中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) 1515 | 1516 | - ### 并行编程 1517 | - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) 1518 | - [ ] [用于高性能并行计算的高效Python(视频)](https://www.youtube.com/watch?v=uY85GkaYzBk) 1519 | 1520 | - ### 消息传递,序列化和队列系统 1521 | - [Thrift](https://thrift.apache.org/) 1522 | - [教程](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) 1523 | - [协议缓冲](https://developers.google.com/protocol-buffers/) 1524 | - [教程](https://developers.google.com/protocol-buffers/docs/tutorials) 1525 | - [gRPC](http://www.grpc.io/) 1526 | - [gRPC 对于JAVA开发者的入门教程(视频)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) 1527 | - [Redis](http://redis.io/) 1528 | - [教程](http://try.redis.io/) 1529 | - [Amazon的 SQS 系统 (队列)](https://aws.amazon.com/sqs/) 1530 | - [Amazon的 SNS 系统 (pub-sub)](https://aws.amazon.com/sns/) 1531 | - [RabbitMQ](https://www.rabbitmq.com/) 1532 | - [入门教程](https://www.rabbitmq.com/getstarted.html) 1533 | - [Celery](http://www.celeryproject.org/) 1534 | - [Celery入门](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) 1535 | - [ZeroMQ](http://zeromq.org/) 1536 | - [入门教程](http://zeromq.org/intro:read-the-manual) 1537 | - [ActiveMQ](http://activemq.apache.org/) 1538 | - [Kafka](http://kafka.apache.org/documentation.html#introduction) 1539 | - [MessagePack](http://msgpack.org/index.html) 1540 | - [Avro](https://avro.apache.org/) 1541 | 1542 | - ### A*搜索算法 1543 | 1544 | - [A 搜索算法](https://en.wikipedia.org/wiki/A*_search_algorithm) 1545 | - [A* 路径搜索教程(教程)](https://www.youtube.com/watch?v=KNXfSOx4eEE) 1546 | - [A* 路径搜索(E01:算法解释)(视频)](https://www.youtube.com/watch?v=-L-WgKMFuhE) 1547 | 1548 | - ### 快速傅里叶变换 1549 | - [傅立叶变换的交互式指南](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) 1550 | - [什么是傅立叶变换?论傅立叶变换的用途](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) 1551 | - [什么是傅立叶变换? (视频)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) 1552 | - [分而治之:FFT(视频)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) 1553 | - [FTT 是什么](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) 1554 | 1555 | - ### 布隆过滤器 1556 | - 给定布隆过滤器m比特位和k个哈希函数,插入和成员检测都会是 O(k)。 1557 | - [布隆过滤器(视频)](https://www.youtube.com/watch?v=-SuTGoFYjZs) 1558 | - [布隆过滤器 | 数据挖掘 | Stanford University(视频)](https://www.youtube.com/watch?v=qBTdukbzc78) 1559 | - [教程](http://billmill.org/bloomfilter-tutorial/) 1560 | - [如何写一个布隆过滤器应用](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) 1561 | 1562 | - ### HyperLogLog 1563 | - [如何仅使用1.5KB内存计算十亿个不同的对象](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) 1564 | 1565 | - ### 局部敏感哈希 1566 | - 用于确定文件的相似性 1567 | - MD5 或 SHA 的反义词,用于确定2个文档/字符串是否完全相同 1568 | - [Simhashing(希望如此)变得简单](http://ferd.ca/simhashing-hopefully-made-simple.html) 1569 | 1570 | - ### van Emde Boas 树 1571 | - [分而治之:van Emde Boas 树 (视频)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) 1572 | - [MIT课堂笔记](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) 1573 | 1574 | - ### 增强数据结构 1575 | - [CS 61B 第 39 课: 增强数据结构](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) 1576 | 1577 | - ### 平衡查找树(Balanced search trees) 1578 | - 掌握至少一种平衡查找树(并懂得如何实现): 1579 | - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的键。” —— Skiena 1580 | - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 1581 | - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下: 1582 | - 跳过删除函数,直接实现搜索和插入功能 1583 | - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据集当中。 1584 | - [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) 1585 | 1586 | - **AVL 树** 1587 | - 实际中:我能告诉你的是,该种树并无太多的用途,但我能看到有用的地方在哪里:AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。 1588 | - [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) 1589 | - [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) 1590 | - [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) 1591 | - [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) 1592 | 1593 | - **伸展树** 1594 | - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。 1595 | - [CS 61B:伸展树(Splay trees)(视频)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) 1596 | - MIT 教程:伸展树(Splay trees): 1597 | - 该教程会过于学术,但请观看到最后的10分钟以确保掌握。 1598 | - [视频](https://www.youtube.com/watch?v=QnPl_Y6EqMo) 1599 | 1600 | - **红黑树** 1601 | - 这些是2-3棵树的翻译(请参见下文)。 1602 | - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 内核所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,Collection HashMap也从原本用Linked List实现,储存特定元素的哈希码,改为用红黑树实现。 1603 | - [Aduni —— 算法 —— 课程4(该链接直接跳到开始部分)(视频)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) 1604 | - [Aduni —— 算法 —— 课程5(视频)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) 1605 | - [黑树(Black Tree)](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) 1606 | - [二分查找及红黑树的介绍](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/) 1607 | 1608 | - **2-3查找树** 1609 | - 实际中:2-3树的元素插入非常快速,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。 1610 | - 你会很少用到2-3树。这是因为,其实现过程中涉及到不同类型的节点。因此,人们更多地会选择红黑树。 1611 | - [2-3树的直感与定义(视频)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) 1612 | - [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 1613 | - [2-3树(学生叙述)(视频)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1614 | 1615 | - **2-3-4树 (亦称2-4树)** 1616 | - 实际中:对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。 1617 | - [CS 61B Lecture 26:平衡查找树(视频)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) 1618 | - [自底向上的2-4树(视频)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 1619 | - [自顶向下的2-4树(视频)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) 1620 | 1621 | - **N 叉树(K 叉树、M 叉树)** 1622 | - 注意:N 或 K 指的是分支系数(即树的最大分支数): 1623 | - 二叉树是一种分支系数为2的树 1624 | - 2-3树是一种分支系数为3的树 1625 | - [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree) 1626 | 1627 | - **B 树** 1628 | - 有趣的是:为啥叫 B 仍然是一个神秘。因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者) 1629 | - 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 1630 | - [B 树](https://en.wikipedia.org/wiki/B-tree) 1631 | - [B 树数据结构](http://btechsmartclass.com/data_structures/b-trees.html) 1632 | - [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) 1633 | - [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 1634 | - [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) 1635 | - [MIT 6.851 —— 内存层次模块(Memory Hierarchy Models)(视频)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) 1636 | - 覆盖有高速缓存参数无关型(cache-oblivious)B 树和非常有趣的数据结构 1637 | - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小) 1638 | 1639 | - ### k-D树 1640 | - 非常适合在矩形或更高维度的对象中查找点数 1641 | - 最适合k近邻 1642 | - [Kd树(视频)](https://www.youtube.com/watch?v=W94M9D_yXKk) 1643 | - [kNN K-d树算法(视频)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) 1644 | 1645 | - ### 跳表 1646 | - "有一种非常迷幻的数据类型" - Skiena 1647 | - [随机化: 跳表 (视频)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1648 | - [更生动详细的解释](https://en.wikipedia.org/wiki/Skip_list) 1649 | 1650 | - ### 网络流 1651 | - [5分钟简析 Ford-Fulkerson──一步步示例 (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0) 1652 | - [Ford-Fulkerson 算法 (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0) 1653 | - [网络流 (视频)](https://www.youtube.com/watch?v=2vhN4Ice5jI) 1654 | 1655 | - ### 不相交集 & 联合查找 1656 | - [UCB 61B - 不相交集;排序 & 选择(视频)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) 1657 | - [Sedgewick算法──Union-Find(6视频)](https://www.coursera.org/learn/algorithms-part1/home/week/1) 1658 | 1659 | - ### 快速处理的数学 1660 | - [整数运算, Karatsuba 乘法 (视频)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 1661 | - [中国剩余定理 (在密码学中的使用) (视频)](https://www.youtube.com/watch?v=ru7mWZJlRQg) 1662 | 1663 | - ### 树堆 (Treap) 1664 | - 一个二叉搜索树和一个堆的组合 1665 | - [树堆](https://en.wikipedia.org/wiki/Treap) 1666 | - [数据结构:树堆的讲解(视频)](https://www.youtube.com/watch?v=6podLUYinH8) 1667 | - [集合操作的应用(Applications in set operations)](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) 1668 | 1669 | - ### 线性规划(Linear Programming)(视频) 1670 | - [线性规划](https://www.youtube.com/watch?v=M4K6HYLHREQ) 1671 | - [寻找最小成本](https://www.youtube.com/watch?v=2ACJ9ewUC6U) 1672 | - [寻找最大值](https://www.youtube.com/watch?v=8AA_81xI3ik) 1673 | - [用 Python 解决线性方程式──单纯形算法](https://www.youtube.com/watch?v=44pAWI7v5Zk) 1674 | 1675 | - ### 几何:凸包(Geometry, Convex hull)(视频) 1676 | - [Graph Alg. IV: 几何算法介绍 - 第 9 课](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) 1677 | - [Graham & Jarvis: 几何算法 - 第 10 课](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) 1678 | - [分而治之: 凸包, 中值查找](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) 1679 | 1680 | - ### 离散数学 1681 | - 查看下面的视频 1682 | 1683 | - ### 机器学习(Machine Learning) 1684 | - 为什么学习机器学习? 1685 | - [谷歌如何将自己改造成一家「机器学习优先」公司?](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) 1686 | - [智能计算机系统的大规模深度学习 (视频)](https://www.youtube.com/watch?v=QSaZGT4-6EY) 1687 | - [Peter Norvig:深度学习和理解与软件工程和验证的对比](https://www.youtube.com/watch?v=X769cyzBNVw) 1688 | - [谷歌云机器学习工具(视频)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) 1689 | - [谷歌开发者机器学习清单 (Scikit Learn 和 Tensorflow) (视频)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) 1690 | - [Tensorflow (视频)](https://www.youtube.com/watch?v=oZikw5k_2FM) 1691 | - [Tensorflow 教程](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) 1692 | - [Python 实现神经网络实例教程(使用 Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) 1693 | - 课程: 1694 | - [很棒的初级课程:机器学习](https://www.coursera.org/learn/machine-learning) 1695 | - [视频教程](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) 1696 | - 看第 12-18 集复习线性代数(第 14 集和第 15 集是重复的) 1697 | - [机器学习中的神经网络](https://www.coursera.org/learn/neural-networks) 1698 | - [Google 深度学习微学位](https://www.udacity.com/course/deep-learning--ud730) 1699 | - [Google/Kaggle 机器学习工程师微学位](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) 1700 | - [无人驾驶工程师微学位](https://www.udacity.com/drive) 1701 | - 资源: 1702 | - 书籍: 1703 | - [Python 机器学习](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) 1704 | - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) 1705 | - [Python 机器学习简介](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) 1706 | - [软件工程师的机器学习](https://github.com/ZuzooVn/machine-learning-for-software-engineers) 1707 | - Data School:http://www.dataschool.io/ 1708 | 1709 | -- 1710 | 1711 | ## 一些主题的额外内容 1712 | 1713 | 我为前面提到的某些主题增加了一些额外的内容,之所以没有直接添加到前面,是因为这样很容易导致某个主题内容过多。毕竟你想在本世纪找到一份工作,对吧? 1714 | 1715 | - SOLID 1716 | 1717 | - [ ] [Bob Martin SOLID面向对象和敏捷设计的原理(视频)](https://www.youtube.com/watch?v=TMuno5RZNeE) 1718 | - [ ] S ── [单一责任原则](http://www.oodesign.com/single-responsibility-principle.html) | [对每个对象的单一责任](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) 1719 | - [更多](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) 1720 | - [ ] O ── [开放/封闭原则](http://www.oodesign.com/open-close-principle.html) | [在生产级别上,可以扩展对象,但不能修改对象](https://en.wikipedia.org/wiki/Open/closed_principle) 1721 | - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) 1722 | - [ ] L ── [Liskov 替换原则](http://www.oodesign.com/liskov-s-substitution-principle.html) | [基本类别和派生类别遵循“IS A”原则](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) 1723 | - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) 1724 | - [ ] I ── [接口隔离原理](http://www.oodesign.com/interface-segregation-principle.html) | 不应强迫客户端实现不使用的接口 1725 | - [5分钟了解接口隔离原理(视频)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) 1726 | - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) 1727 | - [ ] D ── [依赖倒置原理](http://www.oodesign.com/dependency-inversion-principle.html) | 减少对象组合中的依赖性。 1728 | - [依赖倒置原理为何如此重要?](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) 1729 | - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) 1730 | 1731 | - Union-Find 1732 | - [概览](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) 1733 | - [初级实践](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) 1734 | - [树状结构](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) 1735 | - [合并树状结构](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank) 1736 | - [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) 1737 | - [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) 1738 | 1739 | - **动态规划的更多内容** (视频) 1740 | - [6.006: 动态规划 I: 斐波那契数列, 最短路径](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) 1741 | - [6.006: 动态规划 II: 文本匹配, 二十一点/黑杰克](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) 1742 | - [6.006: 动态规划 III: 最优加括号方式, 最小编辑距离, 背包问题](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) 1743 | - [6.006: 动态规划 IV: 吉他指法,拓扑,超级马里奥.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 1744 | - [6.046: 动态规划: 动态规划进阶](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1745 | - [6.046: 动态规划: 所有点对最短路径](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) 1746 | - [6.046: 动态规划: 更多示例](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) 1747 | 1748 | - **图形处理进阶** (视频) 1749 | - [异步分布式算法: 对称性破缺,最小生成树](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) 1750 | - [异步分布式算法: 最小生成树](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) 1751 | 1752 | - MIT **概率论** (过于数学,进度缓慢,但这对于数学的东西却是必要之恶) (视频): 1753 | - [MIT 6.042J - 概率论概述](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) 1754 | - [MIT 6.042J - 条件概率 Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B) 1755 | - [MIT 6.042J - 独立](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B) 1756 | - [MIT 6.042J - 随机变量](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21) 1757 | - [MIT 6.042J - 期望 I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B) 1758 | - [MIT 6.042J - 期望 II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B) 1759 | - [MIT 6.042J - 大偏差](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B) 1760 | - [MIT 6.042J - 随机游走](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25) 1761 | 1762 | - [Simonson: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) 1763 | 1764 | - **字符串匹配** 1765 | 1766 | - Rabin-Karp(视频) 1767 | - [Rabin Karps 算法](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) 1768 | - [预计算](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) 1769 | - [优化:实施和分析](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) 1770 | - [表翻倍,Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) 1771 | - [滚动哈希,摊销分析](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) 1772 | - Knuth-Morris-Pratt (KMP): 1773 | - [Knuth-Morris-Pratt(KMP)字符串匹配算法](https://www.youtube.com/watch?v=5i7oKodCRJo) 1774 | - Boyer–Moore 字符串搜索算法 1775 | - [Boyer–Moore 字符串搜索算法](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) 1776 | - [高级字符串搜索Boyer-Moore-Horspool算法(视频)](https://www.youtube.com/watch?v=QDZpzctPf10) 1777 | - [Coursera:字符串算法](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) 1778 | - 刚开始时很棒,但是当它超过 KMP 时,它变得比需要复杂得多 1779 | - 很好的字典树解释 1780 | - 可以跳过 1781 | 1782 | - **排序** 1783 | 1784 | - 斯坦福大学关于排序算法的视频: 1785 | - [课程 15 | 编程抽象(视频)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) 1786 | - [课程 16 | 编程抽象(视频)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) 1787 | 1788 | - Shai Simonson 视频,[Aduni.org](http://www.aduni.org/): 1789 | - [算法 - 排序 - 第二讲(视频)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) 1790 | - [算法 - 排序2 - 第三讲(视频)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) 1791 | 1792 | - Steven Skiena 关于排序的视频: 1793 | - [课程从 26:46 开始(视频)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) 1794 | - [课程从 27:40 开始(视频)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 1795 | - [课程从 35:00 开始(视频)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 1796 | - [课程从 23:50 开始(视频)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) 1797 | 1798 | ## 视频系列 1799 | 1800 | 坐下来享受一下吧。"netflix 和技能" :P 1801 | 1802 | - [个人的动态规划问题列表 (都是短视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) 1803 | 1804 | - [x86 架构,汇编,应用程序 (11 个视频)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) 1805 | 1806 | - [MIT 18.06 线性代数,2005 年春季 (35 个视频)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) 1807 | 1808 | - [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) 1809 | 1810 | - [计算机科学 70, 001 - 2015 年春季 - 离散数学和概率理论](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) 1811 | 1812 | - [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t) 1813 | 1814 | - [离散数学(第一部分),Sarada Herke (5个视频)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) 1815 | 1816 | - CSE373 - 算法分析 (25 个视频) 1817 | - [Skiena 的算法设计手册讲座](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) 1818 | 1819 | - [UC Berkeley 61B (2014 年春季): 数据结构 (25 个视频)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) 1820 | 1821 | - [UC Berkeley 61B (2006 年秋季): 数据结构 (39 个视频)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) 1822 | 1823 | - [UC Berkeley 61C:计算机结构 (26 个视频)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) 1824 | 1825 | - [OOSE:使用 UML 和 Java 进行软件开发 (21 个视频)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) 1826 | 1827 | - [UC Berkeley CS 152: 计算机结构和工程 (20 个视频)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) 1828 | 1829 | - [MIT 6.004: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) 1830 | 1831 | - [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) 1832 | 1833 | - [MIT 6.006:算法介绍 (47 个视频)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) 1834 | 1835 | - [MIT 6.033:计算机系统工程 (22 个视频)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) 1836 | 1837 | - [MIT 6.034:人工智能,2010 年秋季 (30 个视频)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) 1838 | 1839 | - [MIT 6.042J:计算机科学数学, 2010 年秋季 (25 个视频)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) 1840 | 1841 | - [MIT 6.046:算法设计与分析 (34 个视频)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) 1842 | 1843 | - [MIT 6.050J:信息和熵, 2008 年春季 (19 个视频)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) 1844 | 1845 | - [MIT 6.851:高等数据结构 (22 个视频)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) 1846 | 1847 | - [MIT 6.854: 高等算法, 2016 年春季 (24 个视频)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) 1848 | 1849 | - [Harvard COMPSCI 224:高级算法(25个视频)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) 1850 | 1851 | - [MIT 6.858:计算机系统安全, 2014 年秋季](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) 1852 | 1853 | - [斯坦福: 编程范例 (27 个视频)](https://www.youtube.com/playlist?list=PL9D558D49CA734A02) 1854 | 1855 | - [密码学导论,Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) 1856 | - [课程网站以及幻灯片和问题集](http://www.crypto-textbook.com/) 1857 | 1858 | - [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) 1859 | 1860 | - [图论,Sarada Herke(67个视频)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) 1861 | 1862 | ## 计算机科学课程 1863 | 1864 | - [在线 CS 课程目录](https://github.com/open-source-society/computer-science) 1865 | - [CS 课程目录 (一些是在线讲座)](https://github.com/prakhar1989/awesome-courses) 1866 | 1867 | ## 论文 1868 | 1869 | - [喜欢经典的论文?](https://www.cs.cmu.edu/~crary/819-f09/) 1870 | - [1978: 通信顺序处理](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) 1871 | - [Go 实现](https://godoc.org/github.com/thomas11/csp) 1872 | - [2003: The Google 文件系统](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) 1873 | - 2012 年被 Colossus 取代了 1874 | - [2004: MapReduce: Simplified Data Processing on Large Clusters](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) 1875 | - 大多被云数据流取代了? 1876 | - [2006年:Bigtable:结构化数据的分布式存储系统](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) 1877 | - [深入了解Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) 1878 | - [2006年:针对松散耦合的分布式系统的Chubby Lock服务](https://research.google.com/archive/chubby-osdi06.pdf) 1879 | - [2007年:Dynamo:亚马逊的高可用键值存储](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) 1880 | - Dynamo论文启动了NoSQL革命 1881 | - [2007: 每个程序员都应该知道的内存知识 (非常长,作者建议跳过某些章节来阅读)](https://www.akkadia.org/drepper/cpumemory.pdf) 1882 | - [2010年:Dapper,一个大型分布式系统跟踪基础结构](https://research.google.com/pubs/archive/36356.pdf) 1883 | - [2010年:Dremel:Web规模数据集的交互式分析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) 1884 | - [2012: Google 的 Colossus](https://www.wired.com/2012/07/google-colossus/) 1885 | - 没有论文 1886 | - 2012: AddressSanitizer: 快速的内存访问检查器: 1887 | - [论文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) 1888 | - [视频](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) 1889 | - 2013: Spanner: Google 的分布式数据库: 1890 | - [论文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) 1891 | - [视频](https://www.usenix.org/node/170855) 1892 | - [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) 1893 | - [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) 1894 | - [2015: 大规模高可用: 构建 Google Ads 的数据基础设施](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) 1895 | - [2015: TensorFlow: 异构分布式系统上的大规模机器学习](http://download.tensorflow.org/paper/whitepaper2015.pdf ) 1896 | - [2015: 开发者应该如何搜索代码:用例学习](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) 1897 | - [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) 1898 | 1899 | ## LICENSE 1900 | 1901 | [CC-BY-SA-4.0](https://github.com/jwasham/coding-interview-university/blob/main/LICENSE.txt) 1902 | -------------------------------------------------------------------------------- /translations/README-el.md: -------------------------------------------------------------------------------- 1 | #Coding Interview University 2 | 3 | >Επίσημη έκδοση: [Αγγλικά](https://github.com/jwasham/coding-interview-university/blob/master/README.md) 4 | 5 | ## Τι είναι 6 | 7 | Είναi το πλάνο διαβάσματός μου για να γίνω από web developer (αυτοδίδακτος, χωρίς πτυχίο στην Επιστήμη των Υπολογιστών), μηχανικός λογισμικού για μία μεγάλη εταιρία. 8 | 9 | ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) 10 | 11 | Αυτό το έργο προορίζεται για νέους μηχανικούς λογισμικού ή για αυτούς που μεταβαίνουν από την ανάπτυξη λογισμικού/ιστοσελίδων στην τεχνολογία λογισμικού(εκεί που η γνώση για την επιστήμη των υπολογιστών ειναι προαπαιτούμενο). Αν έχεις αρκετά χρόνια εμπειρίας και αξιώνεις πολλά χρόνια εμπερίας στην τεχνολογία λογισμικού, πρέπει να περιμένεις μία δυσκολότερη συνέντευξη. 12 | 13 | Εάν έχεις αρκετά χρόνια εμπειρίας στην ανάπτυξη λογισμικού/ιστοσελίδων, σημείωσε ότι οι μεγάλες εταιρίες λογισμικού όπως οι Google, Amazon, Facebook και Microsoft βλέπουν την τεχνολογία λογισμικού ως ενα διαφορετικό κομμάτι από την ανάπτυξη λογισμικού/ιστοσελίδων, και απαιτούν γνώσεις πάνω στην επιστήμη υπολογιστών. 14 | 15 | Εάν θέλεις να είσαι ένας αξιόπιστος μηχανικός ή μηχανικός συστημάτων, διάβασε περισσότερο απο την προεραιτική λίστα(δίκτυα, ασφάλεια). 16 | 17 | --- 18 | # Πίνακας περιεχομένων 19 | 20 | - [Τι είναι](#Tι-είναι) 21 | - [Γιατί να το χρησιμοποιήσεις](#Γιατί-να-το-χρησιμοποιήσεις) 22 | - [Πώς να το χρησιμοποιήσεις](#Πώς-να-το-χρησιμοποιήσεις) 23 | - [Μη νιώθεις ανίκανος](#Μη-νιώθεις-ανίκανος) 24 | - [Σχετικά με τα βίντεο](#Σχετικά-με-τα-βίντεο) 25 | - [Διαδικασία Συνέντευξης & Γενική προετοιμασία συνέντευξης](#Διαδικασία-Συνέντευξης--Γενική-προετοιμασία-συνέντευξης) 26 | - [Διάλεξε μία γλώσσα για τη συνέντευξη](#Διάλεξε-μία-γλώσσα-για-τη-συνέντευξη) 27 | - [Λίστα βιβλίων](#Λίστα-βιβλίων) 28 | - [Πριν αρχίσεις](#Πριν-αρχίσεις) 29 | - [Τι δε θα δεις να καλύπτετε](#Τι-δε-θα-δεις-να-καλύπτετε) 30 | - [Προαπαιτούμενη γνώση](#Προαπαιτούμενη-γνώση) 31 | - [Το καθημερινό πλάνο](#Το-καθημερινό-πλάνο) 32 | - [Αλγοριθμική πολυπλοκότητα / Big-O / Ασυμπτωτική ανάλυση](#Αλγοριθμική-πολυπλοκότητα--Big-O--Ασυμπτωτική-ανάλυση) 33 | - [Data Structures](#data-structures) 34 | - [Arrays](#arrays) 35 | - [Linked Lists](#linked-lists) 36 | - [Stack](#stack) 37 | - [Queue](#queue) 38 | - [Hash table](#hash-table) 39 | - [More Knowledge](#more-knowledge) 40 | - [Binary search](#binary-search) 41 | - [Bitwise operations](#bitwise-operations) 42 | - [Trees](#trees) 43 | - [Trees - Notes & Background](#trees---notes--background) 44 | - [Binary search trees: BSTs](#binary-search-trees-bsts) 45 | - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) 46 | - balanced search trees (general concept, not details) 47 | - traversals: preorder, inorder, postorder, BFS, DFS 48 | - [Sorting](#sorting) 49 | - selection 50 | - insertion 51 | - heapsort 52 | - quicksort 53 | - merge sort 54 | - [Graphs](#graphs) 55 | - directed 56 | - undirected 57 | - adjacency matrix 58 | - adjacency list 59 | - traversals: BFS, DFS 60 | - [Even More Knowledge](#even-more-knowledge) 61 | - [Recursion](#recursion) 62 | - [Dynamic Programming](#dynamic-programming) 63 | - [Object-Oriented Programming](#object-oriented-programming) 64 | - [Design Patterns](#design-patterns) 65 | - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) 66 | - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) 67 | - [Caches](#caches) 68 | - [Processes and Threads](#processes-and-threads) 69 | - [Papers](#papers) 70 | - [Testing](#testing) 71 | - [Scheduling](#scheduling) 72 | - [Implement system routines](#implement-system-routines) 73 | - [String searching & manipulations](#string-searching--manipulations) 74 | - [Tries](#tries) 75 | - [Floating Point Numbers](#floating-point-numbers) 76 | - [Unicode](#unicode) 77 | - [Endianness](#endianness) 78 | - [Networking](#networking) 79 | - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) 80 | - [Final Review](#final-review) 81 | - [Coding Question Practice](#coding-question-practice) 82 | - [Coding exercises/challenges](#coding-exerciseschallenges) 83 | - [Once you're closer to the interview](#once-youre-closer-to-the-interview) 84 | - [Your Resume](#your-resume) 85 | - [Be thinking of for when the interview comes](#be-thinking-of-for-when-the-interview-comes) 86 | - [Have questions for the interviewer](#have-questions-for-the-interviewer) 87 | - [Once You've Got The Job](#once-youve-got-the-job) 88 | 89 | ---------------- Everything below this point is optional ---------------- 90 | 91 | - [Additional Books](#additional-books) 92 | - [Additional Learning](#additional-learning) 93 | - [Compilers](#compilers) 94 | - [Emacs and vi(m)](#emacs-and-vim) 95 | - [Unix command line tools](#unix-command-line-tools) 96 | - [Information theory](#information-theory) 97 | - [Parity & Hamming Code](#parity--hamming-code) 98 | - [Entropy](#entropy) 99 | - [Cryptography](#cryptography) 100 | - [Compression](#compression) 101 | - [Computer Security](#computer-security) 102 | - [Garbage collection](#garbage-collection) 103 | - [Parallel Programming](#parallel-programming) 104 | - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) 105 | - [A*](#a) 106 | - [Fast Fourier Transform](#fast-fourier-transform) 107 | - [Bloom Filter](#bloom-filter) 108 | - [HyperLogLog](#hyperloglog) 109 | - [Locality-Sensitive Hashing](#locality-sensitive-hashing) 110 | - [van Emde Boas Trees](#van-emde-boas-trees) 111 | - [Augmented Data Structures](#augmented-data-structures) 112 | - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) 113 | - [Balanced search trees](#balanced-search-trees) 114 | - AVL trees 115 | - Splay trees 116 | - Red/black trees 117 | - 2-3 search trees 118 | - 2-3-4 Trees (aka 2-4 trees) 119 | - N-ary (K-ary, M-ary) trees 120 | - B-Trees 121 | - [k-D Trees](#k-d-trees) 122 | - [Skip lists](#skip-lists) 123 | - [Network Flows](#network-flows) 124 | - [Disjoint Sets & Union Find](#disjoint-sets--union-find) 125 | - [Math for Fast Processing](#math-for-fast-processing) 126 | - [Treap](#treap) 127 | - [Linear Programming](#linear-programming) 128 | - [Geometry, Convex hull](#geometry-convex-hull) 129 | - [Discrete math](#discrete-math) 130 | - [Machine Learning](#machine-learning) 131 | - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) 132 | - [Video Series](#video-series) 133 | - [Computer Science Courses](#computer-science-courses) 134 | 135 | --- 136 | 137 | ## Γιατί να το χρησιμοποιήσεις 138 | 139 | Όταν άρχισα αυτό το πρότζεκτ, δεν ήξερα τη διαφορά μίας στοίβας από μία ουρά, δεν ήξερα τίποτα σχετικά με τον συμβολισμό Big-Ο, τίποτα σχετικά με τα δέντρα ή πως να διασχίσω ένα δέντρο. Εάν έπρεπε να γράψω σε κώδικα έναν αλγόριθμο ταξινόμησης, μπορώ να σου πω ότι δεν θα ήταν πολύ καλός. Κάθε δομή δεδομένων που είχα χρησιμοποιήσει ήταν πακέτο της γλώσσας, και δεν ήξερα καθόλου πως δούλευαν "κάτω από το καπό". Ποτέ δεν είχα να διαχειριστώ τη μνήμη εκτός εάν μία διεργασία που έτρεχα, μου επέστρεφε ένα σφάλμα του τύπου: "out of memory", και μετά έπρεπε να βρώ μία λύση. Έχω χρησιμοποιήσει μερικούς πολυδιάστατους πίνακες στη ζωή μου και χιλιάδες συναφείς πίνακες, αλλά δεν είχα δημιουργήσει δομές δεδομένων από το 0. 140 | 141 | Είναι ένα μακροπρόθεσμο πλάνο. Μπορεί να σου πάρει μήνες. Εάν είσαι οικείος με πολλά από αυτά ήδη, θα σου πάρει πολύ λιγότερο χρόνο. 142 | 143 | ## Πώς να το χρησιμοποιήσεις 144 | 145 | Οτιδήποτε παρακάτω είναι μία συνοπτική περιγραφή, και πρέπει να τα καταλάβεις από την αρχή μέχρι το τέλος. 146 | 147 | Χρησιμοποιώ τη χαρακτηρηστική markdown γλώσσα του Github, σεμπεριλαμβανομένων και των tasks lists για να ελέγχω την εξέλιξη του πρότζεκτ. 148 | 149 | **Δημιούργησε ένα καινούργιο branch [x]** 150 | 151 | 152 | Κάνε fork το branch και ακολούθησε τις παρακάτω εντολές 153 | 154 | `git checkout -b progress` 155 | 156 | `git remote add jwasham https://github.com/jwasham/coding-interview-university` 157 | 158 | `git fetch --all` 159 | 160 | Μάρκαρε όλα τα κουτιά με X αφού ολοκληρώσεις τις αλλαγές 161 | 162 | `git add . ` 163 | 164 | `git commit -m "Marked x" ` 165 | 166 | `git rebase jwasham/master ` 167 | 168 | `git push --force ` 169 | 170 | [Περισσότερα σχετικά με την Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) 171 | 172 | ## Μη νιώθεις ανίκανος 173 | - Οι επιτυχυμένοι μηχανικοί λογισμικού είναι έξυπνοι, αλλά πολλοί έχουν την ανασφάλεια ότι δεν είναι αρκετά έξυπνοι. 174 | - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) 175 | - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) 176 | 177 | ## Σχετικά με τα βίντεο 178 | 179 | Μερικά βίντεο είναι διαθέσιμα μόνο κάνοντας εγγραφή σε μία Coursera, EdX, or Lynda.com τάξη. Αυτές καλούνται MOOCs. 180 | Μερικές φορές οι τάξεις δεν είναι διαθέσιμες, έτσι πρέπει να περιμένεις 1-2 μήνες, έτσι ώστε να αποκτήσεις πρόσβαση. Τα μαθήματα του Lynada.com δεν είναι δωρεάν. 181 | 182 | Θα εκτιμούσα τη βοήθεια σου να προσθέσεις δωρεάν και πάντοτε-διαθέσιμες ανοικτές πηγές, όπως βίντεο από το Youtube να συνοδεύσουν τα online μαθήματα βίντεο. 183 | Μου αρέσει να χρησιμοποιώ πανεπιστημιακές διαλέξεις. 184 | 185 | ## Διαδικασία Συνέντευξης & Γενική προετοιμασία συνέντευξης 186 | 187 | - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) 188 | - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) 189 | - [ ] [Αποτελεσματικό Whiteboarding κατά τη διάρκεια των Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) 190 | - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) 191 | - [ ] Cracking The Coding Interview Set 1: 192 | - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) 193 | - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) 194 | - [ ] How to Get a Job at the Big 4: 195 | - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) 196 | 197 | - [ ] Μαθήματα προετοιμασίας: 198 | - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): 199 | - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. 200 | - [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): 201 | - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. 202 | 203 | ## Διάλεξε μία γλώσσα για τη συνέντευξη 204 | 205 | Μπορείς να χρησιμοποιήσεις μία γλώσσα με την οποία είσαι άνετος για να κάνεις το προγραμματιστικό κομμάτι της συνέντευξης, αλλά για τις μεγάλες εταιρίες, υπάρχουν ατόφιες επιλογές: 206 | 207 | - C++ 208 | - Java 209 | - Python 210 | 211 | Μπορείς, επίσης, να χρησιμοποιήσεις αυτές, αλλά διάβασε γύρω από αυτό πρώτα. Μπορεί να υπάρχουν προειδοποιήσεις: 212 | 213 | - Javascript 214 | - Ruby 215 | 216 | Πρέπει να είσαι πολύ εξοικιωμένος με τη γλώσσα και γνώστης. 217 | 218 | Διάβασε περισσότερα σχετικά με τις παραπάνω επιλογές: 219 | - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ 220 | - http://blog.codingforinterviews.com/best-programming-language-jobs/ 221 | 222 | [Βρες πόρους για τη γλώσσα εδώ](programming-language-resources.md) 223 | 224 | Θα δείς λίγη γνώση σχετικά με τις C, C++ και Python να περιέχεται παρακάτω, επείδη μαθαίνω. Υπάρχουν μερικά εμπλεκόμενα βιβλία, δες το κάτω μέρος. 225 | 226 | ## Λίστα βιβλίων 227 | 228 | - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) 229 | - απαντήσεις στην C++ και στην Java 230 | - αυτό είναι ένα καλό ζέσταμα για να είσαι άριστος/η στο Coding Interview 231 | - όχι τόσο δύσκολο, τα περισσότερα προβλήματα ίσως είναι ευκολότερα από ότι θα δείς στην συνέντευξη (από αυτά που έχω διαβάσει) 232 | - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) 233 | - απαντήσεις στην Java 234 | 235 | Εάν έχεις αρκετό ελεύθερο χρόνο: 236 | 237 | - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) 238 | - [ ] [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) 239 | 240 | ### Αρχιτεκτονική Υπολογιστών 241 | 242 | Αν έχεις λίγο χρόνο: 243 | 244 | - [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) 245 | - Το βιβλίο δημοσιεύτηκε το 2004, και είναι λίγο απαρχεωμένο, αλλά είναι ένας υπέροχος πόρος για να κατανοήσεις έναν υπολογιστή εν συντομία. 246 | - Ο συγγραφέας εφηύρε το HLA, έτσι μην παίρνεις τις αναφορές του και παραδείγματά του για το HLA, τοις μετρητοίς. 247 | - Αυτά τα κεφάλαια αξίζουν το διάβασμα για να σου δώσουν ισχυρά θεμέλια: 248 | - Chapter 2 - Numeric Representation 249 | - Chapter 3 - Binary Arithmetic and Bit Operations 250 | - Chapter 4 - Floating-Point Representation 251 | - Chapter 5 - Character Representation 252 | - Chapter 6 - Memory Organization and Access 253 | - Chapter 7 - Composite Data Types and Memory Objects 254 | - Chapter 9 - CPU Architecture 255 | - Chapter 10 - Instruction Set Architecture 256 | - Chapter 11 - Memory Architecture and Organization 257 | 258 | Αν έχεις αρκετό χρόνο (Το θέλω αυτό το βιβλίο): 259 | 260 | - [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) 261 | - Για μία πλουσιότερη, περισσότερο ενημερωμένη (2011), αλλά εκτενέστερη αντιμετώπιση 262 | 263 | ### Συγκεκριμένη γλώσσα 264 | 265 | **Θα πρέπει να επιλέξεις μία γλώσσα για τη συνέντευξη (δες παραπάνω).** Εδώ είναι οι προτάσεις μου ανά γλώσσα. Δεν έχω τους πόρους για όλες τις γλώσσες. Καλοδεχούμενες οι προσθήκες. 266 | 267 | Εάν διαβάσεις μία από αυτές, θα πρέπει να έχεις όλη την γνώση σχετικά με δομές δεδομένων και αλγόριθμους που θα χρειαστείς για να αρχίσεις να λύνεις προβλήματα προγραμματισμού. 268 | **Μπορείς να παραλείψεις όλες τα βίντεο-διαλέξεις που περιέχονται σε αυτό το πρότζεκτ**, εκτός εάν θέλεις να κάνεις μία ανασκόπηση. 269 | 270 | [Επιπρόσθετοι πόροι που αφορούν συγκεκριμένες γλώσσες εδώ.](programming-language-resources.md) 271 | 272 | ### C++ 273 | 274 | Δεν έχω διαβάσει αυτά τα δύο, αλλά έχουν λάβει υψηλές αξιολογήσεις και έχουν γραφτεί από τον Sedgewick. Είναι φοβερός. 275 | 276 | - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) 277 | - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) 278 | 279 | Εάν έχεις μία καλύτερη πρόταση για τη C++, παρακαλώ ενημέρωσέ με. Ψάχνοντας για έναν περιεκτικό πόρο. 280 | 281 | ### Java 282 | 283 | - [ ] [Αλγόριθμοι σε Java(Sedgewick)](http://www.skroutz.gr/books/142957.%CE%91%CE%BB%CE%B3%CF%8C%CF%81%CE%B9%CE%B8%CE%BC%CE%BF%CE%B9-%CF%83%CE%B5-Java.html) 284 | - Διδάσκεται στο Τμήμα Πληροφορικής του Οικονομικού Πανεπιστημίου Αθηνών 285 | - βιντεο με το περιεχόμενο του βιβλίου (and Sedgewick!): 286 | - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) 287 | - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) 288 | 289 | Ή: 290 | 291 | - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) 292 | - by Goodrich, Tamassia, Goldwasser 293 | - used as optional text for CS intro course at UC Berkeley 294 | - see my book report on the Python version below. This book covers the same topics. 295 | 296 | ### Python 297 | 298 | - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) 299 | - by Goodrich, Tamassia, Goldwasser 300 | - I loved this book. It covered everything and more. 301 | - Pythonic code 302 | - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ 303 | 304 | 305 | ### Προαιρετικά Βιβλία 306 | 307 | **Ορισμένοι συστήνουν αυτά, αλλά το παρακάνουν, εκτός εάν έχεις πολλά χρόνια εμπειρίας και περιμένεις μία δυσκολότερη συνέντευξη:** 308 | 309 | - [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) 310 | - As a review and problem recognition 311 | - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. 312 | - This book has 2 parts: 313 | - class textbook on data structures and algorithms 314 | - pros: 315 | - is a good review as any algorithms textbook would be 316 | - nice stories from his experiences solving problems in industry and academia 317 | - code examples in C 318 | - cons: 319 | - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects 320 | - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have 321 | - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. 322 | - algorithm catalog: 323 | - this is the real reason you buy this book. 324 | - about to get to this part. Will update here once I've made my way through it. 325 | - Can rent it on kindle 326 | - Half.com is a great resource for textbooks at good prices. 327 | - Answers: 328 | - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) 329 | - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) 330 | - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) 331 | 332 | - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) 333 | - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. 334 | - Half.com is a great resource for textbooks at good prices. 335 | - aka CLR, sometimes CLRS, because Stein was late to the game 336 | 337 | - [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) 338 | - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but 339 | that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. 340 | 341 | - ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ 342 | - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. 343 | - Would rather spend time on coding problems from another book or online coding problems. 344 | 345 | ## Πριν αρχίσεις 346 | 347 | Αυτή η λίστα αυξήθηκε με την περίοδο πολλών μηνών, και ναι, βρίσκεται εκτός ελέγχου. 348 | 349 | Εδώ βρίσκονται κάποια λάθη που έκανα για να έχεις μία καλύτερη εμπειρία. 350 | 351 | ### 1. Δε θα το θυμάσαι καθόλου 352 | 353 | Είδα αρκετές ώρες βίντεο και πήρα άφθονες σημειώσεις, κα μήνες μετά υπήρχαν πολλά τα οποία δεν θυμόμουν. Ξόδεψα 3 μέρες εξετάζοντας λεπτομερώς τις σημειώσεις μου και έκανα καρτέλες για να μπορούσα να τις αξιολογήσω. 354 | 355 | Σε παρακαλώ διάβασε τα για να μην κανεις τα ίδια λάθη με τα δικά μου: 356 | 357 | [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) 358 | 359 | ### 2. Χρησιμοποιήσε κάρτες σημειώσεων 360 | 361 | Να λύνεις το πρόβλημα, Εγώ έκανα μία μικρή ιστοσελίδα με κάρτες σημειώσεων 2 τύπων: γενικές και κώδικα. Κάθε μία κάρτα έχει διαφορετικό φορμάτ. 362 | 363 | Έκανα ένα mobile-first website για να μπορούσα να τις αξιολογήσω στο κινητό μου και στο tablet μου, όπου κι αν είμαι. 364 | 365 | Φτιάξε το δικό σου δωρεάν: 366 | 367 | - [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) 368 | - [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): 369 | - [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): 370 | 371 | Θυμήσου ότι ξεπέρασα τα όρια και είχα κάρτες που κάλυπταν τα πάντα, από assembly και Python trivia έως και μηχανική μάθηση και στατιστική. Ήταν κάπως υπερβολικό από αυτό που χρειαζόταν. 372 | 373 | **Σημείωσε στα flashcards:** Τον πρώτο καιρό θα αναγνωρίζεις ότι γνωρίζεις την απάντηση, μην την μαρκάρεις ως γνωστή. Έχεις να δεις την ίδια κάρτα και να την απαντήσεις αρκετές φορές σωστά πριν την κατανοήσεις πλήρως. Η επανάληψις είναι μήτηρ πάσης μαθήσεως!-Πλάτωνας. 374 | 375 | Η εναλλακτική είναι να χρησιμοποιήσεις το δικό μου flashcard site: [Anki](http://ankisrs.net/), το οποίο έχει προταθεί σε εμένα αρκετές φορές. Χρησιμοποιεί ένα επαναληπτικό σύστημα για να σε βοηθήσει να θυμηθείς. 376 | Είναι φιλικό προς τον χρήστη, διαθέσιμο σε όλες τις πλατφόρμες και διαθέτει συγχρονισμό με το cloud. Κοστίζει 25$ για iOS αλλά είναι δωρεάν στις άλλες πλατφόρμες. 377 | 378 | Η flashcard βάση δεδομένων μου σε φορμάτ Anki: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) 379 | 380 | ### 3. Αναθεώρησε, αναθεώρησε, αναθεώρησε 381 | 382 | Διατηρώ το σετ μου απο σκονάκια σε ASCII, στοίβα OSI, σχηματισμούς Big-O, και άλλα. Τα μελετώ όταν έχω λίγο χρόνο. 383 | 384 | Κάνε ένα διάλειμμα από τα προβλήματα προγραμματισμού για μισή ώρα και δούλεψε με τα flashcards. 385 | 386 | ### 4. Συγκεντρώσου 387 | 388 | Υπάρχουν πολλοί αντιπερισπασμοί που μπορούν να κοστίσουν πολύτιμο χρόνο. Η συγκέντρωση είναι ένα αρκετά δύσκολο κομμάτι. 389 | 390 | ## Τι δε θα δεις να καλύπτετε 391 | 392 | Υπάρχουν επικρατέστερες τεχνολογίες αλλά δεν είναι κομμάτι αυτού του πλάνου διαβάσματος: 393 | 394 | - SQL 395 | - Javascript 396 | - HTML, CSS, και άλλες front-end τεχνολογίες 397 | 398 | ## Το καθημερινό πλάνο 399 | 400 | Μερικά θέματα παίρνουν μία ολόκληρη μέρα, και μερικά θα κοστίσουν μερικές μέρες. Μερικά είναι μόνο γνώση χωρίς να χρειαστεί να υλοποιήσεις οτιδήποτε. 401 | 402 | Κάθε μέρα παίρνω ένα θέμα από την παρακάτω λίστα, βλέπω βίντεο για το συγκεκριμένο θέμα, και γρράφω μία υλοποίηση σε: 403 | - C - χρησιμοποιώντας structs και functions που παίρνουν struct * και κάτι άλλο σαν ορίσματα. 404 | - C++ - χωρίς να χρησιμοποιώ built-in τύπους 405 | - C++ - χρησιμοποιώντας built-in τύπους, όπως τα std::list της STL για μία συνδεδεμένη λίστα 406 | - Python - χρησιμοποιώντας built-in τύπους (για να εξασκούμε στην Python) 407 | - και γράφω tests για να σιγουρευτώ ότι το κάνω καλά, μερικές φορές χρησιμοποιώντας μόνο assert() δηλώσεις 408 | - Μπορεί να κάνεις Java ή κάτι άλλο, αυτό είναι μόνο αυτό που κάνω. 409 | 410 | Δεν χρειάζεσαι όλα αυτά. Χρειάζεσαι μόνο [μία γλώσσα για τη συνέντευξη](#Διάλεξε-μία-γλώσσα-για-τη-συνέντευξη). 411 | 412 | Γιατί γράφω κώδικα σε όλα αυτά; 413 | - Εξάσκηση, εξάσκηση, εξάσκηση, μέχρι να γίνω άρρωστος από αυτό, και να μπορώ να το κάνω χωρίς κανένα πρόβλημα (μερικά έχουν πολλές ακραίες περιπτώσεις και και τήρηση των λεπτομερειών του βιβλίου να θυμηθείς) 414 | - Δουλέυω με τα εμπόδια (allocating/freeing memory χωρίς την βοήθεια του garbage collection (εκτός της Python)) 415 | - Κάνω χρήση των built-in τύπων έτσι έχω λίγη εμπειρία στη χρήση built-in εργαλείων για χρήση στον πραγματικό κόσμο (δεν πάω να γράψω τη δικιά μου υλοποίηση για τη συνδεδεμένη λίστα στην παραγωγή) 416 | 417 | Μπορεί να μην έχω χρόνο να τα κάνω αυτά για όλα τα θέματα, αλλά θα προσπαθήσω. 418 | 419 | Μπορείς να δεις τον κώδικα μου εδώ: 420 | - [C] (https://github.com/jwasham/practice-c) 421 | - [C++] (https://github.com/jwasham/practice-cpp) 422 | - [Python] (https://github.com/jwasham/practice-python) 423 | 424 | Δε χρειάζεται να απομνημονεύσεις κάθε κομμάτι ενός αλγόριθμου. 425 | 426 | Γράψε κώδικα σε ένα πίνακα ή σε ένα χαρτί, όχι σε υπολογιστή. Τέσταρε τον με μερικές απλές εισόδους. Μετά τέσταρε τον και σε έναν υπολογιστή. 427 | 428 | ## Προαπαιτούμενη γνώση 429 | 430 | - [ ] **Μάθε C** (καλή τύχη με αυτό... :disappointed: ) 431 | - Η C είναι παντού. Θα δείς παραδείγματα σε βιβλία, διαλέξεις, βίντεο, *ΠΑΝΤΟΥ* όσο θα διαβάζεις. 432 | - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) 433 | - Είναι ένα σύντομο βιβλίο, αλλά θα σου δώσει ένα χεράκι στην γλώσσα C και εάν την εξασκείς λίγο 434 | θα την καταλάβεις γρήγορα. Το να καταλάβεις τη C θα σε βοηθήσει να καταλάβεις πως δουλεύουν τα προγράμματα και η μνήμη. 435 | - [απαντήσεις και ερωτήσεις από έναν Έλληνα](https://github.com/lekkas/c-algorithms) 436 | 437 | - [ ] **How computers process a program:** 438 | - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) 439 | - [ ] [Machine Code Instructions (video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) 440 | 441 | ## Αλγοριθμική πολυπλοκότητα / Big-O / Ασυμπτωτική ανάλυση 442 | - τίποτα προς υλοποίηση 443 | - [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) 444 | - [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) 445 | - [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) 446 | - [ ] Skiena: 447 | - [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) 448 | - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) 449 | - [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/) 450 | - [ ] [Orders of Growth (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59) 451 | - [ ] [Asymptotics (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) 452 | - [ ] [UC Berkeley Big O (video)](https://youtu.be/VIS4YDpuP98) 453 | - [ ] [UC Berkeley Big Omega (video)](https://youtu.be/ca3e7UVmeUc) 454 | - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) 455 | - [ ] [Illustrating "Big O" (video)](https://class.coursera.org/algorithmicthink1-004/lecture/63) 456 | - [ ] TopCoder (includes recurrence relations and master theorem): 457 | - [Computational Complexity: Section 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) 458 | - [Computational Complexity: Section 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) 459 | - [ ] [Cheat sheet](http://bigocheatsheet.com/) 460 | 461 | 462 | Εάν μερικές διαλέξεις είναι πολύ μαθηματικές, μπορείς να μεταβείς προς τα κάτω και να παρακολουθήσεις μερικά βίντεο σχετικά με τα διακριτά μαθηματικά για να πάρεις όλες τις γνώσεις που απαιτούνται. 463 | 464 | ## Δομές Δεδομένων 465 | 466 | - ### Πίνακες 467 | - Υλοποίησε μία λίστα, η οποία αλλάζει αυτόματα μέγεθος. 468 | - [ ] Περιγραφή: 469 | - [Πίνακες(EN) (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) 470 | - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) 471 | - [Basic Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) 472 | - [Multi-dim (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) 473 | - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) 474 | - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) 475 | - [Jagged Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) 476 | - [Resizing arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) 477 | - [ ] Υλοποίησε μία συλλογή (ευμετάβλητο πίνακα με αυτόματη αλλαγή μεγέθους): 478 | - [ ] Κάνε πρακτική σε κώδικα χρησιμοποιώντας πίνακες και δείκτες, και pointer math για να πας σε ένα δείκτη από το να χρησιμοποιήσεις ευρετηρίαση. 479 | - [ ] new raw data array with allocated memory 480 | - can allocate int array under the hood, just not use its features 481 | - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128 482 | - [ ] size() - αριθμός των στοιχείων 483 | - [ ] capacity() - αριθμός στοιχείων που μπορεί να περιέχει 484 | - [ ] is_empty() 485 | - [ ] at(index) - επιστρέφει που υπάρχει στη θέση index, *εκρύγνειται* αν ο δείκτης είναι εκτός συνόρων του πίνακα 486 | - [ ] push(item) 487 | - [ ] insert(index, item) - εισάγει ένα σημείο στη θέση index, μετακινεί την τιμή του index και σύρει όλα τα στοιχεία στα δεξιά 488 | - [ ] prepend(item) - εισάγει το αντικείμενο στην αρχή της συλλογής(insert(0,item)) 489 | - [ ] pop() - αφαιρεί από το τέλος, επιστρέφει την τιμή 490 | - [ ] delete(index) - διγράφη το στοιχείο στη θέση index, σύρει όλα τα στοιχεία στα αριστερά 491 | - [ ] remove(item) - ψάχνει για την τιμή και διαγράφει το δείκτη που την έχει (ακόμα και αν είναι σε περισσότερες από 1 θέσεις) 492 | - [ ] find(item) - ψάχνει για την τιμή και επιστρέφει τον πρώτο δείκτη με αυτή την τιμή, -1 έαν δε βρεθεί 493 | - [ ] resize(new_capacity) // private function 494 | - όταν φτάνεις στη χωρητικώτητα, άλλαξε το μέγεθος του πίνακα κατά το διπλάσιο 495 | - όταν αφαιρείς ένα στοιχείο, εάν το μέγεθος είναι 1/4 της χωρητικότητας, άλλαξε το μέγεθος κατά το μισό 496 | - [ ] Χρόνος 497 | - O(1) για πρόσθεση/αφαίρεση στο τέλος (απελευθέρωση των δεσμευμένων θέσεων για περισσότερο χώρο) 498 | - O(n) για πρόσθεση/αφαίρεση αλλού 499 | - [ ] Χώρος 500 | - συνεχόμενος στη μνήμη, έτσι η μικρή απόσταση βοηθάει στην απόδοση 501 | - απαιτούμενος χώρος = (χωρητικότητα πίνακα, η οποία είναι >= n) * μέγεθος του στοιχείου, αλλά ακόμα και αν είναι 2n => O(n) 502 | 503 | - ### Συνδεδεμένες λίστες 504 | - [ ] Περιγραφή: 505 | - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) 506 | - [ ] [CS 61B - Linked Lists (video)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) 507 | - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) 508 | - not the whole video, just portions about Node struct and memory allocation. 509 | - [ ] Linked List vs Arrays: 510 | - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) 511 | - [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) 512 | - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) 513 | - [ ] Gotcha: you need pointer to pointer knowledge: 514 | (for when you pass a pointer to a function that may change the address where that pointer points) 515 | 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. 516 | - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) 517 | - [ ] υλοποίηση (Το έκανα με δείκτη ουράς και χωρίς): 518 | 519 | # untill here 520 | 521 | - [ ] size() - returns number of data elements in list 522 | - [ ] empty() - bool returns true if empty 523 | - [ ] value_at(index) - returns the value of the nth item (starting at 0 for first) 524 | - [ ] push_front(value) - adds an item to the front of the list 525 | - [ ] pop_front() - remove front item and return its value 526 | - [ ] push_back(value) - adds an item at the end 527 | - [ ] pop_back() - removes end item and returns its value 528 | - [ ] front() - get value of front item 529 | - [ ] back() - get value of end item 530 | - [ ] insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index 531 | - [ ] erase(index) - removes node at given index 532 | - [ ] value_n_from_end(n) - returns the value of the node at nth position from the end of the list 533 | - [ ] reverse() - reverses the list 534 | - [ ] remove_value(value) - removes the first item in the list with this value 535 | - [ ] Doubly-linked List 536 | - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) 537 | - No need to implement 538 | 539 | - ### Stack 540 | - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) 541 | - [ ] [Using Stacks Last-In First-Out (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) 542 | - [ ] Will not implement. Implementing with array is trivial. 543 | 544 | - ### Queue 545 | - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) 546 | - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) 547 | - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) 548 | - [ ] [Priority Queues (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) 549 | - [ ] Implement using linked-list, with tail pointer: 550 | - enqueue(value) - adds value at position at tail 551 | - dequeue() - returns value and removes least recently added element (front) 552 | - empty() 553 | - [ ] Implement using fixed-sized array: 554 | - enqueue(value) - adds item at end of available storage 555 | - dequeue() - returns value and removes least recently added element 556 | - empty() 557 | - full() 558 | - [ ] Cost: 559 | - a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n) 560 | because you'd need the next to last element, causing a full traversal each dequeue 561 | - enqueue: O(1) (amortized, linked list and array [probing]) 562 | - dequeue: O(1) (linked list and array) 563 | - empty: O(1) (linked list and array) 564 | 565 | - ### Hash table 566 | - [ ] Videos: 567 | - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) 568 | - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 569 | - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) 570 | - [ ] [PyCon 2010: The Mighty Dictionary (video)](https://www.youtube.com/watch?v=C4Kc8xzcA68) 571 | - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) 572 | - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) 573 | 574 | - [ ] Online Courses: 575 | - [ ] [Understanding Hash Functions (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) 576 | - [ ] [Using Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) 577 | - [ ] [Supporting Hashing (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) 578 | - [ ] [Language Support Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) 579 | - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) 580 | - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3) 581 | - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) 582 | - [ ] distributed hash tables: 583 | - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) 584 | - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) 585 | 586 | - [ ] implement with array using linear probing 587 | - hash(k, m) - m is size of hash table 588 | - add(key, value) - if key already exists, update value 589 | - exists(key) 590 | - get(key) 591 | - remove(key) 592 | 593 | ## More Knowledge 594 | 595 | - ### Binary search 596 | - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) 597 | - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) 598 | - [ ] [detail](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) 599 | - [ ] Implement: 600 | - binary search (on sorted array of integers) 601 | - binary search using recursion 602 | 603 | - ### Bitwise operations 604 | - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) 605 | - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, << 606 | - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) 607 | - [ ] Good intro: 608 | [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) 609 | - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0) 610 | - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation) 611 | - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation) 612 | - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) 613 | - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/) 614 | - [ ] [The Bit Twiddler Interactive](http://bits.stephan-brumme.com/interactive.html) 615 | - [ ] 2s and 1s complement 616 | - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) 617 | - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement) 618 | - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement) 619 | - [ ] count set bits 620 | - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc) 621 | - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) 622 | - [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) 623 | - [ ] round to next power of 2: 624 | - [Round Up To Next Power Of Two](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) 625 | - [ ] swap values: 626 | - [Swap](http://bits.stephan-brumme.com/swap.html) 627 | - [ ] absolute value: 628 | - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) 629 | 630 | ## Trees 631 | 632 | - ### Trees - Notes & Background 633 | - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) 634 | - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) 635 | - basic tree construction 636 | - traversal 637 | - manipulation algorithms 638 | - BFS (breadth-first search) 639 | - [MIT (video)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) 640 | - level order (BFS, using queue) 641 | time complexity: O(n) 642 | space complexity: best: O(1), worst: O(n/2)=O(n) 643 | - DFS (depth-first search) 644 | - [MIT (video)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) 645 | - notes: 646 | time complexity: O(n) 647 | space complexity: 648 | best: O(log n) - avg. height of tree 649 | worst: O(n) 650 | - inorder (DFS: left, self, right) 651 | - postorder (DFS: left, right, self) 652 | - preorder (DFS: self, left, right) -------------------------------------------------------------------------------- /translations/how-to.md: -------------------------------------------------------------------------------- 1 | Please put new translation README files here. 2 | 3 | I'll migrate the existing translations when they are ready. 4 | 5 | To start a new translation, please: 6 | 7 | 1. Make an issue (for collaboration with other translators) 8 | 2. Make a pull request to collaborate and commit to. 9 | 3. Let me know when it's ready to pull. 10 | 11 | Thank you! 12 | --------------------------------------------------------------------------------