lucifer

技术面试原来不止考技术?

  |  

大家好呀,狗头又出现啦~

我在 21 年的时候无相关背景转码上岸狗家,并且接到了一些中小厂的 offer。在我准备面试和面试的过程中,我总结了一些非技术相关的技巧和心得。这些技巧和心得在技术面试中往往能起到锦上添花的作用。这篇文章讨论的所有技巧都跟代码能力和工程能力无关~

当然啦,在技术面试中,技术是第一位的。只是在面试同一个岗位的时候,如果几个面试者技术都足够好,更好的沟通能力和表达能力能让自己更加突出。我有一个转码培训班 (coding bootcamp) 的同学在毕业两个月之内就找到了工作,她就经常说自己『写代码很差,但是能让跟我一起工作的人很开心。』诚然,她写代码『很差』是自谦,但跟她的交流确实很开心。

那为什么『交流开心』在技术面试中也很重要呢?因为面试官的目的不是寻找一个做题机器,而是寻找一个好的同事和合作伙伴,好的技术、善于学习的能力和良好的品质都很重要。但在技术面试里如何用有限的时间给面试官留下一个好的印象呢?

我其实并不是很喜欢『面试官』这个称呼,因为『官』暗示了等级的差距;其实大家都应该是平等且合作的。

我总结了以下 6 点建议给大家。

  1. 自己的心态和状态要是积极和开心的,因为情绪是会传染的。

和我们在很难过的朋友身边很难开心,在听相声和脱口秀的厂子里很难流泪一样,面试中面试者的传达出的情绪也会影响面试官对面试者的评价。

第一,面试者如果在面试的过程中传达出正向的情绪,那么说明面试者大概率也喜欢这份工作。喜欢一份工作,就会有动力(be motivated),那么工作做的应该也不差。

第二,在面试的时候,如果面试者的心情是愉悦和开心的,那么面试官在回想面试表现的时候,大概率也会回想起开心的情绪。我个人感觉,有的时候面试官可能记不住面试者所有技术上犯的错误,但是却一定能记得面试官对面试者的『感觉』。(题外话:面试者往往能深刻的记住自己犯的每一个错误,啊哈哈哈哈…)一份正面 (positive) 的感觉往往能让面试官对面试者评价更高。
那该如何准备呢?首先一定要多跟自己不熟悉的人模拟面试来消除面试的紧张感。其次,可以找一些让自己能瞬间开心起来的心理暗示,比如一些开心的视频或者音乐,或者对着镜子给自己加油打气。我很喜欢在面试之前听安全着陆的《个人简介》,并且告诉自己我就是酷炫吊炸天因为我真的好他妈酷 ୧(๑•̀◡•́๑)૭!所以我面试的时候一般在问好和交流思想环节都是微笑的,因为我真的很帅嘛!

  1. 在跟对方交流的时候,留意对方的反馈,并且在阐述思路的时候时不时询问对方自己是否表达清楚。

首先明确,作为面试者,面试中的沟通的服务对象是面试官。换句话说,在面试的时候,沟通的评判标准主观也简单 ── 面试官听懂了就是好的沟通,听不懂就是不好的沟通。在跟对方沟通的时候,如果对方表现出疑惑的表情,最好能及时询问对方『自己是否有哪里解释的不太清楚?』注意,这里的提问并不是『你哪里没听懂?』。为什么这两者在沟通上有差别呢?因为『自己是否解释的不清楚』暗示了如果不通畅是自己的问题,并且自己希望可以得到反馈并且改进;而『你哪里没听懂?』则更像是在暗示『听懂』是对方应该达到的期待。如果对方没有听懂,那么对方似乎就没有达到你的期待。让人失望总是一件不那么愉悦的事情。
如果自己说了很长的一段话,也可以来问一下对方是否还有什么要问的。总体来说就是避免『讲课 (lecturing)』而更多是一来一回的『沟通 (communication)』。

如果遇到不太喜欢给反馈的面试官,这一条好像没什么用… 但是我没遇到过扑克脸的面试官。

  1. 在交流的时候,尽量把每段话的结尾变成积极、正向、令人感到愉悦的事。

『End on a high note.』这是我 bootcamp 职业指导 (behavior coach) 告诉我的一条面试交谈法则。就像主持人常常讲究『烘托气氛』和『暖场』一样,面试的交流也需要被『暖』。 在面试中什么气氛是『暖』的呢?其实就是在每段交谈(也就是说你来我往,而不是一个人一直说)中,双方慢慢的感觉到对彼此的认可和愉悦。

举个例子:面试官问到我不会的技能的时候,我会回答『我不会』 (负面的),『但是很乐意学习』 (正面的),如果有了解的话还可以补充说『听说{这个工具}可以让{这个工具的优点},所以我一直很感兴趣』(正面且具体的)。

当被质疑/指出错误的时候,要以合作且感谢的心态进行对话。为什么是合作呢?因为技术面试其实更像是同事和同事之间的『试工作』。在真正的工作当中,工程师会需要解释自己的代码/实现方式;作为新人,犯错也不可避免。如何好的接受反馈和建议是非常重要的,也很大程度上决定了一个人是否能成长。
给一些真实的面试官问题作为例子:

非合作心态

  • 面试官:你这个写法我看不太懂啊?它怎么就能解这道题呢?
  • 面试者:???这不很明显吗 / (沉默) / 这你不懂吗?

合作心态

下面是在面试官说的不对的时候。是的,面试官说的也不全对哈哈~

  • 面试官:你这个循环没有检查第二个数组在这个引索情况下是否为空,会报错的
  • 我:确实一般来说没有判空是会报错(首先肯定对方),但是对于 JS 来说,如果这个数组里不存在这个引索,那么其实是’undefined’,不会有(a === b)的情况,所以不会报错~
    (大概是有两个数组 A 和 B,A.length > B.length, 我以 A 的 index 来循环 A,并且检查 A[i] === B[i])

如果面试官说的对的话,可以肯定对方,并且给与感谢,因为毕竟这是一次让自己成长的机会。

面试官如果提出一个问题,有可能是在试图引导面试者自己发现自己的错误,就是 giving hints;也有可能是面试官对面试者使用的技术栈或者语言不太熟悉。无论是哪种情况,面试者如何应对『提出的问题』都非常重要。即便提出的问题是错的,面试者应该以合作和积极的心态去应对,而不是有防御性的或者是消极的。如果对于某个细节无法达成一致,可以按照面试官的假设来解决问题。这个方法除了能在情绪上避免争执,遵循某个预设来解决问题也是有现实意义的。比如,有的公司的代码规范里不允许一些写算法题的常规操作。

  1. 在遇到自己卡壳的地方的时候,能准确的说出卡的点。

我在面狗家之前,问过狗家面试官『When the candidate is stuck, what can the candidate do to still give you a positive impression?』狗家面试官给的答案是『This candidate can clearly identity the block.』换句话说,当自己在面试中卡壳了,不要慌,毕竟真实工作中哪有人不需要查文档/不需要同事帮助呢?这时候比较推荐的做法是:『我这道题的思路是 abcd,但是我不知道怎么实现 c 这一步。』(注意,此处每一步应该尽可能的小、可实现。)

  1. 如果可以的话,尽可能给出多个解决问题的方案和他们的利弊

在我入职之后,我听很多经理都谈论过『能够给出多套方案并且权衡利弊』是他们衡量候选人重要的一个标志之一。在日常工作中,也经常有因为各种规定,而需要给出多套方案讨论的时候。
例子:详细阐述思路的时候可以提到:『我现在有 2 个方案,方案一是 abcd,好处是…,坏处是…;方案二是 cdef,好处是…坏处是…』。

  1. 利用好提问环节,这里可以加塞给对方的称赞和肯定:D

一般技术面试的最后,面试官都会给一些可以提问的时间。如果不知道要问什么,推荐问跟对方公司、职业相关(但是尽量足够宽泛,不涉及到保密信息的),且答案非常有可能让对方联想起积极情绪的问题。什么是联想起积极情绪?比如『你最骄傲的项目是什么?』反面的例子比如『你在这份工作里最大的失误是什么?』,『你在这份工作中最绝望的时刻是什么时候?』,『你被老板骂哭过吗?为啥呢?』。

在这个时间里,其实面试者可以『夹带私货』。比如:
『请问你们工作强度是怎么样的?』

『刚刚在面试的时候,我觉得你给我指出的几处错误特别厉害。我特别希望能跟你这样优秀的程序员在一起工作,所以我想问一下你们平时的工作强度是怎么样的?』

当然,这一部分如果夹带太多私货就会变得非常油腻,所以希望大家在给称赞的时候一定是真心的。

我最喜欢问的问题是『What can I do, for this position, to not only meet your expectation but also exceed it?』因为这个问题不仅暗示了我很想要争取这个职位,而且也试探了对方对应聘者的期待。我经常通过这个问题能收获到很多大佬们的指点,但是有一次差点『翻车』。在我问了这个问题之后,面试官跟我说『这个问题我看见过,是网上最推荐求职者问的问题之一吧。』(面试官在暗示我他识破了我的套路。)我回答『是的,但是这个问题是我从一长串问题中选出来的。我选它是因为这个问题能帮我进一步了解同事对一个新入职的程序员的期待,毕竟这是我的第一份程序员工作嘛。』(我没有否认/抵抗/狡辩,我承认了,并且真诚的给与了原因。)面试官满意的点了点头。

其实说了这么多,都是一些并非原创的、没有什么新意的技巧。在这些『技巧』的背后,最重要的是真诚。当一个面试者发自内心的喜欢这个岗位、喜欢这个公司,这份激动 (excitement) 和动机 (motivation) 往往是难以掩饰的,而这份热情肯定也会打动面试官的。

快速 Q & A

  • Q: 怎么样寻找『积极情绪的』感觉?
  • A: 多观察服务业的人员。在北美的朋友们可以看看地道的北美餐厅服务员、护士、房地产中介/manager。在国内的朋友们…要不点个特别会聊天的陪玩试试?(手动狗头保命,我是开玩笑的)

  • Q: 什么是『正向情绪』?

  • A:开心、高兴等让人感到愉悦和美好的情绪。

  • Q:什么是『负面情绪』?

  • A:有防御性的、生气、不合作等。

  • Q:写代码的时候没办法看到面试官的表情怎么办?

  • A:(答案可能只适用于北美的技术面试)我敲代码的时候也不看面试官的表情,因为确实很难分神。但是在技术面试的开头,就是开场和沟通的部分会尽量观察面试官的反馈。一般来说在讨论好大致思路之后真正写码的速度应该是很快的,所以真正写码的时间其实并不会特别多。

最后

本人在这方面没有任何学术背景,如果说的不对,还请指正。本人不适用于所有人,仅仅是个人总结,希望能作为大家的参考。每个人实际情况不同,请选择适合自己的方式和方法。


 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 。
载入天数...载入时分秒...