Skip to content

Latest commit

 

History

History
41 lines (21 loc) · 4.63 KB

Introduction.md

File metadata and controls

41 lines (21 loc) · 4.63 KB

引言

哪里错了

我们再次沮丧地走出招聘会。那天考察的 10 位候选人中,没有一位会收到 offer。我们在想,我们是不是太苛刻了?

我尤其感到失望。我们拒绝了我的一位候选人。他是我之前教过的一个学生。他在世界上最好的计算机科学学校之一华盛顿大学取得了 3.73 的 GPA,并在开源项目上做了大量工作。他精力充沛。他很有创造性。他很敏锐。他工作努力。他在所有方面都是一个真正的极客。

但我不得不同意委员会其他成员的观点:这些数据并不能说明问题。即使我强烈的推荐能够说服他们重新考虑,他也肯定会在后面的招聘流程中遭到淘汰。因为他暴露了太多的危险信号(red flag)。

虽然他很聪明,但是在解决面试问题时他却表现得很艰难。面试中的第一个问题是一个经典问题的变形,大多数成功的求职者都能快速做出回答,但是他却在这个问题的算法开发时遇到了麻烦。当他提出一个方案时,没有考虑到针对其他场景优化的解决方案。最终在编码时,他用最初的解决思路快速地写完了代码,但是代码中却充满了他没有留意到的错误。尽管从任何角度来看,他都不是我们所见过的最差的候选人,但是他离 “bar” (译者注,标杆)还差得很远。所以,拒绝。

几周后,当他在电话中询问反馈时,我很纠结不知道该怎么回答他。更聪明?不,我知道他很聪明。成为更好的 coder?不,他的技术和我见过的一些最好的不相上下。

像许多积极的求职者一样,他准备得很充分。他读过 K&R 的经典 C 语言书籍,也复习过 CLRS 著名的算法教科书。他可以详细描述平衡树的无数种方法,而且他可以用 C 语言做一些没有任何理智的程序员会考虑做的事情。

我不得不告诉他一个不幸的事实:仅仅看那些书是不够的。学术书籍能让你为新奇的研究做好准备,它们可能会让你成为一名更好的软件工程师,但它们不足以应对面试。为什么?我给你个提示:你的面试官没有见过红黑树,因为他们在学校也是如此。

要破解编码面试,你需要准备真实的面试问题。你必须对实际问题进行练习,并学习它们的模式。最终能实现灵活开发新的算法,而不是死记硬背现有的问题。

Cracking the Coding Interview 一书是我根据在一线公司参与面试并在之后指导求职者通过面试的第一手经验所总结的成果。它是与求职者数百次对话的成果。它是汇总候选人和面试官提出的数千个问题的成果。它也是参考了这么多公司的这么多面试问题的成果。本书收录了 189 个最好的面试问题,这是从成千上万个可能的问题中挑选出来的。

我的方法

Cracking the Coding Interview 的重点是算法、编码和设计问题。为什么?因为虽然你可以也会被问到工作经验方面的问题(behavioral question),但答案会和你的简历一样五花八门。同样,虽然许多公司会问一些所谓的 “trivia” 问题(例如,“什么是虚拟功能?”),但是通过实践这些问题而获得的技能仅限于非常具体的知识。本书将简要介绍其中的一些问题,向你展示它们是什么样的,但我选择将空间分配给需要学习更多内容的领域。

我的爱好

教学是我的爱好。我喜欢帮助人们理解新概念,并为他们提供工具来帮助他们在他们爱好的领域中脱颖而出。

我第一次正式的教学经历是宾夕法尼亚大学,当时我在第二年成为一名计算机科学本科课程的助教。我接受了 TA 的其他几门课程,最后我在那里开设了自己的计算机科学课程,侧重于实践技能。

作为 Google 的工程师,培训和指导新工程师是我最喜欢的事情之一。我甚至利用我的 “20% 时间” 在华盛顿大学教授两门计算机科学课程。

多年后的今天,我继续教授计算机科学的概念,但这一次的目标是让初创公司的工程师为他们的 acquisition interview 做准备。我已经看到他们的错误和努力,并且为帮助他们解决这些问题制定了技术和策略。

Cracking the Coding InterviewCracking the PM InterviewCracking the Tech CareerCareerCup,都体现了我对教学的热爱。即使是现在,你也经常可以在 CareerCup.com 上看到我在 “闲逛”,以帮助那些寻求帮助的用户。

加入我们。

Gayle L. McDowell