互联网大厂 Java 与 Android 开发核心面试题整理
前言
随着互联网行业进入存量竞争阶段,技术面试的考察深度和广度显著提升。从基础原理到架构设计,再到性能优化,候选人需要构建完整的技术知识体系。本文整理了 Java 及 Android 开发方向在主流大厂面试中的高频考点,涵盖语言特性、框架原理、系统设计与性能优化等维度,旨在帮助开发者梳理复习思路。
一、学习路线与核心知识体系
在准备技术面试前,建议按照以下模块进行系统性复习:
- Java 核心原理:泛型、反射、JVM 内存模型、线程池机制、GC 算法。
- 并发编程:锁机制(synchronized, ReentrantLock)、CAS、AQS、线程状态管理。
- 集合框架:List、Set、Map、Queue 的实现原理及线程安全性。
- Android 基础:Activity 生命周期、任务栈、启动模式、View 绘制流程。
- 架构与设计:MVC/MVP/MVVM 对比、Jetpack 组件、IOC 思想。
- 性能优化:APP 启动速度、内存泄漏检测、布局优化、网络优化。
- 进阶技术:热修复、Hook 技术、NDK/C++ 交互、Flutter/Kotlin 特性。
- 算法与数据结构:排序、查找、链表、树、动态规划。
二、Java 基础与 JVM 面试题解析
1. 对象的创建过程
对象创建主要涉及类加载检查、分配内存、初始化零值、设置对象头、执行构造器初始化等步骤。具体流程包括:
- 检查常量池中是否存在类的符号引用。
- 将内存空间初始化为零值(除对象头外)。
- 设置对象头(Mark Word、Klass Pointer、Hash Code 等)。
- 执行实例化代码块和构造函数。
2. Java 内存模型 (JMM)
JMM 定义了多线程之间通过主内存和工作内存交互的规则。核心概念包括原子性、可见性、有序性。主要内存区域包括堆(存储对象实例)、方法区(存储类信息)、虚拟机栈(局部变量表)、本地方法栈、程序计数器。
3. 常用集合的区别
- List:ArrayList(数组实现,随机访问快),LinkedList(链表实现,插入删除快)。
- Set:HashSet(基于 HashMap,无序),TreeSet(红黑树,有序)。
- Map:HashMap(哈希表,非线程安全),Hashtable(同步,线程安全),ConcurrentHashMap(分段锁/ CAS+ synchronized,高并发)。
- Queue:PriorityQueue(优先级),ArrayBlockingQueue(有界队列)。
4. 死锁产生的条件
必须同时满足以下四个条件:
- 互斥条件:资源一次只能被一个进程占用。
- 请求与保持条件:进程持有资源的同时请求新资源。
- 不剥夺条件:已获得的资源不能被强制剥夺。
- 循环等待条件:存在进程资源的循环等待链。
5. 线程状态与锁机制
- 线程状态:NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED。
- 锁类型:偏向锁、轻量级锁、重量级锁。区别在于自旋次数和操作系统调用开销。
- 静态代理 vs 动态代理:静态代理需手动编写代理类;动态代理(JDK/CGLIB)运行时生成字节码,更灵活。


