一、JAVA
1、基础
- java的特点 (OOP),封装、继承、多态
- 什么是多态?多态的实现机制是什么?
- 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
- ==、equals、hashCode的作用,区别
- 抽象类与接口的异同
- new String("a")创建了几个对象?String StringBuffer和StringBuilder的比较
- 浅拷贝与深拷贝的区别
- final、finally、finally的区别
2、集合
- Java集合框架中有哪些类 ? 都有什么特点 ?
- ArrayList和LinkList的区别 ? Vector ?
- hashmap实现(底层数据结构),hashcode算法,如何扩容,怎么处理hash冲突?处理hash冲突都有哪些办法?(联系ThreadLocal)
- hashmap、 hashtable、ConcurrentHashMap;如何实现线程安全,底层原理?HashMap线程不安全如何体现?
- LinkedHashMap原理,作用?(LruCache)
- HashMap、ArrayMap、SparseMap比较?
3、虚拟机
- JVM内存区域怎样划分
- 垃圾回收机制
- 类加载过程、类加载机制
- 强引用、软应用、弱应用
4、并发
- 线程状态的理解(阻塞,运行等等)
- Thread方法的区别:sleep、yield、join、wait
- 线程池的原理,四种线程池的区别,线程的个数选择
- 线程安全:volatile ,synchonized,lock,CAS,ThreadLocal
- 线程通信:synchonized+wait/notify;lock+condition;生产者与消费者
5、设计模式
二、Android
1、Activity
- Activity生命周期
- Activity A 启动另一个Activity B 会调用哪些方法?如果B是透明主题的又或则是个DialogActivity呢
- onSaveInstanceState()方法的作用 ? 何时会被调用?
- Activity的四种启动模式、应用场景 ?
- Activity跟window,view,ViewRoot之间的关系?
- Activity的启动过程?
2、Fragment
- Fragment 生命周期
- Fragment 与Activity如何通信,Fragment如何之间通信
- Fragment中add与replace的区别(Fragment重叠)
- Fragment懒加载如何实现
- FragmentPagerAdapter与FragmentStatePagerAdapter的区别与使用场景
3、Service
- 谈一谈Service的生命周期?
- Service的两种启动方式?区别在哪?
- 如何保证Service不被杀死 ?
- 能否在Service开启耗时操作 ? 怎么做 ?
4、Broadcast Receiver
- 广播有几种形式 ? 都有什么特点 ?
- 广播的两种注册方式 ?
- 广播发送和接收的原理了解吗 ?(Binder机制、AMS)
5、View
- 描述一下View事件传递分发机制?
- onTouch、onTouchEvent、onClick的执行顺序
- 如何解决View的事件冲突 ? 举个开发中遇到的例子 ?
- 讲下View的绘制流程?
- 自定义View的过程,自定义View需要注意什么
- Android屏幕渲染机制
- invalidate()、postInvalidate()、requestLayout()分析的区别 ?
- SurfaceView和View的区别?
- 当一个TextView的实例调用setText()方法后执行了什么
- Android布局优化之ViewStub、include、merge的作用与原理
- LinearLayout,RelativeLayout布局流程、性能对比
- 动画的种类有哪些?如何使用,以及底层原理?
- 为什么属性动画移动后可以点击,而补间动画不行?
- ListView 和 RecyclerView的比较
6、Handler
- 谈谈消息机制Handler ? 作用 ?有哪些要素 ?流程是怎样的 ?
- 一个线程能否创建多个Handler,Handler跟Looper之间的对应关系 ?
- 为什么系统不建议在子线程访问UI
- Looper死循环为什么不会导致应用卡死
- 使用Handler的postDealy后消息队列会有什么变化 ?
- 可以在子线程直接new一个Handler吗 ?怎么做 ?
- Message可以如何创建 ? 哪种效果更好 ? 为什么 ?
7、IPC
- Android中进程和线程的关系? 区别?
- 如何开启多进程 ? 应用是否可以开启N个进程 ?
- 为何需要IPC?多进程通信可能会出现的问题?
- Android中IPC方式、各种方式优缺点,为什么选择Binder?
- Binder机制的作用和原理?
- Binder框架中ServiceManager的作用?
- Bundle传递对象为什么需要序列化?Serialzable和Parcelable的区别?
- 讲讲AIDL?原理是什么?如何优化多模块都使用AIDL的情况?
Bitmap
- Bitmap使用需要注意哪些问题 ?
- Bitmap.recycle()会立即回收么?什么时候会回收?如果没有地方使用这个Bitmap,为什么垃圾回收不会直接回收?
- 一张图片从SD卡加载到内存和从drawable加载大小有区别吗?内存占用是怎么计算的?
- Bitmap如何处理大图,如一张30M的大图,如何预防OOM?
https://www.jianshu.com/p/3f6f6e4f1c88
https://blog.csdn.net/android_destiny/article/details/51782508
https://www.jianshu.com/p/3f6f6e4f1c88
数据库
- 数据库索引
- 数据库升级
- 数据库建表、增删改查基本语句
适配
- 屏幕适配
https://blog.csdn.net/zgcqflqinhao/article/details/77766164
https://www.jianshu.com/p/a4b8e4c5d9b0
https://www.jianshu.com/p/4aa23d69d481
blankj
https://juejin.im/post/5c18039d5188253b7e74987e
https://github.com/Firedamp/Rudeness - 版本适配
https://blog.csdn.net/qq_23062979/article/details/81294550
https://blog.csdn.net/zzf112/article/details/53127515
性能优化
- 内存优化
- UI界面优化
- 启动优化
- 网络优化
- apk瘦身
- Bitmap优化
- ListView优化
- RecyclerView优化
开源框架
- Rxjava
Flowable和Observable区别
map和flatmap
线程切换如何实现 - AAC+Jetpack
observer和observerForever的区别
为什么用ViewModelProviders而不是new,ViewModel与MVP里Presenter的对比 - Retrofit
Retrofit动态代理细节实现,如何与Rxjava配合使用,动态代理能代理抽象类吗?Retrofit为什么会选择接口来定义请求方法。
*RxJava,Okhttp,Retrofit,Glide,LeakCanary,BlockCanary,ButterKnife,EventBus