大厂 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 压缩。
3. TCP 复用
OkHttp 通过 Keep-Alive 保持长连接,利用 ConnectionPool 复用 Socket 连接,减少握手开销。
4. 对称加密算法
常见的有 AES、DES、3DES。AES 是目前主流标准,支持 128/192/256 位密钥。
四、音视频与高级主题
1. 视频编码原理
通过去除空间冗余(帧内预测)和时间冗余(运动补偿)来压缩数据。H.264/H.265 是常见标准。
2. 直播秒开优化
预加载策略、降低首屏分辨率、使用 HLS/DASH 协议、CDN 加速、服务端转码优化。
3. 图像滤波与特征
滤波方法包括高斯滤波、中值滤波等。图像特征提取常用 SIFT、SURF、ORB 等算法。
4. RTP 包组装
RTP 包包含序列号和时间戳。接收端根据序列号进行排序重组,处理乱序和丢包。
五、算法题精选
1. 链表是否有环
使用快慢指针法。快指针每次走两步,慢指针每次走一步。若相遇则有环。
2. 二叉树层序遍历
使用队列 BFS。根节点入队,循环出队并将左右子节点入队。
3. 删除升序链表重复元素
遍历链表,若当前节点值等于下一节点值,则跳过下一节点,直到不相等为止。
4. 二分查找
适用于有序数组。维护左右边界,计算中间值比较,调整边界直至找到目标或边界交叉。
5. 最长回文子串
动态规划或中心扩展法。中心扩展法时间复杂度 O(N^2),空间 O(1)。
六、系统框架与底层
1. Android 系统分层
应用层、Framework 层、HAL 层、Linux Kernel 层。分层设计便于维护和扩展。
2. Linux 启动流程
Bootloader -> Kernel -> Init -> SystemServer -> Zygote -> App Process。
3. Native 层兴趣点
涉及 C/C++ 开发,包括 JNI 调用、NDK 构建、性能优化等。
4. 进程间通信 (IPC)
除 Binder 外,还有 AIDL、Messenger、ContentProvider、Socket 等。
5. 事件分发机制
Touch 事件从 Window -> DecorView -> ViewGroup -> View。onTouchEvent 和 dispatchTouchEvent 配合处理。
6. RecyclerView 缓存机制
RecycledViewPool 复用旧 View。第一级缓存为 mScrapViews,第二级为 mAttachedScrap,第三级为 mCachedViews。
七、综合技术
1. 数据库事务
ACID 特性。保证操作要么全部成功,要么全部失败。可通过锁或 MVCC 实现隔离。
2. 多核处理器运行多进程
操作系统通过时间片轮转调度,快速切换上下文,实现并发假象。
3. 智能指针
C++ 中的 shared_ptr, unique_ptr 等,自动管理内存生命周期,防止泄漏。
4. 虚函数与多态
虚函数表(vtable)存储在代码段。运行时通过 vptr 指向 vtable 实现动态绑定。
注:以上答案基于通用技术原理整理,实际面试中需结合项目经验灵活作答。


