这个大家意见挺统一的,我仅从不同角度来说下为什么不能。
Google 算法面试的一大特点就是喜欢出新题或者变种题,你可以去翻翻面经,基本上很少会有原题出现。所以 LC 刷得再熟练,没有真正理解的话,可能换个马甲就不会做了。
另外算法面试的时候,如果你很快秒掉一题,面试官可能会再出一道题或者各种 follow up 。无脑刷题背答案是没用的。
像 Google 这样的大厂,面试评价体系已经很标准了。这里我们只讲算法面试,实际上还有系统设计和行为问题面试。
来看一道题,结合具体例子来感受下吧
最长回文子串 Longest Palindromic Substring
对于这道题,面试评价从高到低如下
Strong Hire
使用 O(n) 或者 O(nlogn) 的算法实现出来 (Manacher’s Algorithm or Suffix Array),并且代码优秀,无 Bug 或者有很小的 bug,但是能自己发现并解决,无需太多提示
Hire
能够分别使用枚举法和动态规划实现时间复杂度 O(n^2) 的算法。并且代码质量合格,无 Bug,无重复代码,无需面试官给提示。
Weak Hire
只使用了其中一种 O(n^2) 的算法实现出来,代码质量还不错,可以有一些小 Bug,面试官可以给一些小提示。
No Hire
只能想出一种 O(n^2) 的算法,但是 Bug 太多,或者需要很多提示。
Strong No Hire
连一种 O(n^2) 的算法都想不到
4-5 轮面试下来
有 >= 1 个 Strong No Hire => No offer 有 >= 2 个 No hire => No offer 有 1 个 No Hire + 1 个 Weak Hire => No Offer 有 1 个 No Hire,其他都是 Hire => Offer or 加面(取决于公司招人多不多,门槛高不高) 有 1 个 Weak Hire => Offer or 加面
一种极端情况是: 一个 Strong Hire + 一个 Strong No Hire => 开个会一起讨论一下,通常结果是加面或者 No Offer 。
总结一下,就是面试不一定会要求你用最优复杂度的算法来解决问题。而只刷 LC 的话,会容易让你产生一定要用最优解来做题的误区。
还有代码不是写出来就可以过的,代码质量同样很重要。
好的代码质量包括:Bug free,良好的 Coding Style (包括变量名命名规范有意义,合理的使用空格,善用空行等),容易让人读懂的逻辑,没有冗余代码,有边界检测和异常处理。
这个得看公司,很不巧,G 家实习转正很不容易。至少在北美是如此,国内的话竞争应该会更大,不要说转正了,实习就很难拿。
说下北美这边 Google 实习要怎样才能转正。
谷歌实习转正需要 4 个 feedback,一次实习可以从 host 和 co-host 那里各收集 1 个 feedback 。
剩下 2 个有两种方法获得:再实习一次,或者通过两轮面试。
所以如果要拿两次谷歌实习,至少要提前一年就做准备。并且第一次实习的表现决定了会不会给第二年的实习 offer 。一般大部分人时间只够一次实习,再加两轮面试才有机会转正。
关于算法面试的方方面面,我在《九章算法班》里面讲得很多了,除了怎样正确高效地刷题,和面试官如何沟通,如何提升代码质量,大厂的面试风格等等都有所涉及。最新一期正在招生中,有 3 节免费体验课,可以领取九章算法精选 100 道算法面试题哦。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.