关注 ▲程序员小跃▲ 和优秀的你,一起奔跑
今天开篇,跃哥想问下大家,你学习编程的时候,最初的梦想是什么?化作更简单的描述就是,你学习编程,最想去的公司是什么?
我先来说说我的,我刚进入实验室的时候,学长学姐拿到了大唐电信的offer,那时候感觉很厉害。
你可能没听过大唐电信——“巨大金中华,烽火普天下”。说的就是本世纪初,以巨龙、大唐、金鹏、中兴、华为、烽火、普天为代表的民族通信设备商企业,共同开创了中国通信行业的繁荣时代。
所以嵌入式专业的我们,能进入大唐也是一个不错的选择。我因为选了Android开发,智能手机刚起步,觉得能去阿里这样的大公司就很不错了,甚至是找到一份能在杭州这个互联网的摇篮中也不错,好在最后圆梦,满足了内心小小的虚荣心。
现在的同学们,选择的公司就多了,阿里、腾讯、百度,小米,头条,拼多多,京东,美团,滴滴,华为等等互联网企业。这是我们国内程序员高水平的聚集地。
而在遥远的硅谷,优秀的企业也是数不胜数,那些都是世界级的 Top 公司,能去那边那更是一件更爽的事情。谷歌、FaceBook、苹果、甲骨文、特斯拉、英特尔、思科、雅虎等等。看看富豪排行榜你就更加明白,或者跃哥推荐吴军老师的《浪潮之巅》带你走入硅谷,走入这些互联网企业的发展,肯定能给你一番鼓励。
今天我们就来聊聊以为澳大利亚的朋友,是如何得到FaceBook 的 offer。
作者:Andyy Hope
我刚刚在硅谷科技公司完成了七个现场面试,最终接受了 Facebook 的软件工程工作邀请。
这是我为这些面试做准备的方法,以及我在此过程中学到的知识。
当我在澳大利亚的大学学习计算机科学时,我总是憧憬着只是能作为作为一名硅谷软件工程师。
跃哥感慨:这个目标,跃哥在读大学的时候也有类似的,比如在杭州找到一份计算机开发的工作,还好最后也算是圆梦了,在杭州菊厂待了3年,感受了中国硅谷的氛围,尤其是滨江一条街:阿里、网易、华三、华为、海康、大华等等。
我喜欢成为所有科技行业创新核心的想法,以及它的缺点。这个目标使我充满动力,使我更加专注。
我离开了我在墨尔本一家令人惊叹的公司担任iOS首席工程师的职位,然后回到我的家乡珀斯读书。我在那里准备我在硅谷的面试过程。我知道这会非常困难和艰巨。
如果你在一个软件工程师的房间里提到技术面试过程,很多人会公开反对常见的面试做法。很多争论来自于这样的推理:在白板上求解算法实际上并不代表或转化为软件工程师的日常任务。
(跃哥感慨:我一开始作为面试官的时候,也很喜欢让候选者手撸代码,摆脱编译器的困扰,主要是考察思想过程,以及基础算法)
为了本文的目的,我将不进行讨论。相反,我将探索这些从候选人的角度来看,不同类型的面试方法,我还将重点介绍我从这个过程中学到了什么。
在准备过程中,我始终知道面试会充满挑战。但是我老实说,直到我深陷于自己的第一个困境中之前,我不知道这会有多困难。
在面试之前,我使用了付费和免费服务,通过电话进行模拟编码和白板面试,主要是一些有行业经验的人来进行。那些练习面试对我应对压力至关重要。但后来我意识到,它们只相当于真实面试的一部分。
(跃哥感慨:现在国内也有很多优秀的面试分享,比如公众号里,或者牛客网等等,准备面试的同学不能错过呀)
我建议不要在你梦想的工作中面试,也不要在有阻碍下进行一些模拟或真实的面试。这种紧张情绪会让人难以置信地难以抑制,而且只能通过练习来消除。
与生活中的许多其他事情一样,练习会增强你的自信心。
如果你在初步的电话屏幕中做好准备并表现得足够好,那么您将有机会到现场进行整天的面试。这些面试通常会持续四到六个小时,具体取决于你正在面试的公司。
在我去硅谷的旅途中,我总共安排了七个现场面试。这给了我关于面试现状的独特视角。
通常,一个现场将涵盖三个主要主题:算法,架构设计设计和行为,这是我学习和准备过的。但是,有一些似乎正在逆转这种趋势并将面试扩展到涵盖更多实用技能。
我将简要介绍我遇到的每个主题。
这是你遇到的最常见的面试类型。面试官会要求您在白板上解决问题,该问题将评估您对数据结构的了解,排序算法,递归,时间/空间复杂度分析以及模式和边缘情况识别。在这次采访中,您通常会想到一个蛮力强制解决方案,然后尝试改进该解决方案并讨论取舍,如果是这样的话,有很多不同解决方案。
这是我准备的过程,六个星期以来,我每天都在一个廉价的白板上解决算法,分析其时间/空间复杂度为以及真正试图了解每一行代码会发生什么。
就个人而言,我真的很喜欢在白板上写算法,因为我不必担心(大部分时间)编写可编译语法,这让我只专注于关于眼前的问题。其他人可能不喜欢白板,但是我要对他们说坚持练习,可能会改变主意。
(跃哥感慨:算法真的是大公司的最爱,尤其是现在的头条这种公司,靠着算法推荐。还有大数据、人工智能没有优秀的算法,那推荐起来可就一塌糊涂了)
这是一次有趣的采访,我非常低估了这一采访。面试官会要求您设计一个系统(当然是在白板上),例如停车场售票系统,聊天程序,Twitter 反馈以及其他常见系统。
你被评估的是你如何接受一个广泛的概念,设计一个满足所有需求和约束的系统。但这取决于候选人提出正确的问题,这些问题定义了需求和约束。这次面试更多的是一次对话,其中夹杂着一些图表,甚至可能是课程结构。一切都是非常高级的,所以您不会编写任何实际的实现代码。
当然,你应该引导对话内容涵盖系统知识工作。如果你是后端工程师,则不会真正涉足客户应用程序详细信息,除非你以前在该领域有过专业知识。我是一名 iOS 工程师,所以我谈到了架构模式,功能模块化,设计模式,而不是如何扩展API接口,而是 worker ,AWS 这种。
面试官会问你关于自己的问题以及你如何处理某些问题情况类型。这次的准备工作没有其他的困难,但是为了你自己需要更多反省。
这些问题通常遵循以下方面:
我觉得这件事很难搞砸,但我听说很多人都这么做。他们试图把自己的优点伪装成缺点,对面试官想听到的事情做出反应,甚至把失败项目的责任推给别人。
这些面试官都经过培训和校准,以识别糟糕的人,并对胡说八道有敏锐的注意力。这是把你的候选资格抛到九霄云外的捷径。只要真诚,对工作表现出热情,承认自己的缺点,表现出改进的主动性,你就会做得很好。
(跃哥感慨:这个在之前的面试技巧里也和大家提到过,针对这类面试都需要怎么做,文末会给大家一些往期链接)
这通常与行为面试相结合,重点在于发现你是否与公司的价值观相一致。例如,Facebook 遵循的是一种类似黑客的文化,即大胆创新、不断尝试、不怕破坏。而 Airbnb 则希望创造一个让人们无论走到哪里都感觉自己属于自己的世界,因此他们会寻找具有良好接待技巧的人。
许多大型科技公司都非常重视文化并雇用员工根据该人与他们的价值观的一致性。如果你在以下其中之一进行面试这些公司,重要的是你要查找他们的价值并找到过去的经验你可以与你的面试官建立联系并进行沟通。
(跃哥感慨:这其实也是需要养成的一种习惯。你去目标公司面试,多多少少都要对这个目标做一些功课,知道目标公司的业务,特点,才能更好的应对)
一个有趣的类别,你将参与一个有趣的类别配对,你可以面对有开发环境的计算机,非常类似于你平时使用的计算机环境。您将获得基本任务以及一系列要求完成每项任务时必须完成的任务,面试官会要求你实施更多功能,直到达到时间限制。你可以自由使用所需的任何资源,例如 Stack Overflow 或在线文档。
我觉得应聘者在这次面试中的成功很大程度上取决于接触现实世界的经验。与白板不同,语法写法正确代码是必需的,因此你应该从内而外了解你的语言和环境因为你不想在互联网上花费太多时间,或者文档寻找答案。
在上机期间,我会在执行任务时编写简洁的代码,一旦感到任务完成,便进行优化。这种工作流程是不利于这种面试。我设法将自己清理到角落进行过早的优化会使恢复变得更加棘手。我发现写作很杂乱代码,并向面试官提到我会在生产中做不同的事情,被认为比写作整洁和优化还足够。
我们作为工程师所做的很多事情都围绕发现和修复 bug,这些 bug 是从各种来源向我们报告。在这次面试中,你将获得一个 bug 清单查找和修复以及识别沿途的其他潜在问题代码。
我只看到过这种面试的一个实例,我觉得这样做很难,尤其是他还是初级的时候。每种编码环境有自己的小怪癖和细微差别,我所做的很多拼凑都是来自以前的IDE(集成开发环境)及这些年来我积累的框架的相关经验。
我们看到的大多数常见语言的编程基本相同。如果你知道一种语言的面向对象编程,那么可能技能大多会转移到另一个技能上。
但是,此次面试的重点是无法在语言或框架。你将面对有关环境特殊性的API,内存管理,功能,约束,历史记录等等。
对于这个特定主题,练习可能具有挑战性。类似于错误查找和面试打补丁,我觉得很多答案都来自以前的经验。根据你所申请职位的级别,你提供的答案可能是权重不同。例如,如果某人申请初级职位不知道API为何以特定方式构建的历史,可能会给它们一个让步。但是,如果申请高级职位的候选人不知道,那么他们可能会遭到更严厉的标记。
根据你要面试的角色或团队,你可能会进行仅专注于操作系统的面试。在这次面试中,你会被问到一些问题这将评估你对计算机底层机制的理解操作系统的认识。
诚然,这次面试使我措手不及。操作系统是我在大学的早期就学过,但是我的知识在我的表现上反馈出来是如此的匮乏。
(跃哥感慨:我也是科班出身,但是现在操作系统的知识真的恐怕已经还给老师了。但是,其实当你了解一门语言到底层的时候,还是需要了解操作系统,了解里面的机制,对你程序设计,程序思想是一个很好的帮助)
我之前写过,面试本身就是一种技巧。即使你已经是一个出色的程序员在你的日常工作或在你的学习中取得了很好的成绩,这些技能不会完全转移1:1当你在一个小的面试室。坚持、重复以及与面试准备和实践的一致性将是决定你面试结果的关键因素。
如果有人要问我,我觉得应该重点关注什么,我建议以下:
根据你的时间轴,你可能希望尽早开始。很多我面试过的公司在失败的候选人之前有12个月的冷却期可以重新申请。另一方面,如果你知道一年之内无法准备就绪,则可以并立即开始该过程,并略微了解一下面试过程,所以当你准备就绪时,它几乎不会那么恐怖。
(跃哥感慨:这个冷却期其实在国内也是有的,所以还请读者朋友们需要关注下。有些公司校招期间并不会占用冷却期的名额,所以其实校招是一件很划算的事情,不管成功与否,都是一次难能可贵的经历。)