攻克编程面试准备——7步成功指南
不要被面试过程压垮。如果你知道如何准备——并采取所有必要步骤——你就能应对面试官抛出的任何问题。这意味着迟早你会获得高薪工作,开启编程生涯的正确道路。
编程面试准备 - 7个步骤
- 构建编程作品集
- 进入他们的领域
- 像赢家一样思考
- 掌握面试问题
- 提升软技能
- 进行模拟面试
- 准备谈判
简而言之,这就是你成功的方式。遵循这个路线图进行编程面试准备。内化这七个步骤。尽可能专注并执行它们。获得高薪软件工程师工作。
1. 准备作品集
面试官最喜欢的事情之一就是亲眼看到你编程技能的实际成果。
当他们看到你的开发者作品集时:
- 他们知道你对构建和解决问题充满热情
- 他们看到你掌握技艺的证据
- 他们欣赏你坚持完成项目的自律性
提示: 提交简历时附上作品集。设计师这样做——工程师也应该这样做:这会让你脱颖而出。
你完成的副项目越多,就越有可能学会有效编码并找到工作:
- 构建移动应用或Web项目。并准备好展示源代码。充满实际编程项目的作品集将使你在其他面试者中脱颖而出。
- 使用GitHub。向面试官提供你的GitHub用户名,以便他们查看你参与的项目以及你的工作方式。
- 参加黑客马拉松。参加过黑客马拉松是简历上的重要项目,也是面试中可以谈论的内容。
- 为开源项目做贡献。这表明你可以与团队合作,并能接受代码审查。
2. 进入他们的领域
下一步是带着不可动摇的信心进入编程面试: 成为他们公司的专家。并尽早与他们联系。
- 查看他们的"关于我们"页面。在这里你可以了解他们的历史、自我形象和价值观。
- 查看他们在社交媒体上发布的内容。通过查看他们的Twitter、Facebook或YouTube存在,你可以了解更多关于他们的信息和沟通风格。
- 阅读关于他们公司的最新文章。这样你可以确保了解公司的最新动态和当前业务往来。
- 在LinkedIn上找到你的面试官。尽可能了解他们的背景。然后你可以在面试中利用这些信息更好地与他们建立联系。
- 了解公司团队。搜索同一部门的人员。发送连接请求并开始与他们互动!结果是面试当天你已经认识每个人。
- 与最近的面试者联系。自我介绍后,礼貌地向他们询问面试过程的建议。在许多情况下,他们会乐意帮助你。他们甚至可能指出被问到的问题类型。
现在你了解了他们的历史和当前事件。你知道他们重视什么。而且你已经认识了面试官和潜在的未来同事。
你甚至从最近经历过面试的人那里学到了如何最好地准备自己。
这些都将为你的编程面试带来优势。
3. 像赢家一样思考
- 可视化成功。花时间在心理上排练你的编程面试。想象你将如何熟练地解决问题,自信地沟通,并在整个面试过程中保持专注。
- 没有什么可失去的。当然,每次面试都是一个大机会。但即使你失败了,还有更多公司可以申请。以富足的心态进入,你会发现更容易表现出色——同时保持冷静和自信。
- 不要为无法控制的事情压力。为结果、激烈竞争或团队动态压力是浪费你的内在资源,因为这超出了你的控制范围。保持对结果的独立。如果你得到职位,很好;如果没有,也没什么大不了的——不要个人化,为下一次面试做更好的准备。
- 坚持会有回报。如果你愿意做真正的工作并投入时间,你最终会成功。即使你不是最伟大的开发者且经验有限,通过坚持你也可以获得好角色。一旦你做到了,从那里开始就会容易得多。
4. 掌握编程面试问题
很好地回答技术问题当然是获得工作机会的重要部分。遵循本指南以在面试的技术部分表现出色。
另请查看常见编程面试问题。
学习如何解决问题
你不可能仅仅通过记忆问题来攻克编程面试。
目标是更高层次地理解事物。
你希望能够处理一个从未见过的问题,分解它并分析它。你了解它遵循的模式。然后你知道如何解决它。并且你可以逐步向面试官解释你的过程,充满信心。
这就是你有效解决编程问题的方式。这就是你在面试中给人留下深刻印象的方式。
简单的问题解决过程
- 完全阅读问题两次。
- 使用3组样本数据手动解决问题。
- 优化手动步骤。
- 将手动步骤写为注释或伪代码。
- 用真实代码替换注释或伪代码。
- 优化真实代码。
准备数据结构和算法问题
数据结构
数组 数组是编程中最常见的数据结构——也是确定信息如何访问的重要组成部分。
这是面试官最喜欢的话题之一,在任何编程面试中你都会听到很多关于数组的问题,例如反转数组、排序数组或在数组中搜索元素。
解决基于数组的问题的关键是拥有良好的数组数据结构知识以及基本编程构造,如循环、递归和基本运算符。
字符串 与数组和链表数据结构一起,字符串是编程工作面试中另一个流行的话题。我从未参加过没有基于字符串的问题的编程面试。
字符串的一个好处是,如果你了解数组,你可以轻松解决基于字符串的问题,因为字符串只不过是字符数组。
所以你通过解决基于数组的编程问题学到的所有技术也可以用于解决字符串编程问题。
链表 链表是另一种常见的数据结构,补充了数组数据结构。
与数组类似,它也是一种线性数据结构,以线性方式存储元素。
然而,与数组不同,它不在连续位置存储它们;相反,它们分散在内存中的各处,使用节点相互连接。
为了解决基于链表的问题,良好的递归知识很重要,因为链表是递归数据结构。
栈和队列 栈是一种类似于数组和链表的线性数据结构。区别在于栈不允许随机访问其元素。它可以概念化为只能从一个方向联合添加或减去的一组元素。
队列是一种线性数据结构,其中元素只能从列表的一侧(称为后部)插入,元素只能从另一侧(称为前部)删除。
图 图是由多个节点和边或"顶点"组成的非线性数据结构。图可以表示网络架构,并可用于解决实际问题。广泛地说,它们描述了有向或无向关系。
树 树数据结构是一种允许你以分层方式存储数据的数据结构。根据存储数据的方式,有不同类型的树,例如二叉树,其中每个节点最多有两个子节点。
与其近亲二叉搜索树一起,它也是最流行的树数据结构之一。因此,你会发现很多基于它们的问题,例如如何遍历它们、计数节点、查找深度以及检查它们是否平衡。
解决二叉树问题的关键点是强大的理论知识,例如什么是二叉树的大小或深度,什么是叶节点,什么是节点,以及对流行遍历算法的理解,例如前序、后序和中序遍历。
映射 数据结构中的映射是抽象数据类型,在数组中存储键值对。
键值对关联两个数据片段,一个片段"键"可用于查找另一个片段"值"。
堆 堆是完全二叉树,二叉树是节点最多可以有两个子节点的树。在了解更多关于堆数据结构之前,我们应该了解完全二叉树。
算法
深度优先搜索 深度优先搜索(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. 练习模拟面试
为了准备在压力下表现,尽可能模拟真实的编程面试环境。模拟面试是做到这一点的最佳方式。
再次,有在线平台可以帮助你进行这些模拟面试。有两个主要选项:
- Pramp将你与面试同类工作的同伴配对。你可以免费使用该平台与同伴进行模拟面试。
- 其他面试平台收费,但与同伴模拟面试不同,你与真正的FAANG高级软件工程师配对。在编程面试之前多次进行这些,你将准备好轻松通过它。
7. 准备谈判
不要忘记为好的结果准备自己!
如果你到目前为止遵循了学习路线图的所有步骤——那么你最大化了尽早获得offer的机会。
如果你谈判正确,你可以将软件工程工作的起薪提高很多——远远超过你从加薪中期望得到的。
谈判有回报
其次,加薪基于你当前工资的百分比。这就是为什么在开始新工作时获得好工资并尽可能最好地谈判至关重要。
如果你能将总薪酬提高10%——这通常很容易实现——你可能在加薪方面领先2-3年,加薪通常约为2-3%,但实际上可能为0%。
- 不要首先说出数字
- 不要说你现在或过去的工资
- 提出反报价
- 从你想要的下降时要小心,总是尝试让他们上升
- 套餐的所有部分都是可谈判的
- 不要害怕花时间
这就是如何准备编程面试的总结!
有关如何在编程面试中行动的提示,请查看我的文章17个编程面试提示。