金九银十 Android 面试高频真题集
前言
随着移动互联网技术的快速发展,Android 开发岗位的需求依然旺盛,但竞争也日益激烈。在'金九银十'的招聘旺季,面试官不仅关注候选人的编码能力,更看重对底层原理的理解、系统架构的掌握以及解决复杂问题的思路。本文整理了一份涵盖 Java 基础、Android 核心组件、Framework 源码、算法数据结构、Kotlin 特性及音视频处理的全方位面试题集,旨在帮助开发者梳理知识体系,查漏补缺。
本资料共分为多个核心模块,每个模块均包含高频考点及关键知识点解析,建议结合官方文档与源码进行深入研读。
一、Java 基础篇
Java 是 Android 开发的基石,深入理解 Java 语言特性对于编写高性能代码至关重要。
1. Java 基础核心
- 抽象类与接口的区别:接口侧重行为规范,支持多实现;抽象类侧重代码复用,有状态字段。
- 关键字辨析:
final修饰类不可继承、方法不可重写、变量不可变;static表示静态成员,属于类而非实例;synchronized用于线程同步,保证原子性。 - String 类型:String 设计为不可变对象,保证了安全性(如哈希缓存)和线程安全。String、StringBuffer 和 StringBuilder 的区别在于可变性与线程安全。
- equals 与 hashCode:重写 equals 必须重写 hashCode,否则影响 HashMap 等集合的查找效率。
- 深浅拷贝:浅拷贝只复制引用,深拷贝复制对象本身。需手动实现或借助序列化/克隆。
- Error 与 Exception:Error 是 JVM 无法恢复的错误(如 OOM),Exception 是程序可处理的异常。
- 反射机制:运行时动态获取类信息并操作对象,常用于框架开发(如依赖注入)。注意性能开销。
- 泛型与注解:泛型通过类型擦除实现,存在局限性;注解用于元数据标记,配合反射使用。
2. Java 集合框架
- List, Set, Map 区别:List 有序可重复;Set 无序不重复;Map 键值对存储。
- ArrayList vs LinkedList:ArrayList 基于数组,随机访问快;LinkedList 基于链表,插入删除快。
- HashMap 原理:数组 + 链表 + 红黑树。JDK 1.8 后冲突链表长度超过 8 转为红黑树,提升查询效率至 O(logN)。
- 扩容机制:默认容量 16,负载因子 0.75,达到阈值触发扩容,容量翻倍。
- ConcurrentHashMap:JDK 1.7 分段锁,JDK 1.8 CAS+synchronized,保证高并发下的线程安全。
3. Java 多线程与并发
- 线程创建:继承 Thread、实现 Runnable、Callable 配合 FutureTask、线程池。
- 线程状态:NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED。
- 同步与锁:synchronized 内置锁,ReentrantLock 显式锁。volatile 保证可见性与禁止指令重排,但不保证原子性。
- 死锁避免:破坏循环等待条件,按顺序加锁,设置超时时间。
- 线程池:ThreadPoolExecutor 核心参数包括 corePoolSize, maximumPoolSize, keepAliveTime 等。避免使用 Executors 直接创建,防止 OOM。
- ThreadLocal:线程隔离变量,需注意内存泄漏问题,调用 remove() 清理。
- notify vs notifyAll:notify 唤醒一个等待线程,notifyAll 唤醒所有,后者更安全。


