2017年面试总结

好久没写博客,这一阵又去面试了几家公司,所以聊一聊这大半年的面试经历,面了几家公司发现一个规律,越是出名,技术牛逼的公司,面试官都很谦虚,整个面试过程也都很舒服,遇到不会的问题面试官也都会引导你去回答问题或者给你思路,相反去一些所谓的有点小名气的公司,遇上的面试官一个个都板着个脸,感觉自己厉害的不行,要是某个问题没答上,马上一个白眼过来,就算你问他答案,他也会说回去自己看去。

我觉得面试考察的是一个人的综合素质,就以Android来说,那么庞大的一个系统再结合Java语言的相关知识点,作为开发人员不可能会每个知识点都精通再加上每个面试官的表达能力也不同,有时经常会出现面试者没有完全理解面试官的意思,所以我觉得一个优秀的面试官应该是很耐心的,如果遇到面试者答不出来问题时,应当去适当引导一下,或者给面试者告诉正确答案,而且一个好的面试官首先应当表现出很友善的样子,这样才会让面试者有一个好的发挥.

下面先总结一下常见的Android面试题:

Java部分:

  1. Java内存区域
  2. Java虚拟机/垃圾回收算法
  3. synchronized原理/synchronized修饰对象方法和修饰静态方法有什么区别
  4. 线程池原理,线程池是如何进行线程复用的
  5. 线程间如何通信,消费者/生产者模型
  6. volatile关键字作用,使用场景有哪些
  7. 可变对象/不可变对象
  8. 集合(ArrayList,HashMap,LinkedHashMap等等)原理
  9. 内部类的作用,特点
  10. 设计模式(代理模式,装饰器模式,工厂方法模式等等)
  11. 泛型
  12. equals和==区别?如果没有覆写equals,两者有什么区别
  13. 弱引用和软引用

Android部分:

  1. Activity生命周期
    这个是必问的,建议最好可以看看源码,如果不看源码,也可以打log看一下各种场景下的生命周期
  2. Activity启动模式
    同样必问,先弄清楚每种模式的作用,再挨个模拟一遍,结合生命周期来看
  3. Activity启动/创建流程
    这个最好大致看一下,能说出来一些具体流程会给面试官一个好的印象
  4. ActivityThread作用
    能知道ActivityThread作用,那证明你是看过源码的,一定要自己去看源码,不要只看什么博客,因为如果你能说出ActivityThread作用,面试官会认为你是看过源码的,继而会深入一些细节,如果你没看过源码,你肯定无法了解细节
  5. Fragment生命周期,Fragment的生命周期是如何对应到Activity的生命周期,addFragment,replaceFragment有什么区别
    对于这个,建议还是自己看源码,其实不是特别复杂,看完源码会对Fragment的管理有一个很好地了解
  6. startService和bindService区别
  7. ContentProvider的生命周期/数据库如何进行升级
  8. 跨进程通信/Binder
    这个问题也是必考,Aidl, Messenger, ContentProvider, 广播等等,由此还会引出Aidl如何使用, Aidl和Messenger区别,Aidl本质是什么,什么场景下会使用Messenger, 对Binder有了解吗,如何你能很好的说出一些关于Binder的理解,那是相当的加分
  9. Handler原理
    这个还用强调是必考吗?这个都说不出来的话,那估计面试就直接结束了,Handler一定要去看源码,源码并不多,写得也很清楚,面试官一般都会问下面这几个问题: 一个线程可以有几个Looper? 当然是一个,那是如何保证线程只能有一个Looper呢?Message是如何和Handler联系起来的?Handler又是如何同Looper绑定的?
  10. 广播,全局广播和本地广播有什么区别
  11. View绘制原理
    这个同样需要看源码,因为现在分析View绘制原理的文章太多了,你只回答个onMeasure, onLayout, onDraw根本不行,面试官会问很多细节问题,另外对于MeasureSpec一定要弄清楚是怎么回事,自己也一定要动手写过自定义View
  12. View事件拦截
    必考题!依然是需要看源码,会问很多细节的,然后还有一定要多练习,模拟一下各种事件分发的场景,比如典型的是ACTION_CANCEL事件是如何产生的?
  13. Window作用,Window,Activity, View区别/DecorView是什么
  14. 进程的优先级
  15. 进程保活
  16. 内存优化/内存泄露
    这个也算是必问的吧,这个问题会很能反映出你是否对性能有要求
  17. RecyclerView有什么优势/内部原理
  18. IntentService的原理
  19. View的优化/LinearLayout性能为什么会比RelativeLayout好
  20. 常用开源库原理/对比
    典型的就是看OkHttp,然后会比对一下Volley和OkHttp各自的优点和缺点,除此之外,Retrofit,ButterKnife,Glide也可能会问到
  21. 动画的分类和区别
  22. ANR的处理

数据结构/算法:

  1. 排序算法
    必须掌握的是快速排序,归并排序,堆排序,其他的如插入排序,冒泡排序,选择排序都不用说了,属于最简单的排序算法,如果连这几个都不会,那面试基本挂定了
  2. 二分查找
  3. 实现栈/队列
  4. 树的遍历
    前序遍历,中序遍历,后序遍历,层序遍历,不光要知道每种方法遍历的方式,还要能写出代码,一般来说前序,中序,后序的代码比较简单,用递归就可以实现,层序遍历需要用迭代的方式配合队列来实现
  5. 算法题
    这个没啥好说的,刷题吧,剑指Offer这类的书多看看吧,主要学习一下里面的思路

网络知识:

  1. TCP/UDP区别
  2. TCP是如何保证请求一定会到达
  3. TCP的三次握手和四次挥手,为什么是握手要三次,挥手却要四次
  4. Http请求格式,常见头部(这个基本是必问的)
  5. Https和Http区别
  6. Https握手过程

如果上面这些题,你能掌握个85%左右,那拿到offer基本没有问题了,不过面试过程中还有一个很重要的考量因素,那就是你的沟通能力以及情商问题...其实情商这个东西,非常重要,尤其作为程序员,因为程序员是做需求的,而提需求的产品肯定会有各种各样的需求或者不断地催进度,如果情商低,那双方难免会发生矛盾甚至是吵架,所以在面试过程中一定要展现出自己善于沟通的一面,当然情商这个东西也不是说好就能好的😂😂😂。。。还是要靠平时的积累,不要太以自我为中心.

下面具体说一下我觉得很好的面试经历和相当糟糕的面试经历,如果你对以下内容不感兴趣,那就可以直接关闭当前页面了😄😄😄

愉快的面试经历

  • 乐视

    去乐视面试是年初的事了,虽然彼时乐视已经有各种负面消息了,但是我当时觉得乐视那么大体量的公司应该不至于说倒就倒。首先要做一套笔试题,不得不说,这套笔试题在我看来出的很有水平,三大页的题考察的很全面,答完之后面试官先看笔试题,又让手写出快速排序的实现,之后也是根据笔试题以及自己的项目来问问题,全程没别的废话,而且面试官态度也非常好,整个面试过程算上答题时间有两个小时吧,但是结束后我根本没觉得时间已经过去这么久,整个面试过程还是非常舒服的,也让我受益很多

  • 艺龙

    艺龙网的面试挺简单的,没有笔试,没有现场手写算法题,面试官直接面试,问的也基本都是Android相关的问题,对艺龙的面试印象最深的是面试官问了一道关于Looper的题,让我瞬间懵逼,因为之前非常细致的看过Looper相关的源码,所以当面试官问道Looper的原理时,我很自信的答了出来,结果面试官紧跟着问了一句Looper.loop里面是一个无限循环,为什么没有阻塞线程,我瞬间懵了,虽然看过源码,但之前看源码的时候确实没考虑过这个问题,我说“这个我确实没有关注过,你能给我说一下吗",然后面试官说其实他也不是很清楚😂,他也只能说说他自己的理解,就这样,我俩就好像已经是同事一样,针对这个问题讨论了一会,说了说各自的理解,再之后基本上问的也都是一些基础性问题,整个面试过程还是相当轻松的,让我很有好感的就是,面试官愿意同面试者一起讨论一个问题,能感觉到面试官平时就很谦虚

  • 网易

    网易上两周前去的,网易的流程也是先笔试,网易的风格一直都比较学术派,所以笔试题题量不大,但是每一道题目都很有技术含量,考察的都是一些平时不太注意,但却很容易出错的基本技术知识点,当然笔试题里面必然有算法题,笔试答完后,开始第一面技术面,这次面试,我状态并不好,发挥的不怎么样,面试官问的一些问题略微有一点偏,不过也都是基于实际应用场景问的,我平时只顾着复习一些感觉很常见的面试题,在开发中对于一些小细节也没有过多的关注,所以答得并不是很好,不过也让我收获颇多,面试官全程态度都很友善,即使答不上来或者答得不好,面试官也会很友好的说没有关系,可以慢慢想之类的话,面试完后,面试官还专门问我是否觉得他问的问题有些偏门,而且让我有什么想法都可以说,面试官还说面试本来就是一个相互学习的过程。虽然我发挥的不好,但是这种面试过程还是很让人享受的,至少从这次面试中学到了很多知识

  • 美团

    美团我申请了两个部门,两个部门总共经历了七轮面试...但是每一轮面试都让人很舒服,技术面的面试官问的问题都很专业,考察的也很全面,java基础,多线程,Android相关,数据结构都会考察,而且每一个面试官都会随身带电脑,时刻记录我的答题情况,去第二个部门面试时,写算法题,面试官还会提供思路,引导我将代码写出来,所有问题问完后还会问我,有没有我觉得自己很擅长,但是他没有问到的地方,如果有,可以直接说出来,总体而言,我经历的这几个面试官都很友善,而且也能很明显感觉到面试官的技术水平也相当高,虽然经历了多轮面试,但每一轮面试都让人很舒服,还有一个很好玩的事情是在第一个部门面试的时候,第二面面完后,面试官出去了一会后回来给我说今天先这样,总监不在,hr会和你改天再约时间,我当时一听,心就凉了,我以为挂了,因为很多公司玩的都是这个套路,不过我看第二面的面试官挺友善的,就在他送我出去的路上问他是不是挂了,然后他看着我说"没有啊,总监真的不在,我这个人从来不骗人",事实证明,他真的没骗人😄😄,刚出美团不到二十分钟,约第三面的电话就打过来了

说完让我愉快的经历后,就再吐槽一下我遇到过的两个奇葩面试官,当然以下全是我个人经历,我并没有对这两家公司有什么恶意,我的面试经历也不能代表这两家公司的技术水平,也许这两位面试官恰好当天心情不好,刚好赶巧的就让我遇上了。。。

  • APUS GROUP

    这个公司说实话我以前没听过,但因为是做海外市场,这个公司其实相当相当赚钱,公司在望京SOHO,整整一层,望京SOHO那种租金超级贵的写字楼,能包下整整一层,可想而知是有多么赚钱,公司门口还专门配了两个保安,填完表都不让进,还必须让给我发邮件的hr出来接才可以,我瞬间就被这阵势唬住了(这里还有个题外话,保安问我联系的hr是谁,我说完名字打完电话后,保安让我去旁边坐着等,然后我就听见这俩哥们在评论我刚刚说的hr的身材,说这个hr身材很丰满之类的,我很鄙视的看了他俩一眼,心里想着你们真低俗,我是来面试的,结果让你们说的我现在就想看看hr美女是不是真的很丰满😂),hr美女接到我后,让我在一个小会客室等待,因为前一天没有合理安排时间,导致时间很紧张的跑了两家公司面试(这两家公司一个在北四环,一个在南二环),所以整个人一坐下来感觉有点懵,想睡觉,等了五分钟左右,面试官来了,其实面试有时候也是要看眼缘的,但很明显,我跟这个面试官没有眼缘,这里没有要攻击这个面试官的意思,但是人有时候就是很神奇,会有一种直觉,面试官给我的感觉很凶,所以第一印象有点不舒服,感觉面试应该不会很顺利(事实也确实如此),评心而论,那天我自己的发挥也确实不怎么样,脑子很迟钝,有些问题很简单,自己也确实知道答案,但是就是半天说不清楚,所以如果没有后面的事,那这次失败的面试就应该完全是我的问题,我也就不会说这次面试奇葩了。

    面试官一上来就说自己感冒了,而且一看就是很明显的技术男,平时应该不爱说话那种,说话声音很小,鼻音很重,所以他说的话我经常听不清,记得有一个问题是他问我:你写的打包脚本里有修改清单文件吗?结果我听成了有没有其他文件,然后我很果断的说没有修改其他文件,修改的是AndroidManifest文件,正要继续往下说的时候,他用一种看傻逼的表情看着我说,AndroidManifest文件不就是清单文件吗,你连这个都不知道?😤😤😤我真的是一千头草泥马奔腾而过,双方都沉默了几秒钟以后他又问我,你知道HashMap的原理吗,这必须知道啊(小儿科),给他说完以后,让我意想不到的是,他居然说我说错了,我当时还以为可能是我没表达好,他理解错了,又细说了一下,他依然很坚定的说不对,并且那种看傻逼的表情再次出现,翻了个白眼对着我说,回去好好看看源码吧,当时我就有点火了,虽然当时还不能确定我是不是真的说错了(事实是我根本没有说错!!因为面试一出来我马上就重新看了源码),但是他那种看傻逼的表情真的让人相当非常以及十分不爽,这也导致我心态有点不好了,也就发生如下的对话:

    面试官: "知道synchronized的原理吗"

    我: "不知道!"

    面试官: "那知道除了synchronized以外,还有什么方法可以进行线程同步"

    我: "不知道!"(此时面试官抬头看了我一眼,应该能感觉到我有点不耐烦)

    面试官: "那这样吧,给你一个场景,要将sd卡路径下所有文件读一遍,应该怎么样设计线程模型"

    我: "什么叫线程模型?"

    面试官: "。。。就是要用几个线程,每个线程做什么工作"

    我: "哦,没做过这个功能,不会!"

    面试官抬头看了我一眼,摇了下头,估计知道我是在赌气,因为就算前两个问题真的不会,第三个问题是很开放的,完全可以说出自己的思路,沉默了一小会,他说你有什么问题要问我的没,我心想都面成这样了,问你问题还有什么卵用,就直接说没有,然后他起身说那今天就面到这里,我一听这个,那叫个激动,我巴不得赶快结束,所以马上起身准备往外走,但是这个面试官又拦住我说,你先等一下,我瞬间觉得有点不可思议,都面成这个鸟样了,居然还不让我走??事实是我想多了,面试官出去以后差不多五分钟左右,丰满的😂hr美女出现了,笑着说今天就到这里,我们会评估一下,过几天再联系你,看着她笑容满面的脸,我瞬间想起电视剧潜伏里面吴敬中站长的一句经典台词,满嘴虚伪的外交辞令,然后让我走了,嘴上还说这那我就不送了啊,我真的是。。。面试完直接让我走不就完了吗,非要人再多等五分钟

    上面说的面试经历,我觉得双方都有问题,我的问题在于自身状态就不好,不应该赌气,另一边的问题在于如果面试官感冒了就应该更换面试官,这也是对面试者的尊重,另外就是,即使面试者没有答对问题,面试官也不应该露出那种鄙夷的表情,如果面试者答错了,应该告诉他哪里错了,这样面试者才能知道自己哪错了

  • 嘀嗒拼车

    嘀嗒拼车是猎头推荐给我的,说实在的,一开始并不想去,因为我当时第一反应是嘀嗒拼车还没倒闭?😂但想了想后续会有美团,搜狗等我心仪公司的面试,就决定去这里面试一下,找找状态,看自己还欠缺点什么(现在看来,做这个决定的时候,我脑子进水了)。嘀嗒拼车的面试官应该是目前为止我遇到过的最最最奇葩的一个面试官了,不得不说这个面试官跟上面说的这个面试官面相上非常像,我第一眼看到这个拼车的面试官的时候还以为自己穿越了又见到了之前的那个奇葩面试官,而且这个面试官更牛逼,脸上一副老子世界最牛逼,坐下来后第一句话就是,我是这边移动端总负责人,我当时就一惊,这第一面就上总负责人了??然后这哥们就开始了他的表演。"你之前为什么要去乐视",我巴拉巴拉说完以后,又问我那为什么要离开, 我就无语了,第一面技术面你不问点技术,你问这个问题干毛,我说乐视开始裁员了,我身边好多人都被裁了,现在业务线有些停滞,然后这哥们放了个大招,“那你为什么没有被裁”,我当时真的想说你他妈脑子有问题吧,但是我还是给他回答了,其他员工都主动申请了裁员名额,而我因为还处在六个月试用期内,所以可能没被裁(因为留下来的还几个都是处于试用期的,其实具体我为什么没被裁的原因,我自己都不清楚),然后他有开始发问了,"不应该啊,试用期的人说让走就走了,普通员工被裁还要赔钱,这没有道理啊",我都无语了,我直接说,领导决定的,我不知道,结果这个面试官更来劲了,又来一句“我还是想不明白,按理说试用期员工都不用裁,说让走就直接走了“,我真的是服了,老太太我都不扶,就服他,一个技术面试官不问点技术问题,一上来问这么sb的问题,都不知道他想知道什么,非揪着我为什么没有被裁员问,因为我宇宙世界无敌牛逼??在见到这个面试官之前,先做了一套笔试题,笔试题就6道,最后一道编程题还是写fibnacci数列...题目其实挺简单的,前两道都是理论题,我一看这么简单,最后一道题还专门再写了非递归的实现方式,不过正因为太简单吧,所以没细致看题,十分钟都不到就做完了,错了两道不应该错的选择题,后面这奇葩面试官问我的时候,我还没觉得错,但是他又让我细致看一下题的时候我才发现错了,但是说真的,我实在不明白这套笔试题有什么含义,出题的本意就是要考察对某个知识点是否掌握,结果还非要在题目里搞个跟谜面一样的东西,这种题不是没见过,网易的笔试题就有这样的,但是我做题时能很明显的知道这道题的考察点是什么,但是嘀嗒拼车的这套题我真的是无语了,尤其我错的一道题,给人感觉是在考察各种对String的使用,结果最后考察的却是对迭代器的使用,这种题很简单,错了确实不应该,但是为什么要把题出的这么具有迷惑性?答错了就一定代表面试者没有掌握迭代器的使用吗?至少我不这样认为。回到之前说的,在他跟个zz一样的追着我问了好几遍为什么没有裁员后,开始问了两个技术问题,然后他又开始神一般地发挥了,直接看着我的简历说"我感觉你的简历跟我们要做的产品不是很匹配啊",我真的是有点想打他了,简历是猎头推给他们的,如果觉得不合适,直接pass掉就可以,如果之前就说不合适,那我也就啥也不说,因为这很正常,但是既然邀请我来面试,就证明简历这关肯定是过了的,结果我大老远的请了假过来,却给我说简历不合适?之前干嘛去了?吃干饭去了啊?

以上两段内容仅供娱乐。。。以上两次不堪的面试经历只是我个人的面试经历,并不代表上面两家公司不好,大家如果看完了,就当读故事了

推荐阅读更多精彩内容