当前位置: 首页 > 科技观察

程序员面试技巧总结

时间:2023-03-22 10:56:17 科技观察

闲聊在深入研究代码之前,大多数面试官喜欢聊聊您的背景。他们想知道:你对编码了解多少。你知道如何写出好的代码吗?个人能力/领导能力。您完成了整个工作流程吗?你有没有修复过一些不太正确的东西,即使你不需要这样做?交流。就技术问题与您沟通有用还是痛苦?您应该至少描述以下内容之一:您解决的一个有趣的技术问题您克服的人际冲突领导能力或个人能力的例子您为以前的项目做出了贡献关于您最喜欢的语言的一些琐事,您用该语言做什么,以及您不喜欢的地方关于公司产品/业务的问题关于公司的工程策略(测试、Scrum等)热爱技术。表达您为自己所做的事情感到自豪,对自己的选择充满信心,对语言和工作流程有自己的看法。沟通当谈到编码问题时,沟通是关键。一个在工作上需要帮助但能够正确沟通的候选人,甚至比能够游刃有余地解决问题的候选人还要好。了解它是什么类型的问题。有两种类型的问题:编码。面试官希望你能针对问题写出简洁高效的代码。短暂聊天。面试官想和你聊天。主题通常是(1)高级系统设计(“如何克隆Twitter?”)或(2)琐事(“提升在Javascript中意味着什么?”)。有时这些琐事还会引入“实际”问题,例如,“我如何在swift中对一列整数进行排序?好吧,如果它不是整数,而是其他东西……”。如果您开始编写代码,而面试官不想废话,只想尽快回答“真正的”问题,那么如果您喋喋不休,她可能会生气。只要问,“你正在为这个问题编写代码吗?”让你感觉像一个团队合作者。面试官想知道和你一起工作是什么感觉以及问题是什么,所以让他们把你看作是一个团队合作者。使用“我们”而不是“我”,例如,“如果我们当时进行了广度优先搜索,我们就会及时/准时找到解决方案。”如果可以选择在纸上或白板上编码,请选择白板。这样,您就可以接近面试官并直接面对他的问题(而不是从她的桌子对面看)。大声说出你的想法。不开玩笑,说,“我不知道这是否行得通——但让我试试。”如果你不知道该怎么做,如何解决这个问题,谈谈你现在的想法。告诉我你认为它可能如何工作。告诉我你认为什么会起作用,为什么不起作用。这同样适用于琐碎的闲聊问题。当面试官要求你解释Javascript闭包时,“这与范围有关,让我们把它放在一个函数中”可能会给你90%的分数。我不知道我不知道什么。如果您正在谈论的主题(例如,特定语言问题、特定琐事、运行时分析)是您从未涉及过的内容,那么不要假装您知道。相反,你可以直接说:“我不知道,但我猜是$thing,因为...”,因为后面可以通过分析排除其他选项,也可以使用其他语言或问题作为例子。不要不假思索地说话。不要自信地脱口而出答案。如果是正确的,那么你还需要时间考虑如何解释,如果是错误的,就会显得你冲动鲁莽。你不是在与人赛跑,你更有可能打断她或仓促下结论来惹恼她。走出困境有时你会被困住。放松。那并不意味着你失败了。请记住,面试官通常更关心的是你是否可以巧妙地从几个不同的角度揭示问题,而不是坚持到最后的正确答案。绘画。不要浪费时间在脑海中思考,它可以被绘制到棋盘上。绘制几个不同的测试输入。画出您将如何手动获得所需的输出。然后考虑将您的方法转化为代码。解决问题的简单版本。不确定如何在集合中找到第4大项?然后想想怎么找到第1大的item,再看能不能继续这个方法。编写一个干净且低效的解决方案,然后对其进行优化。尽力而为。尽一切努力获得某种答案。谈谈自己的想法。告诉我你所知道的。谈谈您认为什么可能有效以及为什么无效。您可能会突然意识到它确实有效,或者修改后的版本有效。也可能会提示您。等待提示。不要满怀期待地盯着面试官,而是要留出短暂的“思考”时间——面试官可能已经决定给你一个提示,并等待她避免打断她。考虑空间和运行时界限。如果您不知道是否可以优化解决方案,请说出来。例如:“我必须至少查看所有条目,我不能做得比O(n)时间复杂度更好。”“蛮力法可以检验所有的可能性。”“答案将包含n^2个数据项,所以我至少要花费N^2次。”写下自己的思路凭空想很容易自相矛盾。写下你的想法,然后进入细节。调用辅助函数并继续。如果您无法立即弄清楚如何或多或少地实现该算法,请跳过它。编写一个命名良好的调用函数,例如:“这将执行X”,然后继续下一步。如果辅助函数很简单,您甚至可以省略它。不用担心语法。还不如一笑了之。如果您必须考虑语法,请恢复为英语。只是向面试官解释你稍后会回来解决它。准备足够的空间。稍后您可能希望在行与行之间添加代码或注释。从板的顶部开始书写,每行之间留一个空白。***写一个重新检查的标志。不用担心你写的for循环是应该有“<”还是“<=”。在代码的顶部画一个复选标记,以提醒自己再次检查。先走自己的路。使用描述性变量名称。想出一个名字需要时间,但它可以防止你忘记编写一段代码的目的。使用names_to_phone_nums_map而不是nums。在名称中说明类型。返回布尔值的函数应该以“is_*”结尾,保存列表的Vars应该以“s”结尾。标准化是有道理的。浏览完解决方案,大声说话,输入示例。记录程序运行时变量所持有的值——如果你只是把它记在脑子里,你就不会赢得任何分数。这可以帮助您发现错误并迷惑面试官。寻找一次性错误。你的for循环应该使用“<=”而不是“<”吗?测试边缘情况。度量值包括空集合、单项集合或负数。加分点:提及单元测试!不要烦人。有些面试官可能不关心这些收尾步骤。如果你不确定,可以这样说,“我通常会检测到一些边缘情况——那么我们接下来要这样做吗?”练习***运行练习题没有捷径可走。好记性不如烂笔头。不要自欺欺人。一开始用钢笔写字可能会觉得很别扭。但如果你现在能克服这个问题,面试时你就不会感到笨拙和不自在了。本文中的实战题只提供了每个面试过程的线索和要点。没有真正的金科玉律,实际问题需要在真实面试中解决。***,祝大家面试成功。翻译链接:http://www.codeceo.com/article/programmer-interview-tips.html英文原文:CodingInterviewTips