百科问答小站 logo
百科问答小站 font logo



刷完 LeetCode 是什么水平?能拿到什么水平的 offer? 第1页

  

user avatar   hei-an-zhi-zheng-guan 网友的相关建议: 
      

个人经历介绍:作为一个32岁毕业三年的老电气工程博士,忍受不了本行业的收入以及发展前景,终于在无数次辗转反侧之后,下定决心转码……

2020年5月开始正式刷题的,在此之前的工作学习经历与码农完全不相干,只是少量使用过Python做一些简单的数据处理工作,用Matlab写过一些实验,对数据结构与算法几乎零认知,连Hashmap是什么都不知道,更不用说什么堆栈队列深搜宽搜动态规划了……

刷题与面试结果:到2020年底差不多刷了500题,近半年在北美投了几十家IT公司,作为一个没有CS经历又投不了应届生岗位的转行狗没拿到几家面试,不过除了狗家外也拿到了几家Software Engineer offer,最终决定去了A家…

更新:10个月后再次面试现已跳槽另一家大厂。

下面介绍下我是如何刷题的,希望对刷题路上的你有所帮助吧…

  1. 语言选择:个人觉得选择自己最熟悉的语言即可,没有必要为了刷题专门去学一门自己不熟悉的语言。实际面试中用Python和Java刷题的人是最多的~Python优势在于比较简洁,写起来快,在面试时候时间紧迫心态紧张的情况下会节省一些时间。劣势是没有TreeMap这种数据结构,真面到这样的题会被坑(我狗家就挂在了这个上面)。注意Matlab,R等不能算IT开发的编程语言,一般面试也不允许用。

2. 基础知识:个人还是建议在正经开始大规模刷题前先把面试中最常考的知识点学明白比较重要,不然直接去刷题怕是被打击的丧失自信了…面试常见的数据结构与算法就十几项,在文章下面都有列明,也可以参考这篇文章进行查缺补漏。

3. 面试中算法与数据结构的重要性,可以根据自己的时间来安排,如果时间紧迫可以只准备“高频”的部分。

高频:宽度优先搜索(BFS),深度优先搜索(DFS),二分法(Binary Search),双指针(2 Pointer),堆、栈、队列、哈希表(Heap,Stack,Heap,HashMap/HashSet),前缀和(Prefix Sum),链表(LinkedList),二叉树(Binary Tree),二叉搜索树(Binary Search Tree),快速排序与归并排序(Quick Sort/ Merge Sort)

中频:动态规划(DP),扫描线(Sweep Line),字典树(Trie),并查集(Union Find),单调栈与单调队列(Monotone Stack/ Queue),TreeMap等

低频:Dijkstra,树状数组,线段树,最小生成树等…

4. 如何刷题:每个人的基础、学习习惯都不一样,以下是我个人的习惯。(注意: 我基本上每周都会花20-40小时刷题,而且我本身有朝九晚五的全职工作的,所有的业余休息时间全部用来刷题了,几乎放弃了一切娱乐活动,真-东亚小镇做题家。)

第一阶段:熟悉各个高频数据结构以及算法的原理、模版等,可以用来解决一些相关的Easy题目,这个大概花了1个月左右。注意:补好基础对于基础不好的人非常重要,直接去刷题会被Leetcode打击的光速退坑。

第二阶段:正式开始按照门类刷题,上面标记为“高”的各个知识点题目一共刷了200题左右,又刷了50道DP题目,按照Leetcode Frequency排序,只刷高频题,每道题如果5分钟内想不出怎么解就赶紧去看答案,看懂后要能做到不看答案自己正确实现出来才可以去做下一题…这是最耗时也是最痛苦的一个阶段,第一遍刷完250题花了大概三个月左右,第二遍花了一个月,第三遍花了半个月,总之后面越刷越快,几乎可以做到一天刷十几题…

第三阶段:针对面试的特殊准备,鉴于Leetcode上给了各个公司Tag下最近6个月的常见题目,我在面每家之前都会把该公司(如果Leetcode上有的话)出现过的最近6个月题目按照频率从高往低,至少把Top100 Most Frequent题目刷一遍,很多时候里面只有一半的题目是以前做过的。

第四阶段:由于狗家和某些Pre IPO公司出了名的算法题难,面试狗家前一个月专门又去学了一下在“中频”当中的算法与数据结构,以防遇到了不会做,然而人算不如天算,最后还是吃了Python没有TreeMap的亏挂掉了,不过总归学了知识以后用得上。

总结:如果你打算2-3个月之后开始面试,个人建议的准备过程是这样的,按照下面的高频题分类刷题总结把高频题刷熟 -> Leetcode把要面的公司tag下最近6个月内的高频题刷一遍 -> 面试前两三天高频题每个门类随机选一道题做一下保持手感。

注:第一遍刷题很痛苦怎么办?个人觉得5分钟遇到想不出来答案的题目直接看答案,尤其是刷题不多的情况下自己瞎琢磨的时间越久越浪费你宝贵的时间,刷题是个积累经验的过程,题目刷得越多基础知识越牢固才会遇到新题时不慌,但是高频题都没刷透就别老想着什么都靠自己解决了。有的人会觉得做不出来看答案是很丢脸的事,尊严神马的最不值钱了,看答案学会了比什么都重要!

5. 题目难度选择:大概30%Easy,60%Medium,10%Hard,Hard题目除了高频题别死磕,面试中遇到没见过的Hard题目大多数人都会挂掉的,不要太担心,把时间尽量都用来高频题上。如果你在面试中遇到了非高频Hard题,基本上面试官就没打算让你过,安心准备别的面试吧。

6. 面试时候感受:面第一家公司时会很紧张,看到没见过的新题时会慌乱和紧张,脑子里一直在想完蛋了准备后事吧;后面再面别家时会越来越放松,即使当时手里并没有offer,但因为题刷到位了,不管是新题旧题都有自信做出来,大部分的面试官只要近期内没跳槽打算的话是不会刷题的,基本上都是一道题目面所有人,他未必比你的算法强。

到目前为止各个公司面试时,截止到2021年2月一共被面了30题左右(更新:加上2021年10月又面了几家之后总的被面试题目数量已经接近100道),整体以Medium为主,Hard在10%左右,只有2道题出了“高频”的范围,即使遇到新的Hard题目也是高频题改编或者两三个Medium题目组合出来的题。面过的题目当中大概一半的题目是刷过的原题,另一半也大部分都是现有题目的改编或者高频知识点的重新组合题,完全没见过或者一眼看上去没思路的题目只有一两道。

具体的刷题攻略在这:

各位加油!

本文原发于:TimothyL:一个大龄博士的刷题转码之路

更新于2021.02.16:

感谢各位的支持,稍微唠叨两句关于面试的准备,高频题是需要保证每一道都会做的,不要因为有些题很恶心或者差评特别多就跳过不做,不然面试遇到时候哭的就是自己了,我就是活生生的例子,比如Integer to English Words,Skyline,Integer to Roman之类的题目,现场做真的是一言难尽…

2021.2.18更新:

鉴于不少人都在问没有CS经历如何拿的到面试,我本身也不算成功案例,拿到的面试也没几家,一家之言仅供参考吧:

首先是厂家选择,个人感受是大厂相对于小厂对转行狗更友好,基本上不太喜欢问各种技术细节与简历,非技术类型的问题基本上都是行为类问题(BQ)。小厂可能生存压力更大,更希望招进来的人能迅速上手干活,所以更喜欢匹配度高的。

其次是简历丰富,首先是你以前做过的项目要重新包装,让项目看起来更像一个码农的活,再者是如果太过于缺少像码农的项目,那就只好去自学做一个项目,网上有太多这种免费/收费的手把手教你做项目的课程了,比如基于REACT的前端项目,基于Spring/ Django/ Spark之类的XXX项目。选择性的做一两个,手把手跟着学一遍,搞明白整体逻辑,保证别人问你的时候不会一脸懵逼就好。

第三是简历投递,个人理解的靠谱程度排序,相关岗位的负责人内推 > 相关岗位内部人员内推 > 自己去linkedIn联系HR > 找不认识或者不相关岗位的人内推 > 海投。疫情期间确实岗位少了很多,这一年半载的找工作难度要比以往大很多。

2021.3.10更新:

有人问我到底要准备到什么程度才可以去面试。其实没有统一的答案,个人觉得你把高频题都刷过2-3遍就已经可以开始投简历面试了,毕竟投简历到拿到面试慢的话可能要2-3个月,快的话可能第二天就拿到面试。

刷题要刷到什么程度?高频题差不多要做到Medium题目10分钟、Hard题目15分钟写完代码,不要求一遍完全bug free,但不能有明显的错误。面试当中可能一道Medium题目面试官就给你留了20-25分钟左右来做,但这是包含了出题、澄清题目、想思路、和面试官讲明白思路、和面试官来回扯皮、写代码、跑测试样例、讲清楚时间空间复杂度的全部时间总和,这其中能留给你写代码的时间也就10分钟左右,所以熟练度非常重要!

为什么特别强调熟练度,因为面试当中可能会遇到各种不可控因素,比如面试官迟到10-15分钟,面试官自己也没想好题目怎么做才是最好的,面试官不允许你用自己熟悉的方法解题,面试官出题就花了10分钟,或者题目过长描述过于绕导致看明白问题花了很长时间,面试官上来和你闲聊花了太多时间等等,(以上问题我全都在面试中遇过)各种因素可能都会导致你做题的时间非常紧,这时候熟练度不高的话很大概率就要挂了……

2021.3.28更新:

我只在北美面试过,不要问我国内的面试怎么准备,没面过不知道……

北美的IT行业面试基本上都比较接近,基本上就三类,算法、系统设计、行为类问题(BQ),算法是重头,多数情况下有决定性影响,但不代表你会做就可以拿得到offer,表达能力、是否能把算法阐述清楚也非常重要,系统设计是有工作经验的面试者要考的,经典题比如设计一个聊天系统、设计Uber、设计推特or微博等;行为类问题就是问你一些比较刁钻的问题看你如何回答,主要看你的情商和工作态度之类的,比如问你做过最失败的项目是什么、最不喜欢的同事是什么样的、和领导有矛盾是如何处理的等等,相比之下简历反而问得很少,个人觉得对于转行狗比较友好。

2021.4.9更新:

有人问说转行想当码农的话有没有必要再读一个计算机硕士,比如Georgia Tech的OMSCS?

作为一个在OMSCS上了一门课就退学的怂货,如果有全职工作的情况下还要在职读一个CS硕士,想要毕业再快也得2年以上了,而且课时压力很大,白天上班、晚上周末上课写作业做项目考试,面试的话还要再刷题之类的,这样的话时间成本太大了!除非你可以接受两三年后才转行成功(我自己是想要半年到一年内转码成功的),否则不建议再读,尤其是对于如果已经有理工科的硕士或博士学位者。当然如果选择读下来也有个好处,就是可以以应届生的身份光明正大的去申请只针对应届生的岗位,选择多了自然上岸会容易一些,代价就是转行花的时间有点久,晚一年上岸就是亏十几万刀的收入……

2021.7.3更新:

有人问我说博士毕业又工作几年才转码什么感受?感受就是转码之后周围有很多年纪比我小好多、级别还比我高、收入更比我高不少的小朋友…说不羡慕那是假的,但是心态很重要,每天都在和别人比较来比较去、计较之前浪费了多少年、少赚了多少钱其实只会徒增烦恼,过去的事无法改变,积极一点着眼眼下和未来吧…

其实年纪大一点尤其是30岁之后会越来越现实,工作的目的就是为了赚钱养家而已…

2021.12.14更新: 作者半年后按照上面提到的刷题攻略再次复习了一遍,再去面试,成功拿到了狗 、黑车等一线大厂offer。对自己的这两篇刷题总结小文章还是比较自信的,按照这个方法刷熟练通过算法面试问题不大~

2022.2.2更新:写了一篇关于刷题前应该准备好哪些基础知识的小文章,链接已经附在上面了。


user avatar   qiongmanong 网友的相关建议: 
      

如果你在北美,如果你想进入大厂。那么恭喜你,你可以干好一件事情就能有很大把握进这些大厂了。

干啥呢?刷题

刷啥呢?LeetCode

刷完肯定行,但刷完的意思是题目你都得知道题目的来龙去脉,还能回答上来follow-ups,这样的选手,基本没有找不到工作的,偶尔会看到刷了四五遍Leetcode,但是没有上岸的小伙伴。但是,很重要的但是,最后也都上岸了。

所以题目是肯定要刷的,而且大部分都要刷完,至少,每种题型你得刷五题吧!

再转折一下吧。题目其实是刷不完的,太多了。1000多道,都快赶上要你命三千了,还记得当然GRE单词怎么背的不,就几千个单词,背得死去活来。这么多的题,刷完,刷完估计OPT都过期了。

说了这么多,怎么办?

精刷!

怎么精刷呢?

答案在这里,你们自己看吧。就不复制粘贴太多了。反正都是我写的。


这个总结对应于这门课程:

该课程是一个算法总结提高的课程,它把算法面试中可能遇到的题分成了各种模式,每类题各个击破。

如果想买订阅Subscriptions)的小伙伴,则可以用ZHIHUEDU-10(必须一模一样输入)的coupon code来获取额外九的优惠,按年standard订阅模式适用。按月和按两年的无效。
现在推出的premium模式,有按年和两年订阅的方式,也能使用ZHIHUEDU-10来享受额外九折!

下面这个系列是新出的课程:通过大公司真实常见问题来破解算法面试。

下面是用Java语言的:

还提供了Python:

C++:

以及JS版本:

他家最最出名的还是这门Grokking the System Design Interview, 但凡提到准备系统设计,这门课都上入门必推的:

以及OOD: Grokking the Object Oriented Design Interview

这门机器学习面试指南是这个系列最新的课程:

目前市面上机器学习面试相关的课程比较少,这门课程应该非常值得!


如果想买订阅Subscriptions)的小伙伴,则可以用
ZHIHUEDU-10
的coupon code来获取额外九折的优惠
按年和按月均适用

需要的小伙伴就去来一波吧!


如果你觉得有帮助的话,记得帮我点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-,真心希望大家能支持一波))。

以上。


user avatar   ling-kou-leetcode 网友的相关建议: 
      

其实摇滚精神是人的精神,不用太强调摇滚这两个字。

前两天我看到了臧鸿飞对摇滚的解释,我觉得挺好,他说摇滚是面对着生活的不服,而流行音乐是面对生活服了。我觉得这种解释挺好,我们始终在质问自己还是不是自己。摇滚不摇滚不重要,重要的是你还是不是你自己。

摇滚是小众这个话题已经不用再说了,因为摇滚在西方已经成为主流过了,摇滚是大众音乐,在中国可能是小众音乐,所以说中国文化和经济的现状造成了摇滚乐在现在社会的定位不能说明它是大众还是小众,这个真的不重要,重要的是在于每一个人在面对自己现实的妥协的自我的时候,是否会持续的去发问,这种东西不一定偏要体现在摇滚乐,而流行音乐也有,古典音乐也有,现在一些hip hop音乐、嘻哈音乐里都有大量的质疑的声音。

当然,这些都是大的流行音乐的范畴里的,但都不是以人们所理解的摇滚音乐的形式所存在的,所以没必要偏要强调摇滚两个字。

我自己写过两首歌去比较中国的摇滚乐和西方的摇滚乐,近三十年前我写过一首《像是一把刀子》,我觉得当时的中国摇滚就像一把刀子;在十年前我写过另外一首歌叫做《滚动的蛋》,实际上也是针对Bob Dylan的《Like a rolling stone》做一次呼应,我们站在中国的土地上,对西方的摇滚乐做的呼应,我觉得我们更像一颗滚动的蛋,我觉得这是对中国摇滚乐现状的一种描述。中国摇滚是一颗滚动的蛋,但它没有破碎,雨后的大地路途好像有些松软,滚动的时候受到了保护,但的确是危险的状态。我更愿意说中国摇滚乐是从下而上的,蛋破碎了之后变成了生命。

从三十年前到十年前再到现在,中国摇滚没有走向世界,我觉得走不走真的不重要,类似的比较本身是功利心态的,把摇滚乐当做了一种商品。摇滚乐存在的形式也不是为了要走向世界,或者要流向中国,它们存在是为了身心的娱乐,这种娱乐自然会带来与市场的互动,这种互动造成了传播,所以在中国有大量的人受到了影响,可以了解到西方文化,而且他们可以轻而易举的买到这些唱片,这是一种正常的文化根基带来的良性的反应。所以我们就应该去听这种良性的音乐,我觉得每个时代都要有一种形式去表达自己,摇滚乐就是西方发展到六十年代七十年代,人们需要用新的形式去表达自己的时候适时出现的,那个时候已有的音乐形式不能表达人们的想法了。像现在一样,很多的年轻人选择用他们自己的方式表达自己,我们也没办法。这个就是自然的一种规律,人们在经济发展、文化发展、全球化发展的过程中,人们就会轻而易举的找到自己最想选择的方式表达自己。

我觉得中国的摇滚乐,或者说中国自由表达性音乐受到了很多限制,所以说在某种程度上,流行音乐更是很多人追求的一种结果,它的成功方式是一种结果,包括摇滚乐也希望能够像流行音乐一样成功,但不一定像流行音乐那样去表达。

遗憾的是,这个社会的环境和传统文化环境没有鼓励批判,或者说是坚持自我、怀疑现实这种审美,在别的人完全趟出一条路之后,我们亚洲人沿着他们的脚步往前走的时候可能会受益,因为大家会说这种东西我们已经知道结果了,是可控的。但真正达到了不可控制的时候,所谓的不可控制就是真正自由状,他们一定会出面干涉或强加限制。这个时候才需要人站出来,人的自由创造需要调整,针对这种状态的时候,才能产生出接地气的作品,这个时候我认为才是所谓最自由的状态,他自己也不知道会是什么样,人的自由状态在某种程度上是不可控的状态,当然这种不可控的状态是由内心强大的信仰牵引着的,不会造成危险。这种东西只有自己能知道,很多人是不相信的,所以我们的文化环境、我们的宗教信仰完全不信任人的自由状态,一定会有人干预你,不光是家长,即使是比你年轻的人都会来说小心点小心点别出圈、别超越底线。这些东西都有可能造成自己对自己说,那好吧,回头。

就像臧鸿飞说的那样,我们服了,我们对困难做出了妥协做出让步,我们的理想稍微静音一段时间,完了之后,我们可以获取到的东西要远远大于我们的挑战。

你持续的用你的理想去对抗你对现实的认知,你会发现你对现实的认知没有那么强大,你甚至可以说你自己征服现实就是你的现实观,现实怎么可能不被征服呢?他怎么可能会养成这种习惯呢?如果现实都是不可征服的,人就永远是在倒退。

摇滚不仅仅是一个音乐的概念,而是一种态度和人生观的概念。




  

相关话题

  编程该怎么学下去(C#)? 
  以王垠的水平,他可以开发出像 nginx 和 redis 这样的软件吗? 
  我无法在学习生活上保持同样的热情该怎么办? 
  为何谷歌之类大厂程序员认为敏捷开发是瞎扯淡? 
  面对很乱的代码,你会慢慢看,慢慢改,还是重写? 
  大家在计算机学习路上,都看过哪些神一般的书? 
  怎么翻译 side effects 好? 
  为什么我写代码时总是手滑把main打成mian? 
  哪段代码最能代表程序员的暴力美学? 
  几乎零基础的电子开发人员,如何成为优秀的程序员? 

前一个讨论
如何看待美国两个月报告 503 起仇恨亚裔事件?出现这种情况的原因可能是什么?
下一个讨论
李世民为什么不等李渊死了再做皇帝?





© 2024-06-01 - tinynew.org. All Rights Reserved.
© 2024-06-01 - tinynew.org. 保留所有权利