攻克编程面试的7步成功指南

本文详细介绍了成功准备编程面试的7个步骤,包括构建作品集、掌握数据结构与算法、提升软技能、模拟面试和薪资谈判等关键策略,帮助开发者高效备战技术面试。

攻克编程面试的7步成功指南

不要被面试过程吓倒。如果你知道如何准备——并采取所有必要步骤——你就能应对面试官抛出的任何问题。这意味着你迟早会获得一份高薪工作,让你的编程生涯开个好头。

编程面试准备的7个步骤

  1. 构建你的编程作品集
  2. 进入他们的领域
  3. 像赢家一样思考
  4. 掌握面试问题
  5. 提升软技能
  6. 进行模拟面试
  7. 准备谈判

简而言之,这就是你成功的方式。遵循这个路线图进行编程面试准备。内化这七个步骤。尽可能专注并执行它们。获得那份高薪的软件工程师工作。

1. 准备你的作品集

面试官最喜欢的事情之一就是亲眼看到你编程技能的实际成果。

当他们看到你的开发者作品集时:

  • 他们知道你对构建和解决问题充满热情
  • 他们看到了你掌握技艺的证明
  • 他们欣赏你坚持完成项目的自律性

提示: 当你提交简历时,附上你的作品集。设计师这样做——工程师也应该这样做:这会让你脱颖而出。

你完成的副项目越多,你就越有可能学会如何有效编码并获得工作:

  • 构建一个移动应用或网络项目。并准备好展示源代码。一个充满真实编程项目的作品集将使你的地位高于其他面试者。
  • 使用GitHub。向面试官提供你的GitHub用户名,以便他们可以看到你参与的项目以及你如何与这些项目合作。
  • 参加黑客马拉松。参加过黑客马拉松是简历上的一个很好的项目——也是面试中可以谈论的话题。
  • 为开源项目做贡献。这表明你可以与团队合作,并且可以接受代码审查。

2. 进入他们的领域

下一步是让你以不可动摇的信心进入编程面试:

成为他们公司的专家。并尽早与他们联系。

  • 查看他们的"关于我们"页面。在这里你可以了解他们的历史、自我形象和价值观。
  • 看看他们在社交媒体上发布的内容。通过查看他们的Twitter、Facebook或YouTube存在,你可以收集更多关于他们的信息和沟通风格。
  • 阅读关于他们公司的最新文章。这样你可以确保了解公司的最新动态和当前业务交易。
  • 在LinkedIn上找到你的面试官。尽可能多地了解他们的背景。然后你可以在面试中利用这些信息更好地与他们建立联系。
  • 了解公司的团队。搜索同一部门的人。发送连接请求并开始与他们互动!结果是在面试当天你已经认识了每个人。
  • 与最近的面试者联系。自我介绍后,礼貌地向他们询问面试过程的建议。在很多情况下,他们会很乐意帮助你。他们甚至可能指出他们被问到的问题类型。

现在你了解了他们的历史和当前事件。你知道他们重视什么。并且你已经认识了你的面试官和潜在的未来同事。

你甚至从最近经历过面试的人那里学到了如何最好地准备自己。

这些都将为你的编程面试带来优势。

3. 像赢家一样思考

  • 可视化成功。花时间在心理上排练你的编程面试。想象你将如何熟练地解决问题,自信地沟通,并在整个面试过程中保持专注。
  • 没有什么可失去的。当然,每次面试都是一个巨大的机会。但即使你失败了,还有更多公司可以申请。以富足的心态进入,你会发现更容易表现出色——同时保持冷静和自信。
  • 不要为无法控制的事情压力。为结果、激烈的竞争或团队动态而压力是浪费你的内在资源,因为它超出了你的控制范围。保持对结果的独立。如果你得到了职位,很好;如果没有,也没什么大不了的——不要个人化,为下一次面试更好地准备。
  • 坚持会有回报。如果你愿意做真正的工作并投入时间,你最终会成功。即使你不是最伟大的开发者并且经验有限,通过坚持你也可以获得一个好的角色。一旦你做到了,从那里开始就会容易得多。

4. 掌握编程面试问题

很好地回答技术问题当然是获得工作机会的重要组成部分。遵循本指南以在面试的技术部分表现出色。

也在这里查看常见的编程面试问题。

学习如何解决问题

你不可能仅仅通过记忆问题来攻克编程面试。

目标是更高层次地理解事物。

你希望能够处理一个你从未见过的问题,分解它,并分析它。你了解它遵循哪些模式。然后你知道如何解决它。并且你可以逐步向面试官解释你的过程,充满信心。

这就是你有效解决编码问题的方式。这就是你在面试中给人留下深刻印象的方式。

一个简单的问题解决过程

  1. 完全阅读问题两次。
  2. 用3组样本数据手动解决问题。
  3. 优化手动步骤。
  4. 将手动步骤写为注释或伪代码。
  5. 用真实代码替换注释或伪代码。
  6. 优化真实代码。

准备数据结构和算法问题

数据结构

数组

数组是编程中最常见的数据结构——也是决定如何访问信息的重要组成部分。

它是面试官最喜欢的话题之一,你在任何编码面试中都会听到很多关于数组的问题,例如反转数组、排序数组或在数组中搜索元素。

解决基于数组的问题的关键是对数组数据结构以及基本编程构造(如循环、递归和基本运算符)有良好的了解。

字符串

与数组和链表数据结构一起,字符串是编程工作面试中另一个流行的话题。我从未参加过没有基于字符串的问题的编码面试。

字符串的一个好处是,如果你了解数组,你可以轻松解决基于字符串的问题,因为字符串只不过是一个字符数组。

所以你通过解决基于数组的编码问题学到的所有技术也可以用于解决字符串编程问题。

链表

链表是另一种常见的数据结构,补充了数组数据结构。

与数组类似,它也是一种线性数据结构,并以线性方式存储元素。

然而,与数组不同,它不将它们存储在连续的位置;相反,它们分散在内存中的各处,使用节点相互连接。

为了解决基于链表的问题,对递归的良好了解很重要,因为链表是一种递归数据结构。

栈和队列

栈是一种类似于数组和链表的线性数据结构。区别在于栈不允许随机访问其元素。它可以概念化为一组只能从一个方向共同添加或减去的元素。

队列是一种线性数据结构,其中元素只能从列表的一侧(称为后部)插入,并且元素只能从另一侧(称为前部)删除。

图是由多个节点和边或"顶点"组成的非线性数据结构。图可以表示网络架构,并可用于解决实际问题。广泛地说,它们描述了有向或无向的关系。

树数据结构是一种允许你以分层方式存储数据的数据结构。根据你存储数据的方式,有不同类型的树,例如二叉树,其中每个节点最多有两个子节点。

与其近亲二叉搜索树一起,它也是最流行的树数据结构之一。因此,你会找到很多基于它们的问题,例如如何遍历它们、计数节点、查找深度以及检查它们是否平衡。

解决二叉树问题的关键点是对理论的深入了解,例如二叉树的大小或深度是什么,什么是叶子,什么是节点,以及对流行遍历算法的理解,例如前序、后序和中序遍历。

映射

数据结构中的映射是存储键值对的抽象数据类型。

键值对关联两个数据片段,一个片段"键"可用于查找另一个片段"值"。

堆是一个完全二叉树,而二叉树是一个节点最多可以有两个子节点的树。在了解更多关于堆数据结构之前,我们应该了解完全二叉树。

算法

深度优先搜索

深度优先搜索(DFS)通过从根节点开始并在回溯之前尽可能远地跟随每个分支来搜索图和树。DFS可用于检测图中的循环、查找路径以及定位强连通组件。

广度优先搜索

广度优先遍历(BFS)首先检查兄弟节点,然后检查子节点。BFS可用于对等网络中以查找最短路径,甚至可用于搜索引擎中使用的网络爬虫。

二分搜索

二分搜索是一种在排序数组中查找目标值位置的搜索算法。二分搜索将目标值与数组的中间元素进行比较。如果它们不相等,则消除目标不可能存在的一半,并在剩余的一半上继续搜索,再次取中间元素与目标值进行比较,并重复此过程直到找到目标值。如果搜索结束时剩余的一半为空,则目标不在数组中。

排序

排序算法是一种将列表元素按顺序排列的算法。

比较运算符用于设置数据结构中元素的新排列。

动态规划

动态规划是一种优化技术,用于解决相同工作反复重复的问题。

如果一个问题满足以下两个条件,则可以使用动态规划进行优化:

  1. 具有最优子结构。
  2. 具有重叠子问题。

如果一个问题满足这两个标准,那么我们可以肯定它可以使用动态规划进行优化。

回溯

回溯算法通过考虑搜索中的每个可能组合来尝试找到正确的输出。

它一次处理一个片段,并删除在任何点不满足约束的解决方案。

分治法

分治算法递归地将一个问题分解为两个或多个相同或相关类型的子问题,直到这些子问题变得足够简单可以直接解决。然后将子问题的解决方案组合起来给出原问题的解决方案。

如何练习编码问题

📆 制定你的时间表

如果你想准备攻克编码面试:

  • 在申请任何工作之前,给自己三个月的专注学习时间。
  • 每天留出2-3小时,在此期间处理2-3个编码问题。到三个月结束时,你将解决大约200个问题。
  • 然后你可以充满信心地进入面试。

📝 练习大声和在纸上/白板上解决问题

在你的练习中,你希望尽可能接近真实情况。

养成可视化映射解决方案、提问和回答问题以及谈论你的过程的习惯。这就是你在编码面试中会被要求做的事情。

如果你已经这样做了几个月:猜猜看——你将能够像钟表一样执行它。

📱 想要一个现成的结构?选择一个编码面试准备平台

如果你不想处理创建自己的时间表、选择最佳问题练习和查找最佳解决方案,你可能想投资一个课程或准备平台。

像AlgoExpert这样的平台指导你完成编码面试准备过程。

你得到最可能的问题,以简单的格式策划,一个内置的编译器可以直接输入你的代码,以及带有逐步解释的解决方案。

也看看不同的编码面试准备课程如何比较。

5. 提升软技能

提升你作为开发者的软技能,为编码面试的行为部分做准备。

留下好印象的3个技巧

  • 用例子回答关于你先前项目的问题
  • 了解公司,以便你可以定制解释为什么你想要这份工作,以及为什么雇用你会增加价值
  • 提出有趣的问题,展示你的兴趣和热情

准备行为答案

用对行为问题的出色回答赢得面试官

每当你被问到一个典型的行为问题时,你可以使用Saeed Gatson发明的CAT框架构建回答:

  • 情况(Circumstance)
  • 行动(Actions)
  • 收获(Takeaway)

首先谈论你所处的情况,然后解释你为解决问题所采取的行动,最后描述你从整个经历中的收获。

事先准备一些情况会有所帮助。

“告诉我关于你自己"的问题

使用Saeed的NFL方法,代表现在(Now)、以前(Former)、以后(Later)。

  • 从你现在正在做的事情开始。
  • 然后谈论你在以前的工作或项目中做过的事情。
  • 最后以你在这个给定机会中想要实现的目标结束。

我在面试中从未没有被问过这个问题。这几乎是肯定的。你不妨把它做好。

他们寻找的行为特质

合适的开发者不仅仅是了解算法的人;而是有效沟通并知道成为团队一部分意味着什么的人。

他们在行为面试中寻找的可以总结为4P:( credit: Saeed Gatson)

  • 解决问题的能力(Problem-Solving Ability)
  • 对公司的热情(Passion for the Company)
  • 对技术的热情(Passion for Technology)
  • 得体的展示(Personable Presentation)

详细来说,他们寻找这些特质:

编程面试的行为特质

  • 解决问题
  • 团队合作
  • 礼貌
  • 时间管理
  • 身体语言
  • 沟通
  • 处理未知情况

作为工程师,你需要成为一个问题解决者。在编码面试中,你有足够的时间来证明这一点。一个常见的错误是试图尽快开始编写代码。

你必须抵制这种冲动。 确保你花足够的时间完全理解问题,然后再尝试解决它。另一个大错误是试图在第一次迭代中过度解决解决方案。保持简单,不要试图耍花招。

新的工程角色在更大的团队中,因此能够团队合作、为团队效力并成为团队合作者,而不是个人贡献者,将对你产生巨大影响。通过谈论你过去做的项目来说服面试官你团队合作良好。

你将与公司内部的许多人互动——甚至是客户。这就是为什么你的面试官会筛选你的社交技能和意识。在面试中力求礼貌和同理心(而不软弱),你在这方面会得分很高。

展示你可以按自己的时间工作并完成事情。再次,你可以通过告诉他们你完成作品集中编码项目的过程来传达这一点。此外,你解决面试问题时如何分配时间也会给他们提示你的时间管理技能。

做好准备,投射你的声音,打开胸膛,对你说的每句话都充满信心。或者至少尝试自信。在面试中力求"放松的自信”。你为即将到来的事情做好了准备。但你对结果不太执着。这体现在你如何表现自己——而出色的个人展示可以赢得面试官的青睐。

好好倾听。回答要切中要点。不要谎报你的技能或项目!为他们准备问题。适应你的听众——有洞察力和同理心:知道你在和谁说话以及如何调整你的对话以适应他们。用你的语调展示你对公司、编写代码、完成项目的热情。

而不是冻结,你:提出正确的问题。采取高层次的观点,看看是否可以将其分解。

如果你能在压力下保持冷静,并保持乐观和以解决方案为导向,即使很难,你也能给面试官留下深刻印象。

如何在编码面试前提升软技能

社交技能对频繁练习反应良好。寻求将自己置于需要你有魅力的具有挑战性的社交情境中:

  • 与新的人交谈。尝试通过有趣和感兴趣来赢得他们。
  • 寻找任何公开演讲的机会并抓住它。
  • 与你的朋友、其他程序员和高级软件工程师练习模拟面试。

6. 练习模拟面试

为了准备在压力下表现,尽可能模拟真实的编码面试环境。模拟面试是做到这一点的最佳方式。

再次,有在线平台可以帮助你进行这些模拟面试。有两个主要选项:

  • Pramp将你与面试同类工作的同伴配对。你可以免费使用该平台与同伴进行模拟面试。
  • 其他面试平台收费,但你不是与同伴模拟面试,而是与真正的FAANG高级软件工程师配对。在编码面试之前多次进行这些,你将准备好轻松通过它。

7. 准备谈判

不要忘记为好的结果准备自己!

如果你到目前为止遵循了学习路线图的所有步骤——那么你最大化了收到offer的机会,迟早的事。

如果你谈判正确,你可以将软件工程工作的起薪提高相当多——比你从加薪中期望得到的要多得多。

谈判是值得的。其次,加薪是基于你当前工资的百分比。这就是为什么在开始新工作时获得好工资并尽可能好地谈判至关重要。

如果你能将整体薪酬提高10%——这通常很容易实现——你可能在加薪方面领先2-3年,加薪通常约为2-3%,但实际上可能为0%。

  • 不要第一个说出数字
  • 不要说你当前或过去的工资
  • 提出反报价
  • 小心从你想要的降下来,总是试图让他们上来
  • 套餐的所有部分都是可谈判的
  • 不要害怕花时间

这就是如何准备编码面试的总结!

有关在编码面试期间如何行动的提示,请查看我的文章,其中包含17个编码面试提示。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计