查看: 14610|回复: 73
收起左侧

[其他] 作为面试官,给即将参加coding interview的你,分享一点刷题之外的事

    |只看干货
本楼: 👍   99% (165)
 
 
0% (1)   👎
全局: 👍   99% (204)
 
 
0% (1)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
楼主目前在湾区某公司做ML Engineer,今年以来,已经累计给五十余位candidates做了coding interview,有phone screening也有onsite,给candidate的评价从strong no到strong yes都有。发这个帖,主要是想跟面试经验不多的同学们分享一下,除了白纸黑字的代码以外,还有哪些你或许没有注意过的因素,也决定了你的面试结果(是否通过;如果通过,是否为strong hire/qualified for next level)。
  • 首先是如何看待coding interview。很多国人candidates,特别是职场经验不多,或是刚刚转码的,是把coding interview纯粹当作高考/托福/GRE来做的:拿到题之后,不想废话,只想尽快把答案敲出来,通过所有test cases,然后点击交卷走人。没错,coding interview确实是聚焦在对编程能力的考察上,但是别忘记,对面坐着的面试官不是一个只按你的最终代码打分的机器,而是全程目睹你编码过程的活人。这就决定了,代码之外的很多因素,都会影响甚至决定面试官对你的评价。所以,对coding interview的准备,并不止刷题这一项。
  • 不牵强地说,coding interview其实也算半个behavior interview。我面过的candidate里面,有在自我介绍阶段抱怨现在公司/老板/行业的(要知道coding interview的自我介绍一般都很短),有屡屡无视面试官问题坚持埋头写码的(给人的感觉是,这题他考前刚背过答案,不趁热写就要忘了),有不听面试官建议坚持要炫技写两种答案的(导致超时),有想给面试官上一课的(面试官问你的代码为什么这样写,并不见得是因为他真不懂,而是想看你能否给出合理解释,特别是有明显默写/抄写痕迹时;或者,你的答案不是最优解,面试官想给你机会改进),有面试官给hint之后不懂装懂走错方向的,等等。大家一定要理解,面试官在面试你时,其实也是在为自己寻找将来的同事,而上述behaviors大多时候其实在职场中并不受欢迎。很不幸上述例子的主角都是国人(当然也是因为国人占了candidates的绝大多数),所以希望大家一定引以为戒,不要把coding interview当作一场唯结果论的智力游戏。
  • 不要对面试官预设立场。尽管在现实中确实存在着种种不公平和偏见,但对面试官预设立场,对你自己的面试表现没有任何帮助。不要因为面试官是国人就认为一定会对你放水,或因为面试官是某国人就一定会刁难你——即便你的猜想是对的,除了扰乱心态之外,对你的现场表现又有什么帮助呢?我曾经有一个candidate,提出了一个自认为最优而事实上非最优的答案之后,便着急写码。我打断他,问了一个带有hint的问题,本意是想引导他思考最优解,但他却误以为我是故意鸡蛋里挑骨头,不配合讨论,所以没有获得任何进展。最后我也给他过了(公司并不要求最优解),但因为不是最优解,且我对他的teamwork略感疑虑,所以他肯定和strong hire无缘了(有些情况下,有没有strong hire会直接影响最终的level和package)。
  • 重视沟通,保持沟通。如果你有一定工作经验的话,肯定知道,作为工程师,沟通能力和写码能力是同样重要的,所以面试官也必然会对你的沟通能力有所要求(特别是目标level比较高的时候)。 很多candidates,一看是高频easy,立马嘴角上扬,不等面试官开口就噼里啪啦写完了代码,然后战术后仰,基操勿六。这其实是严重的减分项。记住,读完题目之后的第一步,是要跟面试官确认(比如通过复述)你的理解正确(有些题,乍一看是高频easy,其实条件略有改动,如果不仔细读题,很可能会陷入思维定势无法自拔)。如果有任何疑问,一定要及时说出来,以免代码写到一半发现关键的地方有ambiguity或者意料之外的edge cases,把自己搞的很紧张。尽管我每次都会提前跟candidate说,好好读题,有问题随时问,但能听懂这句暗示的似乎不多。读完题,问完clarifying questions,下一步仍然不是写代码,而是要主动跟面试官交代你自己的思路,主动提出并比较各种备选方案的优劣,然后问面试官的看法。如果你的思路有问题,或者面试官希望你能得到更优的答案,那么此处就会展开一些讨论。讨论结束后,要跟面试官确认双方已经达成一致,再动手写码。在写码的过程中,也一定要保持交流,主动解释为什么要这么写。写代码快是好事,但过犹不及,只顾闷头写,完全不理会面试官,不主动解释,难免让人觉得你是在默写/抄写而不是在思考,反而可能会引发面试官问更多问题。另外,无论是讨论思路,还是实现代码,遇到确实卡住的地方,不要闷头钻研,而是要告诉对方,你卡在了哪里,想通过什么办法解决;实在没有思路的话,一定要主动求hint;这样,即使最后没有得到正确/最优答案,也至少给了面试官一个给你partial credit的理由。
  • 其他的一些做事习惯,虽然不是决定因素,但很反映candidate的经验,以及影响面试官的观感,进而有可能决定最后是hire还是strong hire。比如,代码太长太复杂时,是否会有意识地在中途做一些unit test而不是一口气写三十行;写test cases时,是否遵循一定的逻辑顺序(由简入繁),而不是东一枪西一枪;debug的时候,是否能有逻辑地逐步缩小排查范围/输出额外信息等等。

暂时先想到这么多,欢迎各位大佬批评指正和补充。

希望大家刷题顺利,早日找到理想工作!


补充内容 (2021-11-27 05:18 +8:00):
很感谢大家的讨论!
如果原帖没有表达清楚的话,楼主希望可以在这里澄清一下:

1. 楼主并没有否认过“把题做出来”的重要性。既然是coding interview,怎么可能不看code呢?code怎么可能不是面试成败的关键因素之一呢?

2. 如原帖所言,楼主开此贴,本意是为了“分享代码之外的影响因素”(behavior/沟通/习惯),并非为了“否定代码本身的重要性”。写代码和保持沟通并非此消彼长的互斥关系,楼主也从来没有尝试要将它们对立起来,所以希望大家也不要陷入非此即彼的误读之中。譬如,当楼主说“沟通很重要”的时候,其含义并不是“只有沟通重要,别的都不重要,只要沟通好,一行代码不写也能面过”。同样,当有人说“把题做出来也很重要”时,他/她的本意可能也并不是“楼主胡说八道,只有把题做出来才重要,沟通什么的都不重要”。为什么不能二者兼得呢?

3. 楼主想表达的是,面试官对candidate的评价,既基于代码本身,也有代码之外的因素,是一个综合结果。说出来你可能不信,虽然candidate从recruiter口中得到的结果只有Yes和No两种,但面试官的评价过程并非只是给个Yes/No这么简单。面试官可能需要显性地或隐性地对各个小的要点分别打分(比如,解题思路,代码实现,edge cases,熟练度,沟通合作,等等——不同公司可能侧重点不同),之后依据各项权重生成一个综合评分,再按照这个综合评分给出Yes或No的最终评价。最终得到Yes的candidates,并非在每个要点上都是满分;最终得到No的candidates,也并非在每个要点上都是0分。当代码得分一定时,behavior和沟通等方面表现得越好,综合得分也就越高,也就越有希望得到Yes。如果你有能力在代码部分得到高分,那楼主的意思是,尽量不要因为behavior和沟通方面的问题,把到手的strong hire变成weak hire甚至no hire.

补充内容 (2021-11-27 05:20 +8:00):
4. 当然了,像其他面试一样,这个评分里面会掺杂面试官的主观性,而且不同公司的评分标准也不尽相同。但楼主并不认同“既然不同公司/面试官的评价标准不一样,那你说的就不是放之四海而皆准,所以behavior/沟通其实并不重要”的逻辑。楼主的看法是:既然有公司/面试官会看重这些,那为什么不注意一下呢?楼主斗胆揣测,有些朋友的逻辑可能是“既然不是所有公司/面试官都同样看重behavior/沟通,那即使在这些方面表现再好,也不能100%保证我面试通过。对于不能100%保证结果的事,我为什么要费心费力呢?我有那时间多写两行代码不好吗?”对此,楼主看法有三:(1)把题全做出来也未必保证面试100%通过(论坛上这类帖子不少吧),难道就不做题了吗?(2)“只对看重沟通的面试官好好沟通”听上去想是个100%有用的办法吧?问题是,对每一个面试官,你如何能预测他/她是否看重这些呢?你愿意承担预测失败的风险吗?(3)其实,“注意自己的behavior”和“加强沟通”,并不需要付出天大的努力,甚至只要有这个意识就足够了(这也是楼主写此帖的初衷)。如果有看官觉得连拥有这个意识都是一种压力和挑战,那我觉得您确实要在这方面努力了:behavior和沟通,不只对coding interview有影响,也是其他面试环节的考察内容,更是日常工作的必备素质和技能。躲得过初一,躲不过十五的。

补充内容 (2021-11-27 05:23 +8:00):
5. 如果你仍然觉得只有“把题做出来”才是唯一的成败指标,那我们不妨仔细思考一下,如何定义“把题做出来”呢?(1)实现了最优解,但没处理好某个关键的edge case,算“把题做出来”吗?(2)没想到最优解,但实现了次优解,且代码bug-free,算“把题做出来”吗?(3)两道考题,一道写了最优解,一道只写了brute force,但口述了次优解的思路,算“把题做出来”吗?(4)最后三分钟突然想到了最优解并实现了出来,但因时间所限没敲上最后的return,导致代码不能运行,算“把题做出来”吗?(5)关键的步骤全靠面试官提示,但反应很快且代码写的又快又美,算“把题做出来”吗?(6)用面试官从来没想到的清奇思路实现出了一个最优解,面试官当场表示认可,但事后发现关键步骤有漏洞且并非最优解,算“把题做出来”吗?(7)实现了次优解,代码能跑过test cases,但难以阅读,算“把题做出来”吗?(8)写出了可以跑过test cases的最优解,但回答错了最基本的时间复杂度问题/关键步骤解释错误/面试官稍微改动了条件就无法应变,算“把题做出来”吗?

6. 如果以“最优解+能跑过test cases”为“把题做出来”的定义,那只有(8)符合标准,但却未必能过面试。(1)~(7)都不符合这种“把题做出来”的定义,却都有可能拿到Yes。对于这些处于中间地带的情况,面试官是有一定的自由裁量权的,换句话说,面试官给Yes还是No都可以,都能找到证据自圆其说。在这种情况下,你说代码之外的因素起不起作用呢?如果在behavior/沟通里面发现了red flag,作为面试官,你是更倾向于给Yes还是No呢?

评分

参与人数 85大米 +195 收起 理由
admin + 80 很有用的信息!
不知道小帅 + 1 赞一个
hijackyan + 1 赞一个!
UserID_taken + 1 很有用的信息!
sunsett + 1 赞一个
siasd + 1 赞一个
maggie0141 + 1 赞一个
wyz24 + 1 赞一个

查看全部评分


上一篇:找数字对
下一篇:刷题记录贴

本帖被以下淘专辑推荐:

alkaline 2021-11-26 05:06:04 来自APP | 显示全部楼层
本楼: 👍   100% (33)
 
 
0% (0)   👎
全局: 👍   100% (67)
 
 
0% (0)    👎
mc2 发表于 2021-11-25 12:39:22
但是最关键的仍然是能够把题做出来,其他的是锦上添花。不知道我理解的对吗?
感觉lz这么多字都白打了🤦🏻‍♂️  lz整篇都在说交流很重要,是看不见吗?就我自己而言,如果交流很顺 e.g.  会顺着我的hint思考,积极沟通,那最后就算只写个暴力解我也会过。你光顾着写,我问问题你也不听,那就算写出了最优解 communication那项上也肯定没好分(虽然国人我一般就睁一只眼闭一只眼过了)。

评分

参与人数 1大米 +6 收起 理由
admin + 6 给你点个赞!

查看全部评分

回复

使用道具 举报

 楼主| enter_username 2021-11-27 05:30:33 | 显示全部楼层
本楼: 👍   100% (9)
 
 
0% (0)   👎
全局: 👍   99% (204)
 
 
0% (1)    👎
lennon310 发表于 2021-11-25 17:54
个人经验是,题做出来了,未必会过,但是题没做出来,肯定不会通过

私以为,“题做出来”不是个只取Yes/No的二元变量,而是形容在0~100%之间的一个程度。

评分

参与人数 1大米 +6 收起 理由
admin + 6 给你点个赞!

查看全部评分

回复

使用道具 举报

 楼主| enter_username 2021-11-27 05:45:12 | 显示全部楼层
本楼: 👍   100% (5)
 
 
0% (0)   👎
全局: 👍   99% (204)
 
 
0% (1)    👎
yyz20002008 发表于 2021-11-25 14:41
确实也想了解 刷题和面试之间的gap 毕竟面试的时候不可能像刷题 很多条件都给好  这个沟通 如果面试官不怎 ...

我个人还没有遇到过拒绝沟通的面试官。
作为面试官,我接受到的训练是:全力支持candidate(不是说直接给答案那种,而是创造合适的氛围,提供必要的反馈和引导),让他/她以最好的状态完成面试。如果在最好的状态下,candidate的表现仍然不尽如人意,那可能确实说明目前双方不合适。但如果面试官故意制造障碍,没有让candidate发挥出应有的水平,那是面试官的失职,可以跟recruiter反映(虽然不会改变自己的面试结果,但或许会对后人有所帮助)。

评分

参与人数 1大米 +10 收起 理由
admin + 10

查看全部评分

回复

使用道具 举报

 楼主| enter_username 2021-11-27 05:51:04 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   99% (204)
 
 
0% (1)    👎
haoguoxuan 发表于 2021-11-25 14:35
现在大厂面试这一套玩意,跟选秀节目海选差不多了。候选人能在短时间内把题做出来,并且把思路讲清楚就已经 ...

这两层有案例。
https://www.1point3acres.com/bbs ... 97&pid=16340707
https://www.1point3acres.com/bbs ... 97&pid=16340484
回复

使用道具 举报

hlckl123456 2021-11-27 06:56:17 | 显示全部楼层
本楼: 👍   100% (17)
 
 
0% (0)   👎
全局: 👍   98% (247)
 
 
1% (5)    👎
所以总结一下就是交流肯定是非常需要的。但是交流并不是说的多,而是说的精,在合适的时候说,在不合适的时候不说。
比如上面说到的,上来就是easy题,这个时候解释一大堆面试官可能根本不care,因为这题根本就是用来热身的,反而容易把自己坑了,这时候最直接了当的方式就是把你的实现所需要的简单的结构说出来,然后问面试官does it make sense,如果你的思路真的歪了,让面试官来指正。
过了easy part之后,就需要更多的交流,交代更多的思路,注意面试官的问题,同时也要保持清醒的思路。千万不要急着写码,写把sub-method写出来,在你coding之前,面试官会尽量把你引导到更简单,更优的解上,有时候能省很多的时间。

评分

参与人数 6大米 +6 收起 理由
xsijg8 + 1 赞一个
bbbyyds + 1 赞一个
panzicong + 1 赞一个
gamingzhang + 1 赞一个
Killua1023 + 1 赞一个
enter_username + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

本楼: 👍   100% (18)
 
 
0% (0)   👎
全局: 👍   95% (3630)
 
 
4% (187)    👎
我感觉看公司吧 有的公司还是要把题做上 做不上你交流出花也没用 有些公司题做的差不多也不用bug free看着顺眼就行 但是还没见过一个题不会做完全靠交流就给过的至少你得做个minimal working version

补充内容 (2021-11-26 05:28 +08:00):
我也大概面了50-60人了 见过没有思路通过交流顺着你的思路给一个解写的磕磕绊绊那种 我一般会给过但是一起的其他人觉得不行直接拒 但是你题做的上能解释清楚一般都能过 。。总结起来都看面试官风格

补充内容 (2021-11-26 05:50 +08:00):
再总结一下还是看运气 但是题做上了概率会大一些 如果题做上了交流还好就更大一些但是也不是稳 可能面试官就不喜欢你也还是跪

评分

参与人数 1大米 +1 收起 理由
backtouzhaogong + 1 赞一个

查看全部评分

回复

使用道具 举报

mc2 2021-11-26 04:39:22 | 显示全部楼层
本楼: 👍   88% (8)
 
 
11% (1)   👎
全局: 👍   97% (267)
 
 
2% (6)    👎
但是最关键的仍然是能够把题做出来,其他的是锦上添花。不知道我理解的对吗?

回复

使用道具 举报

我都没事儿 2021-11-26 05:06:53 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (11)
 
 
0% (0)    👎
mc2 发表于 2021-11-25 20:39
但是最关键的仍然是能够把题做出来,其他的是锦上添花。不知道我理解的对吗?

一样重要吧,题能做出来是基本,bq也很重要
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (3630)
 
 
4% (187)    👎
我都没事儿 发表于 2021-11-25 13:06:53
一样重要吧,题能做出来是基本,bq也很重要
我感觉不一样至少我们厂题做不出来交流好也没用 题做的出但是有bug交流的好会过 交流的不好就跪
回复

使用道具 举报

麦田HYMK 2021-11-26 05:32:13 来自APP | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   95% (2080)
 
 
4% (105)    👎
这里是我马甲呀 发表于 2021-11-25 13:25:18
我感觉看公司吧 有的公司还是要把题做上 做不上你交流出花也没用 有些公司题做的差不多也不用bug free看着顺眼就行 但是还没见过一个题不会做完全靠交流就给过的至少你得做个minimal worki
其实交流就包括了会做题,这个不冲突。我觉得楼主的意思是能够互相沟通思路,发现困难,提出解决困难的方案,根据面试官提示自己说出下一步的方向。这其实综合起来看就是说:我不要求你背多少题,但是我给你一个你没见过的不能蒙,得知道大概下一步往哪里走,然后再有限的提示下走上正确的道路。
回复

使用道具 举报

6am 2021-11-26 05:38:51 来自APP | 显示全部楼层
本楼: 👍   100% (7)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
从被面试的角度说一点吧:如果上来先是个easy题,就会很怀疑说太多话其实有可能给自己挖坑,比如第二题很难,不要在第一题上浪费时间。其实这是真实发生过的。。。。
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (3630)
 
 
4% (187)    👎
麦田HYMK 发表于 2021-11-25 13:32:13
其实交流就包括了会做题,这个不冲突。我觉得楼主的意思是能够互相沟通思路,发现困难,提出解决困难的方案,根据面试官提示自己说出下一步的方向。这其实综合起来看就是说:我不要求你背多少题,但是我给你一个你没
那如果没见过也不会通过交流给出一个brute forth solution还有bug呢。。因为我就是这种见过的有思路没见过的经常不会 通过交流获得了思路但是转化不出code或者转化出了一个带bug的code 基本会跪 所以我感觉还是要题写的好
回复

使用道具 举报

Go_thomas 2021-11-26 06:22:21 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (30)
 
 
0% (0)    👎
很好的建议,受教了,

本行微电,现在在做piping,(跨度有些大 :-() 现在正准备转回本行或者coding,楼主说的在电子行和管道设计的工作中也是似曾相识。。。。

谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表