目录

一、Kotlin 部分

基础与面向对象

高阶函数与inline

协程(重点!)

协程源码

二、Java/JVM 部分

三、Android Framework 部分

四、四大组件与View体系

五、Jetpack 部分

六、Android网络与性能优化

七、架构设计与SDK开发

八、项目经验类(高频开放性题目)

九、C++/NDK(SDK方向必问)

十、算法(手写代码常考)

相关推荐


以下题目综合了字节跳动、阿里、腾讯、美团等公司近半年的Android面试真题,按您的大纲分类整理。

一、Kotlin 部分

基础与面向对象

  1. valvar 的区别,val一定不可变吗?(答:不一定,val 引用不可变,但对象内部可变)

  2. lateinitlazy 的区别及应用场景

  3. data classcopy()方法是深拷贝还是浅拷贝?

  4. sealed classenum 的区别,什么时候用sealed?

  5. value class 的用途和编译后表现

高阶函数与inline

  1. 高阶函数中inline的原理,为什么说它会“减少对象创建”?(回答关键点:lambda表达式会被编译成Function对象)

  2. reified 关键字解决了什么问题?为什么只有inline函数能用?

  3. crossinline 的必要性是什么?(答:防止非局部返回导致逻辑混乱)

  4. 能否用inline修饰一个非常大的函数?有什么风险?(答:会导致字节码膨胀)

协程(重点!)

  1. 协程是轻量级线程吗?为什么轻量?(答:挂起不阻塞线程,基于状态机复用线程)

  2. CoroutineScopeCoroutineContext 的关系

  3. Dispatchers.IODispatchers.Default 的线程池区别

  4. Job 的父子关系:父Job被取消时,子Job会怎样?子Job取消会影响父Job吗?

  5. asynclaunch 的区别,Deferred 的作用

  6. FlowLiveData 的核心区别,为什么要用StateFlow替代LiveData

  7. SharedFlowStateFlow 的区别,各自适用场景

  8. 协程取消时如何保证资源释放?(答:用finallyuse函数)

  9. 协程的异常传播机制,CoroutineExceptionHandler什么时候生效?

协程源码

  1. suspend 关键字编译后发生了什么?(答:变成带有Continuation参数的函数,生成状态机)

  2. 协程的挂起和恢复是如何实现的?(答:基于Continuationresume,状态机管理挂起点)

二、Java/JVM 部分

  1. JVM内存模型各区域存放什么数据?Method Area和Heap的区别?

  2. new String("abc") 创建了几个对象?(答:常量池一个,堆上至少一个,要看字符串是否已存在)

  3. 对象头里存放了什么?(答:Mark Word存储锁信息、GC年龄、hashcode;Klass Pointer指向类元数据)

  4. 什么是逃逸分析?栈上分配和锁消除的原理

  5. CMS和G1的GC过程区别?G1为什么更适合大堆?

  6. 类加载的双亲委派模型是什么?为什么要这样设计?

  7. 如何打破双亲委派?(答:自定义ClassLoader重写loadClass方法,如Tomcat和热修复框架)

  8. String.intern() 在不同JDK版本中行为有何不同?

  9. 发生OOM时,如何通过MAT分析dump文件?

三、Android Framework 部分

  1. Zygote进程启动后做了什么?(答:预加载类和资源,然后fork出SystemServer)

  2. Activity启动过程,AMS和ATMS的职责划分

  3. Binder的一次拷贝原理(答:内核空间做共享内存映射,用户态到内核态只需一次copy_from_user)

  4. AIDL中inoutinout修饰符的作用

  5. Handler的sendMessagepost方法最终区别在哪?

  6. MessageQueue中的同步屏障是什么?什么场景会用到?(答:如UI绘制时优先处理VSYNC消息)

  7. IdleHandler的使用场景

  8. JNI中全局引用和局部引用的区别,什么时候会内存泄漏?

  9. 如何定位Native Crash?addr2linendk-stack如何使用?

  10. Android 17引入的DeliQueue是什么?

四、四大组件与View体系

  1. Activity的onSaveInstanceState和onRestoreInstanceState调用时机

  2. 启动模式singleTask配合taskAffinity会发生什么?

  3. Fragment在Activity重建时如何保存状态?

  4. 事件分发:dispatchTouchEventonInterceptTouchEventonTouchEvent的调用顺序

  5. 滑动冲突的解决方案(外部拦截和内部拦截)

  6. RecyclerView的缓存机制(四级缓存)

  7. MeasureSpec的三种模式及含义

  8. Choreographer如何驱动渲染?VSYNC信号的作用

  9. SurfaceView和TextureView的区别

  10. RenderThread的作用是什么?

五、Jetpack 部分

  1. Lifecycle是如何感知组件生命周期的?(答:通过ReportFragment或注册监听)

  2. ViewModel在横竖屏旋转时如何保持数据?它为什么不能持有Activity引用?

  3. SavedStateHandle的作用和实现原理

  4. LiveData的粘性事件问题及解决方案

  5. Room为何能支持LiveData/Flow的观察?

  6. Navigation的深层链接如何实现?

  7. WorkManager如何处理系统休眠期的任务?

  8. Hilt的组件生命周期与Android组件的对应关系

  9. Compose中rememberrememberSaveable的区别

六、Android网络与性能优化

  1. TCP三次握手和四次挥手详细过程

  2. HTTPS的SSL/TLS握手过程,证书验证机制

  3. HTTP/2的头部压缩HPACK原理

  4. OkHttp的Interceptor链执行顺序

  5. WebSocket与普通Socket的区别

  6. 如何模拟弱网环境做测试?(答:QNET、Charles限速)

  7. 启动优化的具体手段(异步初始化、延迟加载、启动任务梳理)

  8. ANR的触发条件及如何通过trace文件定位

  9. Perfetto的使用场景和关键指标

  10. 内存泄漏的常见场景及LeakCanary工作原理

  11. Bitmap内存优化策略(inSampleSize、inBitmap复用)

  12. 什么是Jank?如何通过Systrace检测掉帧?

七、架构设计与SDK开发

  1. MVVM和MVI的核心区别是什么?各自优缺点

  2. Repository模式如何统一本地和远程数据源?

  3. DI(依赖注入)和控制反转的区别

  4. 组件化中如何实现模块间的通信?(答:ARouter、事件总线、接口暴露)

  5. 设计一个SDK,如何保证API易用性同时避免耦合?

  6. 单例模式的双重检查锁为什么需要volatile?

  7. ConcurrentHashMap在JDK 1.7和1.8的实现变化

  8. CopyOnWriteArrayList的适用场景及缺陷

  9. 常用的设计模式在Android中的具体应用举例

  10. 如何设计一个可靠的埋点SDK,保证数据不丢失?(答:内存缓存+本地存储+定时重试)

八、项目经验类(高频开放性题目)

  1. 讲一个你解决过的性能优化案例,从发现问题到验证方案的全过程

  2. 遇到过线上大面积Crash吗?怎么快速定位和修复的?

  3. 你们项目的灰度发布怎么做?AB实验如何设计?

  4. 如果让你重构一个10万行代码的老模块,你的步骤是什么?

  5. 你主导的某个技术方案,最终证明失败了,原因是什么?学到了什么?

  6. 你如何衡量一个优化措施的效果?(比如启动时间优化,用什么指标?)

  7. 你参与的项目中,最复杂的并发场景是什么?如何解决的?

  8. 如果你设计一个日志上传SDK,如何平衡完整性和流量消耗?

九、C++/NDK(SDK方向必问)

  1. JNI中GetStringUTFCharsGetStringChars的区别

  2. JNI全局引用什么时候需要手动删除?

  3. SO库加载流程(System.loadLibrary的底层实现)

  4. ELF文件格式的基本结构

  5. Native层内存泄漏如何检测?(答:用Malloc Debug、ASan或Breakpad)

  6. 信号(Signal)在Native Crash中的作用

  7. 为什么Rust在NDK开发中越来越受欢迎?

十、算法(手写代码常考)

以下提供几道高频题目,建议手写练习:

  1. 排序:手写快速排序、归并排序

  2. 链表:反转链表、判断链表是否有环、合并两个有序链表

  3. 二叉树:二叉树的前序/中序/后序遍历(递归+迭代)、二叉树的层序遍历、最大深度

  4. DFS/BFS:岛屿数量、单词搜索

  5. 动态规划:爬楼梯、最长递增子序列、背包问题

  6. 双指针:三数之和、接雨水

  7. LRU缓存(必考)

  8. 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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐