高级农民
积分 1241
大米 颗
鳄梨 个
水井 尺
蓝莓 颗
萝卜 根
小米 粒
学分 个
注册时间 2020-4-21
最后登录 1970-1-1
2020(10-12月) -CS 本科 +3-5年 | 内推| 码农类General 全职 @
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
每个公司,每个面试官都有不同的标准和preference。我想就自己的一些面试经验(100+算法面试),分享一下我的想法,希望可以帮助到在找工作的小伙伴们!
在面试中我遇到过各种各样的candidate,也不乏国人candidate,其中我发现有一些国人常有的问题:
1. 不自信
很多国人面试者(尤其new grad)非常不自信,在面试的过程中仿佛面试官是神,说话小心翼翼,说出来的话听起来也很犹豫。当面试官稍微质疑一下ta的code或者solution,ta就会觉得自己是不是错了,推翻自己的想法。不自信可能不是red flag,但是我还是和自信的人交流起来更舒服一些。
我知道现在找工作环境不是很好,有一个面试大家也挺珍惜的也害怕这个机会就这样流失了。但是你也要相信自己,你的简历在茫茫大海中脱颖而出你肯定还是有两把刷子的。就算你真的觉得自己不是很优秀,简历也有水分,也尽量在面试中表现得自信一些,比如说话大声一些,用更肯定的语气,把面试不要当作一个考核的环境,而是和面试官一起来解决问题的环境,面试官给你提供的是supporting role。做不出来也不要慌张,可以先think loudly说说自己怎么想的卡在哪了为啥解决不出来,然后大胆地要hint。
我自己的在面试别的公司的一个经历也是这样,题目非常的难(这家公司出名的难),刷到面经的时候也没有人有solution,然后我也觉得这么难的题,面试碰到就算我倒霉好了。结果真的碰到了。我非常struggle,首先内心就崩溃了,我先自己想了一会儿真的没思路,然后就要hint,给的hint也不懂,然后我们就一直和面试官讨,最后大概过了2/3的时间才讨论出来了怎么做,最后一点时间赶紧写代码,最后也没写完。但是我觉得整个下来面试官应该是看到了我思考问题的能力,和人合作沟通的能力,所以也给到offer了。. From 1point 3acres bbs
2. 着急写代码,不沟通
很多面试者都想做完两道题,然后非常害怕最后代码没有写完,然后省略了必要的沟通时间。虽然代码是很重要,但是有效地沟通也很重要。如果一开始没有解释清楚自己的solution,面试官可能也没有办法及时地给你提供一些hint让你不要误入歧途。如果走错了方向其实更加浪费时间。我并不会硬性要求两道题写完,我觉得能很完整地做完一道题,体现了各个方面的能力,就足够了。一般来说如果最后还剩十多分钟的话我还是会问第二题,但是不会expect candidate会写出来,能给出solution就可以了。
而且面试官也会衡量面试当时的情况,比如自己迟到了导致面试时间变短,比如candidate用的是很复杂的语言像c++,第一题是不是很难其实大部分candidate都做不出来,各种情况面试官都会考虑的,没有说非要把两道题写的很完整才行(当然我觉得一题完整还是必要的)。
3. 刷题痕迹很重 . check 1point3acres for more.
其实刷题很正常,大家都会刷题来准备面试。但是有的人刷题痕迹太重了,会让我给ta的面试表现扣分。一般来说刷题痕迹重的表现有这么几个方面
main question的solution提出得非常快准狠,但是followup question怎么都想不出来,甚至给了明显的hint也没有用。大家刷题的时候一定要注意融会贯通,看面经的时候一定要把followup question也看了,自己多思考不要完全依赖别人的答案。 生搬硬套算法:有时候是一道很简单的array的题目,其实根用不到什么算法,但是candidate非要把它弄成一个graph然后用dfs。然后我问candidate用dfs有什么好处的时候,一般都回答不上来。我觉得大家对知识点一定要理解透彻,理解他们适用什么样的场合(题目),如果一道题可以用简单的方法解决不要用复杂的。 先给bruteforce再给optimal solution,但是迷失了evolve的过程: 我是觉得给bruteforce本身没什么关系,但是你要展示出来你有在想优化他。千万不要你已经知道最好的solution了还要提供最粗暴的解法。如果一个candidate直接上来没太多思考直接给了粗暴解法我会觉得为啥不多思考一下呢,然后问他能不能优化的时候又不假思索提出了好的solution,我会觉得有点像套路。其实我觉得完全没必要,还浪费时间。. 1point 3acres
. From 1point 3acres bbs
4. 罗列没有必要的知识点
我非常不喜欢这一点。我们面试要做的就是把这道题做出来,你给我说一堆知识点有什么用。比如说我们做一道tree的题,有的人直接上来就会和我说这题可以用bfs,dfs。然后dfs可以用stack也可以用recursion。这重要吗?能不能先告诉我怎么解决这道题,怎么用dfs来解决这道题。这个和国内的很多考试不一样,列出了知识点在我心中不会有加分,反而觉得有点死记硬背,不懂得应用。我觉得真的想了很久还是不会,直接要hint就行。. Χ
. 1point3acres
5. 太在乎自己的代码是不是完美
虽然简洁好看高效的代码是每个人都喜欢的,但是不要过分纠结这一点,一个workable的代码远远好于一堆好看但不work的代码。我遇到过一个国人senior eng,履历是非常优秀的其实谈话中也能感觉到能力不错,但是在写代码的时候特别在乎自己是不是有重复的code,是不是没有最高效率,涂涂改改浪费了很多时间,最后都没有写完一题,挺可惜的。我建议还是尽量写得干净简洁,但是留一些丑陋的代码在后面optimize也是没关系的,最重要的还是完成它。
. 1point3acres.com
下面是我很喜欢的candidate的特征:
1. 思路清晰
相比直接给出solution的人,其实我更喜非常有逻辑地展现他们思考过程然后最后得出solution的人。比如说一个问题是我怎么去北京,candidate说坐飞机,会不如candidate说如果要去北京,那我们最重要的是要跨过太平洋(点出题目的关键) ,然后跨过太平洋可以坐船和坐飞机,但是坐船很慢,所以我们坐飞机。这样我会觉得这个人逻辑非常清晰,我内心会更倾向于觉得这个人是有解决问题的能力真的懂了这道题多于这个人会这题知识ta见过,那最后的给的评级也许就会高一个等级(比如strong hire vs normal hire)。
2. 代码清晰,简洁,可读性强
我觉得人对长篇的东西有种本能地不喜欢。(可能这篇文章也是haha)所以尽量要把代码在清晰的基础上写得简洁。
简洁这是一个可以训练的东西。在自己写完答案pass之后也要花一定的时间来优化自己的代码结构,看看别人写的代码怎么写的。比如用适当的helper function可以很好的抽象一些逻辑(但是千万不要过度使用,也见过有很多helper function导致代码非常恶心的情况),加一些适当的comment(不要太详细,就在非常重要的环节加)。
凡事不要走极端,我也看到把代码写的过度简洁导致难以理解的人。比如用python的人,有时候一段复杂的逻辑可以在一行就完成,其实这就有点因小失大了,面试官不一定是python expert他可能读起来很费劲,然后candidate之后在go through 代码的时候也会很难解释。
3. 主动提出不错的corner case . ----
一般来说我们go through代码的时候我们都用given example,但是go through完之后candidate如果可以主动提出一些corner case还是会加一点分的。太简单的null/empty input啊什么的我觉得没太多必要,只要你在code里面cover了就可以。具体的corner case根据具体题目来,有的corner case对A题来说是好的对B就是毫无意义的。这个在刷题的时候大家也可以训练,争取代码一次过!
.1point3acres
4. 有技巧地Verification
在用一个test case来go through代码的时候,candidate最好用一个能让别人跟上你思路的方法来。比如记下来变量是如何变化的,如果你自己一直口述整个过程,我觉得是个人都会lost(或者不想听)的。. ----
先写这么多,想到再补充。求米哦!!-baidu 1point3acres
.
. Χ
补充内容 (2020-11-17 14:46): ..
我可能不应该把刷题痕迹重单独拎出来说,面试官不太会因为这个来evaluate candidate,只可能会影响一点印象分。面试中最重要当然还是把思路表达清楚,把题做出来。当然还是建议刷题过程中要注意理解,融会贯通。
上一篇:投几百份简历还没有offer?继续找工作,回国,还是读PhD?分享一点看法 下一篇:Hr给了口头offer一个月了正式offer还没下来,不会不给了吧