校招面经分享 Android开发工程师—BAT美团网易蘑菇街
很早就想写一下面经总结一下自己最近的经历,然而面完以后人一下子就懒了,紧张不起来了,一拖就拖到了十一,如果来不及对今年找工作的同学有帮助,那对来年春招或者更小一些的学弟学妹有所参考也是好的,还是写一下吧。lz来自四川成都某211
985院校
通信学院,应聘职位Android开发工程师,在秋招一共面了BAT、美团和蘑菇街五家公司,网易互联网是内推时候面的。总的感觉吧,百度重编程算法、腾讯重基础和智力、阿里呵呵呵、美团蘑菇街基础应用并重、网易重应用。
一、网易内推面试(电话一面、杭州二面、跪)
其实呢,内推有两大好处,一是不用笔试,二嘛,电话面试,发挥余地就很强了(我不细说了
大家都懂的),而且一般不会问复杂的算法,就算问也只会问个思路,对我这种算法白痴来说简直是赞到不行。
一面:
电话面,中午12点整,面试官好像很着急去吃饭的样子。。说话特别快,而且问问题一旦听几个字感觉你像是知道,马上就打住问下一个问题,一共问了15分钟,20问题,java部分问比较基础,Android稍微问到了内核。
java部分:
1、jvm分区,GC(基本上后续所有地方面试都问了,基础中的基础)
2、volatile和Synchronized区别
3、原子性、可见性的概念
4、进程与线程的区别
5、线程池的概念、好处、常见的线程池举例
6、Callable和Runnable的区别
7、HashMap的内部原理
8、ConcurrentHashMap原理
Android部分:
1、Android的存储方式
2、Handler、Lopper、MessageQueue
3、AsyncTask 为什么java已经有线程池的实现了,还要继续使用AsyncTask,AsyncTask相对于java自带的线程池的好处
4、onTouch事件的处理机制
5、说一下MVC以及其在Android中的应用
6、说一下OOM以及你怎么解决的
7、了解Android的Framework么
8、说一下一个Android APP从点击打开开始,是怎样展示在用户面前的(Zygote、Ams、Wms等)
网络基础部分:
1、TCP、UDP的区别
2、TCP的三次握手、四次挥手
3、HTTP的特点
4、HTTP与HTTPS的区别
二面:
杭州现场面,一个月了路费还没报销回来。。。现场面是一个看起来很嚣张的面试官,看你的眼神从头到尾都充满了鄙视,从一开始的感觉就很不好。。
1、viewpager里面只能嵌套view吗 可不可以嵌套Activity
2、假如viewpager里面的每一页都有有很大数据量的内容,那么在快速的左右滑动时,如果出现了内存被回收的情况,如何处理
假如出现了OOM,怎么处理
3、同上情况,使用Fragment,又当如何?与viewpager有什么区别
4、ExpandableListView的Adapter怎么写
5、在ListView的每个item中如果可能出现的view都不一样,如何处理?动态获取view种类数量的话是不是就不能使用viewHolder进行优化?固定显示view如果不存在该种view就不显示的方法是否太耗内存
6、ListView的Adapter的getView具体是什么机制?
7、Activity之间传递大量的数据用什么方法
Binder
Bundle不够大
Socket 在同一应用中没必要使用
共享内存
static变量——同一应用中static变量如何控制,会不会并发出问题,如果Activity由于内存不足被kill掉,再重启的时候static变量的值还可靠吗:设置专门的访问类,进行读写控制,以及Activity重启后的初始化工作。
8、SQLite在使用时
假如ActivityA是用于修改SQLite,ActivityBCDEF。。。是用来展示SQLite的内容,如何在修改SQLite的同时使得BCDEF...都立刻获得最新的数据?SQLite有没有类似于ContentObserver的这么一种监视类可以监听到SQLite内容的改变?如果广播通知所有类,那么广播可以携带多大的数据?
9、假设把一个ActivityB向右滑动可以回到上一个ActivityA,B渐渐透明,A渐渐清晰,要怎么编写页面?说说你对android:theme的理解,说说你对alpha值的理解
10、ListView在数据量很大图片很多的情况下怎么优化?假如一个图片,轻轻的向上滑动一丢丢,那么需要重绘吗?(什么鬼。。。)
11、详细展开说一下所有LaunchMode的应用场景
假如A-》B-》C,想让C后退直接到A,使用什么样的intentflag?
假如A-》B-》C,C使用singleTask,C后退,后退到什么地方呢?
12、在全屏显示高清大图的时候,网速慢的情况下如何显示?渐进式显示是怎么做到的?如果想显示下载进度圈圈,该如何实现?
13、AsyncTask在4.x以后有什么改变?怎样改回并发执行好多个?如果一个AsyncTask结束取得结果之前Activity就因为内存原因被Destroy掉了,那会有什么情况发生?会内存泄露吗?会空指针吗?需要在Activity彻底死掉之前把AsyncTaskcancel掉吗?如果没有cancel掉,然后Activity重启了,那这个Asynctask又当如何呢?
14、AsyncTask内部实现机理 与Thread+Handler有什么不同
15、说一下HandlerThread
16、你的APP里,是每个Activity都有一个Handler呢还是所有Activity共享一个Handler
17、基于事件监听、基于事件回调 假如一个touch事件发生,那是***先收到还是onTouch函数先收到
18、假如你要记录ListView滚动到的位置,要记录什么信息,view怎样获得坐标信息
19、说一下canvas
20、dialog和popupwindow的应用场景
如果popupwindow在没有dismiss的时候Activity finish了,会出现什么情况?
21、了解过什么三方库?为什么不用三方库?
22、你觉得安卓的未来在哪里?你自己为什么都用IOS了(╯‵□′)╯︵┻━┻
23、Service和推送通知,通知有没有可能出现有推送但是通知栏收不到通知?service被kill掉会如何?如何保证service不被kill掉
24、了不了解Scrollview scrollview和ListView有什么相似点 有什么不同
那如果这两个是继承关系 那应该是谁继承谁?
25、dp sp px各自的应用场景是什么 换算关系是什么 使用sp的时候如果调整系统字体,显示字体会跟着调整吗?
26、gallery为什么被废弃?为什么Google推荐使用viewpager代替gallery呢?有什么改进?
27、handler.postAtTime不是延时post么 那handler怎么延时处理Message
总结:二面问的很偏应用,面试官应该是开发网易新闻,直接不看我的APP,拿着网易新闻的APP各种问我,你看我这里是这样的,你说一下我是怎么实现的,我怎么知道你是怎么实现的啊真是的(╯‵□′)╯︵┻━┻。 之前为准备校招相对基础准备的比较多, 应用仅限于使用过的比较熟练,其他没接触过的就呵呵了。最让我生气的是,面试官居然问我,身为一个女生,你觉得你做Android开发,有未来吗?当时真是气死我了,做Android的女生怎么就没未来了 (╯‵□′)╯︵┻━┻
这一面跪的很惨,面完回来就把问题全都记录下来而且每个问题都专门找了详细的解答,虽说面完这一面回来着实也是消沉了好几天,期间蘑菇街打来内推电话我还直接跟人家说改天,就是不想面了,不过后来振作回来以后也发现这一次挫折真的是一次相当宝贵的经验。
二、美团(拿到offer)
美团是一口气三面面完的,其实当时三面面完的人特别多,到最后收到offer的并不是那么多,感觉决定权基本在三面面试官那里吧,这种也没什么可说的。一二面面试官那里都是有一张表,每个面试官都要打分,我瞄了一下,有编程能力、操作系统。。其他没看到。。分数有2.5有3据说有人还有3.5的。是美团让我找到了之后面试的总套路,最后说。
一面,40分钟,除去项目介绍等,貌似并没有问什么特殊的,我提到我平时主要做界面,所以后面的问题大多与界面相关 :
ListView的优化
Lru如何实现的
OOM的处理
GC原理
循环引用的问题
引用计数与可达性算法
LaunchMode 这一点我之前也是简简单单准备的有四种,每种什么意思,然后网易让我发现了,大家都知道这些,重点是要知道如何应用。美团这里问到的是我A打开了B,B打开了C,C的右上角有一个叉叉,那我怎样做到使我点击C的叉叉,就直接关闭了BC回到A,PS,不可以用startActivityForResult
我提到我的APP中使用到了ViewPager,面试官问,假如,ViewPager里面一页的宽度超过了屏幕的宽度,ViewPager是怎么显示的,这还真没试过。。
然后问到了app是怎么通知Android系统页面有刷新的,还有view的measure函数之类的,进而讨论到了View树,然后编程就让我写View树。。
编程题是,因为在有的性能比较差的机型上,view树深度过大会造成crash,那么我想做一个提醒,进入APP后首先求出这个APP的最大View树深度,如果深度过大则进行提醒。其实就是二叉树的最大深度只不过换成了View树嘛,并没有什么难度。
二面,30分钟,除去项目介绍等没有什么特殊的,期间突然看到一面面试官在操作系统那里很可爱的写了一句 忘了问了。。
主要问了ListView的优化、HTTP与HTTPS、进程与线程,编程题是给定一个char[],然后翻转,其实就是翻转字符串啦,然后进一步的就是给出一个句子,翻转这个句子但是不翻转其中的单词,就是剑指offer那个,也很简单。
然后问了一个智力题,说有十层楼,每层楼有一个钻石,钻石大小不一,没有规律,电梯只上不下,只能选一层下电梯,拿走该层钻石,问什么样的策略可以尽量大的拿到钻石。
三面,20分钟吧,基本聊人生,跟技术有关的人生,并没有什么说的。
总结:其实这三面中,一面是答得最不好的,因为说了太多我平时是做界面的,面试官就把界面问到了比较深,然而我并没有准备过各种view的绘制方面的知识,所以答的不是那么的好,也是一面让我找到了我以后面试的总套路,一是要诱导面试官到你擅长的方面去,我这里就是典型的诱导错误==自己给自己挖坑了,所以以后尤其是腾讯,我就使用了另一套引导说辞。二是要逗面试官笑。。可能很没边。。但是我后续的各种面试基本上都是跟面试官说说笑笑的过的,好处一是面试官本身面试很无聊,能笑一下放松心情自然对你的印象好一些,二是在说说笑笑中,体现出来了你的沟通交流能力,这也是拿到offer以后,美团的面试官所说的,觉得我软实力很强,可能就来源于这一点。三是说说笑笑扯闲话,时间一下就过去了,面试官对于每个应聘者,时间大约都是有一个限度的,扯废话时间越长,真正考察你的时间就越短,出错的几率就越小。
三、百度(面完三面,居然没消息了,呵呵呵)
百度给我的最大感觉是,重编程,重算法,面经都写不了多少因为根本都没问多少,就是写写写。
一面面试官比我大不了几岁,上来就问我,你们学校好有意思啊,面了这么多你们学校做移动端的,居然都是通信学院的,你们学校的计算机学院的人呢?然后就扯开了,从我们学校的培养人才的方式扯到了阿里的拥抱变化,然后扯到了阿里的股价以及百度的股价,面试了一共50分钟有30分钟在闲聊,10分钟写了个翻转字符串,10分钟问了点java基础的不能再基础的问题,上面的公司基本都问过,然后这就过了。。。
二面面试官是充分的体现出来了重编程,让我自我介绍,还没介绍完呢就说,我们写个程序吧,我只好一脸委屈的说,人家刚刚就要说到最最重点的项目呢,然后他就让我继续说了。。。说完展示了一下自己的APP,之后就是写写写了。第一个让我写二叉树的深度,我想这简单啊,在美团刚写过view树的,结果写写写就写岔了。。面试官一看我卡壳了,说没事,来写个冒泡压压惊= =。。压压惊。。。写完冒泡以后,说,冷静下来没?继续写二叉树的深度吧。。冷静下来写好以后,又让写了个二分查找,问了个java的反射,就没了,然后跟我说你过了,等三面吧。看我太激动了还问我,我是不是问的太简单了。。。
三面面试官跟我说,我一点都不想问技术,但是这个表上有,那我们走个过场,随便问问,就问了个android中的MVC,问了一下Activity的生命周期,没写代码,然后就是聊人生了,一聊就停不下来,聊了一个半小时,还说什么别的面试官都下了要求说最多要几个,我这里我觉得行就行,聊的特别亲切,最后走的时候还送我到电梯口。。然并卵,后来就没下文了。。没下文了你对我这么好干嘛。。。
四、腾讯(拿到Offer)
一面重基础,自从美团以后我一是诱导面试官去我擅长的方面,二是逗面试官笑。然而一面面试官并不笑。。从头到尾严肃脸。。
首先问了一个智力题,说有1000瓶水,其中一瓶有毒,有10条狗,狗喝了毒水以后会在1小时内死去,问怎样能最快发现哪瓶水有毒。
然后写了代码,用递归和非递归方式实现二叉树的前序遍历。
后面我在自我介绍的时候直接就说我不是计算机出身,操作系统什么的都没学过,本身是学通信的所以网络方面了解比较多,然后面试官就开始,哦?你网络学得好?那我问下你网络。这就掉到我挖的坑里了嘛。有关网络方面,http://www.nowcoder.com/discuss/1937?type=2&order=0&pos=12&page=2这里已经总结的比较全面,另外我自己还准备了HTTPS和TCP的慢启动和拥塞控制,不等面试官问,直接就说,从它第一个问的就开始不停的说,把网络相关的问题全都说完,面试官就一副,你果然网络学的很好的表情。我觉得如果面试官问一个你答一个,可能你都答上来了但是面试还是没有过,所以我觉得干脆在面试官问一个点的时候,把跟这个点所有相关的问题全跟他说一遍,这样一个是你自己掌握了面试的内容,一个是让面试官觉得你的知识范围的确比较广。
二面面试官好帅,而且很年轻,后来听说居然是cto,惊呆了Σ( ° △ °|||)︴。也是照样说项目,说擅长网络,然后问了TCP三次握手,为什么是三次,两次为什么不行。还有,如果你的APP突然连接不上Server了,你怎么一步步排查出来是哪里的问题。紧接着就是智力题了,100层楼,两个瓶子,用你的策略在最坏情况下最少扔多少次能测出来从几楼开始扔瓶子会碎,我算出来是19次,类似于TCP拥塞控制的那么一种思想,后来出来百度了一下发现是14次,不过我前一个同学貌似答的是50+次,所以感觉表现的还行。之后问如果只有一个瓶子呢?我说那只能一层一层扔啊,最坏情况就是100次嘛,面试官一直在问,没有更好的了么?我表示想不出来。现在依旧觉得没有更好的了,如果哪位大神有更好的思路的话麻烦告诉我谢谢。
三面HR,看人很准,说话很犀利,女的,好不擅长对付女的面试官,没什么可说的。
我觉得腾讯校招主要是从人才培养出发,所以项目经验不足并不是什么特别大的问题,主要是基础要很扎实,脑袋要很灵光能答得上智力题,做过的项目要掌握的很清晰。
五、蘑菇街(差cto没面)
蘑菇街是9月1号打来电话内推面,当时正在网易消沉期,不想面,推了以后觉得不会再打来了,结果9月8号又打来面试,问的全是Android,但是比较基础,生命周期、LaunchMode、ListView与ViewPager的优化等。二面说是并到校招,然而校招仍然是一面=。=,内容跟之前电话一面类似,二面是HR面,谈及人才培养的时候说,我们认为能者多劳,所以有能力的人会当好几个同学的导师,言外之意是,人少,不能一个人一个导师。。印象一般吧,后来约cto面的时候在火车上,改天约。
六、阿里(一轮游)
阿里其实没什么说的,不怎么要人了,想着软件园那边有家饭馆想吃,就去了,一轮游很happy。因为自己的项目有推送功能所以主要问了怎么保持长连接,怎么选择是长连接还是短连接,怎么在长连接的时候尽可能降低功耗等,还有GC、jvm内部使用了什么数据结构以及循环引用,然后问道如果就要使用引用计数算法,怎么避免循环引用。就不能乖乖的用可达性算法么真是的=。=。。。
最后一点就是,多在牛客网上刷题,笔试过了是王道,霸面真的很吃亏、很费时间,有时候默默等着希望很渺茫,其实可以托正式面试的同学把简历带上去或者直接堵门,机会要略大些。不过我的腾讯面试官比较严肃,态度也比较强硬,帮别人霸面未遂,一直也挺愧疚的。。。
大概就是这么多了,希望给接下来或者来年找工作的人一点帮助吧。
#阿里巴巴##腾讯##百度##网易##美团##蘑菇街##安卓工程师#