2019最新百度、头条、小米、360、网易、等公司 Android 社招面试题目

一.拼多多

"备受争议"的一家电商公司,发展很快,不过这不是我想说的重点,我想说的是,拼多多的两位技术面试官很和善(固然hr同窗也很好了~),提出的问题很新颖,就拿Handler来讲吧,大部分的公司都会直接问,说说你对消息机制Handler的理解,拼多多的提问大概意思是:程序员

1,让你设计一个线程池,若是调用者在传入的Runnable任务时,在run方法直接使用了Handler,会发生什么?
2,1的问题还比较简单,子线程不会默认给你一个looper,你须要调用prepar去建立,调用loop去开启无限循环,这是一个正常的回答,问题又来了,面试官又问你,接下来又会发生什么?
3,到这里我相信会有一些同窗暂时会"蒙"一下,心想,应该不会发生什么了吧?2中已经提到loop是无限循环取消息,若是到如今什么都不作,这个线程会一直停留在run方法中,结束不了.到这里还没完。
4,知道IntentService吗,它里面也有一个Handler,它是如何结束执行呢,若是屡次start这个IntentService,它又如何判断何时结束呢?面试

这系列问题都不难,但我想说的是答案并不重要,重要的是咱们在学习的时候不但要多问为何,还要把各个知识点能够串联起来,这个很重要,若是各个知识点都略知一二,都串不起来,说明没有正真的理解。也体会不到学习的乐趣。算法

为了能够更加深入的体会到"知识点串联"的重要性,我这里再举一道题:设计模式

1,相信你们都被问过activity启动流程,也被问过activity生命周期,也被问过ui绘制流程,固然也被问过在activity的oncreate方法中,为何获取不到控件的宽高,如何才能够获取,为何?
2,上面一口气说了四道经典面试题,固然答案不重要,这里我在追问一下:若是在onresume方法中能够获取控件宽高吗?在追问一下:ui绘制流程和activity生命周期有什么关系,或者ui开始绘制的时机到底在何时?
3,因此仔细想一想,这些知识点都是有关系的,咱们在复习的时候应该这样去想,这样才能够更加有效率的去学习,才能够更加快速的摆脱初级工程师的帽子。数组

这里最后举一道题,以结束拼多多面试给带来的思考: 你们都知道子线程不能更新ui,我再追问一下,子线程真的不能更新ui吗(答:是能够的,也不会报错,固然答案不重要)网络

二.百度:

我心目中大厂中的大厂,正由于这样也是我这么屡次面试中惟一紧张的一次,还好结果还很满意。两位面试官也给我提了不少建议,很感谢,这里仍是用一道现场面试题来表达个人思考吧。数据结构

你对网络请求作过哪些优化呢~
1, 对于我这种菜鸟来讲,这道题真的很空洞,可是我不能就这样简单的回答,我不知道,我没作过,网络这块我只用了现成的框架,这样回答确定会挂的!
2, 我相信若是我是面试官,对面坐着一位工做经验不足1年的同窗,我也不期待他能够把这道题回答的很好,但我也不想听到那么简单的我不知~
3, 因此,对于这道题而言,我首先回答了下okhttp中连接池复用,又简单讲了下对HttpDNS,IP直连的理解,以及对Http2.0多路复用,长链接的理解等等,固然我理解的很是浅,也固然答案并不重要,重要的是你面对一道不会的题目时,不要简单的去说no,倾其全部,把你的想法和思路都列举出来,无论对错,让面试官看到,你在思考~架构

当我简单说完这些思路后,面试官又给我深刻解释了下,很是感谢~接下来我也会查尽资料去深刻学习这块知识,固然其余知识模块也都要慢慢去深刻,去总结~mvc

三.小米:

在去面试的路上,感受小米总参好远好偏僻,到了以后,环境还能够,不过接下来的面试就不是那么顺利了,这多是我此次全部面试经历中最糟糕的一次了…使人意外的是我竟然还经过了面试,幸运~框架

小米此次面试经历可能对个人影响最大,由于此次经历算是刷新了我一次认知(说是刷新认知,可能夸大了些,但我找不到其余词语来描述了,就这样了),仍是用一道现场面试题来:


依然答案并不重要,我记得我回答这道题目的时候有理有据,面试出来后,我总感受哪不对,就又认真看了看源码,写了个demo去验证,果真个人回答大错特错,如今回想面试官听我回答的时候是什么想法,感受好尴尬~

给个人启示是,看源码的时候,要带着问题去看,可能这个谁都知道吧,我就不着重提醒了。另外对我这样初级程序员来讲,看源码的时候不可避免的会去搜索现有的文章帮助理解,这无可厚非,重要的是不要百分百依赖这些文章,个人意思不是说这些文章写的很差,我可能更多的想要强调一个自主独立性,由于你看源码时的思惟模式可能和文章做者的不一样,这样可能就形成你一直在跟着做者走,没有了本身的思考方向,所以也可能去忽视或者误解其中某些知识点,形成我此次的尴尬~

还有看完源码后,若是能够,动手写一个demo去验证你所学到的知识就更好了,另外更加深层次的要求是,若是能够手动模仿写一个大概的功能框架,相信会对其中实现的细节更加透彻,好比手写Handler,手写Retrofit等等。

四.网易:

对于网易,个人第一印象就是“猪厂”,本身养的猪必定很好吃,哈哈,惋惜没有吃过网易的食堂,必定很好吃^_^

网易的两轮面试中没有提问一个具体的知识点,这点有的意外,因此印象很深入。
一面全程问的是个人项目经历,重难点是什么以及解决方案,在前面的“面试风格”那部分也提到过,感觉也在前面说了,总结一句话就是:平时工做中必定要多积累项目中的重难点。虽然一面的最后也问了道算法题,但很简单,就不提了。
二面面试官我感受是一名技术总监,由于全程问的是开放性问题,其中一个问题是:你如何看待flutter,flutter可否真正的普及。差很少是这个意思把。

五.头条:

字节跳动是我一直很向往的一家公司,创新、活力、强大、潜力,是目前为数很少能够挑战bat地位的独角兽。

在头条的面试过程当中,印象最深入的一个问题是对MVC、MVP、MVVM的理解,以及MVVM的实现方式有哪些。虽然不少博客也都介绍过三者的区别,以及MVVM的实现

我认为这道题目很重要,由于经过这道题目的考察,能够看出一名程序员是否在程序设计上有过本身的思考,而不是在工做中简单的“搬砖”。

在Android架构设计中,大致上只有三种设计,组件化,插件化,再加上MVVM(或mvp、mvc),若是再可以熟练都应用各类设计模式,理解设计模式的六大原则,那么你的代码写的必定很漂亮。

同时因为头条在面试中很是注重算法,这段时间我也狠狠的总结了一下算法相关的知识点。

数组类、链表类、树类,位运算类,大数处理,简单的动态规划,特殊的数据结构,如map,set

若是对算法并非那么感兴趣,仅仅想要应付面试而言,算法其实并不可怕,你们都知道头条多是面试算法最多的一家公司了吧,即便这样,头条算法面试中的题目也都不难,无非是上面中的分类,数组,链表,以及二叉树的操做,最多加一些简单的动态规划题目~

例如中序遍历二叉树,使用非递归方式,就拿这道题而言,很是基本,也没有难度,但愿对算法面试畏惧的同窗提升信心,认真学习数据结构就能够了~(另外在补充一点,对于校招而言,由于有一个线上笔试环节,笔试中的算法平均难度稍微高于面试中的~)

这里我还想再啰嗦一点,由于对于算法的准备你们大都不知到如何去复习,只知道一味的刷题,尤为是对于数据结构薄弱的伙伴来讲,没有目的的刷题并不能真正提升你的算法能力,更多的是你的自我安慰,心理告诉本身在学算法,然而并无效率。

首先必定先要认认真真学的数据结构,图的那章若是不想看,对于算法面试而言能够不去看,还过有精力的仍是去看看,毕竟树与图之间仍是有不少类似之处。
基础很差的伙伴在刷题的时候必定要注意一下几点:

  • 开始时先按照类型去刷,诸现在天看数组类算法题,明天看链表类的等等
  • 每刷一类题目时必定要去总结其中的知识点,将这类题目的特色,经常使用的方法,常考的方向必定要理解透彻,这样才有效率,才会进步。
  • 基本类型的题目都刷过一遍时,再回头总结全部题目经常使用的思想
    以上操做都应在数据结构学的比较牢固的基础上进行才更有意义,所谓磨刀不误砍柴功嘛

六.职业规划:

“职业规划”可能这四个字说的可能大了点,本质其实就是一个目标,包括你的当前目标,短时间目标,长远目标等等。一样这也是面试中最常问到的一个问题,无论在技术面,仍是在hr面都是有可能被问到的,而且几率很大,几乎每家公司都会问,因此对于这个问题,咱们必须有所思考和实际的规划,不只仅是为了应付面试,还关乎咱们的将来,有了适合本身的方向,才能更有效率、更有动力的前进,毕竟咱们都有梦想~

七.最后

个人面试经验分享可能不会去罗列太多的具体题目,由于我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感觉以及多天以后你的回味~

相关文章
相关标签/搜索