一、Java
1、 设计模式
- 单例模式
- 熟悉五种单利模式
- 饿汉式和懒汉式的区别
- 能手写线程同步单例类
- 双重校验锁单例类
- 两次判空的目的
- volatile 关键字的用法
- 生产者和消费者模式:能手写出来
2、线程
- 线程的生命周期,sleep和wait的区别
- 多线程
- 多线程同步的方法
- synchronized在jvm里是如何实现的(锁升级和锁优化)
- Lock
- volatile:关键字的用法
- 多线程实现
- runnable
- thread
- 线程池
- AsyncTask
- 多线程同步的方法
3、网络
- TCP和UDP的区别
- TCP三次握手流程
- HTTPS实现原理
- HTTP 1.x 与HTTP 2.x的区别
- 安全性要求高的登陆密码加密如何实现
- 对称加密和非对称加密
4、Object类有哪些方法
5、Java垃圾回收机制
6、内存泄漏、内存溢出的区别
7、HashMap实现原理及JAVA7和JAVA8中的区别
- Java8 单个桶元素超过8转红黑树
- 头插和尾插
8、ConcurrentHashMap实现原理及JAVA7和JAVA8中的区别 传送门
9、HashMap、ArrayMap和SparseArray的区别
10、LRU算法实现
11、强引用、软引用、弱引用和虚引用的区别
12、运行时异常和编译时异常的区别
二、Android基础
1、context的继承结构,Application中的Context和Activity中的Context的区别
2、Application生命周期
3、 MVC、MVP和MVVM的区别
- MVVM框架:LiveData组件、jetpack、MVRx
4、apk打包流程、apk包目录结构
5、raw和assets的区别
6、IP直连
7、Android事件分发机制,cancel事件的作用
8、Android事件冲突
- NestedScrolling
- ViewGroup.requestDisallowInterceptTouchEvent()的实现原理
9、View的绘制流程
- UI刷新机制
10、自定义注解
11、Android布局优化
12、Android内存优化
13、Android和H5交互
- Android和H5通信的方式
- addJavascriptInterface安全漏洞实现原理:反射
14、Handler机制
- handler实现流程
- 消息队列没有消息是如何做到不阻塞线程
- epoll、select、poll的区别
- message.obtain()如何实现message复用
15、RecyclerView和ListView缓存实现
16、APP保活如何实现
17、Intent可以传递哪些类型的数据
三、Android 框架
1、插件化和热修复 传送门
2、 OKHttp
- 拦截器的实现
- 如何自定义加载进度条
- 如何实现DNS拦截
3、Fresco和Glide的区别
- 图片缓存机制
- 生命周期管理如何实现
4、RxJava
- 熟悉的操作符:just、from、map、flapmap等
- 如何实现线程切换
- 被观察者多次线程切换时,为什么只有第一次生效
- 背压实现原理
5、ButterKnife实现原理
6、LeakCanary实现原理
7、EventBus实现原理及优缺点
四、Android framewoke
1、Apk安装过程
2、android应用启动过程
3、 activity启动过程
4、Android跨进程通信
- android如何实现跨进程通信:AIDL
- bundle实现原理
- bundle和共享内存的区别