一亩三分地

 找回密码 注册账号

扫描二维码登录本站

BBS
Offer多多
Salarytics
交友
Learn
Who's Hiring?
Visa Tracker
疫情动态
指尖新闻
Instant
客户端
微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
Youtube频道
留学博客
关于我们
查看: 7984|回复: 41
收起左侧

[其他] 【干货】100道题10个Offer的刷题经验分享

  [复制链接] |只看干货 |刷题
我的人缘0

升级   37.71%


分享帖子到朋友圈
lydiatang | 显示全部楼层 |阅读模式
本楼: 👍   53% (23)
 
 
46% (20)   👎
全局: 👍   85% (122)
 
 
14% (20)    👎
坐标硅谷,已经工作3年了的程序媛一枚。最近硅谷很多公司都裁员了,很多小伙伴在找工作,需要刷题

我本科毕业的时候面了10家美国公司,全都拿到了Offer。包括Google,Facebook,Microsoft之类的大厂,airbnb,Snap,Asana之类的初创公司,也有Citadel,Bloomberg之类的金融公司。我在当时面试的时候刷的leetcode题不超过100道。我想和小伙伴们交流讨论一下我自己的一些经验和方法。拒绝题海战术,力求100道题内帮助你拿到你想要的offer。希望能对找工作的小伙伴有一些帮助。

算法面试考察什么?

工作三年,身边很多同事和朋友包括我自己都是面试官。在聊怎么刷题之前,想先聊一聊算法面试考察的是什么?面试官在面试结束后会怎么评价你的表现,怎么做反馈?根据我的面试经验和从面试官朋友那里了解的信息,有几种公司:

1. 着重考察做题正确性:看了地里很多同学理解的面试顺利一般是这样的体验。「这道题我刷过,所以轻松秒了」。这里的秒了一般指

  • 把题快速做出来
  • 经过现场测试(testing),验证了做的是对的(有些面试不要求这一点)
  • 题的解法是最优解

我遇到过很多公司,尤其是规模偏小一些的公司,和不少中国公司很看重面试者的解题能力。想要轻松应对这类面试,其实多多刷题是很有帮助的。因为刷过题更容易轻松地做出一道题,并且不怎么犯错,做到bug free。遇到这种面试style,其实夸夸把题做出来外加沟通清楚就行了。后面会讲到大家会遇到不同的bar,以及一些技巧。但是基本上遇到这种style的面试,多刷题,把题快速做出来就很稳了。

2. 着重考察思维能力:很多硅谷的大厂,比如FANG,很看重面试者的思维能力。这里的思维能力有多种:



  • 优化算法的能力(Algorithm Optimization):面试者能够不断地优化算法。比如把O(n!)的解法优化到O(n^3),再优化到O(n^2logn)。和第一种公司不同的是,面试官在这里并不期待你一定要做到最优。如果遇到两个面试者,第一个对算法做了两次优化,最后没有做到最优,第二个上来直接做出最优解。第一个面试者会有更大的优势。因为可以看出面试者勤于思考,并且可以不断优化现有解法。

    我一般听到题之后,第一步会想暴力解法是什么,把解法和面试官解释清楚,然后说出它的时间复杂度(Time Complexity)和空间复杂度(Space Complexity)。然后再看能不能一步一步地优化。尽可能地优化两次以上,每次都把算法解释清楚,并讲出复杂度。如果看到有可能的tradeoff,比如一个算法比较快,另一个比较省空间,也可以清楚地讲出来。之后再和面试官沟通哪种解法比较适合,之后再开始写代码。

    这里之所以要花时间做算法上的讨论是因为如果你不做,很多面试官之后也会问你follow up questions如何优化。除非你上来就说最优解,把她的follow up questions堵死了。那面试官肯定内心很不开心,认为你都是靠刷题的。但是她如果看到你一步一个脚印地优化到最优,就会觉得确实看到了你的思考,也不会觉得你都是靠刷题背答案才做出这题。
  • 测试能力(Testing):有不少面试,不论是白板面试还是online compile的,会要求你测试(test)你的算法。除了代码的正确性,面试官也在考察你的测试(test)能力。有经验的小伙伴一定知道testing在实际工作中有多重要。通过面试来观察test的习惯其实可以比较好地反应面试者是否有code quality的基本功。

    我一般会从两个角度来test:先着重于logic correctness,再试图抓corner cases。
    (1)Logic correctness我一般就会看for loop,while loop是不是和想的一样,variable变化对不对,语言(syntax)是否正确之类。我一般会用面试官给我的例子来test。这个例子一般会比较简单,但是仍旧能够test主要的逻辑。
    (2)之后我会再看看corner cases。比如如果input是空的,或者input特别大会有什么问题。while loop,for loop会不会在input特别小的时候出错。
  • 调试能力(Debugging):在工作中,大部分时候写代码都不是一帆风顺的。苦逼的程序员儿就得一点一点地在代码中抓bug在哪里。正是因为debug占比时间之多,debug的能力也十分重要。有些同学认为在面试中一遍写出bugless代码会很讨喜。实际上,我觉得这样面试官就会再次怀疑你是刷题选手而质疑你的真正实力了。在真正面试中,写出bug不可避免,稳住心情debug就好。

    我自己在面试的时候debug喜欢通过自己手动一步一步test一个错误的例子,来找到问题在哪里。有的时候,我比较急,一遍一遍地跑代码来看问题在哪里反而耗时更多。这个时候,静下心来,手动跑例子其实容易更快发现问题,而且面试官也可以跟着你的思维走,理解你的是在怎么debug的。
  • 表达能力(Communication):在面试中清晰地表达自己的想法也是很重要的。这点是刷题很难练习的。因为刷题的时候可以一个人静静地写代码,没有人干扰。但是面试的时候却要和面试官同步思考。

    我的方法是,每次刷题都当作面试的练习。我会通过comment来表达我的想法。有时也会自言自语地一步一步讲我的思路。事实证明,经过一段时间的练习,我习惯了一步一步讲清楚我的思路的时候,我做题的正确率变高了。不容易范一些小错误。

    给大家分享一道我自己做的Leetcode原题。我回顾了之前做的基本上每一道题都会有一段comment来模拟面试时候的交流。我会在comment里尽可能地把题的每一种解法,以及优化的过程讲清楚。这样我即使三年后重新来看这些题,还能快速想起当时是这么做的:
  • 合作能力(Collaboration):基本上所有算法面试也在考察,你是不是一个面试官愿意合作的好队友。尊重面试官其实挺重要的。我有一位朋友,特别大神,但是面试的结果总是不太理想。后来我和他一聊发现他常常会内心悄悄觉得面试官太弱。其实面试官可以感受的到你内心觉得她弱的心声,觉得你不太好合作。
  • 好奇心(Curiosity):有些公司还会比较看中你对公司所在领域是否有热情有好奇心。一般体现在最后留下的5分钟问问题时间。对于应该问面试官什么问题我想要之后再专门讲一讲,要是感兴趣的小伙伴点赞或者留言告诉我哦。

总结一下,这类面试尽可能不要一上来就给面试官最优解。于是问题来了,作为面试者,我们怎么知道面试官到底是看我的答案正确性还是在考察我的思维能力呢?我们其实很难知道。所以我建议不论是什么面试,除非很确定这个公司不考察优化能力,尽可能地一步一步地做题,从暴力解开始讲起,最后达到你能到的最优解。

面试的Bar在哪里?

Bar通俗地说就是面试是否通过的线划在哪里。我遇到的公司有几种不同的bar:

  • 代码能跑 + Test cases:要求代码可以在网上直接运行(online compile + run)。这类公司会提前写好一些test cases,让你直接网上submit,看是否能跑过所有test cases。这类公司更看重你的代码正确性。
    建议做题的时候尽可能稳一点,把每一步的想法都和面试官交流清楚,自己也可以用一些小的例子给面试官解释这段代码在做什么,比如用一个example input来跑一跑你的while loop,来解释一下什么时候每个variable都是什么值。解释的时候其实也是很好的机会帮助自己做一些简单的testing,来保证代码的正确率。
  • 代码能跑 + 自己写test:要求代码可以在网上直接运行(online compile + run),外加面试官希望你能够自己写test cases。这里面试官不仅考察你的正确性,还考察你的test能力。
  • 代码不需要跑:不要求跑代码,基本上会要求你白板测试代码正确性。这类面试一般更注重你的能力,比如优化能力和测试能力等等。
  • 最优解:有一些面试官对解法的优化程度有一定的要求。有时候,你的代码完全正确,test也没问题,但是解法不是最优。这种情况不用慌,面试官不会默默地把你拒了。她要是对代码优化有更高的要求,一般会问follow up questions。
    问的一般是,你还能怎么优化?或者你能不能做到时间复杂度O(n),空间复杂度O(1)。一般你即使不能完全达到面试官的要求,但是有优化也是很好的signal。如果你能够想出来解法,但是没有时间把代码写出来也没有关系。

哪些知识点重要?
游客,本帖隐藏的内容需要积分高于 50 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.

这个文章是原创内容一个字一个字地辛苦打出来,如果要转载请和我联系。


补充内容 (2020-6-20 16:41):
这个帖子针对两个问题:
1. 面试中把题秒了,可是面试官怀疑我刷题怎么办?
2. 如果来不及刷很多题,面试又迫在眉睫,怎么样尽可能地提高刷题效率。
之前拿到10个offer有很大一部分是运气,希望有一些总结有些帮助。

补充内容 (2020-6-23 07:04):
这两个月我拿了一些offer。现在确实觉得bar变高了,面的很多是hard题。
我自己刷了150题。拿到了FANG里面的2个offer和一些别的offer,也拿了两个拒信。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册账号

x

评分

参与人数 89大米 +268 收起 理由
tonylovedoris + 2 很有用的信息!
Ranger09 + 2 很有用的信息!
mereflora + 2 谢谢!
geniussmhd + 2 给你点个赞!
miles_17 + 1 很有用的信息!
zhaominn + 1 很有用的信息!
ForestMonk + 1 很有用的信息!
Giotto12138 + 2 给你点个赞!
crazymarvin + 1 很有用的信息!
Frances_G + 1 很有用的信息!

查看全部评分


上一篇:Bloomberg 多年Onsite 面试官经验 【求大米】
下一篇:Leetcode所有题目分类及刷题统计表(2020.06.21更新至1485题)

本帖被以下淘专辑推荐:

头像被屏蔽
我的人缘0
xiaohaofc 2020-6-19 13:46:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

我的人缘0

升级   9.75%

yylin11 2020-6-20 22:35:42 | 显示全部楼层
本楼: 👍   93% (43)
 
 
6% (3)   👎
全局: 👍   96% (1217)
 
 
3% (39)    👎
一看是3年前的成功经验,那还是算了
3年前一共才多少题,
面试难度比现在容易多少,
3年前2017年行业是什么状况,
2017年整体经济是什么状况,
这些都想过吗?
不过是一个搭上社会高速发展的快车的老人,反过来向年轻人炫耀自己当年如何如何
另外对于那本书,现在对于即使本科没毕业的,都不够用了……

补充内容 (2020-6-21 02:50):
那些给楼主大米和踩我的,你们是多久没面试过了嗯。一句话,现在2020年,recruiter发的准备技术面试模版邮件,涵盖的内容都超过原帖的内容了。

评分

参与人数 4大米 +6 收起 理由
hhwu + 2 给你点个赞!
sherryuhe + 2 给你点个赞!
tianxiaguixin + 1 很有用的信息!
Jedreke + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   18.71%

本楼: 👍   100% (13)
 
 
0% (0)   👎
全局: 👍   97% (1677)
 
 
2% (44)    👎
zzpanda 发表于 2020/06/19 15:43:19
好文收藏了!希望楼主这次跳槽结束后能再来分享一下看法有什么改变,刷了多少题,deisgn是不是也要下功夫?因为毕竟三年前...
3 年前才400 多题,现在1400. 3年前400+基本稳进狗,现在400+ 面亚麻全职都得靠运气。难度已经不是一个量级的了。

补充内容 (2020-6-19 16:33):
话又说回来,楼主已经进了FG 了,可能很长一段时间内不用刷题了。时间节点踩对本来就很重要,大家也不用🍋了。希望像楼主这样支持精刷的,也能参与到大厂面试流程当中,给国人小伙伴们出个CC150 的题放个水,也算是前人栽树了

补充内容 (2020-6-19 16:36):
精刷现在可能小厂比较有用,大厂基本每轮一道medium + hard 级别 follow up, 或者直接两道经典 hard,写过就是有思路,没写过就是 gg

评分

参与人数 2大米 +4 收起 理由
yeetatbig4 + 3 层主大实话。可惜很多人不会放水滴
12farmers + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   37.71%

 楼主| lydiatang 2020-6-19 13:58:35 | 显示全部楼层
本楼: 👍   100% (12)
 
 
0% (0)   👎
全局: 👍   85% (122)
 
 
14% (20)    👎
xiaohaofc 发表于 2020-6-19 13:46
我觉得拿LeetCode 总共才200题的经验放在今天毫无意义,说白了面试就是运气,有人遇到难题有人遇到简单题, ...

我觉得你说的挺对的。不可否认我当年的面试也有很多运气成分。我希望大家不要interpret成我觉得刷题是没有用的。因为有一些小伙伴时间不多,来不及刷很多题,希望能够通过分享一些如何精刷的经验,使刷题效率更高。

评分

参与人数 1大米 +1 收起 理由
jiachen95 + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   22.86%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   99% (124)
 
 
0% (1)    👎
好文收藏了!希望楼主这次跳槽结束后能再来分享一下看法有什么改变,刷了多少题,deisgn是不是也要下功夫?因为毕竟三年前是new grad,leetcode题也没有那多,感觉level上来要求的东西也会有些变化
回复

使用道具 举报

我的人缘0

升级   73%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (166)
 
 
2% (4)    👎
感谢楼主分享精刷心得!
回复

使用道具 举报

我的人缘0

升级   93.33%

meow_han 2020-6-20 03:43:14 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   0% (0)
 
 
0% (0)    👎
感谢楼主分享,让面对如今leetcode那么多题有点懵的我有了更明确的方向。作为明年马上要毕业的人,我正纠结暑假怎么侧重刷题,之前面了几波google和fb的intern 因为题没怎么做都跪了 现在想到刷题心理压力就有点大 楼主是怎么克服/平衡这种心理压力的呀
回复

使用道具 举报

我的人缘0

升级   71.14%

snail8844 2020-6-20 04:07:15 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (22)
 
 
0% (0)    👎
sliding window, two pointers 这些不能算是用来做保险用的了。这些也是基础的基础,是必须掌握的。

评分

参与人数 1大米 +1 收起 理由
kaerp + 1 是的 facebook常考這兩個

查看全部评分

回复

使用道具 举报

我的人缘0

升级   33.86%

wbxzhr123 2020-6-20 06:16:48 | 显示全部楼层
本楼: 👍   100% (9)
 
 
0% (0)   👎
全局: 👍   98% (270)
 
 
1% (4)    👎
个人觉得精刷在这个年头毫无意义,量是首先要保证的点,现在leet上1400+题,怎么着你也得刷到一半吧,还要涵盖各种类型。
量足了,涵盖面够大了再开始精刷,做过的重新做争取bug-free并且最优。
如果说分类然后dfs,bfs最多先刷那个。然后面试问了一道union-find你一脸懵逼,完全想不到这样子的“精刷”有什么意义。
如果赌运气干脆就做个高频300道完事了,什么分不分类根本不重要。运气好完爆任何一切,技术和智商在运气面前也就当个炮灰。
回复

使用道具 举报

我的人缘0

升级   9.43%

宋龙龙96 2020-6-20 06:39:00 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (143)
 
 
2% (4)    👎
很厉害~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

快速回复 返回顶部 返回列表