中级农民
- 积分
- 111
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-12-6
- 最后登录
- 1970-1-1
|
作为两次拿到FLAG offer的我来抛砖引玉。
首先我认为刷题是一种很好的复习算法的方法,不管有没有工作经验的candidate都应该在面试前适当刷题重温一些基本算法。刷题的目的不是见原题,所以也就不存在所谓的“作弊”的感觉了,像谷歌这样的公司甚至会经常在内部题库ban掉有面经的题目以减少出原题的可能性。
感觉很多同学对刷题有种误区,觉得一定要面试中见过,没见过也一定要秒,不秒也要最优解,但其实没有任何一家公司(至少我知道的任何一家公司)的面试要求是面试者给出最优解。相反,大部分公司强调的是分析问题、解决问题和沟通的能力。所以这也是为什么之前地里有同学说三刷leetcode依然找不到工作。反倒是我见过的很多来面试的美国同学,非常热情的侃侃而谈,最后可能只给出了暴力解,大概提了一嘴优化方法,这就比我们一些拿到问题就开始憋大招的同学面试评价要好得多。
作为应届生来讲,你刚刚毕业,没有什么工业级的项目经验,对于算法熟悉是天经地义的,毕竟这是CS的基础课,如果这些算法题你不能够用符合语法的语言和有效的算法解决的话,这对于你的CS基础就是一个大大的问号。所以从这个层面上说,你没有选择,必须做好算法题。刷题巩固算法基础的“捷径”。
公司只有对fresh grad或者junior swe面试的时候才会全算法,有两三年工作经验之后,其实面试的重点已经不在算法了,因为算法题所涉及的算法只是工程师工作中的一小部分,swe的绝大部分工作其实是沟通和项目管理,这才是公司真正希望看到的candidate的素质。fresh grad也应该多展示这种素质,只不过fresh grad经验少,公司的期待也低,所以可能展示的机会不多。多数公司对experienced hire会面domain knowledge和系统设计,加上两三道基本算法题以评估CS基础素质。对于experienced hire来讲,bq其实是很重要的一环,很能看出candidate是不是真的经历过工作上的一些场景以及应对场景的策略,从而折射出candidate的工作经验。如果这个时候依然全算法面试,那要不然是你没有在面试前展现出在某一领域的经验,或者公司认为你的经验跟应届生差不多,按照L3的标准招聘。这时候你就要思考为什么是这个样子了。所以你不会看到一个L5(甚至L4)的engineer靠单纯刷题刷到L5的。但凡是一次不好,刷几次题就进去的,都是Junior swe。公司对Junior的期待本来也就是很低。
当然,L5的面试可能还是有算法。但是对于L5级别算法的考察更多的是在问题的分析和快速解决上面。工程师的工作第一是solve,第二才是optimize,所以即便在面对算法问题的时候,面试官的期待也是能不能快速的分析、提出可行方案。如果这个时候一味追求最优解可能就会误入歧途。
你从来不会在面试中被问到ICPC的题目,因为面试中对candidate的期待是通过一些算法题展示CS基础素质,所以面试题都是能够现场依靠CS基础知识推出结果的。如果真的完全没有思路的话,大概率是基础不好,如上面所说,刷题是复习算法基础的好方法之一。
一般面试题的设计会包括一开始的warm up,正题和follow up,以及hint。面试官会很有艺术的提示,帮你解决问题。就算是KMP这种算法,事实上也是可以在面试当中现场通过与面试官的交流沟通推导出来的。当你有了算法思路,如果不能写出代码的话,那对你的能力就是又一个大大的问号了。
这是我的一点想法,想到哪写到哪,看起来可能有点乱,但是确实是我自己两次准备面试和在两家公司做面试官的一些心得。希望能够帮助到你。 |
|