攻克编程面试准备——7步成功指南
不要被面试过程吓倒。如果你知道如何准备——并采取所有必要步骤——你就能应对面试官提出的任何问题。这意味着迟早你会获得高薪工作,为你的编程生涯开个好头。
编程面试准备 - 7个步骤
- 构建编程作品集
- 进入他们的领域
- 像赢家一样思考
- 掌握面试问题
- 提升软技能
- 进行模拟面试
- 准备谈判
简而言之,这就是你成功的方式。遵循这个路线图进行编程面试准备。内化这七个步骤。尽可能专注并执行它们。获得高薪软件工程师工作。
1. 准备作品集
面试官最喜欢看到的就是他们能亲眼目睹你编程技能的实际成果。
当他们看到你的开发者作品集时:
- 他们知道你对构建和解决问题充满热情
- 他们看到你掌握技能的证明
- 他们欣赏你坚持到底的纪律性
提示: 提交简历时附上作品集。设计师这样做——工程师也应该这样做:这会让你脱颖而出。
完成的项目越多,你就越有可能学会有效编码并获得工作:
- 构建移动应用或Web项目。并准备好展示源代码。充满实际编程项目的作品集将使你在其他面试者中脱颖而出。
- 使用GitHub。向面试官提供你的GitHub用户名,让他们看到你参与的项目以及你的工作方式。
- 参加黑客马拉松。参与黑客马拉松是简历上的重要项目,也是面试中可以谈论的话题。
- 为开源项目做贡献。这表明你可以团队合作,并能接受代码审查。
2. 进入他们的领域
下一步是让你带着不可动摇的信心进入编程面试: 成为他们公司的专家。并尽早与他们联系。
- 查看"关于我们"页面。了解他们的历史、自我形象和价值观。
- 查看他们在社交媒体上的发布内容。通过查看他们的Twitter、Facebook或YouTube存在,你可以了解他们的信息传递和沟通风格。
- 阅读关于他们公司的最新文章。确保你了解公司的最新动态和当前业务往来。
- 在LinkedIn上找到面试官。尽可能了解他们的背景。你可以在面试中利用这些信息更好地与他们建立联系。
- 了解公司团队。搜索同一部门的人员。发送连接请求并开始与他们互动!结果是在面试当天你已经认识所有人。
- 联系最近的面试者。自我介绍后,礼貌地向他们询问面试过程的建议。在很多情况下他们会乐意帮助你。他们甚至可能告诉你被问到的问题类型。
现在你了解了他们的历史和当前事件。你知道他们重视什么。你已经认识了面试官和潜在的未来同事。
你甚至从最近经历过他们面试的人那里学到了如何最好地准备自己。
这些都将为你的编程面试带来优势。
3. 像赢家一样思考
- 可视化成功。花时间在心理上排练编程面试。想象你将如何熟练地解决问题、自信地沟通,并在整个面试过程中保持专注。
- 没有什么可失去的。当然,每次面试都是重要机会。但即使失败,还有更多公司可以申请。以富足的心态进入,你会发现更容易表现出色——同时保持冷静和自信。
- 不要担心无法控制的事情。担心结果、激烈竞争或团队动态是浪费内心资源,因为这超出了你的控制范围。保持对结果的独立性。如果获得职位,很好;如果没有,也没什么大不了的——不要个人化,为下一次面试更好地准备。
- 坚持会有回报。如果你愿意做真正的工作并投入时间,最终会成功。即使你不是最优秀的开发者且经验有限,通过坚持你也可以获得好职位。一旦获得,事情就会变得容易得多。
4. 掌握编程面试问题
回答技术问题是获得工作机会的重要部分。遵循本指南在面试的技术部分表现出色。
同时查看这里的常见编程面试问题。
学习如何解决问题
仅仅记忆问题无法攻克编程面试。目标是更高层次地理解事物。
你需要能够处理从未见过的问题,分解它并分析它。你了解它遵循的模式。然后你知道如何解决它。你可以逐步向面试官解释你的过程,充满自信。
这就是有效解决编程问题的方式。这就是在面试中给人留下深刻印象的方式。
简单的问题解决过程
- 完整阅读问题两次
- 使用3组样本数据手动解决问题
- 优化手动步骤
- 将手动步骤写为注释或伪代码
- 用真实代码替换注释或伪代码
- 优化真实代码
准备数据结构与算法问题
数据结构
数组 数组是编程中最常见的数据结构——也是确定信息如何访问的关键组成部分。这是面试官最喜欢的话题,在任何编程面试中都会听到很多关于数组的问题,例如反转数组、排序数组或在数组中搜索元素。
解决基于数组问题的关键是具有良好的数组数据结构知识以及基本编程结构,如循环、递归和基本操作符。
字符串 与数组和链表数据结构一起,字符串是编程工作面试中的另一个热门话题。我从未参加过没有基于字符串问题的编程面试。
字符串的好处是,如果你了解数组,可以轻松解决基于字符串的问题,因为字符串不过是字符数组。所以通过解决基于数组的编程问题学到的所有技术也可以用于解决字符串编程问题。
链表 链表是补充数组数据结构的另一种常见数据结构。与数组类似,它也是线性数据结构,以线性方式存储元素。然而,与数组不同,它不在连续位置存储它们;相反,它们分散在内存中各处,使用节点相互连接。
为了解决基于链表的问题,递归的良好知识很重要,因为链表是递归数据结构。
栈和队列 栈是类似于数组和链表的线性数据结构。区别在于栈不允许随机访问其元素。它可以概念化为只能从一个方向共同添加或减去的一组元素。
队列是线性数据结构,其中元素只能从列表的一侧(称为后部)插入,元素只能从另一侧(称为前部)删除。
图 图是由多个节点和边或"顶点"组成的非线性数据结构。图可以表示网络架构,并可用于解决实际问题。广义上,它们描述有向或无向关系。
树 树数据结构允许你以分层方式存储数据。根据存储数据的方式,有不同类型的树,例如二叉树,其中每个节点最多有两个子节点。
与其近亲二叉搜索树一起,它也是最流行的树数据结构之一。因此,你会发现很多基于它们的问题,例如如何遍历它们、计数节点、查找深度以及检查它们是否平衡。
解决二叉树问题的关键点是强大的理论知识,例如二叉树的大小或深度是什么,什么是叶节点,什么是节点,以及了解流行的遍历算法,例如前序、后序和中序遍历。
映射 映射是抽象数据类型,在数组中存储键值对。键值对关联两个数据片段,一个片段"键"可用于查找另一个片段"值"。
堆 堆是完全二叉树,二叉树是节点最多可以有两个子节点的树。在了解更多关于堆数据结构之前,我们应该了解完全二叉树。
算法
深度优先搜索 深度优先搜索通过从根节点开始搜索图和树,并在回溯之前尽可能远地跟随每个分支。DFS可用于检测图中的循环、查找路径以及定位强连通分量。
广度优先搜索 广度优先遍历首先检查兄弟节点,其次检查子节点。BFS可用于对等网络中的最短路径查找,甚至用于搜索引擎中的网络爬虫。
二分搜索 二分搜索是在排序数组中查找目标值位置的搜索算法。二分搜索将目标值与数组中间元素比较。如果不相等,则消除目标不可能存在的一半,并在剩余的一半上继续搜索,再次取中间元素与目标值比较,重复此过程直到找到目标值。如果搜索结束时剩余一半为空,则目标不在数组中。
排序算法 排序算法是将列表元素按顺序排列的算法。比较操作符用于设置数据结构中元素的新排列。
动态规划 动态规划是用于解决重复相同工作问题的优化技术。如果问题满足以下条件,可以使用动态规划优化:
- 具有最优子结构
- 具有重叠子问题
如果问题满足这两个标准,那么我们知道它可以使用动态规划优化。
回溯算法 回溯算法通过考虑搜索中的每个可能组合来尝试找到正确输出。它一次处理一个部分,并删除在任何点不满足约束的解决方案。
分治算法 分治算法递归地将问题分解为两个或多个相同或相关类型的子问题,直到这些子问题变得足够简单可以直接解决。然后将子问题的解组合起来给出原问题的解。
如何练习编程问题
📆 制定时间表 如果你想准备攻克编程面试: 在申请任何工作之前给自己三个月的专注学习时间。每天留出2-3小时,在此期间处理2-3个编程问题。到三个月结束时,你将解决大约200个问题。然后你可以充满信心地进入面试。
📝 练习大声和在纸/白板上解决问题 在练习中,你希望尽可能接近真实情况。养成可视化映射解决方案、提问和回答问题、以及讨论过程习惯。这就是你在编程面试中会被要求做的。
如果你已经这样做了几个月:猜猜看——你将能够像时钟一样执行它。
📱 想要现成结构?选择编程面试准备平台 如果你不想处理创建自己的时间表、选择最佳练习问题和查找最佳解决方案,你可能想投资课程或准备平台。
像AlgoExpert这样的平台指导你完成编程面试准备过程。你可以获得最可能的问题以简单格式整理、内置编译器直接输入代码,以及带有逐步解释的解决方案。
同时查看不同编程面试准备课程的比较。
5. 提升软技能
提升作为开发者的软技能,为编程面试的行为部分做准备。
留下好印象的3个技巧
- 用例子回答关于你之前项目的问题
- 了解公司,以便你可以定制解释为什么想要这个职位,以及雇佣你将增加什么价值
- 提出有趣的问题展示你的兴趣和热情
准备行为答案
用对行为问题的出色回答赢得面试官
每当被问到典型的行为问题时,你可以使用Saeed Gatson发明的CAT框架构建回答:
- 环境:谈论你处于的环境
- 行动:解释你为解决问题采取的行动
- 收获:描述从整个经历中的收获
事先准备几个环境情况有帮助。
“告诉我关于你自己"问题
使用Saeed的NFL方法,代表现在、过去、未来:
- 从你现在正在做的事情开始
- 然后谈论你在以前工作或项目中做过的事情
- 最后完成你希望在这个给定机会中实现的目标
我从未在面试中不被问到这个问题。这几乎是保证的。你最好精通它。
他们寻找的行为特质
合适的开发者不仅仅是了解算法的人;而是有效沟通并知道成为团队一部分意味着什么的人。
他们在行为面试中寻找的可以总结为4P:(致谢:Saeed Gatson)
- 解决问题的能力
- 对公司的热情
- 对技术的热情
- 得体的表现
详细来说,他们寻找这些特质:
编程面试的行为特质
- 解决问题
- 团队合作
- 礼貌举止
- 时间管理
- 肢体语言
- 沟通能力
- 处理未知情况
作为工程师,你需要成为问题解决者。在编程面试中,你有充足时间展示这一点。常见错误是试图尽快开始编写代码。你必须抵制这种冲动。确保在尝试解决问题之前花足够时间完全理解问题。另一个大错误是试图在第一次迭代中过度解决解决方案。保持简单,不要试图花哨。
新的工程角色在更大的团队中,因此能够团队合作、为团队效力并成为团队合作者,而不是个人贡献者,将对你产生重大影响。通过谈论你过去做的项目来说服面试官你团队合作良好。
你将与公司内部的许多人互动——甚至是客户。这就是为什么面试官会筛选你的社交技能和意识。在面试中力求礼貌和同理心(不软弱),你将在这方面得分高。
展示你可以按自己的时间工作并完成任务。再次,你可以通过告诉他们你完成作品集中编程项目的过程来传达这一点。此外,你在解决面试问题时如何分配时间也会暗示你的时间管理技能。
挺直身体,投射声音,打开胸膛,对你说的每句话充满自信。或至少尝试自信。在面试中力求"放松的自信”。你为即将到来的事情做好了准备。但你对结果不太执着。这体现在你的举止中——出色的个人表现可以赢得面试官。
倾听良好。回答要切中要点。不要谎报你的技能或项目!为他们准备问题。适应你的听众——有洞察力和同理心:知道你在与谁交谈以及如何定制对话。用你的语调展示你对公司、编写代码、完成项目的热情。
不要冻结,而是:提出正确问题。采取高层次视角,看看是否可以分解它。如果你能在压力下保持冷静,并保持乐观和以解决方案为导向,即使很难,你也能给面试官留下深刻印象。
编程面试前如何提升软技能
社交技能对频繁练习反应良好。寻求将自己置于需要魅力的具有挑战性的社交情境中:
- 与新的人交谈。尝试通过有趣和感兴趣来赢得他们。
- 寻找任何公开演讲的机会并抓住它。
- 与朋友、其他程序员和高级软件工程师练习模拟面试。
6. 练习模拟面试
为了准备在压力下表现,尽可能模拟真实编程面试环境。模拟面试是实现这一目标的最佳方式。
再次,有在线平台帮助你进行这些模拟面试。有两个主要选项:
Pramp将你与面试相同类型工作的同伴配对。你可以免费使用平台与同伴进行模拟面试。
其他面试平台收费服务,但与同伴模拟面试不同,你与真正的FAANG高级软件工程师配对。在编程面试前多次进行这些练习,你将准备好轻松通过它。
7. 准备谈判
不要忘记为好的结果做准备!
如果你到目前为止遵循了学习路线图的所有步骤——那么你最大化了获得offer的机会,早而不是晚。
如果你正确谈判,你可以将软件工程工作的起薪提高相当数量——远远超过你从加薪中期望获得的。
谈判有回报。其次,加薪基于你当前工资的百分比。这就是为什么在开始新工作时获得好工资并尽可能好地谈判至关重要。
如果你能将总薪酬提高10%——这通常容易实现——你可能在加薪方面领先2-3年,加薪通常约为2-3%,但实际可能为0%。
- 不要第一个说出数字
- 不要说你当前或过去的工资
- 提出反报价
- 从你想要的向下移动时要小心,总是尝试让他们向上移动
- 套餐的所有部分都是可谈判的
- 不要害怕花时间
这就是如何准备编程面试的总结!
有关在编程面试期间如何行动的提示,请查看我的文章17个编程面试技巧。