Android 开发岗位的面试准备是技术成长的重要环节。通过研读大厂面试题,可以了解主流技术趋势、核心关注点,并据此完善自身知识体系。以下整理了 Android 岗位面试中的高频考点,涵盖 Java 基础、Android 系统机制、高级特性、性能优化、开源库分析、算法及 Flutter 相关知识点。
第一章 Android 高频面试之必考 Java 基础
1. 面向对象和面向过程的区别
面向过程强调功能步骤的实现,以函数为中心;面向对象强调对象的交互,以类为中心。面向对象具有封装、继承、多态等特性,更利于代码维护和扩展。
2. 面向对象的特征
主要包括封装(隐藏内部实现)、继承(复用代码)、多态(同一接口不同实现)以及抽象(提取共性)。
3. Java 的编译与解释并存现象
Java 源代码先被编译器编译成字节码(.class 文件),再由 JVM 的解释器或 JIT 编译器将字节码转换为机器码执行。这保证了跨平台性。
4. JVM 内存模型
JVM 运行时数据区包括程序计数器、虚拟机栈、本地方法栈、堆和方法区。堆存储对象实例,栈存储局部变量和方法调用信息。
5. Java 的类加载器
主要包括启动类加载器、扩展类加载器、应用程序类加载器和自定义类加载器。它们负责加载 .class 文件到 JVM 中。
6. Java 垃圾回收及常用算法
GC 负责自动回收无用内存。常用算法包括标记 - 清除、复制算法、标记 - 整理和分代收集法。现代 JVM 通常结合多种算法使用。
7. 成员变量和局部变量的区别
成员变量属于类或对象,存储在堆或方法区,生命周期随对象存在;局部变量定义在方法内,存储在栈帧中,生命周期随方法调用结束。
8. 方法重写 (Overriding) 和方法重载 (Overload)
重写是子类覆盖父类方法,要求方法名、参数列表相同;重载是同一类中方法名相同但参数列表不同,用于提供多种调用方式。
9. 传递和引用传递
Java 中只有值传递。对于基本类型,传递的是值的副本;对于引用类型,传递的是引用的副本,即指向对象的地址副本。
10. 重写 equals 时必须重写 hashCode
根据 Java 规范,如果两个对象 equals 比较为真,它们的 hashCode 必须相同。否则会导致 HashMap 等集合无法正确查找对象。
11. 接口和抽象类的区别
接口侧重行为契约,支持多实现,成员默认为 public static final;抽象类侧重代码复用,支持单继承,可包含构造方法和非抽象方法。
12. HashMap 简述
HashMap 基于哈希表实现,允许 null 键和 null 值。JDK 1.8 后采用数组 + 链表 + 红黑树结构,解决哈希冲突,查询效率高。
13. ConcurrentHashMap
线程安全的哈希表。JDK 1.7 使用分段锁,JDK 1.8 使用 CAS + synchronized 锁住链表头节点,并发性能更高。
14. 乐观锁与悲观锁
悲观锁假设冲突概率高,操作时加锁;乐观锁假设冲突少,更新时检查版本号或状态,失败则重试。
15. Java 线程理解
线程是 CPU 调度的最小单位。Java 通过 Thread 类和 Runnable 接口创建线程,涉及线程状态转换、上下文切换等机制。
16. Synchronized、volatile、Lock 并发
Synchronized 是关键字,隐式锁;volatile 保证可见性和有序性,不保证原子性;Lock 是接口,需手动释放锁,功能更灵活。
17. 锁
包括互斥锁、读写锁、自旋锁等。用于控制多线程对共享资源的访问,防止数据竞争。
18. Java 反射理解
反射允许在运行时动态获取类信息和调用方法。常用于框架开发,但会降低性能并破坏封装性。


