`

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

阅读更多
  (作者简介: 王忻,Google 工程师。北京出生,五岁时跟随父母移居美国。中学期间跳了三级,十五岁进入了加州理工大学,加入 Google 前曾在微软等公司工作。)
  
  六月份的时候,我曾经在黑板报上介绍过“如何写一份好的工程师简历”, 今天想跟大家来谈谈如何准备软件工程师的面试?假设,现在您的杀手简历 (killer resume)已经吸引了某大公司的注意并约你面试。那么接下来该如何准备呢?
  
  我 在 Google(以前是微软)工作期间面试了不下 300人,其中某些应聘者确实表现非凡,但有些却显得准备不足。当然许多面试准备不足的人最后依然获得了录用通知,因为他们本身确实才华出众。但如果应聘 者能提前准备妥当,那么面试过程将更为保险和轻松。以下所列出的就是我根据多年经验总结得出的建议:
  
  1.使用相同的工具(如铅笔和纸张)和时间限制(例如半个小时)模拟面试训练
  
  Google 和微软都会让应聘者在白板上手工解答编程问题,但通常大部分的应聘者都是习惯于在电脑上利用编程工具系统编写程序。因此面试的时候,某些应聘者离开了熟悉 的电脑光标,站在白板前感觉手足无措不知该如何起行。又或者他们不习惯在编程之时旁边有人观看,这会让他们感到紧张而无法正常思考。
  
  在现实生活中,如果你想要横渡英吉利海峡,自然不能总是在室内游泳池练习。你必须投身于大海在波涛之中训练,在准备面试的时候也是如此。:)
  
  在 面试开始之前你最好向招聘单位询问面试形式和面试问题。如果招聘单位让你在某个房间考试且仅提供没有汇编程序的编辑器,那么就应该在家中按照这种情景进行 练习。如果招聘公司单位让你在白板上回答问题并会安排考官在旁监督,那么你就要找一位软件工程师来扮演考官配合你练习。即使找来的考官经验不如你也没有关 系,他们依然能帮助你消除在他人面前出错所带来的紧张感,这样可以让你适应有人在旁边盯着看的面试氛围。
  
  如果你恰巧认识我并希望由我来帮你联系,那我的条件就是必须请我吃饭:如果你已经工作了就吃日本寿司大餐;如果你还是学生,那么吃比萨饼也可以。:)
  
  2.在面试过程中不要对细小错误耿耿于怀
  
  我 曾不止一次的在面试过程中碰到这种情况:当应聘者知道编程问题后,他马上就想到了最佳的方案、确定了边界条件,然后开始编写程序。但在编写过程中,应聘者 犯了诸如首先检查是不是操作顺序错误或忘记设定某变量等无关大局的小错误,当我指出其错误之后,应聘者立刻变得十分紧张,这种焦虑情绪影响了他在后面环节 的正常发挥。
  
  其实这种恐惧心理完全不必要。一名优秀的程序员在编程过程中出现错误也是很正常的,就像是小提琴手在演奏高难度的巴赫交响乐时也会偶尔失误。音乐会的听众可能会觉察到这些错误,但是听众绝对不会因为这种细小失误就把出色的小提琴手看作是门外汉。
  
  即便应聘者彻底搞砸了某个编程问题,面试考官也可能会提出不同的问题并会容忍应聘者在某个问题上的失误。再退一步说,就算某次面试彻底失败,你也有机会在其它面试上补救。
  
  我 的一位同事(一个项目的技术负责人)最近面试了一个人,在开始面试时他觉得面试者的交流方式存在问题,因此开始表现的相当不友好。但经过了整个面试过程 后,面试者证明了自身的能力,而我的那位同事也成了那位面试者最坚定的支持者。在过去的一年中,我从未见过这位同事如此强烈的支持哪位面试者。
  
  所以,因此就算面试进展不顺,也务必坚持到底不要放弃。
  
  3.在面试过程中不要失礼
  
  这似乎是不用说的问题,但在面试过程中我确实碰到过影响很不好的失礼行为。曾有一位前来应聘软件工程师的人看到我就说:“哇,我真不敢相信你这么年轻!你看上去好小!!我觉得你才 18 岁!”
  
  面试者的这种言行实在要不得。
  
  面试者也要注意不要说出诸如此类的话:“哇,你真的就是考官吗?你看上去好老!”“哇,你真的是来面试我的,你看上去好胖!”(相信应该不会有人说这样的话)。
  
  在 我的另外一次面试中,应聘者的手机在面试开始 15 分钟之后就响了,她没有理会,手机连续响了 20 秒,这样不免会对面试造成影响。5 分钟之后,她的手机又响了,她依然没有理会;5分钟之后,手机第三次响起。最后她终于抓过手提包在里面翻出了手机。我想:“是时候关掉手机了,她在进来之 前就应该把手机关掉。”但是她在手提包中拿出手机之后却旁若无人的打起电话来,而且就在面试过程中间!
  
  这种情况唯一可接受的理由就是他有什么非常紧急的事,但是即便情况如此,那么他也应该在面试开始之时就讲清楚,让面试官有所准备。
  
  4.不要在面试中喧宾夺主
  
  我曾经面试过几个应聘者,他们好像铁了心肠一定要告诉我他们最近的“超级项目”。当我开始发话他们就立刻打断:“我想让你了解我们近期处理的超级项目,10年之前当这个项目开始之时还默默无闻……”,然后接下来的5分钟时间都在那里滔滔不绝唾沫横飞。
  
  有时应聘者好像打定主意要给每个考官详细描述其引以为豪的项目,然后一整天都在那里翻来覆去的说这个项目。
  
  记住:面试官在面试过程中有具体的问题需要询问。但是如果应聘者喧宾夺主,那么考官就可能无法获得充分的信息来做出判断,同时这种行为也会让考官觉得应聘者很难共事。
  
  如果你确实想谈论自己的项目,那么就应询问面试官:“我觉得最近的某某项目能充分体现我的能力,我能不能用 10分钟的时间来描述一下具体情况?”这样就会给面试官空间来调整面试过程,由此也避免毫无征兆就让面试离题万里。
  
  5.在回答需要具体答案的问题之时,记得首先要有总括性的发言
  
  有 时我会问一个答案可以很简练的问题,例如:“在你的那个成功项目中总共有多少人参与?”但应聘者往往会就此打开话匣:“恩,张三参与了这个项目,他负责 UI部分,当然我也会给他一些指导。李四也在项目中,她在宾州远程工作,负责后端服务器。两年之后我们又有新人王五加入……”
  
  在应聘者滔滔不绝的讲了三分钟之后,我还是不知道这个项目到底有多少人参与。
  
  因此首先要简练的回答问题,然后再展开描述:“在我接手项目时有三个人,但当我离开项目时人数已经增加到12人。”
  
  当然如果能简练的回答问题,然后征询意见之后再展开论述那就更好了:“在我接手项目时有三个人,但当我离开项目时人数已经增加到 12 人。我可以讲一下各人在项目中的具体分工吗?”
  
  6.(不是特别重要)在面试中要衣着得体,舒适的商务便装是最佳的选择
  
  人们有时候会为衣着犯愁。但是最重要的是要让自己感觉舒适。如果需要具体的建议,那么我建议穿衬衫甚至T恤衫。对于某些公司(例如 Google),西装革履显然是太隆重了。
  
  这 条建议不必太看中,因为面试官不会管应聘者穿什么。最好应该询问人事招聘部门穿什么合适,因为不同国家有不同习俗,就算美国东海岸和西海岸的公司着装文化 也会有差别。像 Google 这样的公司在着装方面更加随意,因此如果你穿着“三件套”的经典西服去 Google 面试,考官可能会有异样的感觉。因此如果你真的具备软件工程的本领,穿什么其实并不重要。某个应聘者曾经穿着皱巴巴脏兮兮的T恤就跑来面试,他的T恤衫上 还有着许多破洞。但最后他还是拿到了录取通知(当然我绝不建议如此穿着)。
  
  最后的一个小故事
  
  最后我想讲一场极为尴尬的面试。在看完之后,我希望你能这样想:无论你的面试如何糟糕,你至少要比这位应聘者幸运。
  
  以前我还在微软的时候,我们通常会为应聘者准备一些饮料,某位暂称其为 Jeff 的应聘者要了一听百事可乐。我们走进面试房间后,他就在桌前坐下了。接下来我们简要的谈了谈他的工作经历,然后他开始在白板上解答编程问题,此时他还没有打开他的可乐。
  
  我们俩站在白板前,然后杰夫开始在上面写程序。在写程序之时他沉浸在对整体构架的思考中,下意识的退了一步来查看整个白板。在后退时他不小心碰到了桌子,放在桌上的百事可乐掉到了地上。
  
  因为可乐还没有打开,因此当可乐罐落地的时候,可乐罐炸开了。
  
  可乐罐在地上打转,泡沫喷的到处都是。你可以想象当时的场景,可乐喷到了墙上、书架还有我电脑的键盘上。我俩楞在那里,手都半伸着(根本来不及抓到可乐罐),眼睁睁的看着可乐弄得到处都是。
  
  我们花了 5 分钟的时间用纸巾来清理现场(虽然我的书本自那天之后都粘页了,而墙壁也不再是干净的了)。
  
  随后我们重新开始白板测试。杰夫此时已非常紧张(换了谁都会紧张吧?)。他写了几行程序,然后擦掉,然后再写。他是用自己的手擦拭白板而不是用板刷。他急得额头冒汗,然后他又用刚刚擦过白板的手擦汗。在面试过程结束之时,他的脸上布满了红色、绿色和蓝色的颜料。
  
  我说:“你的手上粘了很多颜料,我带你去卫生间洗洗吧,”然后我把他领到洗手间让他从镜中看到了自己的尊容。
分享到:
评论

相关推荐

    软件工程师面试必会试题_含答案.rar

    在准备软件工程师面试的过程中,掌握相关的专业知识至关重要。本资源“软件工程师面试必会试题_含答案.rar”提供了全面且深入的面试题目及解答,旨在帮助求职者提升技能,顺利通过面试。以下是根据标题、描述及标签...

    经典软件工程师面试题.pdf

    在准备软件工程师面试时,应聘者需要在多个方面有所准备,包括算法和数据结构知识、编程语言熟练度、问题解决能力、数学基础和逻辑推理能力等。由于文档内容的不完整性和错误,以上内容可能并不完全准确地反映实际的...

    软件工程师面试题集锦

    在准备软件工程师面试时,了解各种技术和概念是至关重要的。这份"软件工程师面试题集锦"涵盖了多个领域,包括C、C++、Java语言以及网络知识。以下是对这些知识点的详细解析: 1. C语言: - 基本语法:理解变量、...

    Leetcode Python解决方案和解释。 也是准备软件工程师面试的指南。-Python开发

    也是准备软件工程师面试的指南。 概述这是我的Python(2.7)Leetcode解决方案。 随着时间的流逝,这也成为准备软件工程师面试的指南。 我确实花时间尝试制定最佳解决方案,并收集我发现的最佳资源。 因为我想帮助像...

    嵌入式软件工程师面试题库分享

    嵌入式软件工程师面试题库是一份针对嵌入式软件开发领域的面试题目集合。该题库包含了各种与嵌入式软件开发相关的知识点和技能要求,旨在帮助面试者准备嵌入式软件工程师的面试。 适用人群: 该面试题库适用于有...

    软件工程师面试英语大全

    总的来说,这个"软件工程师面试英语大全"不仅是一个技术知识库,还是一个综合性的面试准备工具,它将帮助软件工程师提升技术素养,增强英文表达能力,从而在国际化的职场环境中脱颖而出。通过系统学习和实践,候选人...

    嵌入式软件工程师面试大全

    在这个“嵌入式软件工程师面试大全”中,我们可能会遇到一系列与这个专业领域相关的面试问题,这些题目可能来自知名公司如海康威视和H3C等。下面我们将深入探讨一些关键知识点,帮助求职者更好地准备面试。 1. **...

    怎样准备软件测试工程师面试.pptx

    "软件测试工程师面试准备指南" 软件测试工程师面试准备是许多软件测试工程师面临的挑战。为了帮助软件测试工程师更好地准备面试,本文提供了一份详细的面试准备指南。 编程语言准备 在软件测试工程师面试中,编程...

    IT行业软件工程师面试题集合

    总的来说,这份“IT行业软件工程师面试题集合”提供了全面的准备方向,通过深入学习和实践,求职者可以在面试中表现出专业性和深度,提高成功获得理想职位的机会。记得,理论知识只是基础,结合实际项目经验和持续...

    leetcode-python:Leetcode Python解决方案和解释。 也是准备软件工程师面试的指南

    随着时间的流逝,这也成为准备软件工程师面试的指南。 我确实花时间尝试制定最佳解决方案并收集发现的最佳资源。 因为我想帮助像我这样的人。 如果您喜欢我的答案,那么在GitHub上加一个星对我来说就意味着很多。 ...

    江浙沪 南京 软件企业面试题

    这可能包括了C++、Java、Python等主流编程语言的题目,也可能涵盖软件设计模式、软件测试、项目管理等方面的问题,对于准备软件工程师面试的人来说,这些都是必不可少的知识点。 【压缩包子文件的文件名称列表】:...

    软件测试工程师面试题.doc

    软件测试工程师面试题是一个涵盖了软件测试领域面的面试题大全,旨在帮助软件测试工程师更好地准备面试,提高就业竞争力。下面是从这个面试题大全中总结出的相关知识点: 一、软件测试的重要性 软件测试是软件开发...

    Leetcode Python解决方案和解释,也是准备软件工程师面试的指南。-python

    随着时间的推移,这也成为准备软件工程师面试的指南。 我真的花时间尝试制定最佳解决方案并收集我发现的最佳资源。 因为我想帮助像我这样的人。 如果你喜欢我的回答,GitHub 上的一颗星对我来说意义重大。 ...

    java面试题-外企软件工程师面试题大全.rar

    这份"java面试题-外企软件工程师面试题大全"包含了丰富的面试题目,旨在帮助求职者更好地准备Java相关的技术面试。 一、基础概念与语法 1. 讲解Java的三大特性:封装、继承、多态,以及它们在实际编程中的应用。 2....

    Net软件工程师面试题.doc

    【标题】:“Net软件工程师面试题.doc”是一个包含.Net面试问题的文档,旨在帮助准备面试的软件工程师检验和提升自己的技能。这份文档可能包含了多种类型的题目,如填空题、选择题等,涵盖面向对象编程、接口、继承...

    大软件公司程序员软件工程师面试题集锦

    在IT行业中,尤其是在大型软件公司,程序员和软件工程师的角色至关重要。面试是选拔这些专业人士的关键环节,而面试题目的设计往往能反映出公司对于技术能力、逻辑思维、问题解决以及团队协作等多方面的要求。本题...

    java软件工程师面试常见问题

    以上就是Java软件工程师面试中常见的知识点,每个领域都有其深度和广度,建议在准备面试时,不仅要掌握基础知识,还要关注技术的发展趋势和实际项目经验的积累。通过深入学习和实践,相信你在面试中能展现出扎实的...

    java软件工程师面试大全

    Java软件工程师面试大全是针对求职者,特别是那些寻求Java开发岗位的专业人士精心准备的资源集合。这份资料旨在帮助应聘者全面了解并掌握Java语言的核心概念和技术,以便在面试中表现出色,成功获得理想的工作机会。...

Global site tag (gtag.js) - Google Analytics