今年的求职因为疫情原因可谓格外的惨烈,我们建了一个微信的讨论群,在群里会分享解题方法和面试官的出题思路,还有一些行业的内部信息。进群可以加微信:MSBZ1019,注明知乎 id+发送简历即可。
分享一个学员上岸微软后的经验:
大牛导师:很多同学都把软件工程师作为职业发展非常重要的一环,那么我今天先来给大家科普一下这个职位吧!
软件开发工程师(SDE)在许多行业中工作,以应用计算机工程,信息分析和计算机科学的原理和技术来设计,构建和开发其雇主的计算机系统和软件。经验丰富的计算机软件工程师可以作为各种组织的顾问独立工作,并且可以从头开始构建计算机系统和软件,也可以定制从供应商处购买的现有系统和软件。他们必须按照客户或雇主的要求进行所有软件修改,并测试所有软件以确保其正常工作。
该职位通常需要计算机科学,信息技术或相关领域的学士学位,许多雇主更喜欢具有软件开发工程师经验的应聘者;硕士学位也可能是首选。软件开发工程师必须具有较强的沟通能力,记录所有工作并熟悉Java和C ++等编程语言。他们可能会在用户和计算机软件供应商之间联络,并且必须以非技术性的方式向用户传达事实和数据。
软件开发工程师必须能够在很少甚至没有监督的情况下以及在团队环境中独立工作,在此职位上,多任务处理和对细节的密切关注至关重要。他们可能需要参加相关的培训班,讲习班或会议,以保持技能的最新状态,并阅读相关期刊以掌握新技术。我来给大家看一下这个职位的毕业生薪资:
大牛导师:那么,今天我们邀请到了嘉宾是已经上岸的王同学,他以矽谷大佬的身份作客大牛门徒,结合自己的项目经历,来给大家讲讲软件工程师这个职位吧!,首先,能不能给同学们讲解一下这个岗位大概有哪些级别,薪水是怎样的呢?
王同学:谢谢导师。首先呢,通常来说呢一般分为这几个级别:SDE I,SDE II, SDE III, and Principal.SDE I :本质上是一名新手,经验不足(在亚马逊工程师的水平上),初级工程师,通常是大学毕业生。SDE II:拥有几年经验,包括大型代码库经验和一些架构经验。SDE III:具有多年经验,并领导或带头至少一项非同寻常或重要的项目。Principals:通常情况下,您的经验是至少10-15年的经验,每个人可能都有一些已发布的白皮书。
大家要注意一下, 尽管级别可能有所不同(参考上图),但它们清晰地类比到Google和Microsoft的类似层次结构,但它们与精英公司(俱乐部/微软/亚马逊/ Google / Facebook等)“俱乐部”之外的层次结构没有关联。西海岸,东海岸的Bloomberg / Goldman / HFT公司等)。具有10-15年软件工程经验的人*一直*在这些公司进行面试,但他们可能不适合担任初级工程职位(SDE I或SDE II,具体取决于您所寻找的公司)。大牛导师:好的,这非常清楚啦。接下来讲讲你是怎么创造奇迹,在那么短的时间里就拿下大厂offer的呢?
王同学:我记得当时面试我的面试官和我说过一大段话,我想引用一下,希望对同学们有帮助。他说过:不要有压力。老实说我不记得我采访过多少个真正聪明的孩子,我不得不花15分钟时间让他们的神经平静下来。并非每个面试官都耐心等待。在桌子的另一边(接受采访)时,我提醒自己这只是一次谈话,而不是测试。进去,和另一个可能成为您的同事并度过愉快时光的人交谈。然后,重温基本概念,数据结构和算法,但不要过分强调。没有人期望您从记忆中回忆起一切。我确实希望您知道如何穿过一棵树。老实说,我不希望您知道每种树遍历或平衡算法。甚至其中一些。只要您知道基本的构建基块,就可以了。一些受访者犯的另一个错误是他们试图记住算法。那里有很多东西,您不可能全部记住它们,也不会帮助您确定何时使用什么。面试官试图了解您的思维过程,您无需为此记住任何内容。
其实,由此可见,面试官在寻找什么呢?1)提出澄清的问题。如果我举一个例子来说明我的问题,其中n == 4,则不要仅仅假设n始终为4。也许是,也许不是。可能我可以有重复的条目。采访者并不傻,在Microsoft作为SDE时,您将拥有很大的自由度,并且许多任务将被委派给您,而无需任何人监视。面试官希望确保您具有解决问题的正确流程。2)设计解决方案:使用您拥有的任何过程。有些人画东西。有些人写伪代码。有些从测试驱动的设计开始。无论采用哪种方法,在提出代码之前都要先进行设计。
3)测试设计:认真。如果不费心去测试,您怎么知道您是否正确解决了问题?4)现在您可以编写代码:编码不是解决问题的方法。这是您实施解决方案的方式。如果您首先没有解决方案,则无法编写解决方案代码。
5)测试。通常,面试官并不是在寻找“正确答案”。我雇用了很多无法解决我给他们的问题的人,但是他们说服我,只要有适当的时间和资源,他们就能在现实生活中解决问题。另一方面,我拒绝了很多候选人,这些候选人都很好地解决了我的问题,但没有令人信服的方式。好像他们侥幸地找到了解决方案。
最后,要了解Microsoft面试过程会产生很多误报。Microsoft不会评估您的技能并给您评估。它确保雇用的任何人都是合格的。但是,它可能无法确保它雇用了所有合格的人。如果您获得报价,那么您很有才华。但是,如果您没有收到要约,则没有任何意义。可能是因为他们找到了其他人。还是他们不确定100%。或数百万种事物中的任何一种。这就像约会。即使他们可能成为很好的配偶,也不会与遇到的每个人结婚。您只想确保您所嫁的人是正确的人。
想必大家知道现在大厂面试官看重的是什么了吧。接下来我们说一下刷题环节。如果您有更多时间准备,我建议您通过CLRS和Cracking The Coding Interview进行工作。这两本书都对DS&A的理论和您可能期望从Microsoft面临的Coding问题提供了深刻的见解,但是它们确实需要一些时间来进行消化(仅CLRS就有1,300页以上)。考虑到只有两个星期的准备时间,可以使用一些资源来更快地提供帮助。假设已经非常了解数据结构和算法,建议使用LeetCode完善您的编码技能。Microsoft面试问题通常与LeetCode的中等难度问题差不多(Microsoft还询问一些Easy级别的问题,很少提出Hard级别的问题),因此,如果您能很好地处理Medium级别的LeetCode问题,您的面试会很好。
但是,如果您对中等水平的LeetCode问题还不太满意,并且您觉得您需要DS&A理论知识方面的其他帮助,则可以参考Tech Interview Pro这样的课程,“如何获得由前Google软件工程师设计的“从事大型技术工作”计划。TIP拥有20多个小时的有关数据结构,算法和系统设计的深入视频课程,它还允许访问一个私人Facebook小组,该小组拥有1500多名该课程的前学生,他们使用从该计划中学到的知识来学习其他大型科技公司(例如Microsoft和Google)的工作。最后,在进行真正的面试之前,您将通过模拟面试来练习软技能。我的建议是使用免费网站,如http://Interviewing.io,在该网站上您可以与面试背后的其他软件工程师进行模拟面试,同时您会收到有关绩效的即时反馈(其中一些软件工程师曾在Facebook等公司工作过) ,亚马逊和Microsoft之前)。临近最后我想说一下,感谢曾经帮助过我的郑导师,他在带我做项目的时候还有我刷题阶段提供了非常大的帮助,是我上岸的关键因素喽!