近期一个多月面试过一下公司(均为实习):
腾讯:内推一面卒。java
正式校招拿到offer
阿里:内推二面卒。android
蘑菇街:面完三面技术面,等待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訪问快
等性能优化
下面是面试中问到的问题,可能不全,因为隔得时间有些长可能忘记了。markdown
内存模型,特色。类信息在哪一个区
栈和堆的差异
GC怎么知道一个对象要被回收,
GC Root
强引用,软引用,弱引用,虚引用
类载入过程
在项目中哪里使用过JVM的知识网络
java基本数据类型
多态是什么,怎么实现的
==和equals
hashcode
HashMap和HashTable差异
HashMap,LinkedHashMap底层实现
HashMap的整过过程,怎么设计一个hash函数散列均匀
并发容器包,ConcurrentHashMap原理
ArrayList和LinkedList差异
虚函数实现
反射。项目中啥时候用过。
wait和sleep的差异
并发同步,synchronized为何是重量级的方式
votilekeyword的特色
线程和线程池,线程池的实现的原理
两个线程依次打印一串数字
NIO。原理。裸写NIO的难点在哪
unix的I/O模型
堆得实现。数组保存二叉树
堆排序
高速排序
数组找反复数字,位置
讲一下常见排序算法的思想和复杂度
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这些我仅仅知道简单的,没有深刻研究,android的可以随便问,而后就不问http的问题了)
304
缓存
七层模型
TIME_WAIT
流量控制,拥塞控制
http头里面的host有什么用url里面都有了为何在头字段要有
进程与线程
操做系统看了那些内容
进程间通讯的方式
死锁。怎么避免。平时遇到没
每讲一个点的时候都会问我为何这么设计,你从哪里学到的?在哪里看到这么作的?
遇到了什么问题。怎么解决的?是怎么发现问题的?log。单步调试
项目的架构
有没有为面试作准备。准备了哪些内容。
大概就是这些,有些可能时间太长我也记不太清了。