作者:魏小亮(Facebook 移动技术总监)

现在有不少的硅谷公司直接招聘国内的软件工程师到美国工作,这些公司主要是大的互联网企业和中型创业公司(太小的创业公司没有资源申请H-1B签证)。有很多的朋友对此有兴趣并且问我需要准备和注意的地方。 我觉得大部分的技术能力都是靠一定时间的学习和积累的,基本上不能准备;但假设你的技术和经验都很好,面试当场的表现的确可以在短时间内准备和提高。

我每次在面试现场都尽量跟每个应聘的朋友分享一些面试的技巧,让他们放松并且充分准备。现在把这些想法总结一下,我想这些经验主要对创业文化比较强的公司有帮助 (如果招聘的公司是传统文化的大公司,有些建议可能适得其反)。

最最关键的一点: 不要把面试当成学校的考试。这样的场景很常见:面试者走进面试的房间;坐下;被问到任何一个问题,就用一两句话尽量精确的回答;拿到一个实际的问题就尽快写出程序,交给面试官“评审”…… 整个过程跟考试一样,极少的互动。面试结果非常随机:如果你对问题的理解正好是面试官想问的,并且如果你的回答正好是他想要的,并且如果他正好能看懂你的程序,那你就被录取了;以上几个“如果”的任何一个出现任何的偏差,你的面试就失败了。

上面的过程是有不少可以改进的地方的:

1、保持自信:走进面试房间之前,检查一下自己的手心是不是湿的(紧张的时候手心容易出汗),如果是,擦干了再走进去,握手的时候就不会让面试官觉得你非常紧张。 深吸一口气,默默的告诉自己没问题(这样的自我暗示还是挺有用的)。走进房间,主动给面试官打个招呼,给一个有力的握手,留下一个自信的第一印象;

2、保证交流表达的顺畅:不少的朋友觉得自己的英文说得不准确,怕说错,所以很小声;同时紧张起来往往越说越快。对方听起来声音很小、口音不一样、加上语速太快,就很难听明白。所以,说话的时候声音一定要足够大,让对方能听得很清楚(包括的你念错的词也要能听清楚)。同时,你可以主动放慢自己的语速,并且要求对方适当放慢他们的语速,不要害羞担心别人觉得你的英语不够好。在国际范围招聘工程师的公司,东欧和亚洲的非英语工程师都很多,里面的员工是能够理解并且愿意减慢语速的。如果语言交流还有障碍,可以用白板(或者黑板)写下关键的问题和术语;

3、确认双方对问题的理解一致:硅谷的公司面试往往是使用工作里面碰到的实际问题,做一定的简化,改成可以在30分钟之内解决的问题。问题往往不是教科书上看过的;或者,更危险的情况是问题看起来跟教科书上看过的类似,但实际上有本质不同。如果你没有跟面试的同事确认你们俩对问题的理解是一样的,那很容易发生的情况是你按照自己的理解花30分钟写出程序,然后面试官说“这不是我要的答案啊”。 比较稳妥的方法是你主动针对问题提出一些讨论,比如用几个简单而有代表性例子把问题的输入和期待输出都描述清楚,双方都同意这一组输入输出,然后再动手解决;这也自动的给你一组测试例子了;

4、确认对方理解你的解决方案:我见过不少的例子是面试者用很复杂的算法(往往需要一片论文来证明正确性)来得到一定的算法复杂度优化。大部分的工程师并没有那么专注于学术,面试官很可能看不明白。而面试者本人也很难在10分钟内把一片论文的正确性证明说清楚。这样的结果是别人不可能很快的同意你的解决方案(在实际工作里面,就是你的程序很难通过Code Review),而在45分钟的面试里面,面试官就不能赞成录取你。我给面试者的建议是:如果一个算法不能在5分钟之内用英文解释清楚,就不要在45分钟的面试里面用这个算法。

5、最后,最重要的“tip”是把面试官当成你的同事,而不是监考老师。整个面试的过程,技术题目解答(程序)的优劣大概只占一半的权重,同样重要的是你能否从头到尾解决一个实际问题。这是一个过程:理解问题的本质、约束条件、时间和空间的取舍、你们deadline(30~45分钟)和工作量的取舍(复杂的好算法还是简单的“能用的”算法)、 最后你的程序写好了还要能让你的同事看懂并且同意你的解决方案。

我看到过的最优秀的面试者往往把自己沉浸于跟面试官共同工作的状态,主动分析问题,甚至对问题提出异议,一起讨论,就解决方案达成一致,然后挽起袖子写出一个漂亮的程序,再主动根据讨论的例子对程序进行测试,最后提出自己对自己的解决方案的批评和下一步可改进的地方。 这样走下来,即便写出来的程序不是最优的,你在整个过程里面表现出来的经验和技术能力都会让人刮目相看。

魏小亮:国内软件工程师如何面试硅谷创业公司相关推荐

  1. 魏小亮:如何选择硅谷的IT公司

    导读:关于北美IT公司求职面试,伯乐在线之前转载分享过一些文章,不过这些文章是偏重面试过程经验的分享(比如王远轩在<北美求职记>中分了Microsoft.Google.Facebook.T ...

  2. 魏小亮:参加编程竞赛对实际工作的用处

    原文链接:http://blog.jobbole.com/33834/ 来源:魏小亮的博客 (作者是Facebook的移动技术总监) 有不少的朋友问过这个问题:在中学里面参加NOI,在大学参加ACM/ ...

  3. MIS软件工程师的面试问题与方法

    MIS软件工程师的面试问题与方法 2007年09月21日 星期五 11:17 A.M. 一. 软件工程的一般知识 (1) 说说您所知道的软件开发的有关国家标准或国际标准. (2) 一般软件项目要做哪些 ...

  4. 如何准备软件工程师的面试

    (作者简介: 王忻,Google 工程师.北京出生,五岁时跟随父母移居美国.中学期间跳了三级,十五岁进入了加州理工大学,加入 Google 前曾在微软等公司工作.) 六月份的时候,我曾经在黑板报上介绍 ...

  5. Google前工程经理王忻:如何准备软件工程师的面试

    http://t.jobdu.com/thread-368-1-1.html 导读:原文作者王忻,Google前工程经理,2003年月加入Google,是Google Lively背后的主导力量,是G ...

  6. 如何准备软件工程师的面试[转载]

    (作者简介: 王忻,Google 工程师.北京出生,五岁时跟随父母移居美国.中学期间跳了三级,十五岁进入了加州理工大学,加入 Google 前曾在微软等公司工作.) 六月份的时候,我曾经在黑板报上介绍 ...

  7. 下岗职工_下岗后我如何获得多位软件工程师的面试

    下岗职工 "Opportunities to find our deeper powers come when life seems most challenging." -Jos ...

  8. 小i机器人软件工程师揭秘机器人的“脑细胞”NLU

    NLP和NLU是两个概念,前者是自然语言处理,后者是自然语言理解,很多时候大家都会放在一起说:自然语言处理与理解,也有人会把自然语言处理和理解用NLP来统称,事实上这是两个概念,只是因为NLP的知名度 ...

  9. .NET高级软件工程师的面试题目

    公司:国企,主做民航相关信息化应用系统 职位:.NET高级软件工程师 1. 什么是虚函数?子类需要对虚函数做什么?虚函数有什么用? 2. B/S与C/S不同,优缺点 3. Web页面中传值的方式 4. ...

最新文章

  1. spring启动加载流程
  2. Payara Micro在Oracle应用容器云上
  3. 3.10 神经网络的梯度下降法-推导
  4. 【国内下载Android系统源码的方法】
  5. H3C|HUAWEI 交换机Comware系统的基本使用(以HUAWEI S5720为例)
  6. ubuntu下安装搜狗输入法
  7. Linux终端快捷键
  8. win10 计算机重启,Win10关机自动重启的三种解决方法
  9. 巴菲特佛罗里达州立大学演讲
  10. “New”一个完美对象,再来好好面向对象
  11. 【基础】struct的函数操作
  12. ARMV8体系结构简介:AArch64系统级体系结构之Self-hosted debug
  13. 2.muduo之Channel
  14. 【网络蠕虫】恶意代码之计算机病毒、网络蠕虫、木马
  15. 深入理解C#中var关键字的用法
  16. gt2怎么与微信连接不上服务器,华为WATCH GT2收不到通知消息怎么办?收不到短信微信消息的解决方...
  17. SegmentFault Hackathon 文艺复兴今在沪举行
  18. .NET Framework 框架
  19. 任天堂Switch会员+扩展包售价30美元太贵
  20. 突发奇想系列:分布式事务解决方案(由于MySQL行锁失败)

热门文章

  1. Unity 将Sprite打包进图集
  2. 再说说TCP和UDP源端口的确定
  3. 11.18C语言练习题
  4. excel字符串和单元格拼接_excel拼接函数_excel使用公式进行文本拼接的方法
  5. 九宫格解锁的完全实现
  6. 联想安装Ubuntu16.04LTS(双系统)知识点汇总(六个小时才下好
  7. fedora15 安装nvidia 显卡驱动
  8. 忘记win7,xp系统的开机密码
  9. 2021_01_25
  10. 使用视频作为网页背景的写法