回馈地里,分享一下自己的面试刷题经验,纯干货整理

avatar 191782
neverlandzzy
45194
88
自从去年8月底面试完了拿到理想offer之后,就经常和朋友交流面试刷题心得体会,一直说写个帖子,结果拖到了现在,最近疫情在家上班,决定写一写,回馈地里的帮助,本文基于自己真实准备情况和面试经历,个人认为干货满满。

Timeline:
大概2018年9月还是在职刷题,起初并没有很着急面试,就大概一天3道题,一个月100道题的节奏刷了4个月。 18年结束大概400题。
2019年开始准备1月-5月中旬,看了看设计,大概维持平均一天1道题的节奏,到了5月中旬大概一共刷了550题。
5月16日第一个Onsite到8月23日最后一个Onsite结束,大概刷完了800题。从刷第一道题开始,基本经历了一年。

楼主背景:
本科国内211学校CS毕业,美国这边综合排名不错但CS一般的某所谓名校硕士毕业。
毕业直接进入了湾区一家Work/Life balance较好的公司,工作六年多。开始面试的时候刷了大概550题,面试结束的时候大概800道的样子。
面试结果比较满意, 10+ offers, 包括Google, Uber, Lyft, Bytedance, Splunk.

面试的心得体会
虽然一路CS专业上过算法课,但是毕竟6年多没有面试过了,心里还是发虚,而且硕士毕业的时候面试还不需要刷题,当时清晰记着leetcode116道题,转眼6年,再一打开已经1000+。
虽然不是很愿意刷题,但在大趋势面前没有办法。 另外楼主从没有接触过ACM的培训,所以觉得个人经验应该可以被别人借鉴,所以回馈地里,毕竟地里的面经真的对我很有帮助。
此外楼主还有个歪理:既然leetcode有了这么大一个题库,算法题就应该是送分题,类似于高考的默写古诗句,当然我不是让你去背题。

刷题应该怎么刷
我想很多人可能不是很有时间能准备半年以上,根据这次面试的个人体会,我总结出了一个下面一个精简版的刷题流程:
  1. 先了解一些基础知识,比如时间空间复杂度的计算, 如果知道Amortized的更好,可以看看Cracking Code Interview那本书的相关章节
  2. 如果code写的不利落,先刷10-20道基本数据结构的简单题练手,把code写熟悉了,毕竟现在都用IDE,写起code来都是自动弹出或者在list里选择。
  3. 分类别刷题,数据结构算法大概合起来最多20个类别左右,每一个类别刷5-6题,这个按照leetcode的tag来刷就行
  4. (Option)刷一些经典题,Leetcode有个Top Liked Interview Questions。这些题你面试碰到的几率可能不大,但确实是能提供一些insight和好的思路
  5. (Option)刷facebook,Linkedin,Google的tag。朋友反应和自己体会,F和L的tag高频题面试中碰到的概率比较大;Google是题多,而且题目相对灵活,很锻炼
  6. 根据自己面试的公司,刷对应的tag以及地里的面经。Tag 3个月,6个月,1年,根据自己时间掌握

4,5两步是option是因为,我觉得如果1-3做到了,基本就可以面试了,然后面哪个公司就刷哪个公司就行,如果1-3都完成了,心里没底,还想再刷刷可以按照4和5。
我个人基本按照这个流程准备的,主要在4花了不少时间,F家跪在设计,L家遇到了恶心的面试官,题都答的没啥问题。
大概面了不到150轮,只有Twitter的一道Segment Tree的题没有写出完整code,当然并不是每轮都面算法。
所以理论上, 完成前三步,刷差不多150道就可以面试啦!!

刷题期间还应该注意什么?
注意总结!!注意总结!!注意总结!!
怎么总结?我个人比较喜欢BitTiger(虽然已经黄了,但Youtube留下了不少不错的视频)创始人冯沁远说过的两句话,就是问自己两个问题:
  1. 对于会做的或者一眼就知道做法的要思考: 我是怎么想到的?
  2. 对于不会做的,要思考答案解决了什么我之前没有解决的问题?

In Summary:
  • 一道题的思考:题目特征,是否有多种解法(tag, 别人的答案),是否能从最差解法一直分析到最优解法
  • 一类题的思考:这个类别题目的特征,是否可以分成子类,子类的题目特征(双指针相遇,快慢等等)

如果每一道题都有很好的总结,你的记忆就会加深,就不会出现‘刷久了,之前会不会忘’的担忧。而且有些题适用于几种方法,或者需要不同的数据结构算法一起来解决,会帮助你把不同的知识链接在一起。

怎么算刷的差不多了?
个人认为,对于每一个类别的题,找几道hard题看看,如果完全没有任何思路,说明可能这类题目的特征还没有掌握好,或者特征分析的不够,还需要通过多刷几道题来总结特征。
另外个人觉得,Leetcode题目绝大多数都有优美或者清晰简洁的解法,如果看到hard题大概能分析出一个解法的大致框架,我觉得基本就差不多了。

其他刷题的tips
  • Like/Dislike <= 1 的不要刷,这类题被很多人不喜欢是有原因的,要不就是解法复杂或者奇特,无法在面试中完整写出来或者想出来,要不就是corner case太多。 不建议在上面浪费时间,不如直接看答案。面试大多时候是对你分析能力和思维能力(当然也有交流和表达能力)的考察,这类题完全体现不出来。当然也不乏答案有简介明了的code(记得Valid Number有一个),所以不妨直接看答案了解一下。如果面试中碰到了, 基本就是传达出两个信息:1.他们不想招你 2. 你也不想去
  • 会的题,一定要看下提交后的distribution chart. 如果你的解法不是最优,学习一下最优的解法。如果你的解法是最优,不妨学习一下别人的code,提高自己code的模块化和可读性。如果有极个别甚至好于最优解的解法,也看看code, 学习一下奇技淫巧。
  • 看了完全没思路的题,不要纠结,想5分钟看看hint或者tag,再想5分钟还是完全没思路,不妨看看别人答案,按照答案思路自己写一下,然后做好总结。

公司准备
  • 从我和朋友的面试经验来说,Facebook和Linkedin高频题目概率高.
  • Google, Uber, Amazon, Microsoft, Oracle题目最随机,题目难度递减.
  • 有些公司题库小主要看面经,比如Airbnb, Lyft,Databricks,Coursera等
  • Amazon,Netflix很重视BQ
  • Amazon,Salesforce OA地里都有
  • eBay, Paypal,Yahoo爱问Java基础知识
  • 准备起来基本就是Leetcode高频+地里面经以及对症下药

准备Google
坊间都认为G家题最难,变化多端,出现在Leetcode上的题还会被Ban掉,而且面试的随机性很大,准备起来的效率应该是最低的。个人认为,有两种策略可以采取:
  • 全力准备其他家,最后去试一下,成就成,不成就算了,随缘。感觉适合在职跳槽,因为面试机会多,Google虽好,但不差这一家。ng可能面试机会相对少一点,不愿错过每一个机会,那可以参考或者部分参考下面的策略
  • 充分准备,楼主就是这种情况,所以看了leetcode Google 6个月tag,leetcode所有Google的hard题目, 地里人总结的当时过去6个月的面经,各种图算法,最小生成树,Dijkstra, Ford, Warshall, MaxFlowMinCut, Segment Tree,Binary Index Tree,BST,AVL,Hungarian,KM, Morris Traversal,树的同构,树的重心,多边形等几何图形相关, Manacher, KMP. 真的没有夸张,虽然有些算法,只是明白算法的思路,并不能完全写对。

简历
简历修改
英语差的,不知道怎么写的,就多借几份朋友的简历看看,互相学习一下,我这次面试前借了大概20封。
技术厉害的强调技术,项目好的强调你在项目中的作用,leadership,以及项目impact。
转专业的,建议去掉无人能懂的专业term,把项目介绍的generic一些,让没有背景的人能看懂。
个人觉得,简历无非是看你过去做了什么项目,项目的impact如何,你在当中起到了什么角色,用了什么技术做的,项目结果如何。 所以简历的修改其实也是伴随着Behaviour Question的准备。
我一般给朋友改简历,是愿意坐下来,以一个外人或者面试官的角度,让他介绍做过的项目,通过提一些BQ,看看他对做过的项目的熟悉程度,并在熟悉他做的项目过程中,看看能否发现他遗漏的内容和亮点。

简历投递
能refer先refer,利用linkedin,寻找同学校友,发动一切可以帮你refer的资源。
Linkedin上可以设置成“Active Looking”,如果有recruiter 联系,即使不喜欢的公司,也可以根据自己的时间安排,考虑面试一下,积累经验。
你不确定你的简历会不会被刷下来,一定要多投!!楼主投了40家左右,refer了30来家,只有几家没有headcount的没给面试。
由于面了很多,后期的自我介绍,项目介绍,明显好于前期,唯手熟尔。

投递顺序和时间
一般公司处理起来都有时间,即使refer的,要留出来大概2-3周等待回复时间,L和G尤其慢。
所以要尽早投,如果早联系你了,但你没准备好,你可以把面试时间稍微往后拖一点,没有任何问题,不要心理上有任何担忧。
这也比真正想快的时候,结果迟迟不回复好。因为之后有offer了,各方面就都会加速了。
如果没有很多时间的话,建议找几家练练手,然后rank一下自己想去的公司,从最想去的开始面。因为一旦你拿到了offer,公司都会催你快速接。
楼主前三个onsite全拿到了offer,但那时候FLAGULA都还没面,不得不忍痛拒绝了,但当时心里确实没底。
所以练手过后,从最想面的开始面,接了就接了,反正是我最想去的,就不会很纠结。
另外就是可以先把电面都面了,最后把onsite安排在相隔不久的一段时间,这样如果多个offer可以互相compete。

Offer
关于谈Offer
谈之前要有心理预期,可以去levels.fyi,blind以及地里上查,做到心里有底,这几个网站的数据还比较准,然后尽量让hr先出价,根据价格看看可不可以多要一点,就如实说,比预期低了,期待多少多少。
永远不要说你现在挣多少!NEVER!NEVER!NEVER!
当然如果特别想去的公司,你的心里就有了变化,可能不敢往多了要,也是能理解的。
楼主还经历过和背景一样的朋友拿到同一家的offer,职位level一样,但pkg差出很多,结果对hr说,不给达到朋友的pkg就不要谈了。。然后,就真的没有然后了,当时太没经验 T T。
地里有相关帖子讲的很好,可以去看看,就不多说了。

关于Compete Offer
其实offer的数量意义不大,only the top 2-3 offers matter. 最终compete的只能是level和pkg差不多的,不同Level的offer的pkg差距不小。
楼主试图用level高的offer去compete level低的offer,基本答复就两种,要不就是match不了,要不就是修改offer结构,比如第一年多给signon,或者RSU的invest schedule改变一下,第一年多给点。 。
Compete同level的offer,楼主基本也是用高的A公司让低一点的B公司match,可以把A公司的说的高一点,如果B公司match了,再反过来用同样方法让A公司match,最后磨磨想去的公司hr,多要点signon就去了。
当然如果有公司让出示别的公司offer,可以说是口头offer,不签不给正式的来拒绝。其实现在公司绝大多数是先谈妥了,才发正式offer。我的case,只有Google的offer是必须要见到一些证明才肯谈。

关于拖Offer
我用过两个tips,两个可以combine使用
  • 如实告知还在等另一个公司,两个公司对自己都很重要,所以想等结果出来慎重考虑,当然可能要给一个deadline。多说一句,如果你有了觉得能去的offer了,是可以立刻联系剩下的公司,让expedite the process。
  • 跟公司说我特别想去你们公司,但这是个很重要的决定,我想对你们了解更多一点,可不可以跟team member,老板,大老板再约个电话聊一下,老板们都很忙,往往schedule好了就10天半个月之后了。这是有个公司想让我接offer用的办法,想想反过来,是可以用于拖offer的。

BQ 应该怎么准备
可以用Amazon的Principles来准备,每条按照STAR的方式准备两个故事,地里也有人总结。基本Amazon的BQ准备完了,其余公司就不用准备了。
但其实根据楼主经验,如果不是专门去面Amazon,着重准备几个主要问题也是可以的。
比如工作中的challenge,有没有在项目中做过tech decision,如何处理和同事老板不同的意见,有没有deadline很近了,东西完不成了等等。
大致中心思想是,同事和老板是没有绝对的错的,即使错了冲突了,可能是交流沟通问题,也可能是看问题的角度问题,亦或是信息掌握不全面等问题,都是可以友善交流一起解决的。

OOD要怎么准备
一般new grad面OOD多,虽然不是ng,但我也准备了,具体就是看了Cracking Code Interview的OOD章节,以及Google搜索了一下经典问题,比如停车场电梯Locker等。
楼主印象中,好像这次面试没有被问过OOD,只是看面经有的公司面过,就简单准备了一下

设计要怎么准备
设计,作为上班没有用到分布式的人来说,准备起来确实有点费劲,主要看了educative.io的Grokking System Design课。
另外我学习了UIUC的distributed system课程,后来发现是Coursera上面的Cloud Computing I&II。课程相对理论很多,我觉得是有帮助的,但对面试来讲不如前两个直接。
个人感觉system design和architecture的问题,虽然需要很多经验,但也和算法题相似,是有套路可以准备的。
比如设计里,也是有各个模块的,了解好各个模块(educative的课里有讲)以及基本知识,了解好分布式系统的原理,再根据educative的切入问题的模版,把相关模块拼凑在一起,然后讨论tradeoff就可以了。
我绝大多数设计面试,都没有使用各种类似于Cassandra,Memcached,Redis等term,都是直接讲的原理。

此外,各个公司设计面试也有题库,地里也有人总结,多留意地里的面经。 而且公司大多数多少面的是跟业务相关的,或者非常generic的那几道题。
上面两个复习材料仔细学学是很有帮助的,然后就是不断的通过各种渠道学习补充相关知识。个人感觉,设计的学习对平常的工作也是有帮助的,上班之余,也可以学习自己感兴趣的部分。

此外推荐几个其他资源,虽然我并没有看过
Github repo: checkcheckzz, system-design-primer.
YouTube: 老毛子视频以及各种system design的视频.
各大公司的Eng Blog或者Medium
Book: Design Data-intensive Application

Database要怎么准备
这部分没有特意准备,只是了解一点基本的概念,index,sharding之类的。
Query只是了解一些基本的。只被问到过1-2次要写query,基本会先说明我司不用mysql所以syntax可能不一致,然后写个大致的框架:)
个人感觉可能DS/DA考query比较多,一般人做做leetcode题可能就可以了

Java要怎么准备
地里有个面试yahoo人写的帖子,上面总结了常见的Java基础知识问题,除了经典的基础知识外(abstract vs. interface等),还有几个重点:
  • HashMap/HashSet的实现
  • Hashcode和equals
  • Java 8/9/10的最新特征和变化

多线程要怎么准备
了解相关知识,我看了一个叫Jenkov的人写的tutorial。尽量自己动手写写code,了解真正运行时的状况,可以加深理解。
当然根据面试状况,我认为准备好以下几点(基本都是我面试中碰到的),绝大多数面试问题不大:
  • 经典问题, 比如Synchronized HashMap vs. ConcurrentHashMap,可以Google
  • Singleton的thread-safe版本
  • 多线程打印输出某个pattern: t1 print odd, t2 print even; output:123456789
  • 实现producer / consumer
  • 实现DelayQueue
  • 实现Task Scheduler

关于Mockup
非常重要!!非常重要!!非常重要!!
  • BQ mockup: 可以简单进行几次,毕竟准备好BQ,背熟就行。

  • 算法mockup: 可以测试你的讲题能力,和面试官现场解题的过程,同时也是展示你交流沟通和表达能力的过程。有的人可能会做题,但不会讲,所以一定要进行mockup. 我个人的讲题过程是,会快速讲一遍最naive的解法,然后给出时间空间复杂度,然后根据复杂度,题目特征进行优化直到最优。这种方法避免了“这题我做过,怎么假装没做过”的表演,也可以让面试官清晰的看出你分析的过程。而且如果题目一上来没思路,可以从最简单的方法开始来分析破题。Google一道面试题从O(N^2)到O(N)到Amortized O(1)到O(1), 面试官很满意。唯一的问题是,有的时候可能时间不够,所以前面最naive的解法要一下带过,或者特别naive的,直接忽略也行。

  • 设计mockup: 这个非常重要,面设计,我和我的朋友会常有一种感觉,面着面着本来应该自己drive的设计,往往会被面试官通过问各种问题而带到沟里去,最后面试官不明白你讲的是什么,你也郁闷的在想,这sb这问的什么问题。我觉得产生这个问题的原因是,你没有把设计的每一块都想清楚,如果你有想清楚,你可以快速的回答了问题,然后再回到主线继续drive。没想清楚,导致你会不断的解决一个接一个的问题,最终偏离主线。所以通过mockup,让朋友多提问,不仅锻炼自己的表达能力,drive conversation的能力,还能让自己了解别人的思路,找到之前没有想清楚的地方。 当然,面试官就只会背答案另论。

关于线下刷题小组,刷题partner
强烈建议可以参加一些线下刷题小组,找到一些小伙伴一起准备,好处有:资源信息分享,新鲜面经,可以帮忙互相refer,知道哪里招人了,互相监督刷题,不会的有人解答,可以互相mockup。
楼主就曾和朋友面试同一职位(当然是等朋友被拒了才去面试),但面试题基本一样,秒得offer。同样楼主的几个朋友也在同时面试,大家一共收集了40个offer,基本各厂的pkg一目了然。
当然线下小组,有的时候会照顾大多数人的利益,所以有的时候对个人而言效率并不是最优,不如找partner两个人一起刷题讲题,这个case by case

关于面试Log
有必要记录一下,比如自己电面和onsite被问到的题目。面试后第一时间自我的分析,以及根据面试结果的分析。不断的分析总结,不断的查漏补缺,是很有帮助的。
我记录了从面试开始到面试结束的所有记录,包括什么时间投的简历,找谁refer(为了感谢朋友),什么时间电面和onsite,以及电面和onsite被问到了什么题目。
很多知识,比如Java基础知识,多线程以及BQ都是在不断的面试练习中不断补全,不断得到提高。

关于收费课程
超级感谢各种朋友免费分享了一些收费课程。
个人无法对各种收费课程进行比较,因为看过的都相对不是最完整的slides和视频。感觉上,收费课程可以更好的对某些知识点进行提炼和总结,也有老师和TA对学员进行帮助。
个人了解算法类的课程,基本是提炼出面试中的主要类别进行讲解,总结题目特征,给出一些解题模版。上过课后,还是需要自己不断的刷题进行练习。
设计类的课程,基本是讲解一些设计的模块和基本知识,给出一套拆解题目的模版流程,然后对一些经典设计题进行讲解,给出一些设计的相关资源。上过课后,还是要不断的练习熟悉拆题流程,对其余设计题目进行练习,以及查阅相关资料获取更多detail信息。
各取所需,对于想快速了解面试内容补充相关知识,上个收费课程还是很有好处的。土豪可以选择那种几万美刀包offer的。

关于面试时间安排
面试是很累的, 基本上一个onsite,一天下来就会感觉精疲力尽。第一个被拒的offer就是前一天onsite了另一家,结果晚上累的不行,就没有好好准备第二天的面试。个人觉得一周最多面两天,比如周一和周五,可以有间隔时间充分准备。
至于如何onsite了很多家,主要是期间请过一段长假,二是公司work life balance不错,偷着利用wfh的时间,三就是家里马桶堵了,围墙塌了,车库坏了,感冒发烧了等各种理由请一天的假。
在职员工建议,利用wfh或者每天早上时间进行电话面试,然后把onsite约到一起,请个小长假集中面试。

总结
个人感觉,面试中虽然不确定因素很多,但有很多确定的因素在里面,是可以通过个人努力,通过有计划的准备来达到预期的效果的。
你无法确定简历会不会被刷掉,但如果给了你面试机会,你离onsite的距离不过就是1-2道算法题,有了onsite,那至少有50%的成功率。
有leetcode这么大的题库,有地里这么多面经,你不过是需要收集筛选相关资料,去努力不断的练习而已。
在此把自己的准备经验分享给大家,希望大家可以在准备的面试的路上少走弯路,早日拿到理想的offer。
同样欢迎大家留言提问,或者觉得哪块想了解detail,哪些东西没有cover,我会逐一回复,并随后update帖子。
如果大家觉得写的有帮助,欢迎给点大米~~

附上105家公司list:
Affirm Adobe Airbnb Alibaba+Ant Amazon Asana AppDynamics Apple
Box ByteDance
Cloudera Clover Cruise Cohesity Coinbase Coupons Cousera Credit-Karma Chime
Didi Discord Doordash DataBricks GoDaddy Datavisor Dropbox
EA Evernote Expedia eBay
Facebook Forward-Networks
Groupon Gusto Google Grab GuideWire
Hired Horton-Works Houzz Hulu hutu
Instacart Indeed Intuit
Jawbone JD
Kiva
LinkedIn Lime Lyft LimeBike
MasterCard Microsoft
Netflix NVidia
OpenTable Opendoor
Paypal Palantir Pinterest Palo-Alto-Networks Pivotal pony.ai
Quora
Rocket&Fuel Rakuten Robinhood Roku Rubrik
SAP Shift Slack Snowflake Salesforce Spotify ServiceNow StitchFix Splunk Stubhub Square Stripe
Thumbtack Tinder Twitch Turn Twitter Twillio
Uber Upwork
Visa VmWare
Waymo Walmart WePay Walmart-Lab Wing Wish Workday
Yahoo Yelp
Zulily Zenefit Zoom ZScaler

补充内容 (2020-3-30 11:10):
24楼更新了关于Level的内容。
此外18楼的回复(已置顶)相当好, 希望大家可以读读, 尤其面Senior的.

补充内容 (2020-4-4 11:20):
补充关于Java准备
1point3acres.com,感谢35楼的朋友帮忙找出来。 想更好的学习,请读Effective Java,读完Java基础知识的面试平蹚
  • 1044
置顶回复
收起
avatar 191782
neverlandzzy楼主
关于Level:
一般来讲,硕士入职L3, 干几年L4,再干几年L5(Senior),下面内容的level以此为基础。 Level的横向对比参见levels.fyi
大概硕士干2年左右,有的公司就可以申请L4. L5大概需要5-6年经验,快点的4年也有,不同公司要求不一样。
你工作的年头,决定你的面试target level,具体当天onsite的面试表现决定最终level。
楼主和部分朋友都是第一份工作5-6年背景,基本所有公司是都可以面L5的,面试结果显示,大都会被降级为L4.
相对好拿L5的公司大致是Facebook, Uber,Lyft,Airbnb,Switch,Square。
Linkedin(实际是Staff), Amazon(实际是L6)和Google的L5是很难拿的,尤其是5-6-年没换过工作的。楼主这三个公司分别只认识1(LA)-2(G)个人拿了L5,
两个在原独角兽公司已经是L5的面G拿了L5. L家的Staff的是7年FLAG中另外三家中的一家的工作背景。A家的L6是原公司Senior有10年工作背景.
Level基本决定包裹,一句话简述: L4封顶300K,L5 350K起,涵盖率>95%. 计算方法base+bonus+RSU per year + signon/4 (有人说signon应该只算在第一年,怎么计算其实无所谓,楼主按4年平摊的计算)

另外,18楼starscatcher的回复(已置顶)说的真的非常好!建议大家读读,尤其面Senior的人.
Senior确实coding要求不是那么高,设计才是更重要的,楼主有的公司没有拿到Senior确实是设计或者BQ以及DeepDive答的不够好.
而且楼主也是十分同意他的看法800道确实太多了,如果面Senior,主要的100-200道就足够了,而且也不需要一遍bug free.
L3L4对算法要求可能更高一点,多刷点也无妨,但真的没必要到800道,case by case, 自己掌握啦~

私下聊天,发现此人居然是生活里的朋友(楼主还射过ta),真是世界太小了!!
另外看到ta一个帖子,关于准备设计,贴上来,希望对大家有帮助:
instant.1point3acres.cn

补充内容 (2020-3-30 13:59):
有个typo,不是Switch,是Twitch
大米 5
3
liaozi+2很有用的信息!
上帝带我飞+1很有用的信息!
starscatcher+2说的太对了!
avatar 592831
starscatcher
楼主的经验很宝贵,感谢楼主。

但是,看到楼主付出了一年时间刷了800道题,我认为楼主为了刷题浪费了太多的精力。相信一些看帖的同学们也会觉得压力山大,觉得必须要付出同样的努力刷题才能换工作。

我个人认为,对于已经有几年工作经验的同学们来说,换工作不需要花那么大精力在刷题上。有针对性地刷100-200道类型题足以。刷800道题,比刷150道题,其实对Coding水平提升很有限,但耗费太多时间和精力。

我自己也是面试官,对于Senior+ candidate来说,Coding能力真的没有那么重要,各个面试者之间的差距也没那么大。真正拉开差距的,是系统设计和阐述自己经历中的闪光点。如果后者表现不好,Coding表现再好也无法弥补。相反如果后者表现很好,Coding中的一些瑕疵和非最优解是完全可以被原谅的。

我个人的经验:我今年初换工作,只是有针对性地刷了大概80道题。从开始准备面试到签offer大概用了3个月,面了5家拿到了4个满意的offer。我把大量的准备时间用在了系统设计,深挖自己现公司和原公司的技术栈和各种技术方案的实现。我觉得对于换工作的同学们来说,这些非coding技能要比coding重要。我的面试体验也验证了这一点。我有几道coding没有写出最优解,但依然拿到offer。
(我自己背景:6年工作经验,3年前换过一次工作,今年再换了一次工作)

我并没有否认楼主的经验,我很感谢楼主的分享。只是地里的刷题氛围太浓重了,我希望为大家指出另一种思路。
大米 64
5
Falldawn+2给你点个赞!
Sabrinacs松鼠+2给你点个赞!
hwlhwlxyz+2很有用的信息!
fqcotta+1给你点个赞!
white1997+1赞一个
88条回复