前言
本文整理了 Android 开发岗位在春季招聘中的面试经验,涵盖字节跳动、腾讯、阿里、美团、京东、网易等知名互联网企业。内容基于实际面试记录整理,重点梳理了 Java 基础、Android 系统原理、并发编程及算法考察点,并补充了相关技术知识解析,旨在帮助求职者全面复习核心知识点。
字节跳动—技术中台
一面(60 分钟)
-
协程
- 问题:Kotlin 协程的基本概念及使用场景。
- 知识点解析:协程是一种轻量级的线程,由语言运行时调度。在 Android 开发中,Kotlin 协程常用于替代 RxJava 或异步回调,实现非阻塞的并发编程。核心概念包括挂起函数 (suspend function)、协程作用域 (CoroutineScope) 以及 Dispatchers。相比传统线程,协程切换开销极小,适合高并发场景。
-
OkHttp 连接复用
- 问题:一个域名可以有几个连接?如何复用?
- 知识点解析:OkHttp 默认使用连接池 (ConnectionPool)。对于 HTTP/1.1,通常每个域名保持 5 个空闲连接;HTTP/2 则支持多路复用。连接复用通过 Keep-Alive 机制实现,减少 TCP 握手和 SSL 协商的开销,提升网络请求效率。
-
C 语言 malloc 内存分配
- 问题:malloc() 内存分配是立即分配吗?
- 知识点解析:malloc 并不总是立即向操作系统申请物理内存。它通常从堆区 (Heap) 的内存块中分配虚拟地址空间。只有当访问该内存时,若发生缺页中断,才会触发操作系统的物理内存映射。这涉及虚拟内存管理和延迟分配策略。
-
Synchronized 底层实现
- 问题:加锁粒度及具体实现。
- 知识点解析:JDK 1.6 后引入了偏向锁、轻量级锁和重量级锁三种状态。偏向锁针对无竞争场景,轻量级锁针对自旋竞争,重量级锁依赖 OS Mutex。底层通过对象头 Mark Word 和 Monitor 对象实现,保证原子性和可见性。
-
Java 抽象类与接口区别
- 知识点解析:抽象类可以有构造方法、成员变量和方法实现,表示'是一个'的关系;接口只能有常量、抽象方法和默认方法(Java 8+),表示'能做什么'的关系。一个类可以实现多个接口,但只能继承一个抽象类。
-
Java 接口静态方法与默认方法
- 知识点解析:默认方法 (default method) 允许接口提供方法实现,解决接口扩展时的兼容性问题。静态方法 (static method) 属于接口本身,不能被子类重写,主要用于工具方法的封装。
-
操作系统内存映射
- 知识点解析:内存映射 (mmap) 允许文件内容与进程虚拟地址空间直接关联,避免用户态与内核态之间的数据拷贝。在 Android 中,Native 层常用 mmap 加载共享库或处理大文件 IO。
-
ART 空间占用优化
- 知识点解析:ART 虚拟机相比 Dalvik 采用 AOT 编译。优化手段包括压缩 OAT 文件、使用 Compact Heap、减少代码膨胀等。可通过
-Xms和-Xmx调整堆大小,配合 GC 策略降低内存峰值。
- 知识点解析:ART 虚拟机相比 Dalvik 采用 AOT 编译。优化手段包括压缩 OAT 文件、使用 Compact Heap、减少代码膨胀等。可通过
-
栈顶复用与 Activity 生命周期
- 知识点解析:当新 Activity 启动覆盖旧 Activity 时,旧 Activity 进入 -> 状态,其栈帧保留在任务栈中。若配置为单例模式或清除任务,则可能销毁栈帧。需关注上下文泄漏风险。


