这个月断断续续的面过了豆荚,阿里,腾讯。刚好月底了,总结下。
三个岗位都是面的Android,接触不久大约半年的样子。。。
开始豆荚面的很惨,问的技术细节多些,现在想想都是些基础,学的不扎实,所以果断的一面就悲剧了,记得当时的问题是:
1. 你对Service的理解。【Service运行在线程中还是进程中(貌似是这个样子)】
2. 你对多线程的理解
3. AsyncTask的使用理解
4. handle, message ,looper的理解
5.还有一些java中的异常机制,比如在try catch中的catch中再次throw exception ,finally等,对java一知半解,所以关于异常这里我向来都是直接log输出,具体的貌似跟c++的异常链不太一样,因为当时我直接回答的c++的异常机制。。。
能记起来的就这个几个问题吧,其实都不难,不过说起来就不知道该怎么说了,反正答的一塌糊涂,最后给了一个算法,其实就是个斐波那契,不过需要大数处理 ,所以直接用了java的bigInteger,反正过了1天就收到了悲剧的通知。初战挂掉。。。不过对这些基础了解的还不够,挂掉很正常。
ps:其实在Android优化方面关于斐波那契数列的计算是有很多种方案的,最近看了一本叫Android性能优化的书,确实将的很不错,一个斐波那契优化讲了一章。
过了一周收到阿里的电面通知,很偶然,又很兴奋,简单的自我介绍下,开始扯项目,因为最近做过关于Android相关的电子书项目,而且最近的那个也是我总体负责的,所以说起来还算顺利,然后人家问了我一个问题,你本科的时候对哪门课程了解的或者是付出的比较多,我脑残的想了半天不知道说什么,然后就来了句编译原理,说完了我就后悔了,这尼玛忘得差不多了,万一人家深究一下的话就傻逼了,只记得当时用的词法语法分析器,叫个什么LEX,和Yacc,说了下工具的名称,然后赶紧转移到正则表达式上来,因为做词法分析最深刻的印象就是学习了正则表达式。之前做代码转换时各种正则用的不易乐乎,然后就聊了会正则,好险好险,下次再也不敢吹牛了。然后就是项目聊了十几分钟吧,最后问了下java中hashmap,和hashtable的区别以及他们的基本实现,大概的说了下,具体的详细内容百度一下一抓一大把。一面就这样很幸运的通过了。
参考这个页面:
hashmap与hashtable
又过了一周开始了腾讯的一连串面试。
处女面啊有么有,小小的紧张。。一面很简单,面试官非常和蔼,连自我介绍都免了,直接开始聊移动互联网,然后很自然的聊到了产品的设计,UI框架以及用户体验等等,其实我是来面软开的,但是一个技术问题也么有问到,然后就又很幸运的过关了,晚上回学校就收到2面通知。
二面的时候面我的那个面试官也非常好,讨论了下简历中的项目,然后问了关于源码方面的一些东西,我说看过Binder和PKMS以及AMS相关的一些代码,然后说了下基本的Binder,说Binder其实核心IPC通信就是共享内存,因为源码中看到了mmap相关的代码。然后他问我还知道什么IPC方式么?我说还有管道,信号量,他问我跟b-bus有什么区别,(⊙o⊙)…从来没有听过,应该是南方口音听得不是很清楚,等我之后百度的时候才知道叫做D-Bus,只好说不太清楚这个D-Bus的原理,好在面试官也没有为难,进入了下一个话题。基本上2面也没有问什么基础的东西,因为项目中有用到webview,跟浏览器有关,因此人家也就多问了下关于webview的东东,说实话因为项目有好几个月了,也忘记了不少,只问了一个问题,你知道这个有什么漏洞么?因为第一次报告时讲过一些android上的相关问题,正好知道这个东东,就回答说会出现反射攻击,用js可以执行shell命令,就是javascript脚本可以直接反调Activity中的函数,当然执行shell命令也是理所应当的,因此可能会导致一些安全隐患,其实这个测试当时做的不是很好,所以具体的代码忘记了,面试官好像也不太关注具体细节,2面也就顺理的通过了。
关于D-Bus可以参考这个文章:
http://www.cnblogs.com/wzh206/archive/2010/05/13/1734901.html
http://blog.csdn.net/cuijpus/article/details/2549803
回到学校收到阿里二面通知,不过是视频面试。面试过程中的大概问到的问题也都与项目相关,因为实验室的项目差不多做出来了,因此也就能多扯一些东西出来,比较基础的问题包括:
1. 说下你对Activity的理解,
2. 说下你对Service的理解
3. 说下Android新版本中有什么新的特性,新的变化
4. Fragment的理解
问的基础也不是很多,只记得这3个了。。。
然后就很顺利的过了。。。
过了清明假期,收到去qq的hr面试通知,hr又不问技术,因此也没有之前那么紧张了,简单的寒暄了几句,然后她让我从项目经理的角度来描述自己比较熟悉的一个项目,因为有个项目是自己完全负责的,因此也毫无压力的说完了,然后问了个思维发散的问题,说从家里到这个酒店的路上会有多少路灯,随便说说思路就行,主要考察观察力,然后也很轻松的就过关了,第一次感觉非常的顺利,也许是因为方向是Android的原因吧,搞移动开发的很容易进来。
之后就是阿里的3,4,5面了,总结下问过的问题:
1.我演示自己的一个APP时,返回桌面之后,在进来会重启,人家问我是什么原因,我去,当时做的时候没怎么在意,都是网上现学现用,回头冷静下来才反应过来,是Activity的启动模式选成了singleTask了,其实singleTop就足够了,哎当时乱扯了半天Activity的回调,想想真是傻。
2. 算法:01背包,KMP,快排,都是基本的算法,没啥难度,还有一个N瓶水,M空瓶可以换1瓶,写个伪代码出来看最终能换多少瓶水。
3. Activity生命周期,Service
4. Java中异常的分类。【表示面试官问的比较细,这个真心是不懂,我明明写的我熟练掌握C++啊,虽然我是报的Android方向】
再然后就是项目相关的一些信息,虽然本来不需要第3面的,但是感觉这个面的挺值的,知道了自己之后该怎么复习,我在想如果当时面试官让我写KMP代码的话,我还真不一定能迅速正确的写出来。
四面是技术终面,面试官人真心好,因为简历上写的C++熟练,虽然面的是Android,但是终于有人肯问我c++的东西了,把STL说了说,说自己JAVA正处于边应用边学习中,没有系统的学习过,然后人家也没有在JAVA上再往下问,也就顺利的过了。
五面是HR,很和蔼,因为当时简历被工作人员拿了,手里没有多余的简历,那个尴尬啊,HR又去网上调出简历。。感谢HR的耐心,其实问的问题跟qq差不多,但是比较细致,平时怎么学习啊,将来有什么职业规划啊等等,有啥说啥就是了,没有那么夸张,据说也有2对1的,不过我没遇到。阿里也非常顺利的过关了。。。
总的来说,面试没有想象中的那么难,来来回回也面了好多次,不过处女面很顺,非常感谢那个面试官,我想如果处女面挂了的话,估计会有阴影吧,总之因为项目的缘故,所以基础问的不是很多,但是跟同学交流面经,发现其实很多基础自己不是很牢,很多都忘记了。。。
尤其是Android部分很多基础的东西掌握的不是很牢固,
之后的这一段时间得好好复习总结,还得加油啊。