概述
作者 | Nisarg Shah
译者 | 弯月
出品 | CSDN(ID:CSDNnews)
迄今为止我没有参加过任何面试,也不知道这是幸运还是不幸。本文是根据我作为面试官在经历了 40 多场面试后,总结出来的经验,我一共发出过大约 25 个 offer。
流程总结
高级软件工程职位(以及其他相关角色,如数据工程和机器学习工程)的竞争非常激烈,你需要认真地准备,并勤加练习。编程面试题一般都不会出现在日常工作中。这可能是软件工程岗位的面试与其他领域最大的不同。
面试的流程大致为:
准备面试,包括刷编程考试题以及提高系统设计技能。
设法获取推荐信,或联系招聘人员,或直接去公司网站申请职位。
如果拿到回复,则需要按照以下顺序接受面试:
a.招聘人员联系你,确定职位以及面试日期。在这个阶段也可以讨论薪资待遇。
b.电话筛选:只有一轮面试,通常包括编程测试。
c.现场面试:一系列的编程、设计与行为考察,一般面试你的人很可能会成为将来的同事。
d.拿到录取通知。
比较各家的录取通知,然后逐个协商。
接受一家公司,拒绝掉其他公司。选择一个正式上班的日期。
流程的详细步骤
下面,我们来总结面试的各个阶段,以及我们将在每个阶段讨论的内容:
准备:在面试之前或刚递交简历时需要考虑的事情。你需要做好心理准备。
热身:面试要求的基础知识,准备编程测试。
练习:认真准备,联系公司和招聘人员。
面试:各个面试阶段的技巧。
交涉条件:最关键的一步,所有投入到准备中的时间都将在此刻体现出来。
接受录取通知:终点线。
面试结束后:关于结束当前工作的一些建议。
下面,我们就来仔细谈一谈每个阶段,以及与之相关的思维方式和面试相关活动。
准备
动机
问问自己:“我为什么要找新工作?”
你必须清楚自己寻求改变的原因。虽然不需要什么伟大或具体的目标,但既然你已决定花费大量时间准备、计划和面试,那么肯定是有原因的。你应该弄清楚这个原因。
只有找到这样的动机,你才有勇气面对被人拒绝,并努力做好各项准备。
选择编程语言
为了在编程面试中脱颖而出,你必须选择一门自己擅长的编程语言。以下是在选择编程语言的时候,需要考虑的一些事项。
角色或职位特有的限制。
你需要根据申请的角色类型,选择一门最合适的语言。对于大多数软件工程角色来说,任何语言都可以。但是如果你申请的职位是 iOS 开发或高频交易技术岗位,则面试中能够使用的语言可能并没有太大选择。
选择自己最擅长的编程语言。
选择自己熟悉的语言可以节省学习另一门语言的时间,减少在编程面试中出错的机会,而且万一遇到有关语言细节的问题(比如 Java 的线程或 Python 的全局解释器锁),你也不用担心。
简洁的语言
我强烈推荐你选择一种富有表现力且非常简洁的语言,即便不是你最熟悉的语言。比如,Python 比 C++ 更好。在 30分钟的编程测试中,在白板上书写代码时,实现相同逻辑的解决方案,Python 之类的语言可以大幅减少代码行数。
其次,简洁的编程语言更方便面试官理解逻辑,也能让你更快地发现小错误。
讲一个小故事:在读研究生期间,有一次参加某家热门公司的实习面试,虽然我找到了解决方案,但来不及写完代码。最后面试官坦言,这个问题太复杂了,对于没有见过该题的人,使用Java等语言在25分钟之内编写出完整的方案的确非常困难,同时他还推荐了 Python。但这家公司依然拒绝了我!从那以后,我就换成了 Python,因此我强烈推荐 Python。
你不必为了面试深入学习某种语言。在上述实习面试中,当时我最喜欢的语言是 Java,我对面试官明确地说我也使用 Python,因为它很简洁,但我不了解 Python 的细节,我很乐意编写解决方案并回答有关 Java 的问题。
争取多个offer
我强烈建议你努力争取拿到多家公司的录取通知。
多份录取通知在手,你就更有底气与对方协商更好的薪酬。通常招聘人员会收集有关其他 offer 的详细信息,以便为你争取更好的薪酬。即便你一门心思只想进一家公司,拿到另一家公司的录取通知也有助于你获得更高的薪资。
参加不同公司的面试,可以让你深入了解不同的工作文化、公司使命以及不同团队的工作内容。这是一个很难得的机会,可能会影响到你当前或未来的职业发展决定。
当手头的某个录取通知快要到期的时候,如果你还在参加面试,而手头的另一份录取通知书距离截止期限还有时间,你就可以简单地拒掉前一个。当我因到期而拒绝掉某个录取通知时,一般对方都会延长时间。
在填写申请和参加面试的过程中,你的名字会记入招聘人员的系统。即便你没有通过面试,将来他们也有可能再次联系你,这样可以方便你安排面试。有些公司会根据你过去的表现,跳过电话面试,甚至免去几轮面试。
多个录取通知在手,你就可以灵活地做出更明智的选择。也许异地的某个选择目前并不重要,但将来可能会很重要,而且你还可以灵活地选择在哪个城市工作。
更新简历
将新参加的项目和收获的经验添加到简历中。除非你申请是的研究人员,而且需要展示你所有的论文,否则请将简历压缩到一页。
如果你参加过的项目很多,一页纸装不下,则可以考虑保留哪些内容以及删除哪些内容:
关联度
突出显示与你申请的职位相关的技术与项目。对于机器学习工程职位来说,Android 项目的经验没有任何帮助性。
影响力
突出显示能够展示你的职责范围、设计技能、指标完成度、项目或人员管理技能的项目。最好能包含可量化的信息。这些信息可以凸显你的技术娴熟度以及水平,比使用流行语更有成效。
时效性
虽然学校的项目也很了不起,但招聘经理对你现在所做的工作更感兴趣。
公司的项目比个人项目更好,除非你的个人项目是在开源中开发的,并且具有重大的影响或被广泛采用。原因是,企业项目有更严格的截止日期、资金风险,而人员与团队的合作也更具挑战。
可见性
展示公司以外的人可以看到的工作成果,比如向开源项目贡献代码,或发表论文、公司新闻公告等。
请注意,面试官可能会问到有关简历中包含的项目的问题。你必须做好准备,说明确切的职责,并回答有关项目的具体问题。
在准备面试的过程中,你需要不断更新简历。可能距离你上次更新简历已经过了很久了。
系统设计
系统设计需要的准备比较少,因为大多数经验都来自工作,以及阅读有关该领域最新发展的博客、文章和论文。与编程面试相比,系统设计面试的重要性取决于你申请的职位。
从准备的角度来看,最好不要一次性做好所有准备。相反,从开始准备到正式参加面试,你可以考虑:
阅读有关设计的书籍
Martin Kleppmann 的著作《Designing Data-IntensiveApplications》是一本关于如何提高设计技能的佳作。
有关面试的在线资源
donnemartin 的 System Design Primer 是一个很好的阅读资源,可以帮助你快速回顾基础设施系统的基本设计原则。
阅读有关系统设计的论文或文章
https://paperswithcode.com:AI 论文精选
https://blog.acolyer.org
The Morning Paper
技术博客
http://highscalability.com
Netflix 的博客
几乎每个科技公司都有自己的博客,你可以选择自己喜欢的阅读。
热身
刷编程题
鉴于如今编程面试的压力非常大,刷编程题成为了面试准备中最耗时的工作。因此,我建议尽快开始做准备,调整好心态,熟悉考题界面。
你可以选择一些非常流行的编程测试网站,或专门的编程面试准备网站。
Leetcode:https://leetcode.com/
Hackerrank:https://www.hackerrank.com/
CodeWars:https://www.codewars.com/
我建议你从最简单的题目开始。即使你读完问题就能立即想到解决方案,也要试着去编写代码。你会惊讶于一个简单的问题可能有多少边缘情况。
通常,我会做一些简单的题目,直到觉得它们太简单。我可以通过这种练习学习如何覆盖所有的边缘情况,并且不需要太多思考。如果你觉得这一步太简单,可以直接跳过。
你想获得什么?
列出你梦寐以求的工作应具备的优点。按照优先顺序排列。以下是一些需要考虑的方面。
团队文化、经理、项目、机遇
薪资
学习机会
职业发展机会
理想职位、等级
业务领域(产品、基础设施、机器学习)
地理位置
工作与生活的平衡
个人品牌建设或声誉
当然还有很多方面。当你拿到多个录取通知时,就会很难做决定,每家公司都有各自的优缺点。整理一份你参加面试的原因,以及你真正希望获得怎样的工作,可以帮助你在日后做决定。
你想去哪里?
通常我会列出所有我想去的地方。不要觉得自己在异想天开。你只需要将这些公司的名字写下来,敢于尝试才能改变自己的职业发展。
挨个查看你一直想去的所有公司,看看他们都有哪些空缺职位,以及他们的哪些城市在招人。
即便你没有接到对方的电话或没有通过面试,也不要担心。大不了就是被对方拒绝。你可以给自己设定下限,却没人能够给你设定上限。
联系身边的朋友和同事,了解他们是否满意自己的工作,是否可以推荐你去当前或以前的公司工作。
了解创业生态系统的情况。
了解都有哪些新公司或快速发展的公司,阅读有关这些公司的文章,选择发展目标与你有共鸣的公司。
过去收到的招聘人员的电子邮件。
向着目标出发
申请工作
我建议按照以下顺序申请工作:
请求周围的好友推荐。这样,至少招聘人员会仔细看一看你的简历。
查找以前收到的招聘人员的电子邮件。
通过各个公司的招聘网页申请工作。
注册各个求职网站。
联系招聘人员。
认真地准备编程测试
如果你觉得编程测试网站上的题目太简单,就从中等难度的题目开始。模拟在面试环境中解决问题。
统计时间,看看自己解决编程问题需要多长时间。尝试在 30 分钟内完成中等难度的题目,最高难度的题目 为 45 分钟。一般面试的时间就这么长。
刚开始的时候,需要的时间肯定更长,这很正常。你的目标是提高速度,但这需要一些练习。
说出你的解决方案,就像你在向面试官解释如何解决这个问题一样。
这一点请千万注意。
考虑各种选择。你不仅需要解释逻辑算法,而且还需要说出每个解决方案的时间和空间复杂度,任何算法都可以这样比较。
等到你想不出更好的解决方案时,再开始写代码。
不要妄想第一次尝试就能获得正确的解决方案。真正的面试没有回头路。
不要通过点击提交来确认是否做对了。我们正在模拟面试!通过阅读代码来查找错误,确保完成后的代码是正确的。我们的目标是第一次尝试无需任何修改就可以做对。
确保变量名足够简洁(为了速度),但也不能完全没有意义。
在有足够的信心后,可以尝试一次性完成代码,不要添加或修改。这主要是为白板编程面试做准备,因为你很难在白板上添加漏掉的代码,不方便阅读。出于这个原因,我喜欢在开始编写代码之前,在白板一侧快速地写下伪代码。
在任何一个问题上花费的时间都不能超过 1 个小时。如果 1 个小时后还没做出来,那就直接阅读解决方案吧。题目有很多,但我们的时间很有限。我们应该练习更多问题,而不是在没有任何帮助的情况下设法获取解决方案。随着练习的增多,逐步减少在每一道题目上花费的时间,一直减少到 30 分钟。
刚开始准备的时候,你会犯很多错误。等到你能够在第一次尝试中就找到正确答案,我建议你换到真正的白板上,目的是为了体验真正的面试环境。你的书写可能会很混乱,这样的练习会很有好处。
招聘人员的电话面试
如果某家公司对你的个人资料感兴趣,招聘人员就会和你联系,看看你是否适合他们的职责和团队。他们希望了解的信息包括:
你与团队以及职位的匹配程度;
相关的工作经历;
加入公司的动机和兴趣;
你的面试时间计划。
面试
时间安排
电话面试
你可以根据自己的时间来安排电话面试。我之前一天安排了多个电话面试,但每个面试之间应该留一些空档,防止超时。
我建议使用无线耳机,这样你的双手就可以自由打字了。事先与朋友测试网络、语音清晰度和设备。
现场面试
完全取决于你个人的喜好。
我喜欢拿出整整一周的时间来参加一场接一场的现场面试。大多数公司都允许你随意安排时间,所以我就都安排在了那一周。我认识的一些朋友不喜欢接二连三的面试,所以会错开时间。
我也会在“面试周”之间留出几天时间。不仅可以放松一下,而且还能从错误中吸取教训。不过时间不会太长,因为录取通知很快就会到期。
集中一周参加完所有的面试,这样我拿到的录取通知的截止日期也基本统一,我就可以专心考虑面试,而不用担心工作。
编程考题
在这段时间内,我建议你只练习自己不擅长的编程题,比如动态规划或基于递归的解决方案。你必须进行这样的练习。我建议不要追求完美,因为考察的并不是死记硬背。
行为问题
尽管在行为问题的面试中,大多数问题都是关于你过去的经历,但你可以实现思考一下常见的问题,这样就可以在面试中给出清晰的答案。
关于过去项目的问题
想一些最有趣、最有影响力或最具挑战性的项目。我推荐真实的工作经验,而不是个人项目,因为实际的项目更具可比性,但一定要诚实。请注意,即便是失败的项目也没关系,你可以谈谈从中学到了什么。
积极的人生经历
令人难忘的合作,高效的团队项目,跨团队的项目。
消极的人生经历
失败的合作、由于沟通不畅导致项目延期,以及与难相处的人打交道。
你希望找一份怎样的工作
你为什么想找新工作?对新工作有哪些期望?你想学什么?你为什么想加入这家公司?
工作风格、文化契合
你喜欢单独工作还是团队合作?你如何与经理、同事和下属进行一对一的交流?如何推动跨团队协作?如何规划项目时间、分配职责?你有一个框架来发现机会吗?如何激励队友?
未来的计划
你觉得N年以后自己会是什么样子?你最擅长什么?你想有哪些提升?
动机、灵感
任何能激发灵感的人、项目或想法。什么活动能让你充满活力?什么活动会让你感到疲倦?
编程面试
编程面试的时间非常有限。我们需要尽可能高效地利用这段时间来解决问题。
我喜欢简短的闲谈。首先面试官会聊一些简单的问题,如果求职者滔滔不绝地讲个不停,面试官也不会打断。但这会耽误实际写代码的时间,如果代码不正确,那么一切都等于白搭。
讲个小故事:有一次,有一位面试官看到我的简历上写着我去过加州大学洛杉矶分校,于是我们两个就这所学校和洛杉矶谈论了近 20 分钟。最后,我拿到的 offer 比我想象的差很多,主要是因为我没能出色地完成编程面试。招聘委员会只看到了事实,并不会记录这段时间内发生的事情。所以,我会再三提醒你节约时间。
关于模拟编程环境的提醒和注意事项:
仔细听编程考题。你可以自由使用白板或记事本记下要点。
想一想你应该提哪些问题,可能会遇到的边缘情况,并事前得到澄清。一些面试官问的问题比较模糊,所以记住这一步可以节省很多时间,并压缩答案的空间。
一边思考解决方案,一边与面试官交谈。
请千万记住这一点。
在考虑各种选择时,请与面试官交谈。这表明你愿意考虑新的解决方案,并考虑权衡取舍。一些面试官会根据你采取的方法给出提示,这可以避免你跑题。
此外,这也可以展现你的沟通技巧。
不要试图直接找到最有效的解决方案。从最简单、最明显的解决方案开始,然后逐步寻找更好的想法来改进算法的时间或空间复杂性。
当最终你找到一个自认为合适的解决方案时,请先讨论你选择的解决方案的时间和空间复杂度。问一问面试官对此是否满意。这是一个节省时间的技巧,因为这可以避免你将某个并不满意的解决方案写成代码。
等得到面试官口头肯定后,再开始编写代码。
每写几行,解释一下你的代码在做什么。这有助于面试官理解你的代码和思路,帮助你朝着正确的方向前进,并及时发现潜在的错误。
被拒
被拒是无法避免的。
如果你从未遭到任何拒绝,则表明你是该领域的专家,或者只是因为你的目标不够高。
面试不是一门精准对科学,其中存在大量可变因素,比如期望与工作描述、面试遇到的编程题的难度、行为与设计面试的判断方式,以及面试官的心情等等。不要因此而否定自己的职业和技术力。这其中有太多不可控变量。
不要因为被拒而气馁。你可以要求招聘人员提供反馈,有问题则改之,无则加勉。
交涉
不要心急
参加多家公司的面试,最后很可能在参加面试的同时拿到另一家公司的录取通知。
有些招聘人员会催促你尽快接受某个工作。我强烈建议你不要心急。你可以告诉他们你还有其他公司的面试,并告诉他们你什么时候能给出答案。一般我给出确切的日期后,他们都会延长录取通知的截止期限。
事实上,一些招聘人员有权在给定的时间表内发出录取通知。你需要打电话了解一下。当手握多份录取通知时,你就一点都不会担心了。如果你最终决定接受某个 offer,则请取消其他面试。
我从来没有,而且也永远不会建议违约。这会让你投入到时间和心血付之东流,而且还会被拉入黑名单。
你值得更高的薪资待遇!
一定要交涉。你从朋友那里听到的两年前的消息,肯定不同于如今的行情。
请求招聘人员提供更好的薪资待遇绝对没有坏处。他们在为你时间和知识付钱。你可以要求更高的基本工资、股票或入职奖金。此外,还可以提出搬迁费等其他福利补贴。如前所述,如果手握几个富有竞争力的 offer,会很有帮助。
请记住,一切都可以协商。
接受 offer
最后的决断
现在你已经完成了面试,所有的结果都摆在你面前,再次回想一下你希望寻找怎样的新工作。牢记这一点,然后给你手中的选择排名次。请注意,你会受到人员、项目或公司使命以及文化的影响,因此这个排名偏离最初的优先级列表也很正常。
如果你犹豫不决,则可以联系一下朋友,看看谁在那家公司或竞争对手公司工作,并获取更多信息。如果你在面试中提出的有些问题没有得到答复,则可以让招聘人员安排与未来的经理通话。
在你决定放弃某些 offer 时,就应该让招聘人员知道。而且也应该让他们知道你最终选择了哪个。
恭喜!
下一步的计划和时间安排
在你接受 offer 之后,就需要准备法律文书了。整个过程可能需要一段时间,特别是如果你持有工作签证的话。
从现在到正式开始上班,针对这段时间大致计划一下时间安排。以下是我的一些想法,按时间顺序排列:
文书工作,约 1 个月
首先是招聘公司签发法律文件,开始进入就业转移流程。然后,他们会做背景调查。这可能需要一些时间。
如果你持有工作签证,签证转移很容易出错,而且只会变得越来越难。签证转移被拒也是有可能的,所以暂时不要辞掉手头的工作。大多数工作签证的失业天数非常有限,而且纠正错误的过程很漫长。
递交辞职申请
我建议在文书工作完成后,再递交辞职申请,以防止你无法承担巨大的失业空档。
交待手头的工作,约 2 周到 1 个月,具体取决于你的角色
走前交待好手头的工作。花些时间协助别人接替你的工作。最重要的是,与你的同事好好告别,并保持联系。
休息,未知
在开始新工作之前,给自己放一个长假。利用这段时间享受生活,做一些自己喜欢的事情。
搬迁,0周到1个月
如果需要搬家,请留出这部分的时间。
总结学习
我个人喜欢记录下我面试过的公司,面试的经过,以及最后拿到的 offer 细节,并总结面试的经验教训。
最后的一点想法
随着编程面试发展的发展,大量的编程练习网站纷纷涌现,帮助求职者做练习。这会让面试官感到为难,他们不得不加深考题的难度,如此恶性循环导致如今的编程测试考题与实际工作完全脱节。
话虽如此,但似乎这个问题并无解。这就是为什么大多数公司明知这种流程并不好,却仍然在采用。
参考链接:
https://snisarg.github.io/blog/2021/08/07/tech-interview-prep.html
☞百度启动史上规模最大校园招聘;荣耀Magic3系列售价4599元起;阿里成立反职场陋习小组,无条件支持员工拒绝劝酒|极客头条☞瑞典正成为欧洲硅谷?☞听说,这 9 张脸是人脸识别的“万能钥匙”?
最后
以上就是昏睡老师为你收集整理的面试与工作差距大,程序员从准备到拿Offer全攻略流程总结流程的详细步骤准备热身向着目标出发面试交涉接受 offer最后的一点想法的全部内容,希望文章能够帮你解决面试与工作差距大,程序员从准备到拿Offer全攻略流程总结流程的详细步骤准备热身向着目标出发面试交涉接受 offer最后的一点想法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复