2026 Android高级工程师 · 大厂面试题库(难度:⭐⭐⭐⭐⭐)
目录
以下题目综合了字节跳动、阿里、腾讯、美团等公司近半年的Android面试真题,按您的大纲分类整理。
一、Kotlin 部分
基础与面向对象
-
val和var的区别,val一定不可变吗?(答:不一定,val引用不可变,但对象内部可变) -
lateinit和lazy的区别及应用场景 -
data class的copy()方法是深拷贝还是浅拷贝? -
sealed class和enum的区别,什么时候用sealed? -
value class的用途和编译后表现
高阶函数与inline
-
高阶函数中inline的原理,为什么说它会“减少对象创建”?(回答关键点:lambda表达式会被编译成Function对象)
-
reified关键字解决了什么问题?为什么只有inline函数能用? -
crossinline的必要性是什么?(答:防止非局部返回导致逻辑混乱) -
能否用
inline修饰一个非常大的函数?有什么风险?(答:会导致字节码膨胀)
协程(重点!)
-
协程是轻量级线程吗?为什么轻量?(答:挂起不阻塞线程,基于状态机复用线程)
-
CoroutineScope和CoroutineContext的关系 -
Dispatchers.IO和Dispatchers.Default的线程池区别 -
Job的父子关系:父Job被取消时,子Job会怎样?子Job取消会影响父Job吗? -
async和launch的区别,Deferred的作用 -
Flow和LiveData的核心区别,为什么要用StateFlow替代LiveData? -
SharedFlow和StateFlow的区别,各自适用场景 -
协程取消时如何保证资源释放?(答:用
finally或use函数) -
协程的异常传播机制,
CoroutineExceptionHandler什么时候生效?
协程源码
-
suspend关键字编译后发生了什么?(答:变成带有Continuation参数的函数,生成状态机) -
协程的挂起和恢复是如何实现的?(答:基于
Continuation的resume,状态机管理挂起点)
二、Java/JVM 部分
-
JVM内存模型各区域存放什么数据?Method Area和Heap的区别?
-
new String("abc")创建了几个对象?(答:常量池一个,堆上至少一个,要看字符串是否已存在) -
对象头里存放了什么?(答:Mark Word存储锁信息、GC年龄、hashcode;Klass Pointer指向类元数据)
-
什么是逃逸分析?栈上分配和锁消除的原理
-
CMS和G1的GC过程区别?G1为什么更适合大堆?
-
类加载的双亲委派模型是什么?为什么要这样设计?
-
如何打破双亲委派?(答:自定义ClassLoader重写loadClass方法,如Tomcat和热修复框架)
-
String.intern()在不同JDK版本中行为有何不同? -
发生OOM时,如何通过MAT分析dump文件?
三、Android Framework 部分
-
Zygote进程启动后做了什么?(答:预加载类和资源,然后fork出SystemServer)
-
Activity启动过程,AMS和ATMS的职责划分
-
Binder的一次拷贝原理(答:内核空间做共享内存映射,用户态到内核态只需一次copy_from_user)
-
AIDL中
in、out、inout修饰符的作用 -
Handler的
sendMessage和post方法最终区别在哪? -
MessageQueue中的同步屏障是什么?什么场景会用到?(答:如UI绘制时优先处理VSYNC消息) -
IdleHandler的使用场景
-
JNI中全局引用和局部引用的区别,什么时候会内存泄漏?
-
如何定位Native Crash?
addr2line和ndk-stack如何使用? -
Android 17引入的
DeliQueue是什么?
四、四大组件与View体系
-
Activity的onSaveInstanceState和onRestoreInstanceState调用时机
-
启动模式
singleTask配合taskAffinity会发生什么? -
Fragment在Activity重建时如何保存状态?
-
事件分发:
dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent的调用顺序 -
滑动冲突的解决方案(外部拦截和内部拦截)
-
RecyclerView的缓存机制(四级缓存)
-
MeasureSpec的三种模式及含义
-
Choreographer如何驱动渲染?VSYNC信号的作用
-
SurfaceView和TextureView的区别
-
RenderThread的作用是什么?
五、Jetpack 部分
-
Lifecycle是如何感知组件生命周期的?(答:通过ReportFragment或注册监听)
-
ViewModel在横竖屏旋转时如何保持数据?它为什么不能持有Activity引用?
-
SavedStateHandle的作用和实现原理
-
LiveData的粘性事件问题及解决方案
-
Room为何能支持LiveData/Flow的观察?
-
Navigation的深层链接如何实现?
-
WorkManager如何处理系统休眠期的任务?
-
Hilt的组件生命周期与Android组件的对应关系
-
Compose中
remember和rememberSaveable的区别
六、Android网络与性能优化
-
TCP三次握手和四次挥手详细过程
-
HTTPS的SSL/TLS握手过程,证书验证机制
-
HTTP/2的头部压缩HPACK原理
-
OkHttp的Interceptor链执行顺序
-
WebSocket与普通Socket的区别
-
如何模拟弱网环境做测试?(答:QNET、Charles限速)
-
启动优化的具体手段(异步初始化、延迟加载、启动任务梳理)
-
ANR的触发条件及如何通过trace文件定位
-
Perfetto的使用场景和关键指标
-
内存泄漏的常见场景及LeakCanary工作原理
-
Bitmap内存优化策略(inSampleSize、inBitmap复用)
-
什么是Jank?如何通过Systrace检测掉帧?

七、架构设计与SDK开发
-
MVVM和MVI的核心区别是什么?各自优缺点
-
Repository模式如何统一本地和远程数据源?
-
DI(依赖注入)和控制反转的区别
-
组件化中如何实现模块间的通信?(答:ARouter、事件总线、接口暴露)
-
设计一个SDK,如何保证API易用性同时避免耦合?
-
单例模式的双重检查锁为什么需要volatile?
-
ConcurrentHashMap在JDK 1.7和1.8的实现变化
-
CopyOnWriteArrayList的适用场景及缺陷
-
常用的设计模式在Android中的具体应用举例
-
如何设计一个可靠的埋点SDK,保证数据不丢失?(答:内存缓存+本地存储+定时重试)
八、项目经验类(高频开放性题目)
-
讲一个你解决过的性能优化案例,从发现问题到验证方案的全过程
-
遇到过线上大面积Crash吗?怎么快速定位和修复的?
-
你们项目的灰度发布怎么做?AB实验如何设计?
-
如果让你重构一个10万行代码的老模块,你的步骤是什么?
-
你主导的某个技术方案,最终证明失败了,原因是什么?学到了什么?
-
你如何衡量一个优化措施的效果?(比如启动时间优化,用什么指标?)
-
你参与的项目中,最复杂的并发场景是什么?如何解决的?
-
如果你设计一个日志上传SDK,如何平衡完整性和流量消耗?
九、C++/NDK(SDK方向必问)
-
JNI中
GetStringUTFChars和GetStringChars的区别 -
JNI全局引用什么时候需要手动删除?
-
SO库加载流程(System.loadLibrary的底层实现)
-
ELF文件格式的基本结构
-
Native层内存泄漏如何检测?(答:用Malloc Debug、ASan或Breakpad)
-
信号(Signal)在Native Crash中的作用
-
为什么Rust在NDK开发中越来越受欢迎?
十、算法(手写代码常考)
以下提供几道高频题目,建议手写练习:
-
排序:手写快速排序、归并排序
-
链表:反转链表、判断链表是否有环、合并两个有序链表
-
二叉树:二叉树的前序/中序/后序遍历(递归+迭代)、二叉树的层序遍历、最大深度
-
DFS/BFS:岛屿数量、单词搜索
-
动态规划:爬楼梯、最长递增子序列、背包问题
-
双指针:三数之和、接雨水
-
LRU缓存(必考)
-
TopK:用堆实现
备考建议:根据2026年最新面试趋势,协程源码、性能优化实战、Binder机制、JNI/Native崩溃分析是高级岗的区分项。建议不仅会“用”,更要会“讲原理”和“排查问题”。项目经验部分要准备2-3个有深度的案例,最好能用量化数据(如启动时间从2.1s优化到1.2s)支撑。
祝面试顺利!
相关推荐
2026 Android高级工程师 · 中厂面试题库(难度:⭐⭐⭐⭐)文章浏览阅读1.8k次。本文全面覆盖了Android开发面试的关键知识点,包括Activity、Fragment、Service、BroadcastReceiver等组件的深入解析,以及视图工作机制、内存管理、性能优化等方面的技术要点。https://shuaici.blog.csdn.net/article/details/59504118Android 高级工程师面试参考答案:网络、存储与安全-CSDN博客文章浏览阅读854次,点赞18次,收藏16次。本文探讨了移动开发中网络、存储与安全三大核心模块的常见问题及解决方案。在网络方面,分析了HTTP/HTTPS区别、OkHttp价值及弱网优化策略;在存储方面,比较了SharedPreferences、MMKV和数据库的适用场景,并讨论了离线缓存设计;在安全方面,阐述了签名、混淆、加固的作用,以及WebView风险和安全系统工程的重要性。文章强调高级开发者应注重设计思路和风险控制,而非仅掌握技术概念。
https://shuaici.blog.csdn.net/article/details/160372417
更多推荐
所有评论(0)