1. 容器(HashMap、HashSet、LinkedList、ArrayList、数组等)
参考:
JAVA容器-自问自答学HashMap
什么是HashMap?
从源码角度认识ArrayList,LinkedList与HashMap
2. 内存模型
参考:
理解Java内存模型
你了解Java内存模型么(Java7、8、9内存模型的区别)
3. 垃圾回收算法(JVM)
参考:
浅谈对JVM的理解
对 Dalvik、ART 虚拟机有什么了解?对比?
简单说说ART和Dalvik区别
4. 垃圾回收机制和调用 System.gc()的区别?
参考:
Java虚拟机(JVM)你只要看这一篇就够了!
5. 类加载过程
参考:
浅谈 Java 的类加载过程
6. 反射
Java高级特性——反射
7. 多线程和线程池
参考:
Java 线程状态有哪些?
多线程中的各种锁,你了解几个?
Java并发编程
8. HTTP、HTTPS、TCP/UDP、Socket通信、三次握手四次挥手过程
参考:
HTTPS与HTTP区别
TCP和UDP的最完整的区别
TCP的三次握手与四次挥手理解
Socket通信原理
9. 设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
参考:
Android 23种设计模式
23种设计模式全解析
如何通俗理解设计模式及其思想?
10. 断点续传
参考:
很简单的Java断点续传实现原理
11. Java 四大引用
参考:
强引用、软引用、弱引用、虚引用的区别以及使用场景
12. Java 的泛型
参考:
Java泛型
13. final、finally、finalize 的区别
参考:
请说明一下final, finally, finalize的区别
14. 接口、抽象类的区别
参考:
Java中接口和抽象类的区别?
1. 自定义 View
参考:
Android自定义View全解
2. 事件拦截分发
参考回答:
事件分发本质:就是对MotionEvent事件分发的过程。即当一个MotionEvent产生了以后,系统需要将这个点击事件传递到一个具体的View上。
点击事件的传递顺序:Activity(Window) -> ViewGroup -> View
三个主要方法:
dispatchTouchEvent:进行事件的分发(传递)。返回值是 boolean 类型,受当前onTouchEvent和下级view的dispatchTouchEvent影响
onInterceptTouchEvent:对事件进行拦截。该方法只在ViewGroup中有,View(不包含 ViewGroup)是没有的。一旦拦截,则执行ViewGroup的onTouchEvent,在ViewGroup中处理事件,而不接着分发给View。且只调用一次,所以后面的事件都会交给ViewGroup处理。
onTouchEvent:进行事件处理。
3. 解决过的一些性能问题,在项目中的实际运用。
4. 性能优化工具
参考:
Android 性能优化
5. 性能优化 (讲讲你自己项目中做过的性能优化)
参考:
Android 性能优化
6. Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP)
7. 缓存自己如何实现(LRUCache 原理)
参考:
浅析LRUCache原理
8. 图形图像相关:OpenGL ES 管线流程、EGL 的认识、Shader 相关
参考:
OpenGL ES
9. SurfaceView、TextureView、GLSurfaceView 区别及使用场景
参考:
view、surfaceview、GLsurfaceview的区别和应用场景
10. 动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)
参考:
每日一问:谈谈属性动画和补间动画的原理及区别
android 动画
11. MVC、MVP、MVVM
参考:
12. Handler、ThreadLocal、AsyncTask、IntentService 原理及应用
参考:
多线程
13. Gradle(Groovy 语法、Gradle 插件开发基础)
参考:
Gradle从入门到实战 - Groovy基础
全面理解Gradle - 执行时序
全面理解Gradle - 定义Task
一篇文章带你了解Gradle插件的所有创建方式
14. 热修复、插件化
Android 热修复Nuwa的原理及Gradle插件源码解析
15. 组件化架构思路
参考:
16. 系统打包流程
17. Android 有哪些存储数据的方式。
参考:
Android中的5种数据存储方式
18. SharedPrefrence 源码和问题点;
19. sqlite 相关
sqlite 升级,增加字段的语句
数据库框架对比和源码分析
数据库优化及数据迁移问题
getWritableDatabase 和 getReadableDatabase 的区别
20. 如何判断一个 APP 在前台还是后台?
21. 混合开发
1. AMS 、PMS
2. Activity 启动流程,App 启动流程
3. Binder 机制(IPC、AIDL 的使用)
讲讲 Linux 上的 IPC 通信,Binder 有什么优势,Android 上有哪些多进程通信机制?
项目中遇见了什么多进程场景?
AIDL 是什么?解决了什么问题?
谈谈对进程共享和线程安全的认知?
4. 为什么使用 Parcelable,好处是什么?
5. Android 图像显示相关流程,Vsync 信号等
1. Glide :加载、缓存、LRU 算法
(如何自己设计一个大图加载框架)
(LRUCache 原理)
2. EventBus
3. LeakCanary
4. ARouter
重点:Router 原理,如何实现组件间的通信,组件化平级调用数据的方式。
5. 插件化(不同插件化机制原理与流派,优缺点。局限性)
6. 热修复
7. RXJava
(RxJava 的线程切换原理)
8. Retrofit
(Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的)
9. OkHttp
1. 单链表:反转、插入、删除
2. 双链表:插入、删除
3. 手写常见排序、归并排序、堆排序
4. 二叉树前序、中序、后序遍历
5. 最大 K 问题
6. 广度、深度优先搜索算法
7. String 转 int。
核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;
8. 如何判断一个单链表有环?
9. 链表翻转;
10. 快排;
11. 100 亿个单词,找出出现频率最高的单词。要求几种方案;
12. 链表每 k 位逆序;
13. 镜像二叉树;
14. 找出一个无序数组中出现超过一半次数的数字;
15. 计算二叉树的最大深度,要求非递归算法。
16. String 方式计算加法。
1. 项目开发中遇到的最大的一个难题和挑战,你是如何解决的。(95% 会问到)
2. 说说你开发最大的优势点(95% 会问到)
3. 你为什么会离开上家公司
4. 你的缺点是什么?
5. 你能给公司带来什么效益?
6. 你对未来的职业规划?