一、面试流程
1.1 概述
电话面试(在线共享文档)、现场面试
面试后一个星期如果没有结果,可以去询问
1.2 面试题的来源
面试题完全取决于面试官个人的喜好,所有公司来源大致相同,不同的公司在风格上存在差异
1.3 准备时间表与注意事项
1.4 面试评估流程
面试主要考查四个方面:工作经验、企业文化契合度、编程技能及分析能力。分量最重的是后两者(或者看你是否聪明)。
一旦进入大型科技公司的面试环节,你之前的工作经验就不是特别重要了,但它可能左右面试官对你的看法
创业公司比大公司更看重企业文化契合度(或你的个性,主要看是否与公司合拍)。
求职者因为过于自大、巧辨或抵触而被淘汰的情况也不少见。
应该注意如下几点:如果人们都认为你自大、过于狡辩,或有其他负面评价,那你最好在面试中收敛一下;准备一些与简历相关的问题;把主要精力用在编程与算法问题上。
如果被拒绝,一年内还可以重新应聘,很多求职者都有过失利后再成功的经历。
1.5 答题情况
并不需要答对全部问题才会被录用。
首先,面试题的答案很难用“正确”和“错误”去简单评判。一般不会只看答对了几道题,相反,会考量其解法是否最优,用时多久,代码整洁与否。
其次,你的面试表现还会拿来跟其他求职者作比较。
1.6 着装规范
科技公司休闲风,非科技公司穿套装,但不打领带
1.7 十大常见错误
只在计算机上练习:拿出纸和笔吧
不做行为面试题演练
不做模拟面试训练
试图死记硬背答案
不大声说出你的解题思路
过于仓促:解题时不要太过仓促,代码写得太草率容易出问题,也说明不够细心。请这么慢节奏,有条不紊,多做测试,问题考虑得周全些
代码不够严谨
不做测试
修正错误漫不经心:发现bug时,必须要三思而后行,修正之前先确定出错原因,仓促的改代码会导致更多的bug。有bug其实很正常,但胡乱修改代码却很严重
轻言放弃
1.8 常见问题解答
碰到熟悉的问题时应该如实相告吗?是的!
该使用哪种编程语言?一般推荐C/C++、JAVA
面试后没收到回复,是被拒了吗?不是的
被拒后还能重新申请吗?能,等上半年至一年
二、面试揭秘
2.1 微软面试
2.2 亚马逊面试
2.3 谷歌面试
2.4 苹果面试
2.5 Facebook面试
2.6 雅虎面试
三、特殊情况
3.1 有工作经验的求职者
在面试中,对于有工作经验的求职者和初出茅庐的新手,面试官会问同样的问题,而且面试标准差别也不大。
大多数面试题都是些涉及数据结构与算法的常见问题。
有些面试官可能会对有工作经验的求职者稍稍提高标准和要求,不过也有一些面试官持相反的看法。总体来看,两者相抵
此外,对于“说说你碰到过的最棘手的bug”之类的问题,面试官往往期待有工作经验者给出更加深入、让人印象深刻的答案。
3.2 测试人员及SDET
3.3 项目经理与产品经理
3.4 技术主管与部门经理
3.5 创业公司的面试
四、面试之前
4.1 积累相关经验
多承担一些编程职责、善用晚上和周末的闲暇时光
4.2 构建人际网络
4.3 写好简历
简历篇幅长度适中:不足10年的缩成1页,超过10年的,不超过2页。
工作经历:只列举相关的工作经验。列举格式:使用Y实现了X,从而达到了Z效果。
项目经历:列举2到4个最重要的项目。描述项目简明后面要,比如使用哪些语言和技术。
编程语言和软件:软件没必要列举,语言如下:Java(非常熟练),C++(熟练),JS(有过使用经验)
给母语为非英语的人及国际人士的建议:找以英语为母语的人审阅简历,申请美国工作时,简历中不要包含年龄、婚姻状况或国籍等,公司并不想看到这些个人信息,因为怕惹上不必要的麻烦。
五、行为面试题
5.1 准备工作
按如下格式撰写一份“准备表格”:
电话面试时,最好将这份表格摆在自己跟前。
你有哪些缺点:回答不要太空泛,应该提到真实、合乎情理的缺点,然后话锋一转,强调自己如何克服这些缺点。
项目中最难处理的问题是什么:不要泛泛地回答
你应该问面试官哪些问题:真实的问题(你每天花多少时间在写代码上,你一周要开几次会,整个团队中,测试人员、开发人员和项目经理的比例是多少,他们是如何互动的,团队怎么做项目规划)、有见地的问题(我注意到你们使用了X技术,请问你们是如何处理Y问题的,为什么你们的产品选择使用X协议而不是Y协议,据我所知,虽然X有A、B、C等几大好处,但因为存在D问题,很多公司并未采用该协议)、富有激情的问题(我对可扩展性很感兴趣,请问你人事过分布式系统方面的工作吗?有哪些机会可以学习这方面的知识,我对X技术不是太熟悉,不过听上去是个不错的解决方案,你能给我多讲讲它的工作原理吗)
5.2 如何应对
力求具体,切忌自大
省略细枝末节
回答条理清晰:主题先行、S.A.R.(先描述情景,然后解释你采取的先去,最后陈述结果)
六、技术面试题
6.1 技术准备
如何练习:尽量独立钥匙、在纸上编写算法代码、在纸上测试代码、将代码原样输入计算机
你需要掌握的知识:
对于上述各项主题,务必掌握它们的具体实现和用法、应用场景、空间和时间复杂度如何等。
对于其中的数据结构和算法,你还要练习如何从无到有地实现。
其中,散列表一项特别重要。你会发现,解决面试问题时,经常会用到散列表。
2的幂表:
有了这张表,就可以做速算,在电话面试时很有用
需要知道C++、Java或其他编程语言的细节吗?
不需要
6.2 如何应对
如果没能立刻签出所有问题或某个问题,不要慌张,不管大声说出你准备怎么解决。
另外,还有一些,只有面试官点头认可,你才算是真正解决了问题。
解决技术面试题的五步法:提高、设计算法、编写伪码、编写代码(多用数据结构,写代码不要太杂乱)、测试
6.3 算法题的五种解法
举例法、模式匹配法、简化推广法、简单构造法、数据结构头脑风暴法
6.4 怎样才算好代码
好代码具备如下特性:正确、高效、简洁、易读、可维护
多用数据结构、适当重用代码、模块化、灵活健壮、错误检查
七、录用通知及其他
7.1 如何处理录用与被拒的情况
回复期限与延长期限
如何拒绝录用通知:
处理被拒的情况:
7.2 如何评估录用待遇
薪酬待遇的考量
职业发展
公司稳定与否
幸福指数
7.3 录用谈判
要理直气壮、最好手头有其他选择、提出具体的“要价”、开出比预期稍高的伪代码、不要只盯着薪水、使用最合适的方法
7.4 入职须知
制定时间表
打造坚实的人际网络
向经理寻求帮助
八、面试考题
8.1 数组与字符串
1.1 Is Unique: Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structures?