你的问题一开始方向就错了
不是什么层级的职位不用刷leetcode,而是什么等级的公司要刷到什么程度
很多人一提到刷题就很反感
就是因为有一堆公司、面试官根本不知道自己考刷题在考三小(看面试经验分享就知道)
看人家硅谷的top tier在考就跟着考,以为这样就可以收到高素质的工程师
然后面试官就随便去leetcode找几个题,把答案背一背
面试的时候就看你能不能默写出他背过的答案
什么think out loud阿、follow up阿、各种解法trade off都不重要
反正他没背过的他也看不懂
所以刷题给很多人的印象 = 看谁刷(背)的题多
面试的时候刷过我就默写给你看,没刷过就算我衰下次再来
会质疑这种面试的意义在哪里非常合理
Top tier的话,通常刚毕业的会加面OOD,有工作经验的会加面system design
不是只有考刷题而已,但是过程跟想要考察的重点是一样的
就是看你在工作中会怎样去处理一个困难的任务,并能随时跟团队成员(面试官)交流
Onsite的时候,一开始面试官会丢一个叙述相对模糊的题目
需要你自己去询问清楚题目的需求和边界(需求分析)
然后跟面试官说明想法,得出一个双方都认同的可行解(沟通技巧、知识深度和广度)
接着才是开始实作(Coding能力)
实作完dry run一下解法有没有bug或没考虑到的case(Testing)
最后分析performance,到这边我们已经有一个work solution了
如果时间还够的话,面试官永远都可以给你follow up(Scaling)
像是题目条件从一维变二维、求可行性变成求具体方案,input从静态变成streaming
解法会不会有不同?为什么?重点是思路清晰、讲得清楚自己在干嘛
像前几篇好像有在讨论要不要recursion,这哪有什么标准解
Recursion写起来简单明了,但是怕stack overflow嘛
那你想写recursion的解就先问面试官input的大小是多少不会爆就写阿
这样面试官也就知道你是评估过而不是只会写recursion嘛
像tree本身就是recursion定义出来的,当然直觉用recursion解阿
反之如果你遇到linked list,问都不问一下input大小就直接recursion,摆明一脸菜样
不过这是top tier的情况嘛...里面一堆大神面试官搞算法竞赛出身的
你在面试过程怎么卡的、卡住的时候思路还能不能保持清晰,水准到哪一看就知道了
还有办法一直想新题出来考,leetcode题数都爆炸了
只会刷(背)题的,就算30秒内默写出来最佳解,讲不清楚或是follow up就挂也没用
那一般公司面试官根本没这能力的,面试就真的是背题扮家家酒
通常都是考leetcode上一模一样的,也不敢出太难
出太难去面试的写不出来,写得出来的大概也不会想去
结论:
面top tier的话,刷Medium为主,Hard常出的要会
每一题都要很明确的知道自己在干嘛,相关的follow up问题可能有哪些
一个题目你做不出来,一定有其它的面试者做的出来,GG
面扮家家酒的话,Easy刷一刷就好了,Medium做不出来你可能还是赢90%的对手
剩下就还是看你实际的工作经验囉