Technical
知乎上有这样一个问题:Google,Facebook之类的美国一线IT公司面试最看重什么?
问题描述:new grad cs专业在美国找工作,身边人很多都是题做出来了,但是还是没收到offer,相反有的题没做出来,反而被录了,说是交流问题等等,但是感觉大家(国人)口语应该差异也不会太大,就不知道除了刷题以外,还能做哪些准备呢?或者需要注意的地方希望过来人能解惑一二。
我曾是Google的主力面试官,从2013年起我做来offer,将包括LeetCode版主在内的1200名中国学生辅导进硅谷的一线公司。对于怎么面试和如何准备面试,特别是顶级科技公司的面试,我想聊一聊我的经验。
面试官真正想要的,是能够独自和与团队一起为公司解决问题的人。写出了Code,答对了题,并不代表你Coding能力就强,即使Coding已经达到了标准,也不完全代表面试官就愿意选择和你共事。
首先,并不是写出了code,做到了基本的bug free,就代表你coding能力很solid。以下是来Offer总结的比较有用的Check List:
Code本身:
code写的对不对,是不是做到Bug Free?
是不是能够处理所有可能的情况?
有没有主动walk through几个test cases?
Code是不是用标准的格式来写的?
结构是不是让别人能够很清楚的看明白?
沟通Code:
在写code之前,有没有主动的跟面试官沟通来明确题目要求,分析各种需要处理的情形?
有没有考虑可能的环境和多种解决方案?
有没有做必要的trade off的分析?
如果你用到了某些数据结构和算法,有没有解释清楚运用这些工具的原因到底是什么?
Code优化方面:
有没有冗余的可以优化的代码?
你给的答案是否是效率比较好的?
能否主动继续分析优化方案?
其次,那种Coding能力不错,但是因为其他原因挂了的,也太多太多了,几个典型的例子:
例子1:
面试官:The Candidate was very quiet. I need to probe him all the time. I’m worried about his communication.
例子2:
面试官:Do you have a bug here?
应试者:(想都没想)”No! No! No! I disagree with you”
例子3:
面试官:Do you have any question for me for the last minute?
应试者:You work in XXX department, right? I think there are quite a number of things that can be improved...(喷了10分钟面试官的工作)
这些面试者有的是太安静被动,有的是太急于证明自己,最终都导致了面试的失败。所以说,Coding能力是很重要,但只是拿Offer的必要不充分条件。如果说FLAG面试的完整攻略,还是必须要在Hard Skill和Soft Skill两个方面都表现出色。
Hard skill方面,主要考察的就是你的专业能力,包括Coding, Testing, Basic Data Structures & Algorithms和Design。
Coding:
能保证至少一门语言,不论是java还是C++还是Python,不会被面试官问倒。
能够很快将复杂的问题转化成逻辑和代码。
想到和处理可能的边界条件。
写出的代码能够符合业界对格式、易读性和结构的要求。
Testing:
- 对于测试的要求大多为单元测试,因此要求工程师能够自己写test来验证代码的正确性。
Basic Data Structures & Algorithms:
- 能够深度理解各种数据结构和算法,对应选择高效的解决方案,并告诉面试官为什么。
Design:
Solution Design:能够从工程的角度,考虑不同的需求和环境之下,不同的解决方案的tradeoff。
System Design:应该具有完整的知识体系和储备,熟悉计算机系统的基本知识,在复杂的情况下分析和解决对应的设计问题。基本知识概念包括操作系统、数据库、网络、web technology、分布式系统、多线程等等。
虽然很多人都说New Grad不考Design,但事实上,FLAG这个级别的面试还是多少会有涉及,而且了解Design的知识,对于和面试官分析、解决问题有很大的帮助。
Soft Skill方面,除了一个必须具备的Attitude,对于面试来说最重要的就是两个方面:Problem Solving和Communication。
Problem Solving:
要能够系统地、明确地观察问题,定义问题,分析问题,分解问题,最后找到合适工具来解决问题。
还能够不断总结、优化、调整现有方案,多次迭代来找到更合适方法。
这是一个非常重要,但也很容易被忽视的方面。所有的技术能力都只是用来解决问题的工具,而不是方法。
Communication:
Technical Communication方面就是要有目的、有条理、有主次
Non-Tech Communication方面包括自我介绍、Behavior Questions、向面试者提问,以及其他所有的细节。这方面相对没有那么唯一的要求,但是自信、积极、尊重应该是一个普遍的标准。
一样的题目,面试官可以选择给你提示也可以选择不给你提示。评分评价主观上,加减10%到20%轻轻松松。2.8和3.2一样吗?一个天上,一个地下。
更多求职干货请关注来Offer微信公众号查看