热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我总结了60多场技术面试经验,与大家分享

选自|freecodecamp作者|UduakObong-Eren转自|机器之心参与|Panda如果你致力于成为一名软件工程师或数据科学家,技术面试往往是求职过程中的

选自 | freecodecamp   作者 | Uduak Obong-Eren

转自 | 机器之心   参与 | Panda

如果你致力于成为一名软件工程师或数据科学家,技术面试往往是求职过程中的必经流程。近日,软件工程师兼科技作家 Uduak Obong-Eren 分享了他在 30 天内完成 60 多场技术面试后总结的经验教训。

如果你是一位希望事业成长的软件工程师或技术人员,技术面试肯定是必然会面临的难关,并且往往让人觉得很难。因此无论是从感觉上还是在其它方面,技术面试有时会让技术人员感到恐惧。

本文将介绍作者软件工程师 Uduak Obong-Eren 在 30 天内完成 60 多场技术面试的经历以及从那些成功和失败中收获的经验教训。这些经验教训分为三个类别,对应典型招聘流程的三个阶段。

尽管这里的大多数经验教训都直接针对的是软件工程师和技术专业人士,但其背后的原理适用于几乎所有职业。希望你能在其中看到对你的职业生涯有用的东西。

   我是怎样开始的?

「如果你必将失败,那就快些失败。」——佚名

和其他软件工程师一样,我也参加过多种不同类型的技术面试——从让人望而生畏的白板编程面试到非同寻常的在 Hackerrank 平台上的 45 分钟编程挑战赛。尽管我有一些很棒的面试经历,但也有一些很糟糕甚至极其糟糕的经历。

但我希望能在面试中表现更好,甚至非常好。我希望学习克服面试恐惧症并在面试中展现自信。就像一个技能精湛的冲浪者,我希望能在面试所带来的高压力浪潮中乘风破浪。恰好那时我也一直想要换个工作。

因此从 2020 年 1 月到 3 月初,我申请了美国和欧洲的多家公司并得到了他们的回应。其中既有 Coda 等处于早期阶段的创业公司,也有 Crunchbase 等处于较后阶段的创业公司,还有 Affirm 等中等规模的公司以及亚马逊等大型公司,甚至还有 Webflow 等远程公司。

发出了至少 109 份申请之后,我收到了超过 60 份面试邀请。总结起来,其中包括超过 60 次介绍性的电话面试、50 多次技术视频电话面试、18 次居家编程项目、11 个编程挑战赛以及 8 场现场面试(包括 3 次虚拟面试)。

为了便于理解,我将学到的经验教训分为了三个类别,对应典型招聘过程的三个阶段。

   面试前阶段

这个阶段是指与公司初次接触到第一次面试发生前的阶段。

有关工作申请的经验教训

当我开始向公司申请工作岗位时,我想象的是我提交的申请越多,我获得面试的机会就越多。看起来符合逻辑,对吧?所以我当时设定的目标是每天发出 5 个申请,期望每 5 个申请就能获得一次面试机会。

但我的策略的效果并不如我期望的那样。我收到的面试邀请的数量往往不及我的目标:差不多是 1:12 的比例,即每申请 12 次会获得一次面试机会。

我面临着这样一个问题:我需要将我的每日申请量提高一些吗?比如每天发 10 份申请。或者我需要在其它方面做一些改变?每一份不成功的申请背后,我都能看到一些需要改变的东西。

当我不再执着于申请数量,修整一下并开始思考简历的质量时,情况迎来了变化。我开始将每份申请看做是向招聘经理或其他会看到我的简历的人的自我展销,也就是说我自己就是我想出售的商品。如果公司需要填补人才空缺,而我说自己有这些技能,我还需要让他们相信我确实有。

然后,我的新任务就变成了找到一种能有效推销自己的技能、经验和个人特质的方法,以便说服招聘经理相信我就是适合他们岗位的人。

下面给出一个我想出的这类自我推销的例子:

加上我的简历,这份求职信的成功率高达 95%。只有一次这份求职信没有起效,但那位招聘经理仍然回复了我,并告诉我那个岗位已经不再招聘了,不过他希望未来能联系我。

这里的经验教训是:你发出的申请应该非常具有针对性——质量优于数量,最好两者兼备。你要知道你的特有能力和经验,并以一种能满足公司需求的方式呈现它们,同时还要不失你的个性。

你也需要了解你所申请的公司的特点及其具体需求。创业公司或小公司的需求可能与大公司不一样,因此需要不同的技能组合。

推销你自己,并确保在面试时佐证你的说法。

从招聘者来信所学到的经验教训

在这期间,我收到了很多招聘者来信(大都是不请自来的),希望我去应聘他们公司的空缺岗位,但其中大多数岗位我都不感兴趣。

当然,鉴于我的日程繁忙,这些邮件实在太多了,但我学会了保持同理心,我理解这些招聘者只是在完成自己的工作而已。

所以我不再将这些邮件视为我收件箱里的噪声,而是开始努力回复所有招聘者的来信,即使那些职位我并不感兴趣。这样做让我成功构建了一个招聘者网络,这已经成为了我未来转变职业角色时的重要资源。

你倒不必开始回复你收到的每一封邮件。但你要知道,我获得的一些有用的面试建议都是从我回复的不感兴趣职位的招聘者那里得到的。回复一下其实没啥损失。

   面试阶段

这部分涵盖有关面试本身的一切,其中涉及多种不同的面试类型。

如何应答介绍性电话

是的,我懂的,你很忙,很多事情都在抢占你的时间。但是,你也是一位出色的专业人员,也就是说你在接到这样的电话时,至少已经知道了两件事:

  • 你的面试官的名字

  • 关于该公司的至少一件具体有形的事情——他们是做什么的、公司位于何处、近期有什么新闻等等。

我注意到,当我为准备面试而去了解这些事情时,我总是会开始真正对这家公司产生兴趣。这通常是招聘人员在进行这类面试时所期望的事情。

如何应对技术性视频电话面试

在技术性视频电话面试中,唯一最具决定性的因素是,你能否清晰地表达你的想法。

你之前可能听说过这样的事情:

「面试官关心的是你的思考过程。是的,他们可以看你的代码,但重要的是他们想知道你这样写代码的原因。」

面试官不在你的身边,也就无法看见其它非语言的线索,比如你的手势和细微动作。面试官只能通过你的声音来理解你的思维过程。

现在你知道该如何引导这场对话了,接下来的问题是你该如何变得擅长?因为事实上,尽管某些人能够自然地表达自己的思想,但另一些人则很难做到,其中就包括我。

答案是:练习!练习!!练习!!!

练习很多次模拟面试。与朋友进行模拟面试能让我更好更自信地解释我自己的思维过程。但更有意思的,这能帮助我建立对面试的新看法。

我开始将面试看做是与朋友或团队成员的对话。我将另一边的面试官看作是我的朋友(有时候我还会在头脑里给面试官一个名字)。因此,过去被我视为压力巨大的面试,现在变成了我与朋友讨论一个技术问题,仅此而已。

这个新看法辅以许多实际的面试经历帮助我变得更加自信,甚至让我开始享受面试,不对,应该是技术聊天。

如何开始解决问题

永远不要在完全理解问题陈述之前开始解决问题。如果你一开始就让对方澄清问题,那么你几乎就不会出错。如果你能够事先清晰地提问,而不是自己一个人按自己的假设行事,也能给面试官留下一个好印象。

如何解决问题

优秀的候选人知道如何解决问题(比如排序问题),但最好的候选人知道一个问题的多个解决方案,并且理解一个解决方案与另一个之间的权衡。我表现最好的面试是那些我不仅解决了算法难题的面试,而是还提供了替代解决方案并讨论了权衡的面试。

你要以提供问题的多个解决方案为目标,要乐于讨论权衡,并且至少要能实现其中一种方案。

对于技术面试而言,要写出清晰的代码。大多数面试官既关心你的代码质量,也关心你的解决方案的正确性。你要尽可能地写模块化代码,将可复用的逻辑适当地划分为实用函数、名称变量和方法,就像你是 boss 一样。

如果你被一个问题难住了该怎么办?

有时候你会被难住。原因可能有很多:你缺乏必要的知识、你的假设不正确、你遗漏了细节等等。

我过去以为,在这样的时候,面试官会基于我想出解决方案的快慢来评价我。所以我会很安静地思考,不与面试官交流,只是思考。

这就是我们大多数人出错的地方。我也明白,你需要一个人思考的时间。但很抱歉打破你的幻梦,你在接受面试时不是你的个人时间。

是的,如果你能自己想出一个解决方案,面试官当然喜闻乐见,但不要忘了他们也希望看到你能与其他同事合作构想解决方案。尽管公司想要技术明星,但他们也想要团队合作者。

因为你的面试官是一个朋友、一个伙伴、一个团队成员,他和你是一边的,也就意味着你在思考解决方案时应该与他们交谈。

你应该分享你的思维过程,直到你卡住为止;你要充满自信地寻求帮助,而不是哭泣般请求帮助。这样做时你可能就会揭示出解决方案,就像我在接受 Coda 面试时那样。

如何应对编程挑战

这里的经验教训适用于以在 Hackerrank 和 Codility 等平台上执行编程挑战形式的面试。通常这些挑战都是限时挑战,比如 45 分钟或更长时间。

我前面分享的一些经验教训在这里也适用,但其它一些却并不适用,比如让别人澄清问题,因为这里没人可问。这里我推荐一些步骤:

  1. 通读并完全理解问题。

  2. 首先写出能工作的代码,即便是暴力搜索算法也行。这可能无法通过所有测试案例,但优先事项是拿出可工作的代码,最好能在前 15-20 分钟完成。

  3. 使用不同的输入类型测试你的代码,因为这有助于你处理边缘案例。

  4. 优化效率。

  5. 重复 4 和 5 ,直到最后一分钟。

这里,很好地掌握计算机科学基础很关键。

如何应对居家编程项目

居家编程项目能让你有机会更好地展现自己的才能,因为你有更多时间。这也意味着这类项目更耗时间。

一家面试我的公司还为从事居家编程项目的时间提供了大约 68 美元一小时的薪资——说明这个任务很严肃,你也应该严肃对待。不过在你花时间搞居家项目之前,你一定要相当确信你希望进入这家公司。

永远不要在居家项目的代码质量上松懈自己。要针对性地进行你的设计决策,即命名规范、代码结构等等都要好好考虑,并且要做好准备为你的选择辩护。

你应该使用什么工具?

在我接受 Course Hero 的面试时,我使用了 regex 来解决我本可用更简单的字符串解析算法来解决的问题。事实证明,这是个糟糕的决定,我也没通过面试。

经验教训:仅使用你非常熟悉而且经验丰富的工具。

如何进行现场面试

在面试前一晚好好睡一觉。面试当天提前到达,然后保持微笑(这有助于你展示信心,而且更重要的是能让你保持放松并感觉一切都在控制中)。

直面你的恐惧并接受它——即使失败,也不是世界末日,毕竟这只是又一场技术聊天而已。然后进门,开始聊天。

如何进行虚拟现场面试

这与现场面试大不相同,因为每个人的眼睛都看着你,这可能让人神经紧张。

我收到了三个虚拟现场面试,而我没通过其中任何一个。很抱歉你没法从我这里获取成功经验。

   面试之后

如何应对失败

你没通过一轮面试的原因有很多,我认识的一些最好的工程师都曾在面试时受挫过,现在也仍然会失败。

因此,不要执着于失败的面试,而要从失败的面试经历中找到可以吸取的教训,然后借助它们继续前行。就像他们说的——前进!

面试成功了又怎样?

庆祝你的成功吧,不管你觉得这个成功有多小。我有一些庆祝的思路。

   你接下来应该做什么?

  • 与朋友进行很多模拟面试。尽管我并不完全同意「练习造就完美」的说法(因为在我看来完美是个一直在变动的目标),但练习能帮助你快速识别面试问题中的模式,帮助你熟练,最终提升你的信心。

  • 对于技术面试,很好地理解数据结构和算法基础是必需的。

  • 开始面试并不断面试。即便你有工作,也可以时不时面试一下——也许每两个月或一个季度一次。面试是一项技能,可以继续磨炼。

希望这篇文章能帮助到你。

原文链接:https://www.freecodecamp.org/news/what-i-learned-from-doing-60-technical-interviews-in-30-days/

—完—


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
author-avatar
手机用户2602931635
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有