2020 Android 中高级面试必知必会

Java 相关

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中接口和抽象类的区别?

Android 相关

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
参考:

  • MVC、MVP、MVVM,我到底该怎么选?
  • 分享一个我开发的MVVM架构的开源小项目
  • 我对移动端架构的思考

12. Handler、ThreadLocal、AsyncTask、IntentService 原理及应用
参考:
多线程

13. Gradle(Groovy 语法、Gradle 插件开发基础)
参考:
Gradle从入门到实战 - Groovy基础
全面理解Gradle - 执行时序
全面理解Gradle - 定义Task
一篇文章带你了解Gradle插件的所有创建方式
14. 热修复、插件化
Android 热修复Nuwa的原理及Gradle插件源码解析

  • Android 热修复 Tinker接入及源码浅析

15. 组件化架构思路
参考:

  • Android 组件化最佳实践
  • Android组件化开发实践和案例分享
  • 滴滴插件化方案 VirtualApk 源码解析
  • 深入理解插件化框架

16. 系统打包流程

17. Android 有哪些存储数据的方式。
参考:
Android中的5种数据存储方式
18. SharedPrefrence 源码和问题点;

19. sqlite 相关

  • sqlite 升级,增加字段的语句

  • 数据库框架对比和源码分析

  • 数据库优化及数据迁移问题

  • getWritableDatabase 和 getReadableDatabase 的区别

20. 如何判断一个 APP 在前台还是后台?

21. 混合开发

  • Hybrid 做过吗? 例:Android 通过WebView调用 JS 代码 例:JS - 通过WebView调用 Android 代码;
  • Hybrid 通信原理是什么,有做研究吗?
  • 说说你用过的混合开发技术有哪些?各有什么优缺点?

Android Framework

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

  • OkHttp 源码,网络缓存
  • 如果从网络加载一个 10M 的图片,说下注意事项

算法与数据结构

1. 单链表:反转、插入、删除

2. 双链表:插入、删除

3. 手写常见排序、归并排序、堆排序

4. 二叉树前序、中序、后序遍历

5. 最大 K 问题

6. 广度、深度优先搜索算法

7. String 转 int。

核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;

8. 如何判断一个单链表有环?

9. 链表翻转;

10. 快排;

11. 100 亿个单词,找出出现频率最高的单词。要求几种方案;

12. 链表每 k 位逆序

13. 镜像二叉树;

14. 找出一个无序数组中出现超过一半次数的数字;

15. 计算二叉树的最大深度,要求非递归算法。

16. String 方式计算加法。

项目&HR

1. 项目开发中遇到的最大的一个难题和挑战,你是如何解决的。(95% 会问到)

2. 说说你开发最大的优势点(95% 会问到)

3. 你为什么会离开上家公司

4. 你的缺点是什么?

5. 你能给公司带来什么效益?

6. 你对未来的职业规划?

你可能感兴趣的:(面试相关)