面试就是你来我往,互相了解!

688 阅读10分钟


首先,每家公司都有不同的公司文化,对技术人员的要求都不尽相同。有的公司希望你踏踏实实干,不需要你很多稀奇古怪的想法,只要按部就班完成功能即可;有的公司则乐意看到员工的创造力,多尝试新技术,用不同方式完成任务。因此,面试者不可能都满足每家公司的要求

其次,程序员一般比较内敛,平时码字多说话少,不容易表达清楚自己的想法和描述事情。不仅是面试者,面试官可能跟你差不多经验,他也会紧张,有时提问题也比较模糊。因此,在面试中,面试者没搞清楚面试官问题的意图,又急着回答,最终导致双方没能互相了解。这样往往影响到公司对面试者的评价。

那么我们如何才能在面试中发挥正常水平?

笔者希望你从以下几方面入手,来应对面试中各种场景:

1.构造自己的知识框架;
2.搞清楚求职意向;
3.搞清楚面试问题;
4.自信地回答每个问题;
5.了解公司和员工。

1.构造自己的知识框架

学习新技术,实践中累积经验,永远是程序员最基本、最重要的事情。而且,技术面试官最关心的也是你的技术、经验如何。然而,面试官关注哪些技术点,你未必会清楚,特别对于毕业生来说。

当然,每家公司的产品不同,对技术的要求也不同,每个面试官对技术点侧重点也因人而异。有些公司做直播、美图、视频剪切,很可能要求面试者具备 音视频及图片处理的经验;有些公司做理财产品,要求熟悉NDK....

尽管如此,业界对某个技术岗位的技术图谱,还是有一定共识的。我接下来给大家讲讲,我们公司及我个人对不同工作年限的面试者,有怎样的要求。

首先,Java基础一定要好,多线程、线程锁、队列、堆栈、链表等数据结构必须懂,什么时候用什么数据结构,设计模式能说上几个。其次,四大组件逃不掉,自从Google出了RecyclerView,对ListView就不太要求了,Handler会用就好。第三,会用几个流行开源库,网络请求retrofit、okhttp、volley等至少会用一个,图片处理Glide、Fresco、Picasso等至少会一个,数据库GreenDAO、ORMLite等至少会一个(笔者还是钟情与AFinal、XUtils这两款)。

笔者对java基础、数据结构、设计模式尤其看重,因为这些是基本功,所谓“基础不牢、地动山摇”。会使用四大组件、网络图片数据库开源库,能满足日常开发就OK了。

1-3年

如果是1年经验,多线程、设计模式、数据结构还是需要在面试时提问的;四大组件、RecyclerView、handler简单用法就不问了;开源库使用会问,而且需要讲讲上家公司使用情况。

2到3年经验,java基础就不问了,会更着重问开源库使用情况,笔者要求面试者读过某些开源库源码,butterknife应该熟悉,对于各种数据源,如何选用合适的持久化方式,最好会写SQLite,而不是会用开源库就了事。这时候面试官更多地问工作经历,而不会抠代码细节。

对于这个阶段的工程师,面试官很可能会问平时关注什么技术公众号、简书、掘金等,用不用Google搜索(千万别说用百度,用Bing也好)。

3-5年

这阶段面试官主要问工作经历,在团队做了什么,如何跟产品、设计沟通,上一家公司开发流程是怎样。开源库使用情况会顺带问一下,不抠细节。代码风格方面,会不会MVP、MVVM等。

笔者对4、5年经验面试者,更看重平时的学习和开发习惯,必须固定从某个渠道获取技术咨询,最好写技术笔记,用什么翻墙,会不会写单元测试,有没搞过插件化、组件化,有没用intelliJ写demo的习惯、懂不懂一点后端技术....

到了这个阶段,招来的工程师是不需要“带”,甚至是新人懂更多新技术。笔者希望这个人是一名好的战友,跟团队一起扛项目,为大家排忧解难。因此,会更加综合考虑工程师素质、人品,跟自己是否合得来。

这时候不仅仅是APP主管做技术面试官,通常CTO也会面试一下,主要是问工作经历,对自身技术发展的定位等。

5年以上

笔者现在刚好5年经验,团队也没有5年以上的安卓工程师。相信5年经验以上的读者,也不会看这篇文章,哈哈哈。

Android工程师技术图谱


2.求职意向

所谓求职意向,就是想去什么公司、喜欢怎样的公司文化、期望拿多少薪水、五险一金怎么样、加班不加班、交通方不方便、有没其他福利、妹纸多不多......这些都是你投简历时必须考虑的东西。

笔者希望,同志们在跳槽的时候,多想想当前的环境,和想跳槽到哪里,而不是觉得现在同事不好、老板不好、薪水低,就受不了要换个环境。如果是你自身人品问题,导致同事看你不爽呢?那换什么环境都一个鸟样。如果就觉得产品老是改需求为难你,有没想过是自己技术不够好,代码不够灵活,或者未实践过某些功能,改需求要花很大力气?如果是自身经验问题,应该多跟同行交流,多看技术文章,而不是跳槽了事。

3.搞清楚面试问题

笔者在上面提到过,无论是面试官,还是面试者,大家都是程序员。程序员交谈能力稍微欠缺一点,而且技术问题,有时不太好描述,导致面试官提的问题,未必是他本意或者他想通过这个问题得到更深层的答案,也可能面试者紧张只记住部分。总之,搞清楚面试官想从你这里了解什么,至关重要。

正如第1节所说,笔者会关心你的哪些技术问题。读者可以事先在小纸条上,写下面试可能问到的技术点,等待面试官时,回忆一下这些关键词。那么,在面试中,只要关键词对上了,就很容易get到面试官想问你什么了。

如果面试官说的问题,你不清楚,可以礼貌地说,让面试官描述具体一点,或者把你认为他可能想问什么,跟面试官确认。不用怕面试官觉得你很蠢,你这么说,面试官一般都先怀疑自己是不是没表达清楚,而不会质疑你智商的。

对于我司这种小厂,一般会看着面试者的简历来提问,所以第一个面试官的问题,基本都能从你的简历上找出来。例如,你开源了个项目,面试官会问“这个库有什么用”、“是否在项目中使用过”之类。如果是CTO,会提更加发散性思维的问题,综合考察你对开发的理解,以及未来可能在团队充当什么位置。

小结一下,1.预测面试可能提到的问题;2.没理解清楚问题,大胆提出来;3.面试通常围绕你的简历、自我介绍来提问,想想你刚才说了什么,简历上写了什么,问题自然清晰起来。

4.自信地回答每个问题

上一节提到,面试提问通常围绕简历、自我介绍来说,自我介绍囊括你懂哪些技术,人品如何,是面试官对你的第一印象。。因此你的自我介绍和简历是成败重要因素。如果你懂一项很牛逼的技术,但并没在简历和自我介绍中表达出来,那面试官就不会问你,除非你中途说你懂这个技术。

每个人都喜欢听故事,笔者看很多公众号的文章,都离不开讲故事、例子来说明问题和论证观点。因此,你在面试中,多说说以往的经历,一些很难的技术如何落实执行,中途出现过什么变卦,你如何化险为夷......会让面试官对你印象更加深刻,更多地了解你是怎样的一位工程师,甚至会觉得你是一位喜欢分享技术的人,他可能很乐意跟这种人一起工作。

而且,这些故事都是真实发生的,你讲自己的经历时,也会缓解自己的紧张。

千万不要不懂装懂,这是笔者最讨厌的一类人。例如,面试官问你:“你用过阿里巴巴的atlas未?” 如果你只是跑过demo,千万别说:“我有用过,还可以。” 这种话,面试官势必追问你,跟其他框架对比怎样?有没在项目中实践过?你应该如实回答“hello world了一下”“没有在项目中使用”,然后补充一些对atlas的观点,这样有理有据才能说服人家。光说“还可以”而实际不太懂,给人印象非常不好。

总之,自我介绍把工作经历说详细,用以往实践经验回答问题,这种方式更讨好。

5.了解公司和员工

去面试前,一定要对公司做好功课,把公司的APP下载来玩玩,浏览一下官网。因为HR好很可能问,你是如何知道我们公司的,还有技术面可能会问到对他家APP技术层面的看法。不过小心不要说“APP很卡,不好用”这类话,面试官会很不爽;可以用“这个页面可以优化”积极的词语代替。

薪金、福利、公司文化这些从网上找不到的信息,必须亲口问HR。如果希望了解技术相关的问题,例如你想了解APP团队有没做插件化之类,可以在技术面快结束的时候问面试官,只要不是机密(例如我司跑步算法),技术问题一般会回答你的。

如果你要面试主管之类的职位,可以问CTO他们希望你改进公司哪些方面问题,解决哪些技术瓶颈。

更多地了解该公司,你才能综合评价自己是否适合在那里工作。所以,面试者提问是必不可少的环节。

最后

总之,面试是一个公司与面试者互相了解的过程,它是双向的。在面试中,把握好“公司想了解你什么”,你如何把“自己是一位怎样的工程师”表达清楚,这就算是成功的面试了。

祝读者们面试愉快!