jwasham/coding-interview-university
摘要
一份全面的、为期数月的软件工程面试学习计划,针对大型科技公司,最初由John Washam创建并被开发者社区广泛采用。
查看缓存全文
缓存时间: 2026/06/03 21:37
jwasham/coding-interview-university 来源:https://github.com/jwasham/coding-interview-university # 编程面试大学
最初我创建这份清单时,只是一份为了成为软件工程师而准备的简短学习计划,
但后来它逐渐发展成了你现在看到的这个庞大列表。按照这份学习计划,我成功被亚马逊录用为软件开发工程师(https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
你可能不需要像我一样学那么多。不过,你需要的一切都在这里了。我每天学习8-12小时,持续了好几个月。这是我的故事:为什么我全职学习了8个月来准备谷歌面试(https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
请注意: 你不需要像我一样学那么多。我在一些不必了解的事情上浪费了很多时间。更多信息见下文。我会帮你节省宝贵的时间,达到目标。
这里列出的内容将帮助你为几乎任何软件公司的技术面试做好充分准备,包括那些巨头:Amazon、Facebook、Google 和 Microsoft。
祝你好运!
翻译版本:
- Bahasa Indonesia
- Bulgarian
- Español
- German
- Japanese (日本語)
- Marathi
- Polish
- Português Brasileiro
- Russian
- Tiếng Việt - Vietnamese
- Urdu - اردو
- Uzbek
- বাংলা - Bangla
- ខ្មែរ - Khmer
- 简体中文
- 繁體中文
正在翻译中的版本:
- Afrikaans (https://github.com/jwasham/coding-interview-university/issues/1164)
- Arabic (https://github.com/jwasham/coding-interview-university/issues/98)
- French (https://github.com/jwasham/coding-interview-university/issues/89)
- Greek (https://github.com/jwasham/coding-interview-university/issues/166)
- Italian (https://github.com/jwasham/coding-interview-university/issues/1030)
- Korean(한국어) (https://github.com/jwasham/coding-interview-university/issues/118)
- Malayalam (https://github.com/jwasham/coding-interview-university/issues/239)
- Persian - Farsi (https://github.com/jwasham/coding-interview-university/issues/186)
- Telugu (https://github.com/jwasham/coding-interview-university/issues/117)
- Thai (https://github.com/jwasham/coding-interview-university/issues/156)
- Turkish (https://github.com/jwasham/coding-interview-university/issues/90)
- Українська (https://github.com/jwasham/coding-interview-university/issues/106)
- עברית (https://github.com/jwasham/coding-interview-university/issues/82)
- हिन्दी (https://github.com/jwasham/coding-interview-university/issues/81)
这是什么?
在白板上编程 —— 来自 HBO 的《硅谷》
这是我的多个月学习计划,目标是进入一家大公司成为软件工程师。
要求:
- 有一定的编码经验(变量、循环、方法/函数等)
- 耐心
- 时间
请注意,这是一份面向软件工程的学习计划,而不是前端工程或全栈开发。那些职业路径有非常棒的路线图和课程,请见 https://roadmap.sh/ 了解更多。
计算机科学专业需要学习很多内容,但在面试中只需要掌握大约 75% 就足够了,这正是我在这里涵盖的内容。对于完整的自学 CS 课程,我的学习计划资源已包含在 Kamran Ahmed 的计算机科学路线图中:https://roadmap.sh/computer-science
目录
学习计划
学习主题
- 算法复杂度 / Big-O / 渐近分析
- 数据结构
- 更多知识
- 树
- 树 - 介绍
- 二叉查找树:BST
- 堆 / 优先队列 / 二叉堆
- 平衡查找树(一般概念,不深入细节)
- 遍历:前序、中序、后序、BFS、DFS
- 排序
- 选择排序
- 插入排序
- 堆排序
- 快速排序
- 归并排序
- 图
- 有向图
- 无向图
- 邻接矩阵
- 邻接表
- 遍历:BFS、DFS
- 更多知识
获得工作
–––––––– 以下所有内容均为可选 ––––––––
可选附加主题与资源
为什么要用它?
如果你想在大公司做软件工程师,这些都是你必须知道的东西。如果你像我一样没有拿到计算机科学学位,这份计划能帮你补上,节省四年的生命。
当我开始这个项目时,我不知道栈和堆的区别,不知道大 O 是什么,也不了解树或如何遍历图。如果要我编写一个排序算法,我敢说会非常糟糕。我使用过的所有数据结构都是语言内置的,完全不知道底层是如何工作的。我从未管理过内存,除非运行的程序报“内存不足”错误,然后我需要找变通方法。我使用过一些多维数组和数千个关联数组,但从未从头创建过数据结构。
这是一个长期的计划。可能需要几个月。如果你已经熟悉其中很多内容,那么需要的时间会少得多。
如何使用
以下内容是提纲,你应该从上到下按顺序处理。我使用了 GitHub 的特殊 markdown 语法,包括用于跟踪进度的任务列表。
- 更多关于 GitHub 风格 markdown 的信息 (https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
如果你不想用 git
在此页面上,点击顶部的 Code 按钮,然后点击“Download ZIP”。解压缩文件后即可处理文本文件。如果你在一个支持 markdown 的代码编辑器中打开,所有内容都会格式化得很漂亮。
如何以 zip 文件下载仓库
如果你熟悉 git
创建一个新分支,这样你就可以像这样勾选项目:在方括号里写个 x:[x]
-
Fork GitHub 仓库: 点击 Fork 按钮
https://github.com/jwasham/coding-interview-universityFork GitHub 仓库
-
克隆到本地仓库:
git clone https://github.com/<你的GitHub用户名>/coding-interview-university.git cd coding-interview-university git remote add upstream https://github.com/jwasham/coding-interview-university.git git remote set-url --push upstream DISABLE # 这样你就不会把你的个人进度推回到原始仓库 -
完成更改后,用 X 标记所有框:
git commit -am "标记个人进度" git pull upstream main # 使你的 fork 与原仓库的更改保持同步 git push # 只推送到你的 fork
不要觉得自己不够聪明
- 成功的软件工程师都很聪明,但许多人都有一种不安,觉得自己不够聪明。
- 以下视频可能帮助你克服这种不安:
- 天才程序员的神话 (https://www.youtube.com/watch?v=0SARbwvhupQ)
- 独自前行很危险:与科技中的隐形怪物战斗 (https://www.youtube.com/watch?v=1i8ylq4j_EY)
关于视频资源的说明
有些视频只能通过注册 Coursera 或 EdX 课程才能观看。这些被称为 MOOC。有时课程不在进行中,你需要等几个月才能访问。如果能用免费且始终可用的公共资源(如 YouTube 视频,最好是大学讲座)来替代在线课程资源就好了,这样你可以在任何时间学习,而不必等到某个特定的在线课程开课。
选择一门编程语言
你需要为编程面试选择一门语言,同时也要找一门可以用来学习计算机科学概念的语言。最好用同一种语言,这样你只需要精通一门。
对于这个学习计划
当我在做这个学习计划时,我主要使用了两种语言:C 和 Python
- C:非常底层。允许你处理指针和内存分配/释放,让你从骨子里感受数据结构和算法。在 Python 或 Java 这样的高级语言中,这些对你来说是隐藏的。在日常工作中,这很好,但当你学习这些底层数据结构是如何构建的时候,贴近底层是非常棒的。
- C 无处不在。你在学习时会看到书籍、讲座、视频中的例子,无处不在。
- The C Programming Language, 2nd Edition (https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) —— 这是一本小书,但能让你很好地掌握 C 语言,稍微练习一下就能快速精通。理解 C 有助于你理解程序和内存的工作原理。
- 你不需要深入读完这本书(甚至不需要读完)。只要达到能自如地读写 C 语言的程度即可。
- Python:现代且非常表达力强,我学习它是因为它超级有用,而且在面试中能让我写更少的代码。这是我的偏好。当然,你喜欢就好。
你可能不需要这些,但这里有一些学习新语言的网站:
- Exercism (https://exercism.org/tracks)
- Codewars (http://www.codewars.com)
- HackerEarth (https://www.hackerearth.com/for-developers/)
- Scaler Topics (Java, C++) (https://www.scaler.com/topics/)
- Programiz PRO Community Challenges) (https://programiz.pro/)
对于你的编程面试
你可以使用你熟悉的语言来完成面试中的编程部分,但对于大公司,以下是很稳健的选择:
- C++
- Java
- Python
你也可以使用这些,但先做点研究。可能有一些注意事项:
- JavaScript
- Ruby
这是我写的一篇关于为面试选择语言的文章:Pick One Language for the Coding Interview (https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)。这是我文章所依据的原文:Choosing a Programming Language for Interviews (https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/)
你需要非常熟悉该语言并具备相关知识。更多关于选择的信息:
- Choose the Right Language for Your Coding Interview (http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/)
数据结构和算法书籍
这本书将为你打下计算机科学的基础。只选择一本,用你熟悉的语言。你会需要大量阅读和编码。
Python
- Coding Interview Patterns: Nail Your Next Coding Interview (https://geni.us/q7svoz) (主要推荐)
- 面试官真正在寻找什么以及为什么的内部视角。
- 101 个真实编程面试问题及详细解决方案。
- 直观的解释,引导你像在真实面试中一样解决每个问题。
- 1000+ 张图表说明关键概念和模式。
C
- Algorithms in C, Parts 1-5 (Bundle), 3rd Edition (https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080)
- 基础、数据结构、排序、搜索和图算法
Java
你的选择:
- Goodrich, Tamassia, Goldwasser - Data Structures and Algorithms in Java (https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
- Sedgewick and Wayne:
- Algorithms (https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
相似文章
@vintcessun: 一早翻到一个有意思的项目,改变了我对面试准备的认知。一直以为大厂面试刷题就够了,但本质上它考察的是完整的计算机科学知识体系。这个项目把离散的知识点串成了一个系统计划,从 Big-O、数据结构、算法到系统设计、面试技巧全覆盖,甚至包含如何写…
A popular GitHub project providing a comprehensive multi-month study plan for software engineering interviews, covering CS fundamentals, algorithms, system design, and resume tips.
@system_monarch: https://x.com/system_monarch/status/2057714149451497544
一份全面的系统设计模式速查表,涵盖12种模式,适用于技术面试,包括每种模式的信号、构建块和深入探讨,基于对顶尖科技公司200多次面试的经验总结。
@system_monarch: 假设你已安排了这些70LPA-1Cr+ CTC的面试:Google L5 / Meta E5 / Uber Staff / Amazon L6 / Sa…
@system_monarch的一条推文列出了27个核心系统设计概念(从入门到高级),推荐用于顶级科技公司(如Google、Meta和Uber)的高级软件工程面试。
@chenzeling4: 面试准备一团糟:20个浏览器标签页加上半途而废的PDF课程。CS-Fundamentals 将数据结构与算法、操作系统、数据库、SQL、网络……
一条推广CS-Fundamentals GitHub仓库的推文,该仓库整合了数据结构与算法、操作系统、数据库管理系统、SQL、网络、面向对象编程和系统设计的笔记、速查表和面试题,以帮助求职准备。
@_vmlops:一位开发者在他的机器学习面试过程中获得了Google、LinkedIn、Snap、Coupang和StitchFix的录用通知。这种洞察……
一位开发者在GitHub上免费发布了他的机器学习面试准备指南,基于他从Google、LinkedIn、Snap、Coupang和StitchFix收到的真实问题,涵盖学习计划、编程、统计、系统设计等;该仓库现已获得12.4k星标。