最近面试Android的一些面试题

最近一个多月面试过一下公司(均为实习):
腾讯:内推一面卒。正式校招拿到offer
阿里:内推二面卒。
蘑菇街:面完三面技术面,等待HR面
网易:拿到offer。
可以看到,大部分问题不难,但是能回答对和回答的好不好又是两个两个不同的情况了。任何问题都尽量回答的越详细,越清晰,越全面,面试官就会越认为你掌握的越好。
比如问一下内存泄露,那么试着多列举一些情况:

首先解释内存泄露是什么。
最常见的handler引用Activity,static+WeakReference解决
耗时线程
bitmap调用recycle,3.0前和后,3.0后偷换native内存
想持久化Drawable,定义成static,老版本他持有view,view持有activity,可能间接造成activity泄露,4.0已修复。
广播记得取消注册
除此之外,如能提到jdk1.6中String的substring方法,那效果更好。

再比如问到性能优化:

从布局优化ViewStub,merge,include
overdraw,GPU选项观察overdraw情况
view的ondraw,尽量别new对象,不能耗时,60fps,16ms,GPU加速
必要情况下使用SurfaceView
避免内存泄露(又回到上一个问题了)
ListView的优化:holder,分页加载,滑动停止后再下载图片等
Bitmap的优化,加载单个bitmap,多个bitmap时的内存硬盘缓存
利用android中的一些数据结构比如ArrayMap和SparseArray
少用枚举,多用static访问快

以下是面试中问到的问题,可能不全,因为隔得时间有些长可能忘记了。

jvm:

内存模型,特点,类信息在哪个区
栈和堆的区别
GC怎么知道一个对象要被回收,
GC Root
强引用,软引用,弱引用,虚引用
类加载过程
在项目中哪里使用过JVM的知识

java:

java基本数据类型
多态是什么,怎么实现的
==和equals
hashcode
HashMap和HashTable区别
HashMap,LinkedHashMap底层实现
HashMap的整过过程,怎么设计一个hash函数散列均匀
并发容器包,ConcurrentHashMap原理
ArrayList和LinkedList区别
虚函数实现
反射,项目中啥时候用过。
wait和sleep的区别
并发同步,synchronized为什么是重量级的方式
votile关键字的特点
线程和线程池,线程池的实现的原理
两个线程依次打印一串数字
NIO,原理,裸写NIO的难点在哪
unix的I/O模型

数据结构算法

堆得实现,数组保存二叉树
堆排序
快速排序
数组找重复数字,位置
讲一下常见排序算法的思想和复杂度

android:

activity生命周期,每个函数调用发生在什么情况下
Fragment生命周期,开发中需要注意什么问题
android中几种上下文的区别
bitmap优化,复用,偷换native内存,BitmapFrctory.option几个参数
缓存策略,LruCache和DiskLruCache原理,加上软引用,缓存框架的构架大概是什么样子。
网络请求缓存
handler机制
handler一般用来干什么?还有在哪些地方看到使用handler
HandlerThread
Service和IntentService
启动服务的方式,有没有使用过bindService
view绘制过程
事件分发过程
使用过Canvas没
ListView优化
做过什么自定义控件,需要注意什么问题
View的onDraw方法扯到SurfaceView
ANR怎么避免
OOM怎么避免
Binder底层实现,框架
ViewRoot源码,这个类的主要功能
内存泄露
怎么检测内存泄露
性能优化
动态加载了解不
activity启动过程
/data/app/的文件夹和文件的权限(很犀利的面试官问的,项目中用到最重要的一点,不愧10年工作经验)
Android是怎么学的

强行装逼时刻:想办法扯到Binder的源码,动态加载,插件框架:360的DroidPlugin和百度的DynamicLoad原理,activity启动流程,跨进程回调上面来,以及一些开源库,基本上讲完动态加载的框架就是和面试官聊天了。

设计模式:

知道哪些设计模式,平时怎么用的?
口头念出一个单例每行怎么写,多线程问题
外观模式

http:

(每次http的问题我回答不出来我就告诉面试官,http这些我只知道简单的,没有深入研究,android的可以随便问,然后就不问http的问题了)

304
缓存

tcp/ip:

七层模型
TIME_WAIT
流量控制,拥塞控制
http头里面的host有什么用url里面都有了为什么在头字段要有

操作系统:

进程与线程
操作系统看了那些内容
进程间通信的方式
死锁,怎么避免,平时遇到没

项目:

每讲一个点的时候都会问我为什么这么设计,你从哪里学到的?在哪里看到这么做的?
遇到了什么问题,怎么解决的?是怎么发现问题的?log,单步调试
项目的架构
有没有为面试做准备,准备了哪些内容。

大概就是这些,有些可能时间太长我也记不太清了。

posted @ 2016-04-22 15:22  浩荡乾坤  阅读(113)  评论(0编辑  收藏  举报