Android面试总结--无答案版本(持续更新中)

前言:根据不愿透露姓名的网友亲身经历整理而成。。。目前主要包括的公司:MT、OP、XY,持续更新中。在阅读本文之前建议你:

1.这是无答案版本,仅提供了一个回答思路,稍后会有“Android面试总结-有答案版”,大家可以怀着一颗求职者的心态,给自己打分;

2.如果你有不了解的题目,不要有焦虑或者危难的心态,正所谓“学道有先后”,让我们一起进步、一起学习;

3.尽量去弄懂搞懂每个题目,了解它的原理、为什么要这么设计、应用场景有哪些等;

4.如果你都能做出来,那么恭喜你哟,你的基础知识已经相对牢固啦!

Android面试总结--无答案版本(持续更新中)

MT

一进来,面试官给一套笔试题,给大约20分钟做好。做完后,需要逐条过一遍笔试题,然后会根据你的简历问一些问题。具体如下:

笔试题(20分钟)

1. String和BuilderString的区别?

从api的用法及内存角度阐述。

2. 单例模式,手写代码(可以写懒汉模式、DCL、静态内部类模式)?

几种单例的优缺点。

3. 手写观察者和消费者模式;

java内置了Observable类和Observer接口,需要理解源码,如果让你自己实 现应该要怎么处理。

4. 启动模式,以及生命周期;

启动模式的应用场景,以及异常情况下的生命周期。

5. Handler机制,最好能画一个完整的图;

Handler机制是比较基础的框架,可能会由此扩展到Asynctask的设计原理、优缺点等。

6. 图片加载过程,图片缓存应该如何设计?

3级缓存,网络缓存、磁盘缓存、内存缓存,设计思路及源码。

8. synchonized以及volatile的区别?

底层的区别,比如分别怎么实现,有什么应用场景。

9. binder相关?

常见的binder形式,底层怎么实现(共享内存)。

面试题(1个小时)

1. 负责的模块;

2. 技术输出,自己写的东西,完整的表述清楚;

3. 自定义view;

重点突出是否熟悉整个流程。

4. 多线程相关,同步队列器,如何实现线程按照顺序执行?

join方法、CountDownLatch、CyclicBarrier和Semaphor等。

5. 性能优化相关;

布局优化、启动时间优化、内存优化,最好能形成自己的框架和思路。

6. 熟悉的开源框架,画出类图;

可以写自己设计的框架。


需要注意的点:

1. 设计模式了解清楚,单例模式、消费者模式、模板方法类,抽象工厂模式、适配器模式,需要能够清晰的写出代码;

2. 一些基础知识要牢固,比如Handler;

3. 需要熟悉开源框架,能够画出类图,如RxJava、okhttp、picasso、EventBus等框架的流程图、设计思路(为什么要这么设计);

4.手写代码很重要,需要注意格式、优雅性等。

OP(1个小时)

可能由于是特招,没有笔试题,是两个面试官一起面试,主要围绕简历内容进行提问。

1.第三方库的设计思路及加载,重复了怎么办?

从可扩展性、Api友好性、安全性、功能完整性等方面考虑。剔除重复资源。

2. 内存泄漏场景,为什么?

内部类,Handler;

3. list的设计思路,怎么做到缓存,为什么不会错位?

4. IPC主要有哪些,应用场景是什么,会不会有内存泄漏呢?

5. contentProvider用法?

优缺点,限制

6. 锁的基本原理,类锁,对象锁?

7. 线程池用法,抛出rejectException的时机?

8.排序算法,时间复杂度、空间复杂度,手写代码。

XY

由于工作年限的问题,没有做笔试题,第一面是基础面,第二面是项目面。

第一面(1个小时)

主要围绕简历上的“专业技能”,所以自己简历上的知识点一定要熟悉,不熟悉的要慎重写。以基础为主:

1. HashMap,插入和扩容策略,java7和java8的区别 ;

2. https的连接过程,tcp;

3. view事件;

4. 性能优化,比如handler的内存泄漏;

6. AsyncTask原理,优缺点,扩展到线程池;

8. 源码,okhttp的核心,底层说不清,为什么要用socket,怎么设计一个网络框架;

9. 虚拟机,GC,Minor GC;

10. 设计模式,单例,builder,为什么要用builder,不用javabean;

11. 4种启动模式,具体的应用场景;

12. List为什么能进行数据绑定,listView和recycleview的区别;

第二面(1小时)

主要围绕项目:

1. 项目中的资源压缩,以及哪个阶段可以进行资源压缩;

2. socket和http的区别;

3. 主要的工作内容,设计思路。



总结

由以上的的面试题可以看出,基础很重要,java基础、多线程编程、JVM、网络、图片等基础都是必须要掌握的。

后期“小工说”将会持续分享:java容器类、并发编程、虚拟机基础知识、如何设计一个移动端的网路框架、如何设计一个图片框架等方面的知识。在从“小工”到“专家”的路上,希望与你一起交流,一起进步!

欢迎关注微信公众号:小工说

扫码关注:

http://weixin.qq.com/r/XilOVmjEzjWxrSw193xM (二维码自动识别)