最近一个多月面试过一下公司(均为实习):
腾讯:内推一面卒。正式校招拿到offer
阿里:内推二面卒。
蘑菇街:面完三面技术面,等待HR面
网易:拿到offer。
能够看到,大部分问题不难,可是能回答对和回答的好很差又是两个两个不一样的状况了。任何问题都尽可能回答的越详细,越清晰,越全面,面试官就会越认为你掌握的越好。
好比问一下内存泄露,那么试着多列举一些状况:java
首先解释内存泄露是什么。
最多见的handler引用Activity,static+WeakReference解决
耗时线程
bitmap调用recycle,3.0前和后,3.0后偷换native内存
想持久化Drawable,定义成static,老版本他持有view,view持有activity,可能间接形成activity泄露,4.0已修复。
广播记得取消注册
除此以外,如能提到jdk1.6中String的substring方法,那效果更好。
等android
再好比问到性能优化:面试
从布局优化ViewStub,merge,include
overdraw,GPU选项观察overdraw状况
view的ondraw,尽可能别new对象,不能耗时,60fps,16ms,GPU加速
必要状况下使用SurfaceView
避免内存泄露(又回到上一个问题了)
ListView的优化:holder,分页加载,滑动中止后再下载图片等
Bitmap的优化,加载单个bitmap,多个bitmap时的内存硬盘缓存
利用android中的一些数据结构好比ArrayMap和SparseArray
少用枚举,多用static访问快
等算法
如下是面试中问到的问题,可能不全,由于隔得时间有些长可能忘记了。设计模式
内存模型,特色,类信息在哪一个区
栈和堆的区别
GC怎么知道一个对象要被回收,
GC Root
强引用,软引用,弱引用,虚引用
类加载过程
在项目中哪里使用过JVM的知识数组
java基本数据类型
多态是什么,怎么实现的
==和equals
hashcode
HashMap和HashTable区别
HashMap,LinkedHashMap底层实现
HashMap的整过过程,怎么设计一个hash函数散列均匀
并发容器包,ConcurrentHashMap原理
ArrayList和LinkedList区别
虚函数实现
反射,项目中啥时候用过。
wait和sleep的区别
并发同步,synchronized为何是重量级的方式
votile关键字的特色
线程和线程池,线程池的实现的原理
两个线程依次打印一串数字
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是怎么学的markdown
强行装逼时刻:想办法扯到Binder的源码,动态加载,插件框架:360的DroidPlugin和百度的DynamicLoad原理,activity启动流程,跨进程回调上面来,以及一些开源库,基本上讲完动态加载的框架就是和面试官聊天了。网络
知道哪些设计模式,平时怎么用的?
口头念出一个单例每行怎么写,多线程问题
外观模式
(每次http的问题我回答不出来我就告诉面试官,http这些我只知道简单的,没有深刻研究,android的能够随便问,而后就不问http的问题了)
304
缓存
七层模型
TIME_WAIT
流量控制,拥塞控制
http头里面的host有什么用url里面都有了为何在头字段要有
进程与线程
操做系统看了那些内容
进程间通讯的方式
死锁,怎么避免,平时遇到没
每讲一个点的时候都会问我为何这么设计,你从哪里学到的?在哪里看到这么作的?
遇到了什么问题,怎么解决的?是怎么发现问题的?log,单步调试
项目的架构
有没有为面试作准备,准备了哪些内容。
大概就是这些,有些可能时间太长我也记不太清了。