美团Android面经(共三面)
楼主是Android岗位,昨天现场面的,二三面和前面重复的问题就没写了。
一面(80分钟):
上来就问看过java、android哪些源码。。。然后开始了各种源码
1、handler源码 从new Handler()讲到发消息后回到handel里面执行,每一步是怎么样的。中间讲looper的时候讲到了ThreadLocal,于是又讲了ThreadLocal的作用以及内部怎么实现的。
讲完问了几个问题
(1)sendMessageDelayed()加了延时发送,然后现在还没到时间,messageQueue和looper会怎么操作?
(2)程序在looper.prepare()和looper.loop()之间发生了异常会怎么样?
(3)主线程一个方法
f1(){
a;
handler.post(Runnable r);
b;
}
r会在什么时候执行?
(4)ActivityThread的main方法是怎么启动的?
2、事件分发源码,activity—window—DecorView—顶层ViewGroup,然后ViewGroup里面具体的分发,拦截等等。
说完之后,面试官说:嗯,背的很熟!。。。。
3、ListView、RecyclerView源码,怎么进行缓存的,二者的区别在哪?
4、同步Syncronized和Lock,二者的区别,讲到了ReentrantLock.
5、volatile的作用。
6、设计模式,我讲了单例、观察者、buid和工厂,问了每个的设计理念和适用场景。
7、hashMap的源码怎么实现的?解释加载因子?和LinkedHashMap的实现上区别在哪?
8、equals()和hashCode,重写equals怎么写?如何判断重写的equals是对的(要遵守哪些约定)?重写equals为什么要重写hashCode?
9、java中的异常分类,哪些时候需要抛出异常?如果自己重写异常怎么写?
10、java类加载过程。
11、jvm的内存划分,哪些是线程安全的?为什么?
12、java多态的体现,重写和重载的区别?
13、匿名内部类使用的参数为什么必须是final的?
14、静态内部类和非静态的区别。
15、线程和进程的区别。
16、线程池的实现,为什么要使用线程池?
17、http的底下每层的协议?(这部分不熟悉,只知道传输层是TCP,网络层是IP)
18、tcp与udp的区别,tcp传输数据的过程,摸手建立连接、慢启动、拥塞控制等。
19、http的请求方式,区别。
20、https的全过程,从握手到数据传输。
21、了解哪些加密算法?
22、java中对象是怎么排序的? Collections.sort()怎么实现的?
算法题:归并排序
一面面完只想说一句话:大家好,我叫源码!
二面(50分钟)
上来先聊了会别的,比如什么时候开始学习的编程,怎么学习的android,看啥书,有问题了怎么解决的等等。。
下面是技术问题
1、图片压缩怎么做?
2、图片缓存怎么做的?解释LruCache算法。
3、图片占用内存怎么计算,xml格式的图和普通的图有啥区别?
4、android的性能优化,布局、内存、响应时间。
5、android中发生内存泄漏的原因,如何发现内存泄漏?怎么避免?
6、mvp架构模式的优点,与mvc对比
7、http的请求头有哪些?分别代表什么意思?
8、怎么实现文件的断点续传?
算法题:单链表逆序
三面(40分钟)
应该是交叉面,面试官是做ios的,上来依然先聊了会技术之外的话题。
1、怎么看待android和ios?
2、图片缓存怎么做的?如果让你设计一个缓存算法你会怎么实现?(这里说的比较久)
3、为什么数组的查询效率高,增删效率低?
4、项目和实习中分别遇到了什么问题?怎么解决的?(这个每个人都不一样,就不具体列了)
5、以后的职业规划。
算法题:1、计算整数n的二进制数有几个1?(剑指offer原题,但当时是真记不起来,只说了一直除2的方法)
2、求两个数组的最长公共子序列