menu

hjk41的日志

Avatar

我的面经

我找工作的一点经验总结,希望对后来者有点用。

简历
简历直接决定你能不能得到面试机会,也决定了面试官会问你什么问题,以及面试官对你的期望。
简历要简洁。第一轮挑简历的是HR,他们会面对大量的简历。如果你的简历太长,他们可能没有那么多耐心去看完。但是,你的简历一定要跟别人的区别开来,能让HR一眼看到你的强项。如果你发了很多牛文章,那就把文章放在显眼的位置,适当的加粗。如果从事的项目比较多,那就重点强调项目。
尽量不要写“精通XXX”这一类的话,除非你真的很精通。如果你的简历经过了第一轮筛选,得到面试机会,那么你的简历会被HR传给面试官。面试官对你的第一印象就来自你的简历。面试官往往跟你是同行,所以这种很主观的,甚至有点自夸性质的描述不要写。要表现自己的优点,经历往往比这种主观的词汇更有说服力。比如你精通C++,那可以说你“在xx开源C++项目中贡献过xxx行代码”,或者“作为主力完成xxx项目的实现”。
适当的在项目或者文章列表部分加一些简单的描述。比如项目的性质,规模,你在里面所起的作用,等等。这样面试官才能找得到话题,而不会凭空的去想一些面试题来考你。显然,在项目相关的问题上,你应该比面试官熟悉。而如果是面试官找问题来考你,那面试官在该问题上一般都会有比较深入的理解。所以,最好还是用简历来引导面试官的问题,而不是让他来主导。这叫以己之长,击彼之短。

面试前准备
面试要不要准备?这个分情况,但大多数情况下还是要的。
IT从业人员的面试,一般分三种情况,一种是考算法跟编程,一种是问项目或者文章相关的问题,最后一种是所谓“闻味”。
“闻味”的面试一般就不需要准备了,反正是问一些性格方面的问题,照实答就是了。如果你真的跟公司的文化冲突很大,那去了也难受。
如果是问项目或者文章相关的问题,一般还是需要稍微准备一下的。毕竟大多数的项目和文章都完成很久了,有些细节还是会忘的。可以在面试之前稍微回忆一下。
而算法跟编程,就需要准备了。微软跟Google都喜欢问算法题。网上有很多经典题,可以看一看。面试的时候不一定会碰到你看过的题,但提前让自己的脑子动一动还是有好处的。我推荐看一下《算法导论》中的分治,partition算法和动态规划。其实面试中考的最多的还是分治法,具体问题不一样,但是分而治之的思想都一样。partition算法和动态规划很少考,但考的时候至少要知道“这个问题可以用partition/动态规划来解决”。编程的话,我只被考过C++,也没有太多变态的东西。当然,如果对自己没信心,事先看一些面试宝典之类的东西也还是有用的。
最后,面试官还可能会问一些常识性的问题,比如线程进程的区别啦,如何同步啦,这一类。这种问题我觉得就没什么必要准备了,知道的就是知道,不知道的真是一时半会补不回来的。

面试中注意事项
面试官不一定比你强,也不一定比你弱
有人怕面试官,有人BS面试官。其实我觉得,面试官们都可能是我们以后的同事,所以不需要特别害怕或者BS他们。他们有可能比你强,也有可能比你弱。所以,如果你碰到不会的问题,没必要沮丧,可能面试官只是在这方面比你懂的多。反之,如果面试官问一些弱智题,或者他自己都不懂,那也没必要BS他,因为他可能只是这方面不行,或者他刚好是公司里最弱的一个。。。
要抱着平常心态去面试,大多数时候面试官的水平应该与你差不多。

面试官想要什么样的答案
有些面试题可能有很多种答案,或者有很多种答法。面试官问问题的时候往往心里会有一个自己的答案,他期待你答出来。那么,怎么去猜测面试官想要的是哪个答案?
举个例子,那个“进程和线程的区别”的面试题,回答可以是多种多样的。你可以简单的说“进程是有独立地址空间的,线程没有”,也可以说“Linux下进程跟线程是一个东西,只不过线程是跟其它线程共享一个地址映射表的”。面试官想要哪个答案,取决于他自己的知识水平,以及他对你的期待。所以这个时候就需要你去问他:你要的是哪个答案?当然,你不能开口这么问。所以你可以先说“进程是有独立地址空间的,线程没有”,然后问他还需不需要描述更多细节。
面试是一个交流的过程。面试官试图在有限的时间内,对你做更多的了解。而你则是要更多的表现你的优点。大家的目的其实是一样的。多多交流和互动,对大家都有好处。

碰到不会的题怎么办
所谓“不会”的题,可能你没理解面试官想问什么,可能是某些知识你根本就不知道,或者是某些算法一时想不出来。
如果你没理解面试官想问什么,你可以请求他给你一些提示。不要试图去猜测,这样太浪费时间,也没有必要。面试官肯定希望你能尽快的答完问题,这样大家都能休息了。比如说,面试官可能会问一些很抽象的问题,比如“有一个数据,更改他的时间很长,但是我又需要经常读,怎么办?”他的脑子里其实是另一个问题,可能是一个很具体的应用场景,但是他把问题抽象出来,于是变成一个很难懂的问题。这时候你可以要求他把问题具体化到一个场景中来。于是他可能会把问题变成“我有一个倒排表,更新倒排表的过程很慢,但是更新过程中我需要保证搜索引擎依然能访问它”。这个问题就简单多了。
对于根本就不知道的知识,不需要装懂。对企业来说,你不懂什么不重要,重要的是你懂什么。每个人的知识面都是很窄的,碰到不懂的题很正常。你可以说,这个我的确不懂,不过我知道另一些相关的知识,比如xxx。有问题不懂正常,但是你得让面试官知道,你不是什么都不懂。
对于算法题,其实考的是解题思路。比如算法,可能用分治法可以在NlogN时间内解出来的,但是在面试的时间内,很难把整个算法做出来。其实包括面试官本身可能也在短时间内解不出来的,所以没有关系,你只需要让他知道,给你比较充分的时间,你能解得出来。所以,碰到这种规定了复杂度的算法题一般是这样的:(1)先提出一个高复杂度的算法,以证明你至少能解决这个问题;(2)告诉面试官说,这道题可以用分治法,partition或者动态规划来解,复杂度会是多少;(3)试图在有限时间内把问题用高效的方法解出来。这就把一个“会做-不会做”的问题分成了三部分,我相信大多数人至少能搞定(1)和(2),而大多数应该都完不成第三步。但是不要紧,做完(1)和(2)的话,你至少已经得到了三分之二的分数。

其实还有很重要的一点是,不要冷场。面试的时间很宝贵,不管是对你还是对面试官来说。所以你要在面试的时间内,尽量多的展示你的优点。冷场很显然不符合大家的利益。冷场一般发生在你答不上来的时候,这时候,不要再冥思苦想,冷场的压力太大了,大多数人都没办法集中精神的。其实你可能有一点思路,但是需要时间,你可以一边思考一边把你的思路讲给面试官听。这样一方面不至于冷场,另一方面在你的思路有偏差或者你的回答不符合面试官的预定答案的话,他也有机会提醒你。面试是面试官和面试者的交流过程,你是闲不下来的,也不要让面试官闲下来。充分的利用面试的时间,这才是王道。

进来瞻仰一下面试达人兼offer达人

不错~~

Orz