点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效。对于应聘者而言,虽然不同的公司具有不同的产品形态,但各大公司相同的职位都需要具备大同小异的基本工作技能。

在这篇文章中,我们将分享一位刚刚在硅谷各大科技公司完成了七次现场面试, 最终接受了 Facebook 的软件工程师实践经验,以及其面试前所做的一套完善的准备工作,希望可以给予大家前往 BAT 的路上一些借鉴。

图片来源:视觉中国

多年的硅谷之梦

当我在澳大利亚大学攻读计算机科学时,我总是将自己的未来想象成为硅谷的一名软件工程师。

我喜欢科技行业中所有创新的核心理念,即时它是错误的,我也喜欢。于是,最初的梦想让我有了不断前进的动力,且可以让我静下心来专注学习。

毕业之后,我在一家位于墨尔本的著名公司担任 iOS 工程师,然后为了更好的发展回到家乡静修,开始准备硅谷科技公司的面试。我知道这条路充满无限的挑战,也是非常困难和艰巨的。接下来,本文将基于应聘者的角度深度探讨不同类型的面试实践及经验。

面试是一项技能

在我准备的过程中,我一直明白面试会很有挑战性。但是我也很难去想象,第一次面试究竟会有多难。

在面试之前,我使用了一些免费以及付费的服务,比如,通过模拟电话面试以及上机编码操作、与有经验的求职者进行电话面试。那些练习面试对我来说非常重要,但是我后来也意识到,它们也只占了真正面试环节中的一小部分。

不同类型的面试经验

如果你在初步的电话面试过程中做好充分的准备并发挥正常,那么顺其自然地将会有下一轮的现场面试。通常而言,现场面试会持续 4-6 个小时,不过还是需要根据具体的公司来看。

我在硅谷各大科技公司,一共有七场现场面试。这也使得我对面试有了自己的一个看法及经验。

通常,现场面试会涵盖三个主要内容:算法、架构设计和个人生活。但是,如今也有很多公司在扩大面试内容的范围,涵盖了更多的实用技能。下面,将简单介绍一下我面试中所遇到的内容。

算法面试

软件工程师的面试,算法是最常见的面试内容。面试官会要求你在白纸或上机进行操作,解决所提出的问题,以评估你对数据结构、排序算法、递归、时间/空间复杂性分析以及模式和边缘案例识别的了解。在这次面试中,你可以提出一个强力的解决方案,然后尝试改进这个解决方案,并讨论你提出的不同解决方案(如果有的话)的权衡。

对于这个问题,我在面试之前做了充分的准备,我解决了算法问题,分析了其空间/时间的复杂性,以及试图了解每行代码所起的作用。

就个人而言,我真的很喜欢白板面试,因为我不必担心编写可编译的语法(大部分时间),这样我只用关心手头上已有的问题。其他人可能不大喜欢白板面试,但对他们来说,我会比较建议,一贯地去实践,肯定会有好处。

架构设计面试

这是一个有趣的面试过程,而我却低估了这个面试的难度。首先面试官会要求你设计一个系统(当然是在白板上),如停车场售票系统、聊天系统、推特反馈系统以及其他常见的系统。

首先需要评估如何采取广泛的概念,并设计一个满足所有要求及限制的系统。但是面试者应该提出正确且精准地问题,来确定面试官的要求和限制。本次面试中,我所做的是绘画一些图表和描述一些重要的结构。一切都是比较高级,但无需写任何实际性的实现代码。

当然,你也可以应该引导对话来涵盖系统的具体内容。如果你是后端工程师,除非你在该领域拥有一些以前的专业知识,否则不会真正地了解客户端应用程序的细节。我是一名 iOS 工程师,所以我谈到了架构模式、功能模块化、设计模式,而不是如何扩展 API 终端、添加工作者模块、AWS 等等。

个人日常面试

面试官会询问一些关于你个人的问题,以及如何处理某些不同的情况。这一方面的准备工作不会像其他专业性问题那么困难,但却需要你审视一下自己。

这些问题通常包括以下几个方面:

  • 你如何处理失败?

  • 你最大的弱点是什么?

  • 你如何解决冲突?

  • 你将做点什么不同的?

个人觉得,这个问题并非难以回答。但是我也曾听到很多人这样做,他们试图把自己的长处伪装成弱点,设计成面试官想要听到的内容,甚至把失败的项目归咎于别人。如:

  • 我的弱点是我太专注了;

  • 这是 Jerry 的错,他对这个项目的一直抱着消极的态度。

其实,这样回答很容易就会让自己出局。只要真正地表现出对工作的热情,展现一定的缺点也没关系,但是要表现出改进的主动性,那么结局就会完全不一样。

文化匹配

这通常与个人行为面试相配对,面试官会因此着重于检测你是否与公司的价值观相一致。 比如说,Facebook 遵循黑客般的文化、大胆运用新思路、通过实践来判断,而不是害怕这样或那样,拘束着自己。 而 Airbnb 希望创造一个让人感觉自己属于他们的世界,所以他们寻找的是热情、积极向上的人。许多大型科技公司都非常重视文化,并以人的价值观为基础聘用人才。 如果你在其中一家公司面试,也需要理清自己的价值观,并找到能够与面试官沟通和交流的过往经验。

配对编程

在面试过程中,一个有趣的现象是,你将在另一位面试官工程师面前在电脑上设置好开发环境,就像你日常编程一番。然后你会得到一个基本的任务清单,在完成每个任务之后,面试官会继续要求你完成更多的功能,除非面试时间到点。此外,你也可以自由使用任何你想要的资源,例如 Stack Overflow 或联机文档。

我觉得很多面试者在这次面试中的成功将取决于日常积累的经验。与白板面试不同,这个时候会编写正确的语法代码是必备的技能。因此,你应该了解自己的开发语言及环境,毕竟面试过程中也不能在网上或联机文档中花费太长的时间去找答案。

在我以前的工作中,我一般习惯于编写干净的代码,然后在完成之后再进行优化。这种工作流程并不利于这次的面试。因为我优化地太过早期,无意中将自己逼到一个边缘,后期想要继续提升代码质量,也显得比较困难。事实上,我发现,首先写一些不好的代码,然后再向面试官提出我在设计过程中优化的一些想法,这比直接写干净和优秀的代码更好。

查找和修复 Bug

作为技术工程师,我们的很多工作都是以查找和修复 Bug 为中心。在这次面试中,我得到面试官提出的一段错误代码,然后他让我查找和修复 Bug、以及检查代码中是否有其他问题。

我在之前准备面试的时候,只看到过这样一个案例,因此我觉得要真正做好准备是非常困难的。每一个编码环境都有自己的特点和细微差别,我曾有的查找和修复 Bug 经验都是从 IDE(集成开发环境) 和多年积累的架构经验中得来的。

测试领域知识

在我们今天看到的大多数通用语言中,编程思想基本上是大同小异的。 如果你知道一种语言的面向对象程序设计思想,那么这些技巧大多会适用于另一种语言。不过,本次面试的重点并不是在语言或架构的切换层面,而是有关 API、内存管理、功能、约束等环境特性的问题。

对于这块内容的考察,与之前的查找和修复 Bug 相类似,都是需要平时经验积累。同时,根据你所申请的职位不同,面试官也会酌情考虑。例如,你申请的职位是一个初级工程师职位,而你不知道为什么要以特定的方式去构建 API,面试官也许宽容一下,对于这个问题的回答并不是那么看重;但是如果你申请的是高级工程师的职位,若不知晓这个问题的答案,他们也许会直接将你 pass。

了解操作系统

根据面试的职位或者团队,你可能会有一个有关于操作系统的面试。在这次面试中,可能会被问到如何理解计算机操作系统底层机制。说实话,这个问题让我当头一棒。因为操作系统是我在大学时期学的内容,如今有关这方面的知识早已模糊不清,所以面试中表现自然也不好。

如何做准备?

正如我之前写的,面试是一种技巧。即使你在日常工作中已经是一名优秀的程序员,或者在学习中已经取得了很高的成绩,但是当你身处面试室中,很多技能并不能 1:1 地被展现出来。持续性、重复性以及与面试准备和练习的一致性将是决定结果的关键因素。

浓缩知识

如果有人问我,首先应该关注哪些领域,我的建议如下:

  • 无论是在纸上还是在电脑上,首先要学会自己亲手写代码。然后将代码放到 IDE 中进行语法高亮显示,这样养成习惯。

  • 深入了解数据结构,无论是它的优点还是缺点,并学会进行相互比较。我发现从零开始编写数据结构及其实现的功能,会比单单了解抽象的概念学到的更多。

  • 完全理解时间和空间复杂性的大 O 符号(大 O 符号表示用于描述函数渐进行为的数学符号),这将完美配对你的算法和排序问题。

  • 掌握所有重要的排序算法,因为时间/空间复杂性的差异有可能导致你在试图寻找的算法的最佳解决方案脱轨。

何时开始去面试

根据自身的时间安排,也许你会想要尽快地面试。但在我面试的很多公司中,他们会对于一位已经失败的面试者有一个 12 月的冷却期,12 个月之后他们才会重新筛选失败者的简历。另一方面,如果一年之内你依然没有准备好,那么现在也可以去尝试面试,体验面试的过程,这样当你准备好之后,那就没什么可担心的了。

参考资料

模拟采访流程

  • interviewing.io 网站(测试版),免费:https://interviewing.io/

  • Pramp 网站,免费:https://www.pramp.com/#/

  • CareerCup,付费:https://careercup.com/interview

算法

  • 书籍——《Cracking the Code Interview》:https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850

  • 网站结合 YouTube 视频——byte by byte:http://www.byte-by-byte.com

  • YouTube 视频——CS50: https://www.youtube.com/user/cs50tv

  • Interview Cake:https://www.interviewcake.com

  • HackerRank:https://www.hackerrank.com

  • LeetCode:https://leetcode.com

操作系统

  • 《Operating System Concepts》书籍推荐:https://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/1118063333

架构设计

  • 架构和系统设计视频推荐:https://www.youtube.com/watch?v=ZgdS0EUmn70

面试行为举止技能

  • 面试时举止注意事项:https://www.youtube.com/watch?v=PJKYqLP6MRE

原文:https://medium.freecodecamp.org/software-engineering-interviews-744380f4f2af

作者:Andyy Hope

责编:苏宓

————— END —————

AI 人才年薪高达 300 万,他的猎头能直赚 100 万

马云再出新语录:月入一两百万很高兴,挣一二十亿很难受

如何自学成 Python 大神?这里有些建议

硅谷经历 7 场面试,我是如何最终进入 Facebook 的相关推荐

  1. 面试初体验:经历七场面试大数据开发工程师岗位总结(一)

    最近一周一直在面面试,因为带有玩的性质,所以就喜提0个offer战绩. 不过也是在一次次面试中收获经验.我只想总结一下这周面试大数据开发岗位的精彩表现.希望可以给需要求职的同学一个好的体验. 1 招聘 ...

  2. 为了进大厂,我所经历的奇葩面试

    来源 | 深燃(shenrancaijing) 作者 | 黎明 周继凤 李秋涵 唐亚华 王敏 编辑 | 黎明 金三银四招聘季,又出现了一些奇葩的面试经历. 就在前段时间,B站一名游戏面试官被指在北邮校 ...

  3. 如何系统有效地准备一场面试

    如何系统有效地准备一场面试 1. 澄清阶段 澄清阶段的任务,是理清我们有什么.想要什么,明确自己的求职目标.这个阶段的工作,可以分为下面 6 部分: 明确自己的职业价值观 盘点自我价值 筛选公司 分析 ...

  4. 做了5年软件测试决定离职,跳槽历经40场面试, 面的基本都是大厂

    前言 沉寂了好一段日子,连我们公司自己人都问我为什么最近都不写文章了. 那么当看到本篇的标题的时候,大家应该可以猜到这是为什么了. 我最终还是决定要离开服务了 5 年多的公司. 而这次跳槽历经 3 个 ...

  5. 40+场面试,100%通过率,我想分享的14条经验

    来源 | 陈同学在搬砖 头图 | 下载于视觉中国 大家好,我是陈同学,首先来一个简单的自我介绍和个人的经历分享. 我的本科和硕士均就读于哈工大,在研究生期1年时间内自学操作系统.计算机网络.C++.数 ...

  6. 初入职场-面试官都会问些什么?(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  7. 求职经历:从面试细节出发,机会总是留给有准备的人,你准备好了吗?

    这是学校老师要求写给小师弟小师妹的求职经历: 大家可能会觉得面试是一个很可怕的事情,也可能会满心期待,但在遭受HR和技术官的无情摧残后放弃自我,觉得自己一无是处.但请你们不要灰心,没有发现你们的闪光点 ...

  8. (转载)职场面试如何自我评价,面试回答问题技巧

    转载:http://www.201980.com/lizhi/zhichang/1541.html 职场里,职场面试是很平常不过的事了,不一定是职场新人为了找工作的面试,参加工作以后,竞聘岗位有竞聘演 ...

  9. 大厂AI面试官一语中的:一场面试暴露了你的机器学习水平

    https://www.toutiao.com/a6621033976142234115/ 2018-11-07 16:33:22 从事机器学习就业方向有很多,比如有些公司侧重数据挖掘,而有些则更倾向 ...

最新文章

  1. 2021年大数据Kafka(十):kafka生产者数据分发策略
  2. android应用去掉状态栏_Android 显示、隐藏状态栏和导航栏
  3. jvm类加载过程_JVM知识点——深入理解JVM的类加载
  4. 光储充一体化充电站_广东东莞首座光储充一体化智能充电站 “变废为宝”收益可观...
  5. android 不可点击状态,Android系统.如何使用setClickable同时设置所有按钮可点击或不可点击?...
  6. 《Python Cookbook 3rd》笔记(2.12):审查清理文本字符串
  7. Spring中Aware的用法以及实现
  8. 如何成为合格的数据分析师
  9. 【应用安全】垃圾短信电话不断?手机变卡变慢?可能是共享充电宝的锅……
  10. 计算机外存储器有哪四个,计算机外存储器有哪些
  11. 农历及农历闰月的计算方法
  12. 《JavaSE-第十四章》之文件(一)
  13. wordpress 安装插件
  14. 举个栗子!Tableau技巧(25):学做漂亮的桑基图 Sankeydiagram
  15. 网站微信扫码支付流程
  16. JBOD(Just a Bunch Of Disks,磁盘簇)简介
  17. 中国极地考察船“雪龙”号前往南极中山站
  18. TC358746AXBG/748XBG 桥接器说明
  19. 帧、关键帧和空白关键帧的作用
  20. React框架基础目录(6节)

热门文章

  1. GoLand连接Linux子系统远程开发
  2. 华为Matebook X Pro双系统升级bios后无法进入Linux的解决方案
  3. 2021年中国超轻型直升机市场趋势报告、技术动态创新及2027年市场预测
  4. 华三服务器管理口地址_路由器LAN口接入其他运营商宽带导致上网不稳定案例分析...
  5. ant design Cascader 实现联动省市区数据
  6. 感谢3G,告别3G:开启移动互联网时代的“功臣”退出历史舞台
  7. 字节回应阿里涉侵犯男员工曾面试并通过一面;HarmonyOS 2.0用户数升至5000万|极客头条...
  8. 分析了 200w 行 OpenHarmony 2.0 源码后,有了这些发现
  9. 当跨国企业女职业经理人遇上创业女 CEO,两者会擦出什么样的火花?
  10. 如果NATv6 是个笑话,那么 IPv6 是什么?