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

面试过100多位软件工程师后的建议

时间:2023-03-21 18:42:11 科技观察

我们都讨厌面试,然而,这是我们职业生涯中无法避免的事情。当我第一次天真地冒险进入软件工程面试的世界时,没过多久我就觉得我在2-3小时内识别软件工程师的能力和法医一样准确。然而,我一直想知道站在桌子的??另一边是什么感觉,以及如何才能知道工程师是否适合这个角色。在过去的几年里,我进行了100多次软件工程技术面试。虽然每家公司都有自己独特的面试流程,但人们往往会犯一些常见错误。以下是我关于如何避免犯这些错误的建议。1.一个好的软件工程师的成功之路和失败之路几乎是一样的。(成功之路和失败之路几乎完全相同。)——科林·R·戴维斯(ColinR.Davis,英国指挥家)什么是优秀的软件工程师?没有唯一的定义。这是关于公司对角色的需求以及公司的多样性和成熟度。一个刚刚起步的初创公司无疑需要较短的上市时间,而一个已经拥有庞大客户群的老牌公司可能会面临规模和结构方面的挑战。在理解产品对业务的意义的同时构建产品不同于解决复杂的技术问题。一丝不苟的完美主义工程师不同于快速迭代的工程师。你需要了解公司想要什么,然后在这种心态下制定你的行为和言语。不要试图写一份一刀切的简历,而是根据实际情况重写你的简历。如果你必须推销自己(在某种程度上,你总是必须出售,无论是正式的还是其他方式),你以一种你将成为特定公司资产的方式出售它。你应该了解这个角色试图满足的需求,并问问自己这个角色是否能激发你的灵感,如果有,就接受它。你应该弄清楚“优秀”的定义在公司的背景下是什么样的,并展示你的知识、经验和态度如何符合这个定义。2.做好准备。那些没有准备好的人是在准备失败。(Byfailingtoprepared,youarepreparingtofail.)——本杰明·富兰克林(BenjaminFranklin,美国政治家和科学家)在对公司一无所知的情况下参加面试,就像约会时只谈自己。并不意味着不会有第二次约会,但也不会给人留下好印象。努力了解业务、其目标、使命、战略和结果。我从来不会因为一个人对此一无所知就贬低他,但这也暗示了他的动机。同时,这也是HR倾向于评价的标准。除了公司目标之外,请务必查看他们的技术博客(如果有的话),并了解他们的技术栈。候选人通常不会表现出对公司应有的兴趣,但当他们表现出来时,这是脱颖而出的绝佳方式。3.具有批判意识教育的标志是你不必接受一种观点,但你可以适应它。(能够接受一个思想而不接受它是一个受过教育的头脑的标志。)——亚里士多德(亚里士多德,古希腊哲学家和科学家,柏拉图的学生,亚历山大大帝的老师)在工作中,我遇到过很多优秀的技术人,他们是形形色色的人。尽管如此,他们至少有一个共同点:他们都是挑战现状以改进流程和技术的人。许多求职者在被问到是否有问题要问时,也无话可说。回避提问是在浪费机会询问公司的技术决策和他们面临的挑战,并讨论每种技术的优缺点。例如:他们是否正在考虑迁移到HTTP/3?他们正在转向事件驱动的微服务架构吗?他们使用什么类型的消息代理?为什么不使用Kafka而不是RabbitMQ?他们使用什么数据库技术?用例是什么?在这个用例中,ElasticSearch是SQL的良好替代品吗?等等。质疑技术决策将表明您不仅了解技术并且可以争论何时应该使用它们,而且您还可以批判性地思考并最终关心改进您使用的任何应用程序。4.技术挑战理论的正确性永远无法通过足够多的验证性实验来证明,而理论的错误只需要一次证伪实验。(Noamountofexperimentationcaneverprovemeright;asingleexperimentcanprovemewrong.)——AlbertEinstein(阿尔伯特·爱因斯坦,犹太理论物理学家,创立了现代物理学两大支柱之一的相对论。)忘恩负义”和技术面试现状的公然不公平令人震惊。大多数课程涉及解决与计算机科学基础相关的某种问题,例如图形搜索或排序算法。我发现了一个轶事,求职者必须实现一个资源占用最少的树遍历算法,所以当他得到这份工作时,首先要调试的是一个10岁的庞然大物。作为候选人和面试官,我发现这种自命不凡的企图美化我们工作的复杂性令人沮丧。这些类型的挑战可能会使头脑中没有这些新概念的高级开发人员望而却步,即使他们可能在这个角色上有很多经验。我同意这些类型的练习并非完全无用;快速解决小问题的能力与解决需要几天才能解决的复杂问题的能力相关,但它们有根本的不同。面试过程应尽可能反映日常工作的实际情况。一些过程包括在实际应用程序中查找和修复错误、结对编程或实施自动化测试,我觉得这些比深奥的算法问题要充分得多。对于这种情况,一定要适应公司的语言选择,不要害怕提问,这样你才能全面了解挑战。但是,对于大多数过程,您将面临某种算法或数据结构问题,除非您具备良好的计算机科学基础知识,否则您无法解决这些问题。《程序员面试金典》(Crackingthecodinginterview)书、Leetcode网站、Pramp网站等资源都是很好的参考。无论哪种方式,一定要大声解释你的理由。通常,问题是一个接一个地叠起来的,一个失败了也没关系,只要你能解决剩下的就行。如果你卡住了,面试官会帮助你,关键是看候选人是否能从一个鲜为人知的问题中恢复过来,否则做得好,这很关键。此外,经验丰富的面试官可能会在您遇到困难时从提问转为教学,所以不要将此转换视为失败;环境的改变有助于消除大多数人的障碍。记住,面试官来这里是为了帮助你,也是为了评估你,而不是评判你。你想把面试官想象成在问题上指导你的老同事。务必与他讨论各种解决方案和权衡;这将显示您对问题的了解程度。5.不要气馁。成功意味着你比失败多起床一次。(成功在于只比跌倒多站一次。)——奥利弗·戈德史密斯(爱尔兰诗人、作家和医生。)我曾经遇到过这样的求职者,他在面试的时候特别不自信,没有把握。尽管他缺乏安全感和自我怀疑,但他还是被录用了,因为他做得很好。然而,在安顿下来后,在日常工作中,他有足够的信心来领导讨论并指导团队解决技术问题。有一次,我问他为什么在接受采访时显得如此缺乏安全感。他向我解释说,在那次面试之前,他经历了一系列灾难性的面试,在这些面试中他无法很好地应对被拒绝的情况。被拒绝是求职过程的一部分,你不能让它影响到你。不可能在几个小时内评估与软件工程相关的每项能力。每个流程为公司选择相关流程,并以最佳方式对其进行评估。这些可能是也可能不是你擅长的。糟糕的员工对公司来说很难,尤其是在士气和他们加入的团队方面。他们也付出了巨大的代价。再加上很多公司没有标准化的流程(重点是比较候选人,所以每个面试官应该处理相同的问题,应该有一个明确的流程,每个面试官都一样),所以你就剩下了相当大比例的假阴性。在面试中表现不佳并不意味着你是一个坏人。这意味着你在那个特定时间表现出的能力不是那个过程中最好的。我知道,当我失败并看到或听到这样的事情时,我总是认为这都是胡说八道。我一生都在努力成为一名战士。但是,有时我也会输掉太多的战斗。老是输的斗士,不过是个出气筒。但有时,你必须找到内在的力量,才能把自己从顺从的废墟中拉出来。站起来,举起双手,再战,别让失败降临。6.一切都与激情有关。工作会占据你生活的很大一部分,只有做你认为好的工作,你才会真正感到满足,只有热爱你所做的,你才能做出伟大的工作。所做的工作。如果您还没有找到它,请继续寻找。不要安定下来。事实上,当你找到它时,你的心就会知道。而且,就像任何良好的关系一样,它会随着时间的推移变得越来越好。因此,请继续寻找,直到找到为止。不要安定下来。(你的工作将占据你生活的很大一部分,真正满足的唯一方法就是做你认为是伟大的工作。而做伟大工作的唯一方法就是热爱你所做的事情。如果你还没有还没有找到,继续寻找。不要安于现状。与所有关于内心的事情一样,当你找到它时,你就会知道。)——史蒂夫·乔布斯(SteveJobs,美国企业家、营销商和发明家,以及联合创始人苹果)当我们在日常生活的混乱和混乱中航行时,我们渴望那些清晰的时刻,当我们在挑战或任务中迷失自我时,时间弯曲和现实弯曲消失。在那些超越的时刻,你的整个生命都会在你不知不觉中过去。这就是编程对我和我们许多人的意义。那是铭刻在我们内心深处的永恒不变的激情。同样的热情是成功的秘诀。我看到候选人在我们的面试过程中表现出色,但他们在申请的职位上表现不佳。他们不坏,有才华和知识,但他们只是平均水平。有时你擅长的事情你并不真正关心,但正是这种热情驱使你走向成功。衡量软件工程师的热情并不容易。然而,如果我问你有什么业余项目,或者你做过的最好的项目是什么,你可能整个下午都在热切地讨论几个项目。不管它是一个拥有数百万用户的平台,还是一个几乎无法运行的副业项目,都没有关系。一个充满激情的程序员会兴致勃勃地描述他应用的每一个模式,他克服的每一个挑战,甚至每一个裂缝和失败。这样,任何面试官都会知道坐在他对面的那个人是一位和他一样对编码充满热情的程序员。这是一种非常真实的反应,你几乎可以从他们的眼神和肢体语言中看出这一点。要么你对它充满热情,要么你根本就没有。如果你有热情,一定要谈论让你感动的项目,这可能是普通面试与优秀面试之间的区别。7.结论我一直觉得作为候选人最有压力的部分是知道我需要得到这份工作并证明我足够好。而面试官的角色也并非完全没有压力,他们需要确保有充分的理由赞成或不赞成某人,并且这样做的结果经得起推敲,我的情况一直如此,尤其是凭良心。大多数面试官都必须在某个时候接受面试,所以他们很有可能会善解人意。我希望这篇文章能帮助你从另一个角度看问题,我真诚地希望我的建议能帮助你找到你真正想要的工作。