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

本文详细介绍了准备编程面试的7个关键步骤,包括构建作品集、研究目标公司、掌握算法数据结构问题、提升软技能、模拟面试和薪资谈判技巧,帮助开发者系统性地准备技术面试。

攻克编程面试准备——7步成功指南

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

编程面试准备 - 7个步骤

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

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

1. 准备作品集

面试官最喜欢的事情莫过于亲眼看到你编程技能的实际成果。

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

  • 他们知道你对构建和解决问题充满热情
  • 他们看到你掌握技艺的证据
  • 他们欣赏你将事情坚持到底的纪律性

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

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

  • 构建移动应用或Web项目。准备好源代码展示。
  • 使用GitHub。向面试官提供你的GitHub用户名,让他们可以看到你参与的项目和工作方式。
  • 参加黑客马拉松。参加过黑客马拉松是简历上的亮点,也是面试时可以谈论的话题。
  • 为开源项目做贡献。这表明你可以团队合作,并能接受代码审查。

2. 进入他们的领域

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

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

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

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

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

这些都会让你在编程面试中占据优势。

3. 像赢家一样思考

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

4. 掌握编程面试问题

回答好技术问题当然是获得工作offer的重要部分。遵循本指南来搞定面试的技术部分。

学习如何解决问题

仅仅记忆问题无法攻克编程面试。

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

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

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

简单的问题解决过程

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

准备数据结构和算法问题

数据结构

数据结构 描述
数组 编程中最常见的数据结构——决定信息如何访问的关键组件。解决基于数组问题的关键是拥有良好的数组数据结构知识以及基本编程构造,如循环、递归和基本操作符。
字符串 与数组和链表数据结构一起,字符串是编程工作面试中的另一个热门话题。字符串不过是字符数组,所以解决数组编程问题的所有技术也可用于解决字符串编程问题。
链表 补充数组数据结构的另一种常见数据结构。与数组类似,它也是线性数据结构并以线性方式存储元素。但与数组不同,它不在连续位置存储它们;而是分散在内存中各处,使用节点相互连接。
栈和队列 栈是类似于数组和链表的线性数据结构。区别在于栈不允许随机访问其元素。可以概念化为只能从一个方向共同添加或减去的一组元素。队列是线性数据结构,其中元素只能从列表的一侧(称为后部)插入,元素只能从另一侧(称为前部)删除。
由多个节点和边或"顶点"组成的非线性数据结构。图可以表示网络架构并可用于解决实际问题。广义上,它们描述有向或无向关系。
允许以分层方式存储数据的数据结构。根据存储数据的方式,有不同类型的树,如二叉树,其中每个节点最多有两个子节点。
映射 存储键值对的抽象数据类型。键值对关联两个数据片段,一个片段"键"可用于查找另一个片段"值"。
完全二叉树,二叉树是节点最多可以有两个子节点的树。

算法

算法 描述
深度优先搜索(DFS) 通过从根节点开始并在回溯前尽可能远地跟随每个分支来搜索图和树。DFS可用于检测图中的循环、查找路径和定位强连通组件。
广度优先搜索(BFS) 首先检查兄弟节点,然后检查子节点。BFS可用于点对点网络中以查找最短路径,甚至可用于搜索引擎中的网络爬虫。
二分搜索 在排序数组中查找目标值位置的搜索算法。二分搜索将目标值与数组中间元素比较。如果不相等,则消除目标不可能存在的一半,并在剩余的一半上继续搜索,再次取中间元素与目标值比较,重复此过程直到找到目标值。
排序算法 将列表元素按顺序排列的算法。比较运算符用于设置数据结构中元素的新排列。
动态规划 用于解决相同工作反复重复的问题的优化技术。如果问题具有最优子结构和重叠子问题,则可以使用动态规划进行优化。
回溯算法 通过考虑搜索中的每个可能组合来尝试找到正确输出。它一次处理一个片段,并删除在任何点不满足约束的解决方案。
分治算法 递归地将问题分解为两个或多个相同或相关类型的子问题,直到这些子问题变得足够简单可以直接解决。然后将子问题的解决方案组合起来给出原问题的解决方案。

如何练习编程问题

  • 📆 制定计划 如果你想准备攻克编程面试: 在申请任何工作之前给自己三个月的专注学习时间。 每天留出2-3小时,在此期间处理2-3个编程问题。三个月结束时,你将解决大约200个问题。 然后你可以充满信心地进入面试。

  • 📝练习大声解决问题并在纸/白板上 在练习中,你要尽可能接近真实情况。 养成可视化映射解决方案、提问和回答问题、以及讲解过程习惯。这就是你在编程面试中会被要求做的事情。 如果你已经这样做了几个月:猜猜看——你将能够像时钟一样精确地执行它。

  • 📱想要现成结构?选择编程面试准备平台 如果你不想自己创建计划、选择最佳练习问题和查找最佳解决方案,你可能想投资课程或准备平台。 像AlgoExpert这样的平台指导你完成编程面试准备过程。 你可以获得以简单格式策划的最可能问题、内置编译器直接输入代码,以及带有逐步解释的解决方案。

5. 提升软技能

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

留下好印象的3个技巧

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

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

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

  • 环境(Circumstance)
  • 行动(Actions)
  • 收获(Takeaway)

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

事先准备好一些环境情况会很有帮助。

“介绍一下你自己"问题 使用Saeed的NFL方法,代表现在(Now)、以前(Former)、以后(Later)。 从你现在正在做的事情开始。 然后谈论你在以前工作或项目中做过的事情。 最后完成你在这个给定机会中想要实现的目标。

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

他们寻找的行为特质 合适的开发者不仅仅是懂算法的人;而是有效沟通并知道成为团队一部分意味着什么的人。

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

  • 解决问题的能力
  • 对公司的热情
  • 对技术的热情
  • 得体的展示

具体来说,他们寻找这些特质:

行为特质 描述
问题解决 作为工程师,你需要成为问题解决者。在编程面试中,你有充足时间展示这一点。常见错误是试图尽快开始编写代码。你必须抵制这种冲动。确保在尝试解决问题之前花足够时间完全理解问题。另一个大错误是试图在第一次迭代中过度解决解决方案。保持简单,不要试图耍花招。
团队合作 新的工程角色在更大的团队中,所以能够团队合作、为团队效力并成为团队合作者,而不是个人贡献者,将为你带来巨大差异。通过谈论你过去做的项目来说服面试官你团队合作良好。
礼仪 你将与公司内部的许多人互动——甚至是客户。这就是为什么面试官会筛选你的社交技能和意识。在面试中力求礼貌和同理心(不软弱),你在这方面会得分很高。
时间管理 展示你可以按自己的时间工作并完成任务。再次,你可以通过告诉他们你完成作品集中编程项目的过程来传达这一点。此外,你解决面试问题时分配时间的方式也会给他们关于你时间管理技能的提示。
肢体语言 设置好,投射你的声音,打开胸膛,对你说的每句话都充满自信。或者至少尝试自信。在面试中力求"放松的自信”。你为即将到来的事情做好了准备。但你对结果不太执着。这体现在你的举止中——出色的个人展示可以赢得面试官。
沟通 倾听良好。回答要切中要点。不要谎报你的技能或项目!为他们准备问题。适应你的听众——有洞察力和同理心:知道你在和谁说话以及如何调整你的对话以适应他们。用你的语调展示你对公司、编写代码、完成项目的热情。
处理未知 不要冻结,而是:提出正确问题。采取高层次视图,看看是否可以将其分解。如果你能在压力下保持冷静,并保持乐观和以解决方案为导向,即使很难,你也能给面试官留下深刻印象。

如何在编程面试前提升软技能 社交技能对频繁练习反应良好。寻求将自己置于需要魅力的具有挑战性的社交情境中:

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

6. 练习模拟面试

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