进阶为Sr. Developer的面试之路

May 25, 2021 by Zhang in  Blog

高级开发者的面试是一个谜,而初级开发者的面试则是一部恐怖片。在初级开发者的面试中,会涉及到很多的算法。只有消耗大量的糖和咖啡因,才有可能在模拟面试中泰然处之。

但让我们接受这一事实吧:因为它们的预测性较强。之所以这样做是因为,这些算法练习平台、YouTube面试频道和博客面试帖子都会分享一些通过Google面试的技巧方法。当然这过程需要一定的时间准备,但确实是有效可行的。

高级开发人员面试的关键是要理解同样的策略并不适用于所有的面试。

(请注意:以上方法不适用于FAAMG +公司的高级面试,根据作者经验来谈,和其他公司的面试相比,FAAMG +的面试不可避免地会涉及更多算法测试。)

再次强调:一般的软件公司,高级开发人员的面试拒绝率都很高。实际上,所有高级开发者并不是都同时接受面试(针对单一任务)的,而且这也不是一个供求问题。

Sr. Developer面试结构

10年前,大多高级开发者面试的材料包含两部分内容:

  • 具备各种API知识
  • 具备软件交付和开发过程知识

老实说,过去高级开发者的面试比初级开发者要容易得多。因为通常不需要算法测试!就像我在“The Only Programming Interview Question You Need to Prepare For.”中描述的那样如今,高级开发人员只需要知道一件事就好。不要期望太高,不然连一点发挥空间都没有。也不要拐弯抹角,旁敲侧击。因为只靠积累知识来解决这个问题是远远不够的,还需要更多。不管面试官、求职者有没有意识到,高级开发人员的面试都存在一定结构。所以为了通过高级开发者面试,我们必须理清楚这种结构。

Sr. Developer面试心得

开始之前,让我们举一个及时的例子。如果喉咙不好,你会觉得很不舒服。但你并不知道自己是得了流感还是冠状病毒。喉咙不好只是一种症状,而不是一种疾病。所以你无法确定疾病。但可以确定的是你的身体有问题,而且需要做一次检测。实验室检测会找出超出的特定参数。这些参数的确切数量存在与否,决定了你是否被感染以及感染了哪种疾病。

所以面试官真正想要的是你可以确定结果找出某种疾病(即根本原因)就像实验室测试一样,他们会忽略症状,确定疾病。所以如果你给他们一堆技术术语和API术语,那你就不太可能通过面试。因为任何人都可以在上下班途中通过Google搜索来伪造这方面的专业知识。

图片由 Campaign Creators拍摄,摘自 Unsplash

但是,如果你表现得有条不紊,就可以引起他们的注意。就像生物学实验室的技术人员一样,他们也依赖面试过程中的表现来判断应聘者是否合适该职位。这些方法叫做信号。这是一个非常古老的心理学概念,在任何一种人类互动中都起着作用。比如在交配的季节,动物和鸟类等都会通过展示一些信号来寻找最适合自己的伴侣。

在咖啡馆,约会的情侣们总是不断寻找共鸣。面试官也不例外。只是面试官能收集到的指示太少,不过,面试过程准备的的材料也能提供很多信息。所以在疯狂的面试旅途中,你要记住:面试官不是在寻找正确/错误的答案。而是在通过你的回答,寻找信号。

“是信号,不是内容。”从编程的角度出发,这一概念是由Gayle Laakmann McDowell在Cracking the Coding Interview中提出的,她是一位著名的面试教练,曾在Google、Microsoft和Apple工作过。因为面试信号非常重要,所以她强烈建议求职者在白板面试的过程中展示自己心中这个问题的理解。

换句话来说,决定雇佣你的不是答案的内容,而是通过这些答案所发出的信号/理解。

有可能你和你的朋友参加了同一场面试,犯了同样的错误,但是你这样做的背后理由可能会说服面试官,而你的朋友却不能。正面而积极的信号越强,成功的机率就越高。

Questions:如何巧妙回答面试官的问题?

由于技术在本质上是完全不同的,因此很难为每个高级开发人员的职位确定具体内容。但是,对总体的面试问题进行分类是可以的。

对于高级开发人员的面试,面试问题大致分为三类:

图源:Pen Magnet

如果你关注每个类别,有两点是很清楚的:

  • 技术知识只是一个特定领域,而且你已经掌握这一领域知识很久了。记住在面试的时候突袭,基本是不可能的。
  • 流程知识+人员管理问题通常是通用的。这一过程,你必须要反思自己的经历,要么表现出你的成功解决方案,要么展示你从这些失败中吸取到的教训。这类的问题数量大都相同,但提问的比例可能不同。比如,如果面试官认为你不具备技术上的能力,那么他们可能就会缩短这些问题或完全跳过它们。但如果你是一个很有前途的人选,他们可能会对你进行更深入的筛选。

简而言之,面试中提到的问题大致上都属于上述三类。在技术领域(占市场份额的50%)中,还会进一步细分为较小的子类别。

在阅读Cracking the Coding Interview时,我发现它很好地解释了如何将技术问题分类为子组,比如贪婪算法(greedy algorithms)、二分搜索(binary searches)等。这在FAAMG+面试中很常见,尤其是其中的计算机科学。

重点

注意,这些问题的答案一方面反映了你的知识。另一方面,你回答时的理由、语气以及支撑你观点的其他所有内容,都在面试官头脑中形成了你的综合形象。这个图像就是我们所说的信号。

注意

大多数应聘者都无法将问题归为这三大类。在大多数中小型公司的高级开发人员面试中,面试问题的分类也是一个问题。就像上面提到的,唯一的区别就是类别宽泛与否。所以这就意味着大多数应聘人员无法将问题归类为三个宽泛的分类当中!

另一个震惊但真实的结论发生在我的面试经历中,我至少犯过50次这样的错误。而且我确信这会是一个会导致最大拒绝率的错误。

不相信吗?下面是这一理论背后的基本操作原理:

  • 查看LinkedIn招聘信息中的求职人数。
  • 即使是一家中小型公司,一个程序员的职位也有近60-100名求职者竞争。同样取决于该职位的人口统计(尽管由于疫情期间远程工作的增加,目前没有那么多)
  • 招聘广告的时间为3到6个月,这意味着该职位在很长一段时间内都存在空缺。

的确,LinkedIn很多时候并不能真正反映出招聘情况,但通过查看相关公司的求职网站,我证实了自己的假设。你也可以这样做。

面试一直在进行,可是依然找不到合适的人选。这是为什么?因为这些作品集都是通过匹配得到的——正在进行的面试可以证实这点(招聘人员经常在他们的动态上发布工作)这么多有经验的应聘者人在技术上都不合格是不太可能的。那是因为还没有找到合适的匹配项。

发生这种情况是因为在高级开发人员面试中:

  • 没有在适当时间发出信号。(“我不知道”之类的面试回答——感觉很诚实,但抱歉,此情况没有分数)
  • 没有维持预期的积极氛围。(当需要采取主动策略时,保持沉默)
  • 没有达到预期规模。(这里展示了一些很模糊的倡议,但没有具体的术语:“为了实现知识共享,我会设置一个Google文档”之类的单行代码)
  • 可能释放信号的方式存在误差。(也许是面试官的原因,那也无可指摘)

面试失败的案例

经过近55分钟的艰苦面试,面试官们都已经面带微笑,热情的回应我。

最后提问了一个问题:“如果一个客户问你,想要开发一个带有移动客户端的全栈系统,你会怎么回答?”

因为已经问了很多技术问题了,所以我认为这是一个关于流程或主动行动力的问题。

所以我的回答是:“我会问一下相关的要求。紧接着我就问了该怎么做,以及使用项目系统管理的一些具体问题。”

最终结果是我被拒绝了。拒绝的理由让我很震惊:我们希望应聘者能够提供技术选择并分析其中利弊,这样客户就可以从中做出明智决定。但不幸的是,我们并未在此看到,可能你是有这个能力的,祝你下次好运!我错误地将一个技术问题归类为流程问题了!

我安慰自己:不过是因为没有背景而已。但我知道这只是一个借口,因为我没有尝试过对这个问题进行分类。我输了一场本可以赢的比赛。

“捕鼠器”式面试形式

高级开发人员的面试是一个谜。所以把他们设计成捕鼠器是有原因的。

在产品公司,高级开发人员与利益相关者必须有大量互动。在咨询行业,当利益相关者属于利益冲突方(竞争对手和客户)时,这一挑战就更大了。

模糊的面试问题是专门设计用来测试应聘者智慧的。在一个由贪婪的敏捷化产品所有者驱动的世界里,一位不幸的开发人员如果知识渊博却无法展示,很快就会被整个行业活活吞噬。

这一切都归结为一件事:要学会对问题进行分类,并为所给问题提供最积极的氛围。并且不要释放又长又乱的信号。把你的面试当作收费站,而不是镜子屋。再说一遍,整个过程你是否完整做到了并不重要。因为如果他们认为你不是合适人选,那么通常他们也不适合你。

总结

随着敏捷和精益创业潮流的兴起,雇主不再把引进的人才视为资源,而是把他们当作长期合作的伙伴和利益相关者。高级开发人员的面试目的已经变得更加人性化了,虽然可能在实践上还不这样。但是无论如何,你必须把解决这些问题当成一次交流,而不是一次测试。

最后,我们的目的不是要被选中,而是要满足于自己的解决这一过程问题的行为!

感谢阅读!

作者:Pen Magnet

如何通过人际交往促进职业发展?

Jan 22, 2024

你可能没有意识到,即使你的工作让你相对孤立,但每次你在虚拟或面对面的环境中与某人互动时,你都在使用人际交往技能。

如何在非技术背景下转数据领域?

Nov 15, 2020

如果你是另一领域的专业人士,并且对技术专家的职业感兴趣,我们有个好消息要告诉你:在没有任何技术经验的情况下,你很有可能投身于学习你所选择的技术专业。

微软数据科学家面试,都问什么SQL问题?

Mar 06, 2022

Microsoft 的数据分析师职位主要设计并构建数据模型,为公司团队提供有意义的数据和模型。下面是一个真实场景,你可以在 Microsoft 的面试中遇到这种情况。

Leave a Comment

Your email address will not be published. Required fields are marked *

Comment *