Android面试总结2017版

5,516 阅读9分钟

近期我司招聘,我去面了一些android开发的哥们,以下由近期面试总结得出的体会,以技术面试60分钟为基准,根据我去面试和面试别人的经验,我把整个面试流程大概规划为以下几个部分:

1. 10%的时间去看自我介绍,了解基本信息,离职原因,工作组成员情况

这里就是简历上的基本信息,基本上只要表达能清晰流利就可以了,噢,据小伙伴说有可能还要看一眼 是不是"老乡",虽然我完全不理解这所谓的老乡关系能带来多少的安全感,离职原因的话,其实度娘一下, 这里不需要你真正的原因,但是需要一个合理的原因,这里说度娘不说谷歌,是因为我发现好大一部分人对 Google的刚需没那么大,包括装了过滤广告插件的我,更有甚者,还有一部分开发人员的第二开发工具竟然 不是谷歌浏览器.

2. 15%的时间去验证基本水平

  • 1.常用工具使用,Git的使用,常用第三方库.这里基本没人会犯错,基本名字肯定能说一两个,即使不做任何面试准备.

比较离谱的是有一个哥们,问基础的时候感觉答的不是很好,拿出项目我问那个模块他做的,好不容易找到一个简单的页面,问实现竟然也是吞吞吐吐,于是我就很机(狡)智(猾)地问了下: 你现在用的androidStudio(第一开发工具)是什么版本的,他迟疑了一下,竟然说好久没看忘记了,我心想这TM就尴尬了,连吃饭的家伙都不了解,即使是真的这样,那最近新出了一个3.0大版本,只要近半年关注了任何一个android开发相关的公众号或者网站,必定能看到这个条信息,看了之后还是不去关注自己使用的版本的,那这职业心性基本相当于玩王者荣耀不买装备还想越塔强杀人家,分分钟回血池等复活.

  • 2.基础的Java知识点,包括集合,数据类型,三大特性,多线程,网络基础tcp相关;还有android基础的一些组件,基本的控件的如fragment,listView,四大组件等等,这里虽然像我自己也压根平常没有刻意关注这些,就是有个基本印象,但是作为应聘的人,这些问题起码可以看出对面试的准备和态度.

我认为不管技术如何,在应聘的时候都要重新去梳理一下基础的知识结构,这里都还没有讲到算法呢,手写最简单的冒泡排序和二分查找都能过滤一大片了,然而在面向浏览器编程的阶段,纠结于这些对于实际的结果没有什么有利的影响.

  • 3.态度很重要,面试并不能完全看清楚一个人的水平,我在面对技术比我厉害的人,自己也有点心虚,但是在技术能达到要求的前提下(此处在我看来标准是吹技术不过于装逼而且能不被我拆穿的情况下),招人在能满足工作要求的前提下,当然是找看的顺眼的啦.

3. 45%的时间去聊项目

  • 1.以及项目中常用的技术点,不要问插件使用和第三方SDK的使用,这些看文档找博客基本能完成,前面确认了工作经历的情况之后,此处再问这些并不能体现真实的工作能力,关注的点,我认为第一个是看负责的模块的实现,去看对方的表达的思路,考虑技术实现的想法是否符合其项目履历和工作经验年限,首先是能回答出来项目的实现,然后能顺便讲讲自己在其中经历的难点和事后的思考最好了.

  • 2.涉及第三方库,如网络框架,Okhttp,Retrofit,Volley,图片处理框架Glide,Picasso,ImageLoader等,首先聊使用的场景,还是聊遇到的问题,解决的办法.接下来问用的顺手的,问下里面的实现,okhttp有自己封装吗,拦截器了解过吗.到了图片框架,我一般问下用在什么地方,里面的一些源码看过没有,缓存的算法,以及横向的使用对比等等.

  • 3.针对提到的项目点延伸出来相应的问题.可以联想到的.

比如简单的列表,ScrollView嵌套listView,这里可以问出滑动事件冲突的解决,view的绘制流程到自定义控件的实现思路,事件分发机制的处理机制以及相关使用,谈到glide加载图片,可以聊到数据量大的处理,图片0OOM问题的处理,线程池的理解和自定义相关

  • 4.问一下对一些常用的库或者业务技术的了解.

比如微信支付流程这个问题,我每个人都问了,每个人都说做过,没有一个人能完整统筹地回答出来,这个问题说大不大,说小不小,但是即使是这样,根据自己的理解总是有人能说出大概思路的,这不需要背文档,操作过之后用心去理解一下,就能变为自己的东西了.

  • 5.模拟具体的业务场景.这个可以举一些例子.

比如地图业务,类似摩拜单车行驶轨迹的记录怎么做,聊天业务,聊天信息为什么能实时传输,聊天记录如何保持,数据持久化方面等场景,之前有一个段子说可以拿自己目前项目中没有解决的问题拿出去给对方解决一下.

我之前去面试就遇到过别人问斗地主洗牌,要达成随机洗牌然后怎么发牌达到什么要求的实现思路,当时没答出来,后面想想其实这里用集合和多线程去入手就可以解决,另外一家做游戏,上来抓着多线程的问题虐的死去活来,如何实现用户多个操作同时进行,并发处理等等.

  • 6.很多人秉持说多错多的原则,我觉得这里是除了技术问答的第二个可以拉开差距的地方,主动的总是比被动的好点.

像我撸着代码一头懵逼被拉去面试,问了技术之后,没准备好接下来问什么,我一般就假装去看简历,拿对方写的几道(我就这么百度一下的题目)看看,其实问了上面的基本接下来这块就差不多了,这时候如果对方能顺着刚才的话题再串联一下技术点我觉得会很好,不过没遇到过,可能是我司的逼格不够了.

  • 6.哦,还有一个现象:写笔试题很多半个钟写不完8,9道基础题,字也是真的丑.

4. 20%时间去聊理解

  • 1.一个区分技术水平到哪个程度的问题:对activity的理解.activity的生命周期基本每个人都能说出来,哪个方法怎么用实现什么都大概有个一二,但能不能联系实际的业务场景,以及有自己的思考,这就是在2-5年这个阶段技术分水岭之一,我觉得这个问题可以看做是中级到高级的分水岭,中级是定义为能干活,高级是会干活.

有个哥们简历上.activity写了精通,我就问他对activity的理解,,,他就说几个生命周期..然后就没有然后了. 这不就相当于劝妹纸多喝热水了,这样肯定追不到妹纸的....

额.然后我引导他,我说可以想一下工作中用到的场景..然后他想了一下说好像极光推送用过onResume方法..我没用过极光推送..我想了一下,我说是不是这里可以类似考虑app应用从前台到后台再回到前台的生命周期执行,然后联想到推送服务只有放在这几个方法才能保持实现..维持服务持久之类的(此处经查询得知,正确的理解应该是广播接受者相关的(捂脸状态)).

所以面试官也经常是错的嘛,面试的基本要诀和追妹纸是一样一样的,不要怂,胆大心细脸皮厚.(此处我有一个大胆的想法~~)

  • 2.这里主要考虑的就是能不能从简单介绍+业务场景+自己的思考入手,一个人说全套,类似的问题,如对http的理解,可以自己聊项目开发中跟后台交互的经验,对接口和抽象类的理解,可以谈到项目结构,谈到MVP和组件化的思路,因为我们今天做的绝大部分业务和技术,都是有人已经踩过坑了,有的只是实现时间的长短和对搜索关键字的使用了.所以能自己独立收获到才是正解.

"我不一定要这个,但你得懂."

  • 3.我的水平有限,只能举例到这个地方,至于更深刻的前沿的,我大概有几个方向,应该是大公司所考虑的,项目代码的复用性,混淆和热修复的原理,视频影音的优化,JNI的实现之类的了,

想想平时遇到公众号推送,看下一线互联网公司的面试题,发现一半的东西看的怀疑人生了.

5. 10%的时间想有没有即兴想问的和对方有问题的东西.大概提一下业务的内容,薪资不是自己考虑的东西,只关注技术,如果过关自然接下来有人来谈业务,不过关的话那就可以回去等通知啦.

薪资不敢开12K以上还敢写精通两个字的都是傻x


总结

  • 1.不管去面试还是面试别人,都是一次进步的机会

  • 2.找工作是实力加运气,但是加成比例也是要看运气的,多积攒人品总是没错的

  • 3.搞技术要保持危机感,不进则退

  • 4.好好努力,希望以后自己面试或者加薪,都能理直气壮

    以上.