整个面试题分为三个部分:Java、Android和项目经验。
-
对抽象、继承、多态的理解 参考
-
泛型的作用及使用场景 参考
-
枚举的特点及使用场景
-
线程sleep和wait的区别
-
JAVA反射机制 参考
-
weak/soft/strong引用的区别
-
Object的hashCode()与equals()的区别和作用
-
JAVA常用集合类功能、区别和性能
-
并发相关的集合类
-
部分常用集合类的内部实现方式
-
Thread、Runnable、Callable、Futrue类关系与区别
-
JDK中默认提供了哪些线程池,有何区别
-
线程同步有几种方式,分别阐述在项目中的用法
-
在理解默认线程池的前提下,自己实现线程池
-
注解的使用
-
注解的级别及意义
-
如何自定义注解
-
四大组件的意义及使用,生命周期回调及意义
-
AsyncTask、Handler的使用 参考
-
Android系统层次框架结构
-
AsyncTask的实现方式 参考
-
AsyncTask使用的时候应该注意什么
-
Android常见的存储方式
SQLite数据库存储,SharedPreferences存储,文件存储,网络存储,使用ContentProvider存储数据 -
Looper、Handler和MessageQueue的关系 参考
-
Activity的启动流程(考察对Framwork的熟悉程度)
-
多进程开发的注意事项(Application类区分进程,进程间内存不可见、进程间通讯方式)
-
.9图片的意义
为了Android的多频适配,.9图可以按一定的要求拉伸来适配不同的情况
-
style和theme的作用及用法 参考
-
dpi、sp、px的区别以及转换关系
-
px: pixels(像素)。不同设备显示效果相同,一般HVGA代表320x480像素,这个用的比较多。
-
sp: scaled pixels(放大像素)。主要用于字体显示best for textsize。
-
dip: device independent pixels(设备独立像素)。不同设备有不同的显示效果,这个和设备硬件有关,一般为了支持WVGA、HVGA和QVGA 一般使用这个,不依赖像素。
转换关系:1dp定义为屏幕密度值为160ppi时的1px,即,在mdpi时,1dp = 1px。 以mdpi为标准,这些屏幕的密度值比为:ldpi : mdpi : hdpi : xhdpi : xxhdpi = 0.75 : 1 : 1.5 : 2 : 3;即,在xhdpi的密度下,1dp=2px;在hdpi情况下,1dp=1.5px。其他类推。dp和sp都是安卓的开发单位,dp是长度单位,sp是字体单位。sp与dp类似,但是可以根据用户的字体大小首选项进行缩放。Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp,而当文字尺寸是“大”或“超大”时,1sp>1dp。一般情况下可认为sp=dp。
-
-
raw和assets文件夹的作用,二者有何区别
res下面的文件夹不可以重建,里面的文件夹名字是固定的,assets里面的文件夹是可以任意建的,可以多级目录,命名时只要满足文件命名的规范就可以了。
assets和raw里面存放的文件在打包的时候,不会编译成二进制,res(除了raw)在打包的时候,会编译成二进制,
读取方式:raw: R.raw.xxx, getResource().openRawResource();
assets: 绝对路径:file:///android_asset/xxx
-
Android系统如何在多个资源文件夹下查找匹配最合适的资源
比如多个drawable文件夹,Android系统通过当前设备的dpi去取对应dpi的drawable文件夹下的文件不同的dpi修饰符对应的dpi如下
drawable-ldpi 120DPI
drawable-mdpi 160DPI
drawable-hdpi 240DPI
drawable-xhdpi 320DPI
drawalbe-xxhdpi 480DPI
drawable-xxxhdpi 640DPI
-
Java内存模型
-
Android虚拟机的特点
-
Dalvik和Art的区别
-
熟悉垃圾回收的实现机制,了解虚拟机的GC类型
-
常用组件的使用:ListView、RecyclerView及Adapter的使用
-
View之间的继承关系 参考
-
Invalidate与postInvalidate的区别
-
自定义View的实现方式(根据项目经验询问相关组件)。 参考 http://blog.csdn.net/lwjlol/article/details/50596166
-
onMeasure/onLayout/onDraw的作用
-
Paint、Matrix、Shader等绘制相关类的方法作用
-
详细描述事件分发机制
-
Android有哪些动画的实现方式 参考
-
Interpolator类的意义和常用的Interpolator
-
ViewAnimation与属性动画有什么区别
-
如何自定义ViewAnimation
-
属性动画的实现原理
-
一般项目中如何加载大图
-
图片压缩的方式
-
如何不压缩图片加载高清图
-
图片加载过程中,一般会使用缓存,这个缓存的主要作用是什么
-
谈谈自己熟悉的图片加载框架
-
代码管理工具:SVN、Git
-
常用的调试工具:Hierarchy Viewer、DDMS等
-
CI工具:Lint检查,FindBugs、Jenkins
-
内存分析工具:dumpsys、memoinfo、MAT
-
APP更新策略:推送或者拉取?
-
如何统一处理错误崩溃
-
如何进行用户行为收集
-
日志管理有哪些要点?(Debug包开放,release包关闭,错误日志反馈)
-
打包方式Ant、Maven、Gradle
-
机型适配情况
-
是否使用过第三方平台
-
常用开放平台的熟悉度(微信、QQ、微博、支付宝等常用的支付和分享)
-
是否进行过对第三方平台的统一封装?
-
是否自己开发过SDK?
-
有哪些常用的设计模式、设计原则
-
设计模式在Android源码中的应用
-
设计模式在项目中的应用
-
项目中的分包方式
-
MVC在android中的应用,利弊
-
android项目中的常见层次结构,包划分
-
有没有设计过项目中的层级结构、包划分