GitHub上最励志的计算机自学教程(重制版)
首先来看一下谷歌工程师的要求:名校出身、CS(Computer Science,计算机科学)专业背景、博士学位加持,技术过硬?
这么苛刻的条件,成为谷歌工程师是不是特别难?国外一个叫 John Washam 的小哥告诉你:不用,自学 8 个月也可以!
John Washam 励志要成为一名谷歌软件工程师,但没有 CS 专业背景的他,只能通过自己的努力来达成目标。
于是,8 个月的时间里,小哥花了数千小时阅读书籍、编写代码、观看 CS 技术讲座,一路披荆斩棘、打怪升级。
最终,虽然没有去成谷歌,还顺利成为了一名亚马逊 AWS 的技术专家,年薪百万(亚马逊真心也不错)。
更加难能可贵的是,小哥还将自学经验编写成了一份教程,在 GitHub 上线以来,已收获 140k+ 星的好评。
项目地址如下所示:
https://github.com/jwasham/coding-interview-university
小哥说:“即便没有面上梦寐以求的谷歌,但是这份教程,也算是好好充实了一下自己。”
小哥最初的目的是“考上”谷歌,于是每天自学 8-12 个小时,坚持了 8 个多月。一边学习,一边顺手整理出了这份自学项目。该项目也有中文版,微信搜索“逛逛GitHub”公众号,后台回复关键字「励志」获取在线阅读地址。
小哥表示:
无论你要面试哪家软件公司,这个项目都可以让你做好充分的准备,包括像亚马逊、Facebook、谷歌和微软这样的科技巨头。
接下来,我们就跟着小哥的脚步去了解一下这份面试宝典。
首先要做的就是选择一门编程语言,在 Google,一般是 C++、Java、Python,有时也会用到 JavaScript、Ruby。
接着开始学习计算机的一些知识,比如说计算机是如何处理一段程序的,编译器是如何工作的,浮点数是如何存储的。
然后是算法复杂度、Big-O(用于描述函数渐近行为的数学符号)、渐进分析法、数据结构(数组、链表、堆栈、队列、哈希表、图)。以及二分查找、按位运算。
还有树这块,知识点比较多,我画一个思维导图:
排序这块的知识点也不少,继续上思维导图:
此外还有递归、动态规划、组合与概率、NP(非決定性多项式集合,是计算理论中最重要的集合之一)和 NP-完全和近似算法、缓存、线程与进程、系统设计。
这么多知识点,是不是觉得有点懵逼?
来看一下小哥的经验心得:
1)意识到你不可能一遍就记住所有的知识点,这点心理建设很重要。
2)把要回顾的知识点做成抽认卡:正常的及带有代码的,类似于背单词。然后在抽认卡上做笔记,在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。
3)回顾,回顾,回顾,每编程半个小时就要休息一下,并去回顾你的抽认卡。
4)专注。在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。
学到一定程度后,就可以准备面试了。面试的第一步当然是要有一份好的简历,这样才能为你争取到宝贵的面试机会。
Steve Yagge 给出的 10 个小贴士可以帮你做出一份还不错的简历。
Steve Yagge 曾经在亚马逊和 Google 工作过,因此他的建议还是很值得参考的。
在面试时,你可能会遇到这 20 个问题:
你为什么想得到这份工作? 你解决过的最有难度的问题是什么? 面对过的最大挑战是什么? 见过的最好或者最坏的设计是怎么样的? 对某项 Google 产品提出改进建议。 你作为一个个体同时也是团队的一员,如何达到最好的工作状态? 你的什么技能或者经验是你的角色中不可或缺的?为什么? 你在某份工作或某个项目中最享受的是什么? 你在某份工作或某个项目中面临过的最大挑战是什么? 你在某份工作或某个项目中遇到过的最蛋疼的 Bug 是什么样的? 你在某份工作或某个项目中学到了什么? 你在某份工作或某个项目中哪些地方还可以做的更好?
团队多大规模? 开发周期是怎样的? 会使用瀑布流/极限编程/敏捷开发么? 经常会为 deadline 加班么? 或者是有弹性的? 团队里怎么做技术选型? 每周平均开多少次会? 你觉得工作环境有助于员工集中精力吗? 目前正在做什么工作? 喜欢这些事情吗? 工作期限是怎么样的?
微信搜索“逛逛GitHub”公众号,后台回复关键字「励志」获取在线阅读地址。
公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了逛逛GitHub官方交流群。需要进群的朋友,可长按扫描下方二维码加我微信 focusoncode,备注 进群, 交流群二维码在我的朋友圈