前言
在技术面试中,基础知识的扎实程度往往决定了能否通过初筛。本文整理了阿里、腾讯、字节、华为、百度等互联网大厂 Android 开发岗位的高频面试题,涵盖 Java 基础、并发编程、JVM、Android 体系架构、View 系统、Framework 及性能优化等核心领域。旨在帮助开发者系统复习技术栈,查漏补缺,提升面试通过率。
一、Java 基础相关
1.1 数据结构与算法
常用数据结构: 主要包括数组、链表、栈、队列、哈希表、树(二叉树、红黑树)、图等。面试中常考察其底层实现及适用场景。
数组操作:
- 查找丢失数字: 利用异或运算或求和公式,时间复杂度 O(n)。
- 查找重复数字: 快慢指针法(类似环形链表检测)或排序后遍历。
- 最大值最小值: 一次遍历比较,减少比较次数。
- 大数相加: 模拟竖式加法,处理进位,注意字符串转整数边界。
链表:
- 单链表反转: 迭代法需维护三个指针(prev, curr, next),递归法需注意栈溢出风险。
- 判断环: 快慢指针,若相遇则存在环,再从头开始同步移动可找到入环点。
- 合并两个有序链表: 递归或迭代,比较节点值选择较小者。
树与图:
- 二叉树遍历: 前序(根左右)、中序(左根右)、后序(左右根)。递归实现简单,迭代需用栈。
- 平衡二叉树: 任意节点左右子树高度差不超过 1。红黑树是近似平衡的二叉搜索树,保证最坏情况下的查找效率。
- B 树/B+ 树: 数据库索引常用结构,B+ 树非叶子节点不存数据,适合范围查询。
排序算法:
- 快速排序: 平均 O(nlogn),不稳定,原地排序。
- 堆排序: 利用堆结构,O(nlogn),不稳定。
- 归并排序: 稳定,需要额外空间。
- Top-K 问题: 通常使用小顶堆或快速选择算法(QuickSelect)解决。
1.2 Java 基础
内存模型与 GC:
- JVM 内存区域: 程序计数器、虚拟机栈、本地方法栈、堆、方法区。对象主要分配在堆上。
- GC 回收机制: 分代收集理论(新生代/老年代)。新生代用复制算法,老年代用标记 - 清除或标记 - 整理。
- 对象晋升: 对象年龄增长、大对象直接进入老年代、动态年龄判定。
- 引用类型: 强引用、软引用、弱引用、虚引用。用于控制对象生命周期,避免内存泄漏。
String 与集合:
- String 不可变: 设计为 final,利于缓存池、线程安全及 Hash 计算。
- HashMap 原理: JDK1.8 前为数组 + 链表,JDK1.8 后引入红黑树。扩容时重新 Hash,负载因子默认 0.75。
- ConcurrentHashMap: JDK1.7 分段锁,JDK1.8 CAS+synchronized,保证高并发下读写效率。
并发编程:
- synchronized: 关键字,JDK1.6 后优化为偏向锁、轻量级锁、重量级锁。保证原子性、可见性、有序性。
- 保证可见性,禁止指令重排,但不保证原子性。常用于状态标志位。


