过去的一年多里,参加了一些面试,虽然面过的公司不多,但都从头一直走到尾。毕竟自己也是花了大量的时间和精力在这一场场的面试里。所以,就絮叨下自己的一些经验,希望能给在美国找实习找工作的同学们提供一点点帮助,也算是我的北美计算机实习面试总结了。
开始前的一些说明:
1. 笔者只是一介小本科,虽然留了学,但是留了级,学识浅薄,目光短浅,文章若有不恰之处,恳请各位大牛不吝指正!
2. 笔者面试的岗位均为Software Engineer,俗称“程序猿”。如果读者是非CS专业或没有找此类工作的需求,请ctrl +w。本文更多的倾向于CS技术层面,关于面试仪表妆容礼仪等等的其他问题,请出门右拐。
3. 鉴于保密协议,本文只谈面试准备材料和方法,不涉及任何具体面试题。(当然,你如果单独请笔者吃饭,可以考虑)
4. 本文涉及的内容更多地适用于在美国本土的技术面试。美国的面试更加正式规范,国内同学可做适当参考。
5. 个人认为,面试的成功 = 60%的平时积累 + 30%的考前准备 +10%的其他因素(如自信、谈吐)。之前有同学告诉我北美计算机CS实习面试需要的硬实力。所以,面试的准备对于我们这类凡人来说,异常重要;靠平时积累就能虐了面试官的大牛,不在本文考虑之列。
我面过的公司:########

笔者运气较好,除了在微软败在了最后一轮大manager的石榴裙下,其他三家都顺利拿到了offer:先后在百度和Bloomberg实习,并将于2012年正式加入Google工作。Google的Offer下来后,也就是相当于我在美国(北美)计算机CS实习面试的一个暂时结束。
下面将分Behavior Question和Technical Question分别介绍个人的面试准备技巧:
I.         Behavior Question
这类问题的特点是,易准备,好回答,必出现。所以一定要花几个小时好好准备,写写提纲,面试前对着镜子说几次。
a.     HR Question
最无聊的一类问题,比如“why Microsoft?”、“what’s your plan in 5 years? ” 一般为HR所喜欢。
推荐准备材料:http://hrinterviews.blogspot.com/。把这64道题刷一下,所有的HR问题都不会是问题了。准备的方法类似于托福口语,准备几个段子,反复用,就很充分了。
另外,回答一定要真诚。比如,如果被问到“what’s yourweakness?”,你如果回答:我太追求完美太热爱工作巴拉巴拉——太过时太恶心人了吧,亲!
b.     Talk about your project
一般会在面试的开始被问及,必然会被问到的题目之一。把简历上的项目好好地阐述,辅以画图更佳。一些经典的Follow up是:What is the mostchallenging part? What will you do if you have opportunities to improve it?
百分一万的准备好这些问题!面试官通常会刨根问底。答的吭吭哧哧,几乎是不诚信的表现。
c.     Question for interviewer
一般会在面试的最后十分钟里,面试官会请你提出问题。这是你展现对公司的激情、个人的兴趣、和面试官套近乎等等等等的大好机会。不要说“no”或者仅仅问“啥时知道结果啊,哥们”这类的问题。至少准备五个有深度的问题。
个人经验来说,最好的方法还是随机应变,根据之前面试的情况来合理提问。比如,我在Google的一次面试里,面试官无意间提及他在设计一门新的编程语言。面试最后,我就满脸好奇地说:“talkabout your language,please”。然后我和他就编程语言的设计各方面进行了一些小讨论,他最后离开时万分兴奋。就这样,对面试官的尊重,自身兴趣和能力的展现,对技术的激情——一脉相承,水到渠成。
    II.         Technical Question
技术面试的最核心部分。
下面是一些笔者使用过的材料(请适当支持正版):

  • Programming Interviews Exposed

入门级书籍,可以了解一些基本概念。

  • Cracking the Coding Interview

中级书籍,经典必备教材,重点推荐,重中之重!从头到尾我做过五次。

  • Hacking a Google Interview

MIT的一门课程,教学Handout可作为中级题目练习。

资料很多,水帖更多,可以寻找到很多战友和第一手的面经。可以重点学习里面的精华贴。

中高级的算法题。

高级算法题,难度偏难,可做适当了解。个人认为,如果不是面Google,里面的题目被面到的可能性不高。

知名的编程练习网站,有一些相关的材料和教材很经典。

  • 面经来源:

mitbbs的JobHunt板块GlassdoorCareerCup

非常有名的高级C++语言学习网站。啃下来会很有帮助。主要的目的是为了应付关于Object-Oriented的相关题目。
如果你准备用Java,也请至少把语言使用能力达到中阶。

  • Object Oriented Analysis and Design (Oreilly Head First.)和

Design Patterns Oct.2004(Oreilly Head First)
两本OOP的经典教材。据说Design Pattern挺重要,但个人从未遇到过相关题目。但是大致了解一下,总不会错。

  • Wikipedia/Google

仔细查阅每一个你所不知道的算法、数据结构和概念,做好笔记。等你在面试时发现一个名词你见过却不知道是什么,你会把肠子悔青的。

  • 每个公司所关注的技术

这一点非常重要。比如面Google,就要把Distributed System和InformationRetrieval的相关技术了解下,好好看看他家的经典Paper:Map-Reduce和Google FileSystem;比如面Bloomberg,对C++的了解和使用一定要啃到一定级别;比如面Amazon,要准备好OOP。
相信我,花六个月的时间,把上述的所有材料搞定,世界上没有哪个技术公司你进不去的。(You know I’m kidding… But it’sbasically the fact. )
你可能会问,那如果我只有一周,或者两天,甚至更短的时间去准备一场面试,该怎么办?
我的回答是:第一,如果它是phone interview或者on-campus interview,那只是初级的筛选,难度不会很高,justrelax;第二,拿下上述材料中的初级和中级部分(再次强调Cracking the CodingInterview这本书),然后根据公司来决定学习重点,这样就应该有不错的发挥了。毕竟个人积累不同,尽力而为吧。
当你拿到on-site的邀请时,不要去炫耀你的成就了,赶紧去准备之后的面试吧。On-site的难度深度都会有很大的提高。那才是真正的战斗!过不了on-site,你什么也都不是!
下面我会分topic介绍一下准备重点。在你准备面试的过程中,你也应该有一份这样类似的word文档,记录你每天学习到的所有东西。
面试准备绝不是背诵和题海战术,而是能帮助你对CS知识的理解和运用提升到新高度的过程。
1.)  TimeComplexity分析
基础中的基础。绝大部分情况下,算法的时间复杂度能一眼看出来。
如果是面Google,需要掌握一些严密的时间复杂度的数学推导,有些算法不是一眼能看出时间复杂度的。
2.)  Coding    
废话!
但是需要练习的是在纸上和在白板上写code。 (不要小看这件事!关掉愚蠢的Eclipse和VC吧)
更关键的是,写的代码要一次成型,bug-free,即使多花点时间。如果你平时有写完代码再慢慢debug的习惯,是很不利的。被面试官找出bug来,你的分数会被大扣分!
语言选择上,C++和Java,抑或 C#,都是无可挑剔的选择——好比,孙权刘备曹操主;
Python,Ruby,Perl啥的也还行,在字符串处理上有奇效,但面试官未必买账,因为有些问题他需要你从底层实现起——貂蝉诸葛主;
啥,你说汇编?——黄盖主!还是开局鞭挞至一血的!
3.)  Data Structure
题目类型大多是:给定一些实际需求,来设计相应的数据结构。所以,对每一种数据结构的特点、时间复杂度要非常熟悉,而且要有很敏锐的第一感。
a.   Hashtables
可以说是人类发明的最重要的数据结构之一了。面试时的出现率极高!
保证你玩得转Collision strategies和hash function。如果深入到如何设计具体的hashfunction,题目的难度也会是很大的。
b.   Trees
BST,BFS,DFS,trie,Kruskal’s Algorithm ,Prim’s Algorithm
Balanced tree就没什么研究必要了。
c.   Graphs:
图的几种储存形式,BFS/DFS,Dijkstra,A* algorithm
d.   Linked List/Queue/Stack/Heap
相应操作的时间复杂度要了如指掌。保证你能轻松写出C++ STL或Java Library对应类库的API。
4.)  Algorithm
重中之重的重中之重!
Sort,Recursion,Binary Search,Greedy Strategy等等等等要全面准备到。
Dynamic Programming的一些经典题也要会。如果面Google,可能要准备一下DP的高级题目。
笔者认为,准备这类题目毫无捷径,只有不断刷题,总结,刷题,总结。要培养出对题目的直觉,这是一个漫长的训练过程。
在面试的时候,一般来说,要先给面试官提供一个暴力搜索的方法,然后计算复杂度。然后再慢慢做优化。面试时一定要keeptalking,提出自己的想法,展现自己的思路。如果你get stuck,面试官也会给出相应的hint(当然这是会被扣分的)。
5.)  System Design
常见形式是:给定大数据量和N台机器,解决一个特定的问题。较开放的题目。在网络公司的面试中经常出现。
解法有固定套路,可以参考Cracking the Coding Interview相关章节,并自己做一些总结和应用。这类题目看起来很难,掌握方法后,实际难度并不算很高,而且容易展现自身的分析能力,容易出彩。当然,面试官很可能会做适当的延伸,涉及到具体的技术,这就靠自身平时的积累见招拆招了。
推荐的一些补充阅读材料:
External Sort (http://en.wikipedia.org/wiki/External_sorting)
Web Crawler (http://nlp.stanford.edu/IR-book/html/htmledition/web-crawling-and-indexes-1.html)
Google MapReduce (http://labs.google.com/papers/mapreduce.html)
Google File System (http://labs.google.com/papers/gfs.html)
6.)  Mathematics
重点在于组合数学和概率论。会有一些这类的变体出现。稍微准备准备就可以了,相信国人的数学水平,绝对凌驾于世界巅峰,不管他面试官是阿三还是老美还是欧洲人。
7.)  Operating Systems
Processes vs. Threads
Locks, mutexes and semaphores
Deadlock and livelock
Scheduling: FIFO, priority, shortest remaining time, round robin, and multilevel.
不算特别重要。至少笔者从未遇过相关题目。
8.)  Bit manipulation
两个目的:应付该类面试题(出现率不高,但是Google喜欢问);
用于自己的编程技巧——尽管有些silly,但是在代码中整一点bit manipulation,是很geek的事。
9.)  Design Pattern
了解这些:Observer Pattern, Decorator pattern, Factory Pattern, SingletonPattern
面试是一个很吃经验的考试。不要顾忌前几次的失败,那都是必要的练级。
最后,送上我笃信的一句话:"Success is just like being pregnant. Everybody congratulatesyou but nobody knows how many times you were fucked"。
谨以此祝愿所有的童鞋都能获得自己Dream Company的offer!以上就是我的北美计算机CS实习面试经验!
码农社区技术留学移民板块 http://w3croom.com/read.php?tid-3579.html

我的美国(北美)计算机CS实习面试经验分享的更多相关文章

  1. 标 题: [心得]传统IT转互联网面试经验分享

    发信人: lgonnet (逃之夭夭), 信区: Java标  题: [心得]传统IT转互联网面试经验分享发信站: 水木社区 (Wed Jul  1 10:18:38 2015), 站内 统一回复一下 ...

  2. Java这样学,Offer随便拿,学习方法和面试经验分享

    Java这样学,Offer随便拿,学习方法和面试经验分享 学习中:https://mp.weixin.qq.com/s/iSutLzqCiPMWwm_Rm_2oPw

  3. 春招后端阿里腾讯字节美团Offer拿来吧你,面试经验分享

    近期很多童鞋在准备校招了,找了蚂蚁的一位童鞋,给大家分享一波面试经验,以及面试心得,希望能帮大家在秋招拿到一个好结果 我自己的22届春招实习算是告一段落,给自己做个总结,也给大家分享一下面试的一些心得 ...

  4. BAT面试经验分享——iOS高级开发工程师的自我总结!

    序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了. 今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,随着各大公司秋招的开始,很多小伙伴都行动起来了,我也有幸获得了一份不 ...

  5. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer

    基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...

  6. 两年Java程序员面试经验分享,从简历制作到面试总结!

    前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...

  7. 【面试经验分享】java面试中的那些潜规则

    1.大纲 潜规则1:面试的本质不是考试,而是告诉面试官你会做什么 很多刚入行的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难道你的意思,只是想通过提问的方式来知道 ...

  8. 软件测试面试题,十年HR面试经验分享

    WeChat[代码小姐],快和我们一起进大厂,挑战高薪吧. 问:你在测试中发现了一个  bug ,但是开发经理认为这不是一个  bug ,你应该怎样解决. 1.将问题提交到缺陷管理库里面进行备案.2. ...

  9. [心得]传统IT转互联网面试经验分享

    http://www.newsmth.net/bbstcon.php?board=Java&gid=374779 传统IT外企干了8年,两年前转互联网的,面的和被面的都不少.这几天项目空档期, ...

随机推荐

  1. ajax参数中出现空格

    jquery中发起ajax请求时的参数名中不能有空格.如果是get请求参数的中的空格会变成“+”符而在post请求中看不到这种变化,但无论哪种情况都无法与服务接口的参数就行匹配(此时进行调试也不会触发 ...

  2. HTML5 Canvas 的事件处理---转

    DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到.比如SVG绘图,各种图形都是以DOM节点的形式插入到页面中,这就意味着可以使用DOM方法对图形进行 ...

  3. js基础-需要注意的地方

    ---因为跟别的语言很像,所以只记录要注意的地方 1.== 和 === 的区别 ===要求类型也相等 "5"==5 = ture "5"===5 = false ...

  4. GridView+ZedGraph【转】

    edgraph图表控件的强大功能令人出乎意料,与OWC相比我想应该毫不逊色,近来需求要求作出相关数据统计,不想使用BI这类的强大东西,所以搜索到 了免费的开源的Zedgraph控件.使用起来也非常方便 ...

  5. 网络编程之TCP

    知识补充:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字.其用于标识客户端请求的服务器和服务. TCP编程的实现步骤:服务器端:1.通过ServletSocket创建绑定到指定客户端 ...

  6. pom.xml配置

    1:头部引用 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...

  7. C语言获取键盘按键

    在写控制台游戏的时候,发现不管用cin,scanf还是getchar,都不能实时的输入按键,必须要按回车才能读进去,而按回车的话会导致输入异常,所以要使用获取键盘按键的函数. 加入头文件#includ ...

  8. No.1_1 java语言基础_学习笔记

    import java.util.Scanner; public class HelloWorld { static final double PI=3.14; static int x=125; / ...

  9. mysql数据库的连接

    public TJb checkjbByschool(long id)throws ClassNotFoundException,SQLException { Class.forName(" ...

  10. activiti笔记四 关于部署信息表act_re_deployment

    一.简要描述 部署流程定义时需要被持久化保存下来的信息.二.表结构说明 字段名称 字段描述 数据类型 主键 为空 取值说明 ID_ ID_ nvarchar(64) √ 主键ID NAME_ 部署名称 ...