java部分
1.collection
Map
- HashMap的实现原理,优化原理,扩容原理
- HashTable,和HashMap的区别,线程同步
- LinkedHashMap
- ConcurrentHashMap,为什么线程安全
- SparseArray
Set
- HashSet
- TreeSet
- 平衡树,红黑树,二叉树
List
- ArrayList 实现原理,扩容
- LinkedList实现原理
- Vecter
- Stack,手动实现
Queue
- LinkedQueue
- Deque 特点,应用场景
2.java内存模型和内存管理
- 内存的划分
- 内存泄漏
- 内存溢出
- 缓存区的数值判断
3.线程
- 什么是线程
- 线程启动的几种方式
- 线程的几种状态
- 线程与进程之间的关系,区别
- 锁的种类 乐观锁cas,公平锁,非公平锁,重入锁,偏向锁
- 死锁是什么?什么情况,怎么避免
- cas算法
- 消费者生产者模式(三种写法)
- 原子性,可见性,数据一致性
- 线程池
- ThreadLocal
- sleep和wait的区别
- join和yeild
- io密集型和运算密集型的区别和线程池的使用
- volitail的特点和原理
4.jvm
- 类的的加载机制,原理
- 四种引用类型
- 垃圾回收的原理和算法
- 双亲委派机制
Android部分
android系统层面
- 开机过程
- apk的生成过程
- apk的安装过程
- app启动过程
- Activity的启动过程
四大组件
Application
- Context和ApplicationContext
- 能否弹出Dialog
1.Activity
- 生命周期以及回调时机
- 启动模式和TaskAffinity
- 各种模式下跳转的案例
- 横竖屏切换
- Activity的启动流程
2.Service
- 生命周期
- 启动模式,start,bind
3.BroadcastReceiver
- 静态注册,动态注册,区别,动态在application启动和静态有什么区别
- 有序广播-优先级
4.ContentProvider
- 常见的增删改查,实现方式
- ContentObserve的实现
- 怎么定义一个ContentProvider
其他,Intent,Fragment
常用组件
- Fragment-生命周期、懒加载、Fragment之间的通信
- WebView-首屏加速,安全,离线包,原生之间的交互
- RecyclerView-缓存机制,瀑布流,和ListView的区别
View
常用布局
- 五种常用的布局
- LinearLayout和RelativeLayout的效率比较
- LinearLayout是怎么实现的
- Weight是怎么计算的
View的工作原理
- View树的遍历
- View和view的关系
- View的绘制流程
- 自定义View
- View的事件传递,冲突处理
- 子线程是否可以更新View怎么做
- sp、dp、px的区别,为什么这么设定
- 屏幕适配的方案
动画
视图动画
- 补间动画
- 帧动画
属性动画
- 插值器Interolater
- 估值器TypeEvaluator
常见源码分析
- Handler消息机制
- ThreadLocal
- AsyncTask
- IntentService
- 线程池
图片缓存机制
- 内存缓存
- 磁盘缓存
- 网络缓存
- 图片占用内存计算
- 内存缓存算法
网络
- Tcp-Udp的区别,三次握手,四次挥手
- Http协议组成,版本区别,特点
- 状态码
- Https的区别,特点,端口443
- ssl tsl
- 断点下载,多线程下载
- 防劫持 dns,Https
- 防封禁
进程
- 进程间的通信
- Binder机制
- AMS,WMS,PMS
- AIDL
- 进程间通信的比较
框架源码分析
- butterknife
- leakcanary
- retrofit
- okhttp
- glide
- eventbus
- ijkplayer
常考算法
- 单链表反转
- 快排
- 最大子串
- 最大回文子串
- 二叉树三序遍历
- 字符串处理
- 各进制转换