美国计算机大厂流行算法面试题,LeetCode算法题成为破解高薪之道? - ycombinator


LeetCode的计算机算法指南非常受欢迎,评星53.6K,如今被推上黑客新闻首页,人们理性讨论如下:
对我而言,显而易见的是,我的时间最好花在学习解决这些难题上,而不是真正地成为一名更好的开发人员。我在年底要进行求职,尽管我设法在很大程度上避免了提出此类问题的公司,但我认为这严重限制了我的职业生涯
我无法代表所有人,但这种面试导致我提早离开工作,更频繁地调动工作,使我完全避开了某些公司。
 
这些现象始终存在的重要原因之一:对于需要进行面试的高级工程师,被要求编写玩具性问题的代码,应聘者要么知道快速解决该问题的“技巧”,要么就不知道,这种面试对于面试官来说风险很小。
但是,如果您的面试要求您像在实际工作中一样将程序与真实代码配对,那么可能让面试官在被面试者面前显得愚蠢,面试官必须即时处理应试中的出现错误。例如是否应该使用Array.slice或Array.splice。需要真正在代码库中查看类似实现,而不是根据记忆进行编码。
真可惜,实际上这种现场编码练习既可以更好地预测动手工作的成功又可以更好地招募人才。但是我们一直却在进行这些算法问题的面试,因为它们需要被面试的工程师付出很少的努力,也无需面试官和被面试者进行互动,而被面试的工程师也可以在没有准备时间的情况下进行这种面试。
 
我当时从事的是一家刚失业两年的“创业公司”。我努力学习了leetcode,并被FAANG聘用为每年30万的工作。我对测试,git,软件过程,推出,开发运营等一无所知。我几乎不知道如何进行软件工程。多么愚蠢的招聘过程。
 
面试只是部分测试您的经验。他们还应该测试您将来的能力和成长能力。
如果您能够如此努力地学习Leetcode,以至于您在短短几个月内就在世界上选择最多的软件公司之一中掌握了面试过程,那么可以想象您可以运用同样的才能,野心,以及能够快速学习以掌握git,dev ops等基础知识的能力。
 
Leetcode不是整个行业的阴谋。公司之所以使用它,是因为他们认为这是候选人的一种很好的筛选机制。当大N公司的拒绝率高于常春藤盟校的大学时,他们需要承受选择性。
 
我从事编程工作已有10年了,我非常擅长于此,在我做的每一项工作中,我都得到了很多好评,认可和加速晋升。但是我很难遇到leetcode问题,并且由于这些问题而未能通过几次面试。这并不是说我无法学习leetcode技巧,而是我没有动力或时间来对它们进行数月的练习,以便我保留所有技巧。
我没有CS学位,所以我认为可能有所不同,我没有花四年的时间来思考算法和数据结构。Leetcode面试是CS学位人员用来过滤掉非CS人士的一种看门方法。
 
花费相同的精力并将其应用于学习以构建可测试且可理解的代码。如果您可以在数月之内从无到有并接受一次算法面试,那么您就是个学习迅速的人。你会没事的。
 
我个人非常谨慎地使用算法问题作为面试,以了解某人在软件工程方面的 “熟练程度” 。如果我经营一家企业,我个人想确保人们可以管理技术债务并建立分离的系统。我曾在FAANG公司担任过多个职位,尽管根据这些算法被“熟练”掌握,但这些高薪(在我周围,通常是经验丰富)的人构建的系统在质量和维护方面都非常糟糕
 
您为什么认为这些员工不擅长学习工程最佳实践?我一直在这里看到像您一样的评论。是某种傲慢自大的行为,也许是由于首先被LeetCode问题所发出的错误信号所放大?
 
花了很多年才能使自己的工艺变得更好的人会感到被低估了
 
因为在FAANG,软件工程的问题已经解决了。并且有一个由专家组成的团队。也许有多个团队。您的工作是成为聪明的代码猴子。该流程将帮助您将编码转化为工程。Leetcode采访非常擅长于此测试。智商高的人愿意解决任意难题,只是因为有人说“解决了这个问题”。
 
据我所知,开发人员不会进行leetcode面试。大多数SRE都不是。在上一次面试过程中(六月),我被聘用为经验更丰富的职位,面试有一道题目:“您是否可以设计一种具有良好折衷和可靠关系模型的分布式微服务基础架构”如果我只是在算法方面做得很好(我没有),而没有别的,那将是很难的事。但是当我说“嗯,对于这种负载,除了冗余之外,您不需要水平缩放”给他们留下了深刻的印象。
 
我花了很多时间练习leetcode,在FAANG面试了很多次(共4次,约25次技术面试),但没有得到报价。他们总是告诉我一切都非常接近。让我感到苦涩的是,他们似乎并不珍视我的简历中的经验(例如OSS和大量的github项目,博客或科学文章等实际检查的东西)。似乎他们会比那些经验丰富的SWE更喜欢能够更快解决leetcode问题的候选人。而且整个事情似乎很随机。
同时练习leetcode感觉就像浪费时间。这不是很有趣,但是在您解决了500个问题之后,它开始变得毫无启发性。对于个人发展,有一些很酷的事情要做,尤其是当您已经有一份艰巨的工作时。但是,那是游戏的一部分……至少规则很明确,面试官/招聘人员通常都会很好(逃避了自身的面试真正能力的责任)。
 
相对于其他高薪领域(例如法律,医学,某些金融职业等)的进入壁垒,Leetcode的访问权限非常高。这是一个几乎免费的网站,您可以在家中舒适地闲暇时浏览它,如果遇到问题,Google会提供大量Google搜索结果来指导您解决所有问题。
 
实际上,我喜欢leetcode(网站),偶尔会很有趣,如果我决定以后再花点时间,那我就不会特别在意那部分,即使它没有让我得到Google Bus车票。
玩世不恭的风险是,我从事这项工作已有25年左右的时间,而且我擅长的某些事情可以为公司增加很多价值,但似乎薪资最高的公司会判断:怎样才能使他们的省钱。
 
leetcode只是基准,并不能确定您的资历。即使是世界上最好的leetcoder,也必须从大学毕业后最低的三年级开始。相反,他们着眼于您的经验以及可以带给您的价值,以确定您是否成为初级,中级,高级,职员等,因此他们非常重视与leetcode无关的经验。但是,您仍然必须通过leetcode考试。
 
在经常问这些问题的公司(FB,Goog,Amazon,MS,Apple)的工作规模是许多其他公司所不愿的。其他公司还会开发新颖的框架或解决您可能感兴趣的问题。
 

我很高兴自己并不孤单。我主要完成了非UI C ++ / C#/ Java / Python的工作,主要完成了业务级别的规则和devop,并宣传了CI,干净代码和git等良好做法。在研究了计算机工程之后,我们并没有真正专注于算法,而是更多地关注了底层的东西和信号处理。
我真的不适合任何“标准”面试。我已经完成了TripleByte面试和其他前100家公司面试,他们似乎都假设计算机科学专业,或者假设您是网络开发人员。所以,是的,我知道如何有效地执行大多数算法,我只是不记得如何从内存中准确描述Dijkstra,或者如何在压力下平衡白板上的树木。我看过它们,我学会了它们,但是在不使用它们的7年后,我忘记了(坦率地说,不在乎)
 
Google付给21岁员工的薪水要比迈阿密的公司付给拥有10年经验的人更高的薪水。在美国大约5个市场之外,没有人会问您这些难题。他们还少付了钱。我知道许多年轻人(年龄在20至30岁之间)处于一种状况,在这种情况下,他们因工作极其乏味而需要大笔款项(10万至20万美元)。我已经看到我大学里的大多数朋友都辞去了FAANG的工作,以寻求更充实的东西,通常薪水会降低50%或更多。
 
高薪职业中最高的工作岗位趋于融合为智商测试的合法代理的面试方法。这是面试候选人与公司之间的猫捉老鼠游戏。候选人希望获得高薪和有趣的工作,而公司只希望他们的工作中前n%的候选人能够选择某种度量标准。无论公司必须选择多少候选人,他们都会设计出一些方法来选择其中最好的一个。随着候选人数量的增加,确定最佳方案的方法(在我看来)变得越来越糟糕。在科技领域,其结果是过去十年来,最有利可图、主流的工作已向本地最大化:由此催生了基于数据结构和算法的白板面试。面试候选人将使用Leetcode的这些指标进行了游戏化,因此,成人考试准备的家庭手工业诞生了。
 
面试准备不必费劲。Leetcode的优点之一是问题很小。您可以在午休时间每天做一两个,然后在几个月甚至几周的时间内取得很大的进步。在面试之前,不要像补习班那样处理它。除非您是没有其他义务的新大学毕业生,否则这是行不通的。必须记住,其中许多人都是入门级开发人员,将其视为他们的学业扩展。对于他们来说,基本上免费的网站让他们从舒适的Web浏览器中进行200,000-300,000美元的职业生涯面试,基本上是一个奇迹。与此相比,几乎所有其他高薪行业都将获得正确的教育,证书,证书和测试结果,这将花费您数年的生命,并且可能需要数十万美元的中学后教育。我们真的很容易在计算机软件领域达成这样的协议。(只需要你掌握这些算法题即可)
  
没有人能保证在Big-N公司工作。
重要的是要理解,Big-N的工作提议或拒绝不是一个人编程能力的完美指标。
面试过程并不完美。它并不是完美的设计,因为这是一个不可能的目标。实际上,Big-N公司的申请者太多,因此其中有些人的拒绝率比常春藤大学的大学要高
在这样的规模下,目标不是招收任何合格的候选人。目标是最好地选择最佳选择,并最大程度地减少误报,即使这会导致大量的误报
 
反驳:“就我个人而言,我从未见过擅长Leetcode却在生产中产生不良代码的人。”
有证据证明:我去过的大多数地方都和一些才华横溢的人一起工作,我想不出有谁拥有LeetCode帐户。产生出色的生产代码更多的是关于领域的经验和知识,而不是知道如何改进算法

更多讨论点击标题见HN
相关参考:人工智能与脑机接口不断突破,人类还需要学习吗?人的理解胜于知识!
面试试题都是没有上下文的问题,但是真正实践的问题都是有上下文你的,这也是说明考试试题是考不出人的真正能力:
DDD和OO是有区别的:抽象名称选择很重要?主语语法遮蔽了真理