大厂 Android 开发核心面试题汇总
本文汇总了美团、腾讯、字节、京东等互联网大厂 Android 岗位的核心面试题,涵盖 Java 基础、JVM 机制、Android 系统原理、网络通信、音视频及算法等领域。内容包含常见问题的标准解答思路,旨在帮助开发者梳理知识体系,提升面试通过率。
一、Java 基础与 JVM
1. Java 函数调用过程
Java 方法调用涉及栈帧的创建、参数传递、指令执行和返回。在 JVM 中,方法调用通过 invoke 系列指令实现(如 invokevirtual, invokespecial)。
2. Volatile 关键字的作用
Volatile 保证变量的可见性和禁止指令重排序。它不保证原子性。当一个线程修改了 volatile 变量,新值会立即刷新到主内存;其他线程读取时,会强制从主内存重新加载该变量。
3. JVM 垃圾回收机制
JVM 使用分代收集理论,将堆内存分为新生代(Eden, Survivor)和老年代。常用算法包括标记 - 清除、标记 - 复制、标记 - 整理。GC Root 包括虚拟机栈引用、静态属性引用、常量引用等。
4. 程序计数器与虚拟机栈
程序计数器记录当前线程执行的字节码行号,是唯一不会 OOM 的区域。虚拟机栈描述 Java 方法执行的内存模型,每个方法执行时会创建一个栈帧。
5. HashMap 与 ConcurrentHashMap
HashMap 非线程安全,基于数组 + 链表/红黑树实现。ConcurrentHashMap 在 JDK 1.7 中使用分段锁,JDK 1.8 后使用 CAS + synchronized 保证线程安全。
6. 类加载机制与双亲委派
类加载遵循双亲委派模型:先委托父类加载器尝试加载,若失败再由子类加载器加载。这保证了核心类库的安全性和唯一性。
二、Android 核心机制
1. Handler 机制
Handler 用于线程间通信。主线程默认有 Looper 和 MessageQueue。Handler 发送消息到队列,Looper 循环取出消息并分发给对应的 Handler 处理。ThreadLocal 用于存储每个线程独立的 Looper 实例。
2. View 绘制流程
ViewRootImpl 触发 performTraversal -> measure(测量) -> layout(布局) -> draw(绘制)。MeasureSpec 由父控件决定子控件的测量模式(精确、最大、未指定)和大小。
3. requestLayout 与 invalidate
requestLayout 触发整个视图树的重新测量和布局,开销较大。invalidate 仅触发重绘(draw),不改变布局结构,性能更优。
4. Activity 启动流程
ActivityManagerService (AMS) 协调启动。经过 startActivity -> AMS -> ActivityStackSupervisor -> 目标进程 -> ActivityThread -> attach -> onCreate。
5. Binder 通信机制
Binder 是 Android 特有的 IPC 机制,支持跨进程对象传递。Native 层通过 binder_driver 内核模块管理,用户态通过 ServiceManager 注册服务。
6. Fragment 特点
Fragment 是 Activity 的一部分,可复用性强,适合适配不同屏幕尺寸。生命周期受宿主 Activity 影响。
三、网络与安全
1. HTTP 与 HTTPS 区别
HTTPS 在 HTTP 基础上加入 SSL/TLS 加密层,保证数据传输安全。HTTPS 需要证书验证,握手过程涉及对称与非对称加密结合。
2. OkHttp 流程
OkHttp 采用拦截器链(Interceptor Chain)设计。请求经过 RealCall -> Dispatcher -> InterceptorChain -> Call -> Response。支持连接池、缓存、Gzip 压缩。


