我的 Android 面试故事(2017下半年)

请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/78452325

先介绍一下求职者背景

求职者是15年土木工程毕业的渣本孩子,到北京后开始从事 Android 开发,至今两年多。非常感谢我的前领导,我告诉他要离职时他对我说:“小吴啊慢慢找别急,找到满意的再走,你一直留下来也是可以的”,然后我就拖了很长的一段时间。由于没跳过槽,在面试过程中也吃了很多亏,当然也学到很多知识和技巧,本文主要介绍一些技巧性质的东西,对于很多公司或者说很多面试官的不一样,面试题也是差异较大,所以面试题将不做细讲,只要掌握了技巧就能以不变应万变。

面试过程

下面按照面试时间顺序进行排序,只大致描述下经过。

1、NewsDog(未收到offer)

这是我跳槽过程中面试的第一家公司,是在 AndroidWeekly 上投的,也算是慕名而去的吧,里面有一个出过两本 Android 经典书籍的大牛,名字就不说了嘿嘿。说实话两年前就面了两三家然后就上班了,现在可以说没有说明面试经验而言,也没做什么准备。
一面:是收我简历的哥们,先一般都是自我介绍,然后开始聊大量性能优化的东西,包括布局优化、overdraw、内存优化、平时用到的工具。然后看了我们公司的 app,问如果现在叫你再优的话你想下你会怎么做。说到 leakcanary 的时候他问了我它的原理。我记得最后聊到了 Handler 机制,包括一些很细节的东西。一面应该这样就算勉勉强强过了吧~。
二面:这次是业界熟知的那个大牛,没想到那么年轻,他说只比我大一岁,我当时感到非常惭愧。也是聊了很多性能优化的东西,然后问我什么牛逼,擅长什么,我真的当时一脸懵逼,我在想我擅长什么?我想说,但是又想,我靠,我在他面前这些是不是太 low了,反正最后的结果就是什么都没说~~。然后他说来聊聊安卓的架构吧~,我菊花一紧,这该从何说起啊..我支支吾吾的瞎说了点。可能是看出了我的窘迫,然后他开始聊下一个了,又是 Handler 机制的,大致聊了下原理,然后他打开了 mac 里的一个纯文本编辑器,让我试着写出大致的 Handler 原理代码,这个说实话我应该能写,当时真的非常紧张,我写着写着不想写了~,善解人意的面试过再次开始解围,从这一刻开始我想我已经有一个得分了。接下来其实就是一个教学过程了,真的非常感谢他!他从我的简历开始说,哪里应该注意,哪里不该怎么写,哪里怎么写比较好,接着是聊面试,他感觉我很多东西都知道,但是就是有点乱,让别只看别人博客,自己要多看源码,分析源码。接下来他打开了源码,开始分析 Handler 机制,说了一些我平时忽略的东西。最后聊了生活和学习,问了期望薪资,并很明确的告诉我,他们需要再对比下,说我今天表现一般,但是还有机会。当然最后是没拿到 offer 啦~。
总结:其实通过这次面试暴露了我很多的不足,比如性能优化上其实经验不多,架构上表现平凡,更重要的一点是我发现我逻辑上很乱,知道的东西说的东拉西扯甚至表达不出来,这点非常致命,,当然当时面完我还没意识到,因为我当时还没形成分析面试过程和总结面试的习惯。

2、Powerinfo(未收到 offer)

这是一家创业公司,做视频SDK相关的东西的,算是非常喜欢的一家了,也是在 AndroidWeekly 上投的,说实话面试过程自己非常受打击,但是对自己帮助也是非常非常的大。
一面:主要三个部分组成:笔试、Hr 面试、机试。Hr 问的超级详细,整个过程非常长,我记得大概是三个小时左右吧,可以看出的是该公司非常认真的对待求职者。
二面:握手后我们相互的自我介绍了下,然后开始聊一面的一个笔试题,一个逻辑思维的。没错,我当时的鲁莽选择了个错误答案,然后开始让我分析每一个答案,当时实在有些不适应,心里根本没看进去题,一直在想我靠完了,尼玛我肯定不行,最后结果不言而喻。然后又是一个分析问题的题,接着是一个小算法,写完叫我算下它的复杂时,最后聊了下我开源中用到的 FFmpeg。整个过程我又是思维不活跃,说话调理不清晰,我想他对我的印象也是如此吧。他基本没问安卓的东西,更注重解决问题的思路,但是我面试过程感觉任督二脉都堵住了,从让分析第一个题开始我就心跳加速,根本没法思考了,结果嘛肯定就跪了啊,错过了一次非常好的机会。
总结:这次面试对我打击非常大,本来犹豫要不要今年回四川的,现在明确不回去了,感觉 自己和别人差距还很大,北京能人更多,我需要留下来再看看。技术先不说,交往沟通的技巧、分析问题的能力、思考问题的方式,感觉都差了很远,这些是致命的。面试完我一周都一蹶不振,美女当前也无心问柳。然后开始总结这两次面试,列出一条一条的问题,并思考自己该如何做,接下里很长一段时间都没有再投递简历。

3、花椒直播(未收到 offer)

经过了一段时间,渐渐的从阴影中了出来,投递了花椒直播,很庆幸得到了一次面试机会,他们在 360 大楼里面,需要刷身份证才能进去,逗比的我早上兴奋过度带了张港澳通行证就杀过去了,快到了才发现,结果就是我又回来了,然后改约到了下@@,冥冥之中预示着什么呢?
一面:简单聊了下我发现在面试官是做播放器的,native 层的,他们也是想找这方面的,我意识到简历写过了(后来回去又修改了下),简单了下 JNI ,FFmpeg,直播相关的推拉流,面试官明显不太满意,他们想找个专业底层的,最后说你等等。
二面:这次是 Java 层的面试官,也是聊了推拉流相关的一些东西,接着让分析 View 绘制过程,当我说道 ViewGroup 可能不会调用 onDraw 时,他问我为什么,我说有个标志控制,然后问我影响这个标志的条件有哪里?额..,好吧,我不太清楚...。接着说了下他们团队构成,给了些建议和评价,他认为我有点盲目的看源码,很多不知道为什么,如果有个人能站在更高的角度来指导一下我这样会非常有利。这次的评价还可以,也让我自信了一些。最后说你下午来的真不是时候,我们今天有发布会领导走不开,你先回去,后续如果有需要再联系你,当时还年轻,不知道这是客套话还高高兴兴的回去了呢@@。
总结:先说结果吧,结果就是我等了几天实在觉得不对就问了他们HR,他告诉我面试官说想找经验更丰富的孩子,好吧~。这次面试后回去再看源码时我也更仔细了,对那些关键的东西会去看看具体原理,然后最大的收获是边自信了很多,不再惧怕面试了。

4、新华移动传媒(offer)

一面:这次是电话面试,先简单卖弄了下自己,接着开始聊项目中中的东西,聊了听过 IM 相关的东西(面试官以前腾讯QQ的),接着聊直播聊视频,聊兴趣,我说想玩音视频相关的时候,他说他们现在有个项目就是搞这个事的,大致又聊了下项目,由于总公司在杭州所以他们需要集中约时间过来面试。
二面:面试地点在新华社里面,面试官说需要给我定级,于是从基础开始了,包括 Android 基础和 Java 基础,像几种启动模式的应用场景之内的,然后是源码相关的一些东西,接着是视频相关的东西,最后面试官非常的耿直,直接说给你交个底,如果你喜欢就来吧。很耿直的面试官,点个赞。
三面:这次是 HR面试,顺带说一句 HR非常漂亮,加了微信哦,杭州果然产美女啊。聊离职原因啊,说自己优缺点啊,兴趣爱好啊,还有,有女朋友么?我当时想问:“那请问你有男朋友么”,当然这种想法在坐怀不乱的我脑中一闪而过,接下来我可是要报价的了,不能被迷惑呢。聊完薪资明显她感觉我要高了,但是我算了下差不多,就坚持了。
总结:这次面试明显不紧张了,说话也非常有调理,都是第一、第二、第三...这样表述的,语速也没以前那么快了,给人感觉更严谨成熟。不足就是谈薪资我没谋划好,没有个计划,这也是很致命的,当时也没意识到。

5、好未来(未收到 offer)

加他们老大一起总共是三面,总体感觉面试过程舒服程度一般。
一面:来了两个人,一个兄弟不知道技术怎么样,我聊到 Sophix 的时候他不太清楚,然后就走了,留下了另外一个。这兄弟一直跟我聊项目,问我项目中的功能实现,包括业务实现,我感觉他居然怀疑某些功能不是我做的,对于这点有些哭笑不得,这么大的项目做了两年了,肯定有一些业务细节有些遗忘,比如一个按钮的显示规则这种的,全是业务的,聊了很久。
二面:这兄弟是做后台的,先是查了我学校排名(我不小心看到了他电脑屏幕),然后问我 CSDN 的博客都是你原创的么,我说写了原创肯定就是原创啊,老被人怀疑的感觉非常不爽。接着是些不痛不痒的 Java 基础,然后开始聊数据库,问我一些 SQL 语句,查询啊、新增字段啊之类的,接着问我 Linux 命令、vim 命令。
三面:面试的是项目组老大,技术聊的不多,主要是聊个人的兴趣爱好啊,个人规划,离职原因,然后问了期望薪资。我说了个价,他马上问是税钱还是税后,说实在的我不知道现在行情,不知道要多少合适,但是直觉告诉我要少了。最后就问什么时候入职了,我说一个月后,他就没说什么了。
总结:这次面试虽然技术上没得到什么帮助和指点,但是从没得到 offer 来看原因很可能是入职时间说的太长,他们那边明显想找个尽快入职的,还有价格不能要太低,这样反而不好。

6、支付宝校园生活(未收到 offer)

接到面试电话有点意外,毕竟是支付宝相关的业务,然后就开始有点点忐忑了~,不过还好,我早已不是一二面时那个羞涩的少年了。
一面:这是一个发际线比较高的大哥,一看就比较有逼格那种,不如意料,这大哥知道的很多,而且不浅,我们聊的很随意,一般是我说道哪个知识点然后他就开始延伸,比如我说用了热修复,他就问热修复原理,我大致说了,然后继续深问,直到我扛不住~。当然性能优化这种必问的也是不少的,还有 okhttp 框架流程、快排描述、Acticity 生命周期,包括周期这间的区别,叫从多方面考虑、Http等等。我感觉经常 get 不到他的点 。。。
总结:这次问的问题我确实不怎么吃得住,深入一点可以,再深入一点可能就有点不行了,平时应该往更深的地方思考,就好比 Activity 生命周期大家都知道,但是为什么这么设计,这么设计的好处可能就不是都去思考过的了。

7、汽车之家(offer)

经过前六次的战役,现在的我面试的时候基本可以做到比较淡定了,由于不紧张,思路也慢慢变的清晰,反应也恢复到了平时的状态。
笔试:汽车之家是必须笔试的,题目和两年前大同小异(我刚来北京的时候就去面过~),都是些 Java 基础和 Android 基础,HashMap 啊,String 之类的。
一面:一个30岁左右的男子,面带微笑,看着非常的稳重。我自我介绍完了后开始聊我以前的项目,包括 JSBridge 的一些细节、热修复的原理、原图加载原理、项目中的性能优化等等,然后介绍了他们的项目,一个小时下来非常愉快,由于马上12点了于是他给我留了电话,叫我一点半打电话给他然后安排二面。
二面:二面我记得是移动端的老大,问了些 Java 基础、Http、项目中都做了些什么、为什么土木转计算机、离职原因等等。
三面:面我的人看着应该有40多,一脸祥和,一看就是久经沙场的老将,场据说是项目老大,问了我的职业规划、对框架的理解、怎么搭建一个高解耦的直播框架(解耦各种第三方sdk)。
四面:问了些生活上工作上的琐事,当然最重要的是砍价,汽车之家工资一般吧,但是福利非常不错,工作也轻松,没有加班风气。
总结:到现在我发现只要一面表现要了后面的面试就容易了些,但是还是不要掉以轻心,老大不喜欢的话你直接领导再想要也没用,到此我已经体会到了平常心的好处,让人能从容的交流,这样才能尽可能多的展现自己。

8、蚂蜂窝(未收到 offer)

这家公司是做旅游攻略起家的,我个人非常喜欢户外,所以果断就投递了,这家公司总监非常有意思,后面会说到。
笔试:这家公司的笔试题一定要认真做,后面面试会和你聊的,大部分是 Java 基础和 Android 基础,值得一提有一个小算法题,是给出了算法条件和结果,让你写这个算法。大致是这样的:有一个数组 array1 = [x2,x3,x11,x12,x14,x6,x7,x8,x4,x5],array2=[x4,x6,x3,x11],结果:[x5,x7,x8,x2,x12,x14],大概是这样的。
一面:先是聊面试题,聊了很久。然后开始聊自定义 View、View 绘制、事件分发等等,面试官挺擅长 View 绘制和事件分发,我们从理论聊到了实践,从实践聊会理论,然后分析一些系统控件的实现,我就慢慢想,他也不急,就一直等着我。最后请教了他的学习方法,我发现他对问题非常好奇,一旦有疑问就会刨根究底把这个东西完全吃透,这也是非常值得学习的地方。
二面:先是性能优化、键盘冲突的处理、截取照片中部分图像的方法原理、项目中负责哪些东西等等,想截照片那个我确实不知道,但是我分析了下,发现好像确实是我说的,无非就是很多像素,然后从数组中取出相应的像素重新生成一张 Bitmap。
三面:这次是技术总监,由于太晚了,简单聊了下给我留了一个题让我回去做,做完和他微信视频聊天辩驳,最后给我送了一份饭来让吃了再走吧~,好吧这个题其实是一个概率论的题,他要求弄出理论计算和 Python 实验两种。结果就是经过几次视频我的答案也不是他想要的,他也提示了我,但是我始终觉得我的有道理,所以最后就不了了之。
总结:这次面试我又发现一个现象,东西没做过或者不会其实还好,如果你得分析出来结果或者大致原理,那么面试官会非常喜欢,就好比二面的那个截图,这个方法对我后面的面试帮助很大,当然如果想要 offer 还是不要太倔强了,顺着总监一点应该还有点机会的,不过至今我任然坚持我看法@@

9、豆果美食(offer)

说实话我是豆果的忠实用户,所以就过段投递了,豆果氛围非常好,领导也很 Nice,当然人家用户量也是好几千万。
笔试:没有算法,都是些常规的 Android 基础和 Java 基础,没什么好说的。
一面:一个很年轻的小伙,但是实力很强的,他整个面试过程完全没按照我简历来。我们聊得最多的是 Framework 的东西,他比较擅长这个。比如 Handler原理、Activity 启动过程、进程启动过程、Android 系统启动过程、Java 虚拟机与 Dalvik 区别、Dalvik 与 Art 区别等等,我发现我们两个很像,学的东西大同小异,所以聊得很来,后来我们加了好友。
二面:简单自我介绍了下,然后聊我做的东西,这次也聊了键盘跳跃的处理、原图处理、性能优化等。
三面:一上来问了我很多基础的,View 绘制流程,onMeasure 与 onLayout 的几个参数的分别是干嘛的,接下来都是聊职业规划个人兴趣还爱之类的了。
四面:这次是 Hr,简单了解了下我的情况后开始谈薪资,说实话待遇我不是很满意,算下来年薪和我现在差不多,不过豆果还是非常有潜力的!
总结:这次面试自我表现还行,该说的都说了,但是薪资谈的一般,给自己一个薪资计划的,不然后面会有很多不愉快的事。

10、阿里高德事业部(未收到 offer)

这次面试其实我有点虚,都有点犹豫去不去的,但是我知道不去我肯定会后悔,所以硬着头皮就冲过去了,事实证明这次面试对我帮助是最大的,挺佩服面试官的,感觉比我还清楚自己的优缺点,只是可惜最后还是未尝所愿。
一面:这次面试的内容非常的多,我只能记得大致了,显示聊我项目中做的东西,聊到 IM 的时候问到了数据库,问我怎么封装的,我说没怎么封装,他说那你现在想一下,我想了很久只能想到反射,但是问题是字段怎么映射呢,后来他提醒了一种方式,用注解,好吧...,聊到 leakCanary 我大致说了原理,当我说道退出 Activity 时调用 dump 的时候,他问了句,那每次都会调用 dump吗,dump很耗时的,它用什么办法在没内存泄漏的不 dump。问网上很多人说
Handler 内存泄漏,为什么会泄漏,怎么引用的。还有很多小问题,像多线程同步的、binder 通信的。到最后他跟我说了下来这边我将会负责什么,然后问我感不感兴趣,说实话满感兴趣的,让后他觉得我优点就是学习能力还行,缺点就是很多东西没串起来,举一反三还达不到。这关就这样过了。
二面:据说是他的领导,领导应该对我的简历不太满意,简历聊了下,问了下 http 、对高德了解多少、做地图的关键点是什么。然后说你学习能力还行,但不是科班的,经验不是很多,应该也能做,但是可能会慢一点点,然后就没了。
总结:通过这次面试我又自信了很多,相信自己还是可以的,至少慢慢努力还是有用的,毕竟这是高德啊,也为后面去其他大一点的公司面试打下了基础。然后我还学会了在面试中思考不会的东西,经常能在不会的情况下找到一些线索。一面的面试过最后也加了我微信,告诉了下我面试没通过的原因,并表示有机会再叫我,这点让我挺感动的!很少有面试过能做到这样吧。

11、京东商城(offer)

京东总部有点远在亦庄那边,一早就出门了,下午还有其他的面试,导致一天都没吃饭,面试也非常考体力啊。
不算Hr总共是四面,前三面主要主要是聊我项目中做的东西和他们项目是做什么的,也会问些 Java 基础和 Android 基础,第四面是定级,会跟你聊你学的最深的一块儿,其中有个哥们问了个小算法,10点半开始进京东大厦,面完差不多是1点。

12、美团(未收到 offer)

美团对基础非常看重,每一面都有一个小算法题,一二面基本都是聊基础,但是说基础的同时也不缺深度,感觉非常不错。
一面: String相关的问了很多、HashMap 的原理、Java 的引用类型、Activity 启动模式、Activity 生命在各种情况下的生命周期、二分查找、单例模式、Handler 机制、系统中用 Handler 的地方等等等等,看着都是些常见的,但是问的非常的细,很多都是平时容易忽略的东西。面试官人很好,一直告诉我不要紧张,因为我一直在喝水,我其实是非常饿,最后让等二面的时候再次嘱咐我不要紧张,二面尽量往你会的方向引导,真的很感谢那个面试官。
二面:二面聊的比较多的是 Java 相关的,基础是一方面,然后聊到热修复的时候随便问到了我 类加载器与Java 虚拟机的双亲委托模型,也是有一个算法,写完后让我继续优化这个算法,我是真优化不动了,面试官一看就是很耿直的人,告诉我老大今天开会让我回去等电话,这次我觉得应该不是委婉的拒绝。
三面:等了很久,终于等到了 Hr 的电话安排我去三面,三面的面试过那天刚好在校招,于是我就被带到校招的地方去了,我觉得在面试过看到我简历那一刻开始就没打算要我了,整个过程非常短,基本没聊技术,自我介绍环节都省略了,简单聊了下然后让我做一个算法题,我写完后正犹豫,他有收卷的意思,然后就说让回去等,我心里知道肯定没戏了...

13、陌陌科技(offer)

陌陌的产品我非常喜欢,我以前也是做社交类的东西,所以感觉蛮适合我的,里面几个面试官也很 nice.
一面:面试官是优化组的组长,跟我聊很多优化的东西,我确实不是专业的,可以说面的一塌糊涂,我感觉没戏了,我一想反正来了,于是就请教了他很多问题,主要是架构的,他很耐心的给我讲了陌陌的组件化,最后说去叫迭代组的来面我吧。
二面:先是 Java 基础相关的问题,那后聊了我项目中的一些东西,IM 啊、图片加载啊之类的,很多都记不清了。
三面:面试官是 Android 组的老大,我来聊了很多 jni 相关的东西,我记得他问了一个问题:“我看你项目中用了 GIF图是吧,GIF图怎么解析呢?”我不知道,于是我用视频那套分析了下,然后他表示认可,还有好多其实都不知道,但是高德的面试过教会了我多分析多联想多能举一反三。
四面:这次是hr面试,谈了离职原因,期望薪资,我以为就通过了呢,没想到还有一面,叫我回去等电话安排总监给面试。
五面:这是一个看着很年轻的技术总监,但技术应该很不错的,我们聊了很多数据库方便的定西,IM 与 视频的也不少,大概聊了半个小时吧,最后也没给答复,让回去等。
总结:这是这次跳槽的最后一次面试,对自己表现还是挺满意的,其实一面真的挺煎熬的,我确实很多不知道,一面面试官是专业性能优化的,我确实还查了一点,聊架构我也一塌糊涂,但是我当时没气馁,虽然暴露的体无完肤我还是坚持把我知道的说了,不知道的问了,也没表现出怯场。

需要掌握的技能点

列下我在面试遇到比较多的。

  1. 基本算法,其实基本没遇到和难的算法,都是给定一个实际场景然后写个小算法,比如叫把 String 的 IP 地址转成 int 值,IP 是 192.168.0.1 这种,对应 int 值是 19216801。
  2. Java 中常用类的源码,如 常用的数据结构(HashMap问的比较多)、String、StringBuilder
    等等,可以看看 《Thinking in Java 》
  3. Java 虚拟机、Art、Dalvik 他们的区别。
  4. 性能优化,这是个很大的点,但是基本是必问的。
  5. Java GC 原理、GC Root 的概念、Java 引用类型。
  6. Android 的基础知识,强烈建议理解性的阅读《Android 艺术探讨》,很多问题的答案都可以在这本书上找到,像 View 绘制流程、事件分发流程、Handler 机制、IntentService、HandlerThread 这些可以边看边跟源码边做笔记。
  7. 多线程中,线程安全。
  8. 线程池,需要理解里面各种参数的含义,适用场景。
  9. 进程间通信、线程间通信。
  10. JSBridge 相关的东西。
  11. 自己在项目中用到的东西,既然写在简历上了就要知道它的原理,越清楚越好。
面试总结

总共这次面试,我个人总结了几点。

  1. 我个人认为简历不要乱投,只投递喜欢的公司和职位,不然只会浪费时间。
  2. 不管面对什么样的人,千万不要怯场,不然根本没法表现出自己水平,既然让你来面试了,说明简历还是有过人之处。
  3. 把基础打牢固,平时开发中多总结,多想想为什么。
  4. 不要放弃每一次面试机会(因为你投递肯定是因为喜欢),我中间有好几次都不想去,但是理智告诉我必须求不然会后悔。
  5. 事先了解职位要求。
  6. 面试过程中语速慢些,说话要有调理,开始的对白可以预先准备好,因为一开始基本都是自我介绍,你可以介绍完自己,又介绍自己公司业务,随带介绍自己做的东西,把你觉得面试官可能感兴趣的放后一点点,一般面试官都会问问的,然后这可以顺带再继续说说。
  7. 总结每次面试,这次问到不会,就不能在下次也不会了,如果面试失败,要分析失败的原因。
  8. 遇到不会的就说不会,但是不能就这么完了,一定要思考,分析问题的能力感觉面试官是非常看重的,你思考过程中可以把你思路说出来,能说多少就多少,千万不要不好意思。其实科学研究也是猜测加实验证明的过程。这点非常重要的!
  9. 对自己做过的东西一定要非常熟悉,了解实现的原理,比如做过热修复,你肯定需要知道热修复原理,做过大图浏览,肯定要知道内存问题、分块加载、矩阵变换。
  10. 面试前要对期望薪资做个评估,高了其实你面试ok的话 HR 可以给你砍下,低了吃亏的不只是你自己,HR 也替你着急,因为低了的话就算给了你 offer 很可能你不会去的,这样他们就白干一场。合理的要工资既是对自己的负责也是对招聘公司的尊重。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值