十一、应聘Google
有能力有水平的应聘者要准备充分,防止把面试给搞砸了。我们要做练习,充分热身,复习学过的东西再去面试。
Google等大公司也会因为失误拒掉合格的候选人,Steve第一次失败了,求他们给他第二次机会,然后他因为准备充分成功了。
面试失败可能是碰到了“面试拒人团”。面试官基本不会改变自己的面试风格,而且他们往往有自己的面试题目,所以面试失败是难免的。很多人都是尝试两三次以后才进来Google的。
下面是Steve总结的大公司里的面试官都会问的常见主题。虽然可能过时了,但是可以作为参考。这些建议只对类似Google的大公司有效。以下是非技术的部分:
1.长期热身:
在面试前要复习一到两个星期,要让自己适应进入在白板前解决问题的“模式”。可以好好读一本讲数据结构与算法的书,这能强化你分辨问题的能力。面试官喜欢那些不用解释就能明白他们在问什么的应聘者。从准备面试的角度来讲,能够识别出问题属于哪个类型,最好用什么算法和数据结构来解是至关重要的。《算法设计手册》是每次准备面试的好书(不知道有没有过时,豆瓣上都是最迟的评论都是14年的了)。有些面试官比较推崇《算法导论》,但是两个星期是读不完的,功夫在平时。找个朋友来面你,让朋友随机给你出面试题,你应该要能立刻在白板上写出来。不要被惰性打倒,坚持写完才能结束。
2. 短期热身:面试前一天晚上要休息好,然后当天早上要做一些密集快速的热身练习。在开始面试前一个小时尽可能使自己保持警惕,充分热身,读读笔记,做两道题练练手,喝点咖啡。
3.心理准备。保持谦逊、开明、专注的态度。质疑面试官问题的合理性就是傲慢的典型表现。要是觉得卡住了,不要害怕问问题,虽然有些面试官会因此减分,但是通常能帮你清除一些障碍,让你的总体表现好看一点。思考的时候不要发声。不要转移话题。不要妄图讲故事避免面试官问问题。不要唬弄面试官。你要把注意力放在问题本身,尽力去完整地解答。
有点面试官会暗示你在白板上写一点代码,如果你不确定地话直接问他们好了。写出前问面试官语法重要吗,有的面试官很重视这个。写代码之前可以问不清楚的地方,说说自己是怎么想的,证明自己仔细思考了。但是不要说太多,免得让面试官觉得你在拖延时间。如果有白板面试,可以自带细的可擦马克笔。白板上写代码要注意空间,字不要太小。
以下是准备技术面试的建议:
1. 最好的建议是准备一个计算机科学的学位。非科班是要吃亏点,可惜我的懒惰导致我4年(16、17、18、19)考了3次(16、17、19)也没能考上计算机科学与技术的研究生。
2. 算法复杂度是计算理论开头的一章,一定要读懂,必须掌握。
3. 排序:知道排序是怎么回事。不要写冒泡排序。至少要了解两个复杂度为n*log(n)的排序算法的细节,比如快速排序和归并排序。不要在面试的时候去排序一个链表。
4. 哈希表是最重要的数据结构,一定要弄明白它的原理,去读数据结构书。你要能够做到在一场面试里,用自己最熟悉的语言,只能数组来实现它。
5.树是基础,必须弄懂,有些人连最基本的怎么构造一棵树,怎么遍历,怎么操作的算法都没搞明白就来面试。你至少要熟悉而二叉树、n叉树、trie树。树是长期热身里最好的练习题资源了。至少要熟悉一种平衡二叉树,可以是红黑树、伸展树、AVL树。而且必须掌握实现细节。树的遍历算法也要知道,BFS和DFS,还要了解前序、中序、后序遍历的区别。
6. 图:图非常重要。在内存里表示图的方法基本上有3种(对象和指针、矩阵、邻接表),每种表示都要熟悉,并且知道它们的优缺点。
你应该了解基本的图遍历算法:广度优先搜索和深度优先搜索。知道它们的计算复杂度、优缺点,以及具体的实现代码。还应该根据情况了解一些更高级的算法,如Dijkstra算法和A*算法。
每次遇到问题,首先考虑图算法,它们是任何关系最基本、最灵活的表示方法。只有在你百分之百确定没办法用图算法来解的时候,才能去考虑其他方案。这条建议一定要牢记在心。
7. 尽可能多掌握一点各种数据结构和算法。特别是那些著名的NP问题。如旅行商问题和背包问题。在面试官问道这类问题的时候,你要能认出它们来。你要知道NP完全问题的意思。一定要好好读数据集购书,能记多少就记多少。
8. 数学:有些面试官会问一点基本的离散数学。面试之前复习一下基本的组合学和概率学。至少也要熟悉n选k这类问题。
9. 操作系统
10.编程:至少要掌握一种编程语言,最好Java和C++。C#也行。一定要对那门语言的细节有相当程度的了解。
以上都是必备的知识,只是面试及格的要求。要是运气不好遇到“面试拒人团”还是会失败,多准备几次吧。
十二、敏捷开发
想要产生正确的影响,一定要同时另指一条明路。我要创办有礼貌的公司,没有大喊大叫,没有相互推诿职责。组织是领导人的影像。我们要做温文尔雅的人。这里讲了很多Google的理念,值得学习。
最后是敏捷开发问题多多,不要听他们的。
十三、平台和产品
略
(完结)