采访技术职位并不是一定很恐怖
GitLab资深工程师Jacob Schatz分享了他如何进行技术职位面试以及他的思考过程。技术面试经常被讨论,对一些人来说可能是一个敏感话题,因此值得注意的是,本文表达的是Jacob个人的观点,并不一定代表其雇主的观点。
你是否是一位感到恐惧、疲惫、悲伤或失望的面试者?我希望改变这种偏见。
我相信人们可以拥有良好的面试体验,而我同时也能找到合适的候选人。这两件事可以同时发生!在你的面试过程结束后,在一个理想的世界里,无论结果如何,你都应该对你自己和这个过程感觉良好。你可能会因为没有得到这份工作而感到悲伤,或者因为开始你的新工作而感到兴奋,但无论哪种情况,你都应该明白其中的原因。
在GitLab,我非常早地就负责招聘工作,因此我见过成千上万份简历。当我刚加入时,我被要求招聘并组建一个前端开发团队。我是第29名员工(我们现在有500多名员工),我是第一位前端开发人员,所以我们团队没有招聘流程。我们逐渐创建了一个流程。
本文的目标是面试者和面试官。对于面试者,我希望你知道完美的访谈是什么样的。面试不应该令人害怕或令人恐惧。这是一份你可以遵循的指南,它可以帮助你尽自己的一份力量创造完美的面试。如果你是一位面试官,也许你已经完善了你的流程。这是我对面试在一个理想世界中如何进行的看法。面试有很多不同的类型,本文重点关注对所有经验水平的开发人员进行面试。多年来,我坚持了一些很好的流程,本文是对双方候选人流程的幕后一瞥。
在我开始之前,重要的是要记住,每个人都是人,人是不完美的。没有完美的开发人员。像对待普通人一样对待每个人。对某些人的成就感到惊讶是可以的,但崇拜他人是不可以的。天赋既是先天性的,也是后天习得的,你也可以习得它。你的面试官和你都是不完美的。面试不应该围绕完美展开。以下是面试应该是什么样的。
我在候选人身上寻找的五件事
GitLab的价值观涵盖了很多重要的方面,你应该阅读它。这是基于这些价值观的松散基础。
作为一名面试官,在成为一个富有成效的积极倾听者时,我一次只能关注这么多事情。但我确实有五件具体的事情我想关注:
- 这个人“头脑清醒”吗?
- 这个人从技术上来说是否符合这个角色的要求?
- 这个人在这个角色中能否自给自足?
- 这个人沟通能力强吗?他们能和团队很好地沟通吗?
- 这个人能很好地处理正面和负面反馈吗?
当然,我还寻找其他一些东西,但这五件事就足以让你得到你想要的工作,如果你和我一起面试的话。
忘记紧张吧。我永远不会因此责备你。我知道你可能会紧张,这完全没问题。极少数情况下,紧张会成为一个令人衰弱的因素,在这种情况下,我只是要求你重新安排时间。只是不要挂断我的电话!
认识到会有偏见
我们在GitLab接受过偏见方面的培训。我在培训中学到的一件事是,每个人都有偏见,无论你是否认为自己有偏见。有一次,我想到过像一些管弦乐队那样进行盲目面试。我们从未实施过(而且这很难),但这就是为什么我保留一份问题清单和一份我想在每次面试中涵盖的内容摘要。每次面试都有一个我可以遵循的脚本。所有内容都尽可能重复和相似。随着面试的进行,我将能够判断我是否可以提出更难的问题。更难的问题不是为了淘汰候选人,而是为了合格的候选人。如果你能回答我的难题,这意味着你拥有丰富的经验和知识。重要的是要知道,我必须以某种形式提出琐事问题,但我不会根据琐事问题来评价候选人。这是为了了解你对JavaScript知识和编程的深度。
也就是说,仍然有一个琐事问题没有人答对过。我会一直问下去,我相信总有一天,有人会答对。琐事问题很有趣,因为我是一个主要的JavaScript迷。我只是喜欢谈论JavaScript的所有来龙去脉。我正在寻找可以成为我的编码伙伴的人。招聘人员是关于寻找你可以一起工作的人,而不是为你工作的人。
没有经验的面试官倾向于测试你他们知道什么(这样当他们可以因为“错误”答案而批评你时,他们会感觉更安全一些)。
相反,优秀的面试官专注于你知道什么,并促进双向对话以探索共同的契合点。
— Jennifer Kim (@jenistyping) 2019年4月8日
我想知道你的技术能力
这可能是人们最害怕的事情。面试中我们会问诸如“为什么井盖是圆的?”之类的问题。事实是,有些公司可能会问来自LeetCode的中等偏难的问题,而有些公司可能根本不会问任何技术问题。
我在你的技能组合中寻找什么
经验比我能问的任何技术面试问题都更有说服力。例如,如果我正在招聘前端工程师职位,而有人告诉我他们自己构建了一些很酷的东西,我们可以讨论一下,那么这太棒了。在那之后,我可能还需要向他们提出一些问题,或者演示可能回答了我所有的问题(虽然不太可能,但有可能)。但是,如果我们可以一起浏览你非常自豪的某些东西的代码,那就太好了。
如果你能告诉我你为另一家公司构建的东西,我可以查看你的代码,或者你可以充分地解释它,那就很有帮助。挑战是什么?你是如何处理10,000条评论的?你是如何处理移动端的?有哪些挑战?我举个例子:你为GitLab构建了评论系统。对于评论系统来说,一个有趣的挑战是处理@下拉菜单中加载用户以提及其他用户的问题。事实证明,该下拉菜单的JSON有效负载可能会变得非常大,并且在页面加载时加载它会使页面加载速度明显变慢。但在第一次@按键时加载数据也很慢,因为有效负载可能超过10 MB。我们希望用户拥有无缝的体验,并且没有意识到数据需要时间来加载。因此,谈论这种体验的一个好方法是描述你考虑过的一些方法,例如:
- 当评论框第一次出现在视口中时加载数据。
- 在用户第一次将鼠标悬停在文本区域上时加载数据。
- 一旦用户以足够的动量开始滚动,就加载数据。
最后一个不是一个无聊的解决方案,但我确实在面试中听到有人说过。
我可能会问到算法和数据结构
嘿,面试官们,你们是在为你们的营销网站招聘人员吗?不要问他们最难的算法和数据结构问题。是的,算法和数据结构在所有方面都扮演着巨大的角色,但更重要的是候选人了解响应式设计,以及动画和性能。既然我们正在谈论性能,他们应该了解大O表示法。他们应该知道是什么导致了重绘。看看Firefox Monitor并将其与Salesforce进行比较。Firefox网站的各个方面都更加快速。为什么它更快?为什么Salesforce网站如此笨重和缓慢?调整它们的大小……哎呀!大O可能有助于你解释某些部分,但能够解释整个画面很重要。
顺便提一下大O表示法,因为我提到了它。
大O是一种描述你的代码在最坏情况下运行时间和/或代码将占用多少内存空间的方法。我认为学习它真的很好,并且有助于日常编程。你可以并且应该学习它,这可能需要大约一个小时。一个小时后,无论完成与否,你都很有可能准备好回答面试官会问的任何合法的大O问题。
大O不是你需要学习的课程。以下是一些可以在不到一小时内向你解释它的文章:
- 我喜欢这篇文章。
- 对于更正式但最终易于理解的文章,请查看Brillant。
- 对于一张你感觉舒适的备忘单,请查看大O备忘单。
- 对于一些很好的例子(使用不同的语言,但非常易于理解),请查看这篇文章。
好的,回到面试中的算法和数据结构。
由于这些类型的问题可能会出现,因此提前做一些功课是值得的。在学习算法和数据结构的面试时,有两个典型的黄金标准。
- 有一本盖尔·拉克曼·麦克道威尔写的《破解编码面试》一书。
- 有一个名为LeetCode的网站,有很多资源。
还有许多其他东西推荐用于算法和数据结构,大量编码面试,但与其记住世界上每一个例子(这不会为你解决任何问题),不如学习如何解决这些问题。
正如我上面所说,前端工程师应该为了他们的健康学习大O,因为它对你有好处,就像吃你的韦氏麦片一样。除非工作需要广泛的算法和数据结构知识,否则面试官不应该问广泛的算法和数据结构问题。如果我正在设计一个前端框架,比如Vue,那么优化DOM差异算法或至少理解你正在使用的算法的实现将非常重要。但这是否意味着我会从CTCI中提出七个额外的难题?不会。你是在测试理解,而不是记忆。当人们解决这些问题(当我问他们时)时,我希望看到他们思考了这个问题,并且我们一起解决了这个问题,而不是我希望看到他们得到了正确的答案。这完全是关于弄清楚你作为一名工程师在得到这份工作后能够做什么——而不是你昨天记住的东西。一个了解算法的人将比一个必须在工作中学习算法的人更擅长实现它们。
你们是在招聘人员来构建依赖管理系统吗?这个人需要了解很多关于算法和数据结构的知识。
这是光谱的两个极端,但在我看来,并非每个人都需要知道如何从头开始编写红黑树——但每个人都应该了解大O。然而,学习典型的算法和数据结构将极大地提高你作为软件开发人员的技能。
当我确实问到算法和数据结构问题时,我会问以下几个问题:
- 什么是链表?你能向我展示如何在JavaScript中使用和不使用数组来实现它吗?
- BFS和DFS有什么区别?你能实现其中一个吗?
答错这些问题不会淘汰任何人。记住,我不使用琐事来评价候选人。
你头脑清醒吗?
在面试期间,我还寻找许多软技能。这是我确定你是否“头脑清醒”的方式。
严格来说,这意味着你做出了正确的决定,但对我来说,这远不止于此。头脑清醒的人会做出合理的决定。与我持有不同意见是好事,但我们应该同意一个知识标准。例如,我们都应该同意,只使用绝对定位来布局整个博客是一个坏主意。这不是一个合理的决定。
但我可能会创建一个这样的场景来检查这些技能:
让我们进入CodePen并创建一个静态博客主页。我们需要一个导航菜单,我们需要一个标题和文章的地方,然后在底部让我们有一些评论和页脚。
然后我会引导你了解创建导航的不同方法以及每种方法的优缺点。对于我招聘的许多前端开发人员,我想知道他们了解一些核心JavaScript,所以我可能会要求他们只使用原生JavaScript添加一些小功能。
当一个框架为你做所有事情时,你不需要自己做事情。我想知道你是否了解全局情况。
“头脑清醒”是一种花哨的说法,意思是你的事情井井有条。这不是一个详尽的清单,但这些是引起我注意的事情:
-
你照顾好自己
-
你专业地说话(这比大多数人知道的更有影响力)
-
省略非常私人的细节
-
简洁地回答问题
-
花时间思考
-
当你不知道的时候说“我不知道”
-
自信,但不要自负,即使你不是
-
你完成你开始的事情
-
你诚实
-
你能够说不
-
你知道你想要什么,并且你想要帮助其他人得到他们想要的东西
-
你会不同意,甚至会辩论,但知道何时放弃
-
你能够在面试中有效地沟通
-
这段谈话轻松还是令人筋疲力尽?
-
你英语流利吗?口音完全没问题!
-
你是否理解正在讨论的概念?
-
你是一个善良的人。
关于最后一点:善良并不意味着你是一个软弱的人。善良是挑战他人和给予反馈的重要组成部分。
我想看看你是否自给自足
现在看来这很明显,但我相信——在GitLab工作之后——自给自足是面试官应该在被招聘的每个人身上寻找的东西。自给自足在你在公司中的角色中扮演着重要的角色。
例如,为了达到极致,想想一位总经理,他们可能比团队中的任何人都拥有最少的外部指导。每个人都有责任,但总经理通常必须擅长许多事情,包括(但不限于)营销、销售和管理。所有这些都会根据团队规模而改变。他们的角色可能是最模糊的。他们非常自给自足。在我看来,高级开发人员应该能够承担整个大型功能并正确实现它。
这并不是说开发人员不应该在过程中进行沟通。他们应该提出问题,并与其他人一起寻找最佳前进方向。
审查面试者的代码有机会变得枯燥(以一种好的方式),因为我们知道对他们的期望。我们依靠他们来指导经验较少的开发人员。初级开发人员也应该自给自足,但可能不会独自承担大型项目。初级开发人员通常在小块工作中表现出色。例如,对于初级开发人员来说,承担高级开发人员在大型项目中承担的小型任务可能是一件很棒的事情。高级开发人员还可以指导初级开发人员,并引导他们朝着正确的方向前进,以帮助他们变得更加自给自足,这对双方来说都是一件好事——对经理来说也是一件好事,因为他们可以将更多工作委托给高级开发人员。
如果你是一位前端开发人员,并且在这个职业生涯阶段需要手把手指导,这完全是100%可以的,每个人都经历过。或者,如果你正在申请很多地方但没有得到任何结果,并且非常沮丧:我建议你在申请之前变得更加自给自足。我建议你变得更加自给自足并获得你想要的工作的一种方法:忘记代码示例、小型购物车应用程序及其同类产品,因为它们在求职面试中表现不佳。为某人构建一个完整的应用程序,并以低价或免费的方式进行。找到你附近的教堂、犹太教堂、收容所或其他人,并主动为他们制作一个网站。
请记住,免费客户通常是最糟糕的客户。当你能够说你已经为几个客户做过工作时,这将是值得的。为了获得额外积分,请在一些博客文章中记录你的工作。这些内容在简历上看起来很棒,会让你从其他人中脱颖而出。我知道任何人都可以通过Wix或其他网站建设平台轻松获得一个网站,但没有什么比一个精心设计的自定义网站更好了。我认为在我得到我的第一份编程工作之前,我制作了大约10个左右的网站。我可以写一本书来讲述那些疯狂的故事。
沟通和反馈是关键
这是另一个看似显而易见但很难做好的点。沟通在GitLab手册中有很好的记录,所以我不会详细介绍它,只是说我遵循GitLab的价值观,我们正在寻找其他希望也遵循这些价值观的人。正面和负面反馈也在GitLab手册中有很好的记录,所以我不会在这里介绍它。
我如何进行其余的面试
因为我们在GitLab面试了很多候选人,所以我们遵循一个通用的流程,以便我们可以轻松地重复它。我不会详细介绍我们的面试流程,因为它一直在不断发展。但是,总的来说,这是我遵循的流程。
告诉我关于你自己的情况
你会被问到一个著名的类似于“告诉我关于你自己的情况”、“告诉我你一直在做什么”或“告诉我你在[公司名称]期间的情况”的问题。当我问这个问题时,我试图找到你申请的工作和你过去的工作之间的联系。最好提前找到共同点。
例如,作为GitLab的一名员工,如果我个人以前端工程师的身份申请FAANG,我相信GitLab和那家公司都在努力提高页面加载速度。也许我注意到当我第一次加入GitLab时,一个页面上有26K个事件监听器,并且能够将其减少到0,将加载时间减少50%,降至200ms的速度。我相信这将与对话相关。
因此,作为一名面试者,我可能会这样说:
“你好!我是一名GitLab的前端工程师,我已经在这里工作了3.5年,在我的任期内,我做了很多巨大的改进,我最喜欢的工作领域是性能、用户体验设计实施和架构设计。”
此时你不想进入过多的细节,但最好给面试官一些事实来处理。当我问这个问题时,有人开始详细地讲述他们整个职业生涯的10分钟,这令人沮丧。
是什么让你申请我们公司?
面试官可能会问:“是什么让你决定申请我们公司?”希望你很高兴在这家公司工作——否则,为什么要费心申请呢?
由于某种原因,这个问题经常让候选人过度兴奋,他们最终会弄混我们公司的名字。这是完全正常的行为,特别是如果你的公司听起来像另一家公司。
此时我正在寻找的是,看看你是否只是在找工作,或者你真的兴奋地想和我们一起工作。我们想要那些真的想和我们一起工作的人。这时我也可以看到一个人是否了解我们公司的情况。例如,有些人喜欢我们的价值观,阅读过它们,并想在一家拥有这些价值观的公司工作。有些人想解决我们正在解决的大问题。有些人看过我们团队的演讲和文章,并希望与像他们一样聪明的人一起工作。
你的五件事是什么?
最后,我喜欢问候选人是否对我有什么问题。这是面试的重要组成部分,你应该事先仔细考虑这一点。你的目标是让我回应:“哦哦哦,好问题!”一方面,我确实在努力回答你提出的任何问题,所以不要害羞。另一方面,我也在试图衡量你对这份工作的兴趣,所以像“呃,我不知道”这样的话通常会让人非常沮丧,因为它表明你可能已经走神了,或者这份工作对你来说没有兴趣。这可能会留下令人不快的余味。
查找你的面试官并了解他们。提前这样做可能是一项令人大开眼界的练习。你可能会了解他们的客户获取策略,这可能会导致许多其他有趣的问题。如果公司是一家初创公司,他们是否计划被收购,或者他们是否想进行IPO?当你有一个清晰、经过深思熟虑的问题时,这会让你听起来很专业,这同样是我列出的重要事项之一。
如果你想不出任何问题要问,那么你真的想要这份工作吗?如果面试官有个人网站,请查看一下,如果没有其他问题,你可以问他们关于他们撰写并发布到他们网站上的漫画书的问题。
但我建议:
- 问你通常感兴趣的面试问题。在面试之前考虑一下这个问题,因为一个真正有思想的问题通常会大大提高你的候选资格。
- 你,作为候选人,在公司中寻找什么?面试官需要向你证明什么才能让你接受这份工作?
- 这些人像你一样头脑清醒吗?你知道,这是双向的。
- 这看起来像一份有趣的工作吗?你甚至想要一份有趣的工作吗?
- 你会向谁汇报?你跟他们谈过吗?你可以在面试过程中有机会跟他们谈谈吗?
- 你是否代表性不足?比如,你是在取代某人还是担任新的角色?有多少其他人会做你正在做的事情?其他代表性不足的人应该注意哪些迹象?什么迹象会向你表明这是一个适合你的良好环境?
此时不要问关于薪水或福利的问题;这些事情可以在你找到像我这样的人之前,与招聘人员进行初步电话沟通时(并且可能应该)进行讨论。
结论
与编程不同,面试不是一门精确的科学。你试图证明你对与公司合作的前景感到兴奋。你希望向面试官和自己证明这一点。希望你想要一份有趣的工作。本指南不是要遵循的脚本,而更多的是一些松散的想法,以帮助你进入面试官的思维方式,其中也包含一些针对其他面试官的技巧。也许我指出了你以前可能不知道的事情。
请记住,理论上,面试不应该是一个可怕的过程,而更像是一个寻找一起工作的伙伴的过程。
以上是采访技术职位并不是一定很恐怖的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...
