jwasham / coding-interview-university
jwasham / coding-interview-university
Coding Interview University
I originally created this as a short to-do list of study topics for becoming a software engineer, but it grew to the large list you see today. After going through this study plan, I got hired as a Software Development Engineer at Amazon! You probably won’t have to study as much as I did. Anyway, everything you need is here. I studied about 8-12 hours a day, for several months. This is my story: Why I studied full-time for 8 months for a Google interview.
我最初创建这个项目时,只是为了列出一份成为软件工程师所需的学习主题清单,但它最终演变成了你今天看到的这份详尽列表。在完成了这个学习计划后,我被亚马逊聘为软件开发工程师!你可能不需要像我那样投入那么多的学习时间。总之,你需要的一切都在这里。我曾连续几个月每天学习约 8-12 小时。这是我的故事:我为何为了谷歌面试全职学习了 8 个月。
Please Note: You won’t need to study as much as I did. I wasted a lot of time on things I didn’t need to know. More info about that is below. I’ll help you get there without wasting your precious time. The items listed here will prepare you well for a technical interview at just about any software company, including the giants: Amazon, Facebook, Google, and Microsoft. Best of luck to you!
请注意:你不需要像我那样学习那么久。我在一些不需要掌握的知识点上浪费了大量时间。关于这一点,下文会有更多说明。我会帮助你达成目标,而不浪费你宝贵的时间。这里列出的内容将为你应对几乎任何软件公司的技术面试做好充分准备,包括亚马逊、Facebook、谷歌和微软等巨头。祝你好运!
What is it?
This is my multi-month study plan for becoming a software engineer for a large company.
它是什么?
这是我为进入大型科技公司成为软件工程师而制定的多月学习计划。
Required:
- A little experience with coding (variables, loops, methods/functions, etc)
- Patience
- Time
必备条件:
- 一些编程经验(变量、循环、方法/函数等)
- 耐心
- 时间
Note this is a study plan for software engineering, not frontend engineering or full-stack development. There are really super roadmaps and coursework for those career paths elsewhere (see https://roadmap.sh/ for more info).
请注意,这是一个针对软件工程的学习计划,而非前端工程或全栈开发。针对那些职业路径,市面上有非常棒的路线图和课程(更多信息请访问 https://roadmap.sh/)。
There is a lot to learn in a university Computer Science program, but only knowing about 75% is good enough for an interview, so that’s what I cover here. For a complete CS self-taught program, the resources for my study plan have been included in Kamran Ahmed’s Computer Science Roadmap: https://roadmap.sh/computer-science
大学计算机科学课程中有很多内容需要学习,但只要掌握其中约 75% 就足以应对面试,这也是我在此涵盖的内容。如果你需要完整的计算机科学自学计划,我的学习资源已被收录在 Kamran Ahmed 的计算机科学路线图中:https://roadmap.sh/computer-science
Why use it?
If you want to work as a software engineer for a large company, these are the things you have to know. If you missed out on getting a degree in computer science, like I did, this will catch you up and save four years of your life.
为什么要使用它?
如果你想在大型科技公司担任软件工程师,这些知识是你必须掌握的。如果你像我一样没有获得计算机科学学位,这份计划将帮助你补齐短板,节省你四年的时间。
When I started this project, I didn’t know a stack from a heap, didn’t know Big-O anything, or anything about trees, or how to traverse a graph. If I had to code a sorting algorithm, I can tell ya it would have been terrible. Every data structure I had ever used was built into the language, and I didn’t know how they worked under the hood at all. I never had to manage memory unless a process I was running would give an “out of memory” error, and then I’d have to find a workaround. I used a few multidimensional arrays in my life and thousands of associative arrays, but I never created data structures from scratch. It’s a long plan. It may take you months. If you are familiar with a lot of this already it will take you a lot less time.
当我开始这个项目时,我分不清栈(stack)和堆(heap),不懂大 O 表示法,对树结构一无所知,也不知道如何遍历图。如果让我写一个排序算法,我可以肯定那会写得一团糟。我曾经使用过的所有数据结构都是语言内置的,我根本不知道它们底层是如何工作的。我从未需要管理内存,除非运行的程序报错“内存溢出”,我才不得不寻找变通方法。我一生中使用过几次多维数组和成千上万次关联数组,但我从未从零开始创建过数据结构。这是一个漫长的计划,可能需要你花费数月时间。如果你已经熟悉其中大部分内容,那么你所花的时间会少得多。
How to use it
Everything below is an outline, and you should tackle the items in order from top to bottom. I’m using GitHub’s special markdown flavor, including tasks lists to track progress.
如何使用它
以下所有内容都是大纲,你应该按照从上到下的顺序逐项攻克。我使用了 GitHub 特有的 Markdown 语法,包括用于跟踪进度的任务列表。