Coding Interview University学习
转自作者:约翰·沃斯塔姆, 简介:https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu
代码仓库地址: [jwasham/coding-interview-university](https://github.com/jwasham/coding-interview-university)
技术菜鸟的进阶
(一)、为何要用到它?
从底层去了解数据结构以及编程语言的运作原理。
作者原话引用:当我开始这个项目时,我不知道堆和栈的区别,不了解时间复杂度(Big-O)、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,才会去找解决方法。在我的编程生涯中,虽然我有用过多维数组,也用过关联数组成千上万次,但我从来没有自己实现过数据结构。
这是一个漫长的计划,以至于花费了我数月的时间。若你早已熟悉大部分的知识,那么也许能节省大量的时间。
(二)、不要觉得自己不够聪明(特别符合现在我的心境)
作者原话引用:大多数成功的软件工程师都非常聪明,但他们都有一种觉得自己不够聪明的不安全感。(当然排除我)
[天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ )
[不要单打独斗:面对技术中的隐形怪物](https://www.youtube.com/watch?v=1i8ylq4j_EY)
(三)、 面试过程 & 通用的面试准备
[ABC:不要停止编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
- [ ] [白板编程(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
- [ ] [揭秘技术招聘](https://www.youtube.com/watch?v=N233T0epWTs)
- [ ] 如何在科技四强企业中获得一份工作:
- [ ] [“如何在科技四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
- [ ] 解密开发类面试第一集:
- [ ] [Gayle L McDowell —— 解密开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
- [ ] [解密开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
- [ ] 解密 Facebook 编码面试:
- [方法](https://www.youtube.com/watch?v=wCl9kvQGHPI)
- [问题演练](https://www.youtube.com/watch?v=4UWDyJq8jZg)
- [ ] 准备课程:
- [ ] [软件工程师面试发布(收费课程)](https://www.udemy.com/software-engineer-interview-unleashed):
- 从前 Google 面试官身上学习如何准备自己,让自己能够应付软件工程师的面试。
- [ ] [Python 数据结构,算法和面试(收费课程)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
- Python 面试准备课程,内容涉及数据结构,算法,模拟面试等。
- [ ] [Python 的数据结构和算法简介(Udacity 免费课程)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513):
- 免费的 Python 数据结构和算法课程。
- [ ] [数据结构和算法纳米学位!(Udacity 收费纳米学位)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
- 获得超过100种数据结构和算法练习以及指导的动手练习,专门导师帮助你在面试和职场中做好准备。
- [ ] [探究行为面试(Educative 免费课程)](https://www.educative.io/courses/grokking-the-behavioral-interview):
- 很多时候,不是你的技术能力会阻碍你获得理想的工作,而是你在行为面试中的表现。
(四)、为你的面试选择一种语言
目前来看我所使用的语言有,python、java、go、scala,需要为面试需要选择一种语言(目前选择java)
(五)、面试准备
[Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/)
[Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
(六)、额外的选择
[Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
[Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
Elements of Programming Interviews (Java version)
https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/
[配套项目──书中每个问题的方法和测试用例](https://github.com/gardncl/elements-of-programming-interviews)
(七)、其他语言选择
[额外编程语言的精选资源](https://github.com/jwasham/coding-interview-university/blob/main/programming-language-resources.md)
(八)、书籍资源
### C++
[Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
[Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
[Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
### Java
[算法(Sedgewick 和 Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
[第一部分](https://www.coursera.org/learn/algorithms-part1)
[第二部分](https://www.coursera.org/learn/algorithms-part2)
[Java 数据结构和算法](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
### Python
[Python数据结构和算法](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
读书报告:[startupnextdoor.com/book-report-data-structures-and-algorithms-in-python](https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/)
[Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
(九)、使用抽卡
[记住计算机科学知识](https://startupnextdoor.com/retaining-computer-science-knowledge/)。
[学习如何学习](https://www.coursera.org/learn/learning-how-to-learn)。
[抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards)
[我的抽认卡数据库 ── 旧 1200 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db)
[我的抽认卡数据库 ── 新 1800 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db)
有一点需要记住的是,我做事有点过头,以至于卡片都覆盖到所有的东西上,从汇编语言和 Python 的细枝末节,到机器学习和统计都被覆盖到卡片上。而这种做法,对于要求来说是多余的。
**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已知”。反复复习这张抽认卡,直到每次都能答对后才是真正学会了这个问题。反复地问答可帮助你深刻记住该知识点。
这里有个替代我抽认卡的网站 [Anki](http://ankisrs.net/),很多人向我推荐过它。这个网站用同一个字卡重复出现的方式让你牢牢地记住知识。这个网站非常容易使用,支持多平台,并且有云端同步功能。在 iOS 平台上收费25美金,其他平台免费。
这是我用 Anki 这个网站里的格式所储存的抽认卡资料库: ankiweb.net/shared/info/25173560 (感谢 [@xiewenya](https://github.com/xiewenya))