Android 开发核心面试题汇总
本文整理了 Android 开发岗位常见的面试知识点,涵盖 Java 基础、集合框架、多线程、虚拟机原理、Android 四大组件、Handler 机制、性能优化、Kotlin 特性、Flutter 架构以及算法与 Framework 底层等内容。旨在帮助开发者系统复习,提升技术深度。
一、Java 基础与核心机制
1. 抽象类与接口的区别
抽象类和接口都是用于实现代码复用和约束的机制,主要区别如下:
- 方法实现:抽象类可以提供成员方法的实现细节(非抽象方法),而接口在 Java 8 之前只能存在 public 抽象方法(Java 8+ 支持 default 和 static 方法)。
- 成员变量:抽象类中的成员变量可以是各种类型;接口中的成员变量只能是 public static final 类型的常量。
- 构造器:接口中不能含有构造器、静态代码块;抽象类可以有构造器和静态代码块。
- 继承关系:一个类只能继承一个抽象类,但可以实现多个接口。
- 访问速度:抽象类的访问速度通常比接口快,因为接口需要动态查找具体实现的方法(早期 JVM 优化差异)。
- 扩展性:向抽象类添加新方法时可提供默认实现,不影响现有子类;向接口添加方法则可能破坏所有实现类(除非使用 default 方法)。
- 设计意图:接口更多用于约束行为和解耦;抽象类侧重于代码复用和'是一个'的关系。
2. List、Set、Map 的区别
- List:有序集合,元素允许重复。常用实现有 ArrayList(基于数组,查询快插入慢)、LinkedList(基于链表,插入删除快)。
- Set:无序集合(HashSet),元素不允许重复。基于 HashMap 实现,利用 key 的唯一性保证元素唯一。
- Map:键值对存储,key 不允许重复,value 允许重复。HashMap 是常用的实现,基于哈希表,平均时间复杂度 O(1)。
3. 线程状态详解
Java 线程生命周期包含以下五种状态:
- 新建 (New):创建线程对象但未调用 start 方法。
- 就绪 (Runnable):调用了 start 方法,等待 CPU 调度。
- 运行 (Running):获得 CPU 时间片,执行 run() 方法。
- 阻塞 (Blocked):等待获取监视器锁或 I/O 操作暂停。
- 死亡 (Terminated):run() 方法结束或被 stop() 终止。
4. HTTP 与 HTTPS 的区别
- 安全性:HTTP 明文传输,不安全;HTTPS 基于 SSL/TLS 加密传输,保障数据隐私。
- 证书:HTTPS 需要 CA 机构颁发证书,部分免费证书可用,但商业证书需费用。
- 端口:HTTP 默认 80 端口,HTTPS 默认 443 端口。
- 连接方式:HTTP 无状态,连接简单;HTTPS 握手过程复杂,涉及密钥交换。
- Android 限制:Android 9.0+ 默认禁止 Cleartext Traffic,若需使用 HTTP 需在 Manifest 中设置
android:usesCleartextTraffic="true"。
二、Android 核心机制
1. Handler 消息机制原理
Handler 机制是 Android 跨线程通信的核心,主要由 Handler、MessageQueue、Looper 组成。


