Android 技术面试指南
本文整理了 Android 开发岗位常见面试题,涵盖 Java 基础、集合、多线程、JVM、Android 组件、UI 绘制、性能优化、IPC、系统架构及 Kotlin 等核心领域。旨在帮助开发者系统复习,查漏补缺,提升面试通过率。
第一章 Java 方面
(一)Java 基础部分
1. 抽象类与接口的区别?
- 抽象类可以有构造方法、成员变量(非 public static final)、普通方法;接口只能有常量(public static final)和抽象方法(Java 8 后可有 default/static 方法)。
- 一个类可以实现多个接口,但只能继承一个抽象类。
- 抽象类是对类的抽象,体现"is-a"关系;接口是对行为的抽象,体现"can-do"关系。
2. final, static, synchronized 关键字的作用?
final:修饰类不可继承,修饰方法不可重写,修饰变量不可变(基本类型值不变,引用类型地址不变)。static:属于类而非实例,内存中只有一份,可通过类名直接访问。synchronized:用于线程同步,保证共享资源在并发访问时的原子性。
3. String、StringBuffer 和 StringBuilder 的区别?
String:不可变字符序列,每次修改都会生成新对象。StringBuffer:可变字符序列,线程安全,方法加锁,效率较低。StringBuilder:可变字符序列,线程不安全,效率高,推荐单线程使用。
4. equals() 与 ==、hashCode() 的区别?
==:比较基本类型的值或对象的引用地址。equals():默认比较地址,Object 子类通常重写为比较内容。hashCode():返回哈希码,用于哈希表存储。若重写 equals() 必须重写 hashCode(),保证相等对象哈希码相同。
5. 深拷贝与浅拷贝的区别?
- 浅拷贝:复制对象本身,内部引用类型指向原对象地址。
- 深拷贝:复制对象及其引用的所有对象,完全独立。
6. Error 和 Exception 的区别?
Error:严重错误,如 OutOfMemoryError,程序无法处理,通常不捕获。Exception:程序可处理的异常,分为受检异常(Checked)和非受检异常(Runtime)。
7. 反射机制及应用场景?
- 运行时动态获取类信息并操作对象。应用场景:框架设计(如 Spring)、动态代理、序列化、插件化开发。
8. 重写 equals() 为什么要重写 hashCode()?
- 保证在 HashMap/HashSet 中,相等的对象具有相同的哈希桶位置,否则可能导致查找失败。
9. IO 流分类及 BIO/NIO/AIO 区别?
- 按流向分输入/输出流;按功能分节点流/处理流。
BIO:阻塞 IO,一个连接一个线程。NIO:非阻塞 IO,基于 Channel 和 Buffer,支持多路复用。AIO:异步非阻塞 IO,基于事件和回调机制。
10. 泛型类型擦除及局限性?
- 编译后泛型信息被擦除,替换为原始类型。局限性:无法判断泛型具体类型,不能创建泛型数组。


