一般人投入面试都是在需要换新的工作的时候才去,但我即使有着一份稳定的工作也会常常跑去面试一些感觉不错的公司。当你没有工作的时候,比如刚刚从学校里出来寻求一份生存的根本,和处在所谓的骑驴找马的状态去面试的心情是不太一样的。而即使找到了一匹好马,偶然出去面试一些公司也是非常有意义的。
首先不要浪费了每年免费的面试机会。很多公司对于没有成功的面试者都会关一年的“小黑屋”,这个意思是在这段期间内再申请公司内的职位将不被理会。很多人都想去大公司,但是又怕会面不上,所以我经常听到说“我先拿小公司练练手,再多刷刷题再去面大公司”。这没什么错,但是又怎么能保证练完手刷了题就能面上了。所以我个人更倾向当机立断地将简历投向这些心中的“梦想公司”(对于写简历和投简历又是另一门学问,可自行网上搜索)。如果有幸拿到了那些公司的面试,反而会更有压力,让自己变得更加积极地去准备面试。而且一般大公司的面试流程都很可以拖成几个月相信足够去针对性地了解这家公司常见的题目和面试形式。即使说因为种种原因没有成功,这样的一次亲身经历也有利于提高下次的表现。所以我总是会这样看待一家公司的面试“今年又有免费面试的机会了不能浪费了,今年不行明年还能再来”,而不是“面试的机会很宝贵不能浪费了,等准备好了再去”。另外,这些大公司对你的简历是真的会留底的,recruiter在找人的时候有可能真的会再翻出简历然后打电话给你。我现在就职的Twitter就是这样,最早联系上的时候一轮电面就再没有消息(残忍的默拒),半年后接到电话说Mobile组有空职,我当然兴致勃勃地又去面了然后加入了Android组。其他几家大公司,我也有类似的经历,先后失败了2、3次,现在都得到了到这些公司任职机会。
其次,通过面试可以最大程度地发现自身的不足。每次失败的经历都会让我反省,让我更加投入现在的工作并寻求提高,反而让老板觉得我很努力。比如我以前基础算法还行,但一到DP(Dynamic Programming,动态规划)问题就卡壳,所以我就反复针对DP问题进行训练;面试Android职位会问很多基础Component的问题,于是我就实际测试来更深入地理解它们;多线程问题处理不好,就开始看《Java Concurrency in Practice》;常常会被问做过哪些项目,我便开始刻意记录我做过的项目并想着怎样美化最后的效果而又不显得夸张;有些关于某个行业内很流行的库的问题没答上来,那回去就可以开始学习那个库。还有一次印象深刻面试失败经历是让我写一个简单的Android程序,虽然给了我两天的时间,但是我还是放弃了,那时我才意识到我修修bug写个小部件还可以,真让我从前往后独立完成一个项目,我还是挺无力的。另外即使最后拿个了offer也有值得质问的地方,比如为什么我不是我要的职位,觉得我这方便能力和经验还不够,怎样做才能加入我最想去的组;或者为什么给我的Level这么低,哪里不符合这个公司这个职称的要求了。然后我发现,要达到更高的职位,就不仅仅需要写代码这么简单,更多地在考察软件设计(Software Design)。这也是为什么相比于刚毕业时面试都是考算法编程,现在会更多的加入系统设计(System Design)环节,而这一环是决定着大公司愿意提供什么样的Level的更大因素。所以我需要学习如果设计出可维护,可扩展,可测试,又好理解的工程架构。当然好的数据结构和算法选择也是设计的一部分,所以依然不可或缺。
最后面试还可以提高英语交流能力,并了解市场动向。对于中国人通过留学到美国然后找工作,或者直接从国内申请美国公司的职位,最大的障碍可能不是技术而是语言。英语的交流可以在工作过程中得到提升和锻炼,但有时候因为英语能力薄弱而害怕去交流,这让英语提高变得缓慢。面试却是一个非常好的交流机会,因为在面试过程中我不得不去说,找到最佳的方式介绍自己,描述自己的工作经历。而且面试官被安排了这将近一个小时面试回去还要写报告称述,就不得不在那听着我不熟练的英语和我聊天。不过因为我讲的都是我了解的技术方面的知识,或者是我亲身经历做过的工作,自然可以应对上来。这不会像平时跟同事闲聊,可能他们讲的电视剧或书我没有看过,没有足够的背景接上话然后造成了我只能干坐着听着附和着。面试里我总会有机会去用英语表达我的意思,并且随着面得越来越多,我的内容也经常会要反复跟不同的面试官讲,所以也会越来越流利。其实不仅仅是出去被别人面试,在自己公司面试别人也同样是很好的交流机会。此外,出去面试还可以从那些recruiter口中了解现在市场需要什么样的软件工程师,从其它公司的工程师口里知道他们使用的都是什么技术。比如我听到现在很多公司都在做可穿戴设备,但这些还是依赖于手机的连接,所以对于Mobile开发者依然需求很大。大部分公司都将版本控制签到了Git上,或者开发了一些工具了连接旧控制系统;代码审查(Code Review)方面中小型公司倾向于GitHub,大公司则有资源去研发自己的系统;开发Android上基本都选用Android Studio和Gradle,模拟器都会选用Genymotion。了解市场才不至于被技术淘汰。
以上只是我个人对于面试的想法,也只针对加州湾区市场,因为这里有很多科技公司也有很大的软件工程师需求,所以就出现了大量的面试机会。出去面试固然是为了得到一份好的工作,但它能提供其他更多的价值,这也是为什么我很享受面试的过程。不过面试也是极度费神费力的过程,出去onsite至少需要一整天时间,不可避免的会影响工作,因此我也不会没有选择的全部都去尝试。当我在面试中发现我需要去提高的地方时,我便会收心工作专注提高自己。
1 Comment