互联网大厂 Android 面试题大全与核心知识点解析
前言
在技术面试中,基础知识的扎实程度往往决定了候选人的上限。本文整理了 Java、Android 系统原理、Flutter 框架及性能优化等高频考点,旨在帮助开发者梳理知识体系,提升面试通过率。
一、Java 基础与异常机制
1. Java 异常机制中,Exception 与 Error 的区别
在 Java 中存在一个 Throwable 可抛出类,它有两个重要的子类:Error 和 Exception。
- Error:表示程序中较严重的错误,通常是程序无法处理的。例如 JVM 运行错误(
VirtualMachineError),当 JVM 不再有继续执行操作所需的内存资源时,会出现OutOfMemoryError。这些错误发生时,JVM 一般会选择终止线程。它们是不可查的,不在程序的控制和处理能力之外,绝大多数是程序运行时不允许出现的状况。 - Exception:表示程序可以处理的异常。分为运行时异常(
RuntimeException)与非运行时异常。
运行时异常 (RuntimeException)
又称不受检查异常。Java 编译检查时不会提示,需要在运行时暴露出来。例如:
- 下标越界 (
ArrayIndexOutOfBoundsException) - 空指针异常 (
NullPointerException)
非运行时异常 (Checked Exception)
RuntimeException 之外的异常统称为非运行时异常,如 IOException、SQLException。这是检查异常,必须进行显式处理(throw 到上层或 try-catch),否则程序不能编译通过。
2. Java 集合框架与并发编程
- HashMap 原理:基于数组 + 链表 + 红黑树。JDK 1.8 后,当链表长度超过 8 且数组长度超过 64 时,链表转为红黑树,提高查询效率至 O(log n)。
- ConcurrentHashMap:JDK 1.7 使用分段锁,JDK 1.8 使用 CAS + synchronized 保证线程安全,性能更高。
- ThreadLocal:用于实现线程隔离,每个线程拥有独立的变量副本,常用于存储用户上下文或数据库连接。
二、Android 核心机制
3. Activity.runOnUiThread 的理解
该方法用于将任务绑定到主线程执行。源码逻辑如下:
- 判断当前线程是否为主线程,如果是则直接执行 Runnable。
- 如果不是,通过默认构造函数创建的 Handler(绑定主线程 Looper)将 Runnable post 到 MessageQueue 中等待处理。
public void runOnUiThread(Runnable action) {
if (Thread.currentThread() == mUiThread) {
action.run();
} else {
mHandler.post(action);
}
}


