目录
一、Kotlin 部分
基础与面向对象
高阶函数与inline
协程(重点!中厂必问)
二、Java/JVM 部分
基础
JVM与内存
ClassLoader
三、Android Framework(中厂高频区)
Handler & 消息机制
Binder & IPC
Activity & Application 启动
JNI & NDK(SDK方向重点)
四、四大组件与 View 体系
Activity & Fragment
Service & Broadcast
View & 事件分发
绘制优化
五、Jetpack 部分(中厂使用率极高)
六、网络部分
七、性能优化(中厂最看重实战能力)
启动优化
内存优化
卡顿与流畅度
包体积优化
八、架构设计(中厂必问项目结构)
九、项目经验(中厂面试重点!以下为开放式问题)
十、C++/NDK(SDK方向加分项,非必问但问了要能答)
十一、算法(中厂难度,手写代码)
十二、开放性/软技能(中厂很看重)
编辑
相关推荐
一、Kotlin 部分
基础与面向对象
val和const val的区别是什么?Any和Object有什么区别?Unit和Nothing的区别?Nothing什么时候用?lateinit和lazy分别适用于什么场景?lateinit如何判断是否已初始化?companion object和 Java 的static完全等价吗?编译后是什么?data class自动生成了哪些方法?什么情况下需要手动重写equals/hashCode?sealed class在什么场景下比enum更好?举一个实际例子value class有什么用?能减少内存开销吗?
高阶函数与inline
什么是高阶函数?Android 中你用过哪些高阶函数?(举例:
let、apply、run、with、also的区别)inline是什么?不加inline的高阶函数有什么性能问题?reified关键字是做什么的?为什么可以获取泛型的Class?crossinline和noinline分别是用来解决什么问题的?DSL 是什么?你用 Kotlin 写过 DSL 吗?(比如 Gradle 配置就是 DSL)
协程(重点!中厂必问)
协程是什么?它和线程是什么关系?
协程的
launch和withContext有什么区别?Dispatchers.Main、Dispatchers.IO、Dispatchers.Default分别用于什么场景?在 Activity/Fragment 中如何正确管理协程的生命周期?
lifecycleScope和viewModelScope怎么用?协程如何取消?
cancel()和ensureActive()的区别?协程中的异常怎么处理?
try-catch和CoroutineExceptionHandler各自在什么场景用?多个网络请求并行执行怎么处理?
async.await()怎么用?Flow和LiveData的区别是什么?为什么推荐用Flow?StateFlow和SharedFlow的区别是什么?各自用在什么场景?flowOn和launchIn的作用是什么?
二、Java/JVM 部分
基础
Java 内存模型(JMM)是什么?
volatile能保证原子性吗?synchronized和ReentrantLock的区别?你在 Android 中用过哪个?HashMap和ConcurrentHashMap的区别?ConcurrentHashMap为什么线程安全?ArrayList和LinkedList的区别?什么场景用哪个?HashSet如何保证元素不重复?
JVM与内存
JVM 运行时数据区有哪些?Stack 和 Heap 分别存什么?
什么是 GC Root?有哪些类型的 GC Root?
Android 中常见的 OOM 有哪些类型?怎么排查?
强引用、软引用、弱引用、虚引用的区别?Android 中哪里用到了软/弱引用?
String为什么设计成不可变的?StringBuilder和StringBuffer的区别?String.intern()是做什么的?什么场景下用?
ClassLoader
双亲委派模型是什么?为什么要这样设计?
热修复的原理是基于什么?ClassLoader 在其中扮演什么角色?
三、Android Framework(中厂高频区)
Handler & 消息机制
Handler 的工作原理是什么?
Looper、MessageQueue、Message分别是什么关系?主线程的
Looper是怎么初始化的?为什么不会导致 ANR?Message.obtain()为什么要用对象池?Handler内存泄漏怎么解决?(静态内部类 + 弱引用)IdleHandler是什么?可以在什么场景下使用?(比如延迟加载)Handler 的
postDelayed是怎么实现的?
Binder & IPC
Binder 是什么?它和 Socket 比有什么优势?
AIDL 怎么用?
in、out、inout是什么意思?你用过
Messenger吗?和 AIDL 比有什么优缺点?Binder 的一次拷贝原理能大概讲一下吗?
Activity & Application 启动
Application 的
onCreate中能做什么?不能做什么?Activity 启动流程中,AMS 做了什么?
ActivityThread的 main 方法中做了哪些事?
JNI & NDK(SDK方向重点)
JNI 是什么?什么场景下需要用 JNI?
JNI 中
FindClass和GetObjectClass的区别?JNI 中全局引用和局部引用有什么区别?什么时候会内存泄漏?
SO 库是如何加载的?
System.loadLibrary做了什么?Native Crash 如何定位?
logcat的 backtrace 怎么看?addr2line怎么用?ANR Trace 文件中怎么看 Native 调用栈?
四、四大组件与 View 体系
Activity & Fragment
Activity 的生命周期在屏幕旋转时怎么变化?
onSaveInstanceState什么时候调用?Activity 的四种启动模式分别是什么?
singleTask和singleInstance有什么区别?onNewIntent什么时候调用?有什么用?Fragment 的生命周期和 Activity 的对应关系?
Fragment 之间的通信方式有哪些?(接口回调、ViewModel、LiveData)
FragmentManager的add和replace有什么区别?
Service & Broadcast
startService和bindService的区别?Service 的生命周期有什么不同?IntentService和普通 Service 的区别?(Android 8.0 后还有吗?)广播的两种注册方式(静态和动态)有什么区别?静态广播有什么限制?
本地广播
LocalBroadcastManager的原理?和全局广播比有什么优缺点?
View & 事件分发
View 的
measure、layout、draw流程简单说一下onMeasure中MeasureSpec的三种模式是什么?自定义 View 和自定义 ViewGroup 分别要重写哪些方法?
事件分发机制:
dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent的执行顺序滑动冲突怎么解决?(外部拦截法、内部拦截法)
RecyclerView 的缓存机制(四级缓存)和 ListView 有什么区别?
RecyclerView 的布局管理器有哪几种?
RecyclerView 的 Item 动画怎么实现?
绘制优化
什么是过度绘制?怎么检测和优化?
ViewStub、include、merge的作用和区别?Choreographer是什么?和 VSYNC 有什么关系?
五、Jetpack 部分(中厂使用率极高)
Lifecycle是怎么感知生命周期变化的?@OnLifecycleEvent怎么用?ViewModel的作用是什么?横竖屏旋转时数据如何保存?ViewModel可以持有 View 的引用吗?为什么?LiveData和MutableLiveData的区别?postValue和setValue的区别?LiveData的粘性事件是什么?怎么解决?Room的@Entity、@Dao、@Database分别的作用?Room 中如何在数据库升级时保留原有数据?
DataStore和SharedPreferences的区别?为什么推荐用 DataStore?WorkManager是做什么的?它能保证任务一定执行吗?Hilt的@HiltAndroidApp、@AndroidEntryPoint、@Inject分别怎么用?Navigation组件怎么管理 Fragment 的返回栈?Compose 和传统 View 体系能混用吗?
ComposeView和AndroidView分别是做什么的?Compose 中
remember和rememberSaveable的区别?
六、网络部分
HTTP 和 HTTPS 的区别是什么?HTTPS 的加密过程简单说一下
TCP 三次握手和四次挥手的过程
HTTP/2 相比 HTTP/1.1 有哪些改进?
OkHttp 的拦截器链是怎么工作的?你项目中用过哪些自定义拦截器?
OkHttp 的连接池如何复用连接?
网络请求失败时如何做重试?指数退避策略是什么?
DNS 解析流程是什么?DNS 劫持怎么应对?
WebSocket 是什么?什么场景下用?
如何做弱网测试?你遇到过哪些弱网问题?
图片加载库(Glide/Picasso)的缓存机制是怎样的?(内存缓存+磁盘缓存)
七、性能优化(中厂最看重实战能力)
启动优化
冷启动、温启动、热启动的区别?
启动时间怎么测量?
adb shell am start -W和Application#onCreate插桩分别测什么?启动优化的具体手段有哪些?(异步初始化、延迟加载、懒加载、启动任务梳理)
ContentProvider 对启动速度有什么影响?怎么处理?
内存优化
内存泄漏的常见场景有哪些?(Handler、匿名内部类、静态引用、资源未释放)
LeakCanary 的原理是什么?为什么它能检测内存泄漏?
如何分析内存占用?Android Studio Profiler 和 MAT 怎么用?
Bitmap 的内存占用怎么计算?
getByteCount()返回的是什么?Bitmap 优化策略有哪些?(
inSampleSize、inBitmap、RGB_565)图片加载中的
Glide是怎么做内存缓存的?LRU Cache是什么?
卡顿与流畅度
什么是掉帧(Jank)?16ms 原则是什么?
如何检测 UI 卡顿?BlockCanary 的原理是什么?
ANR 的类型有哪些?如何通过
/data/anr/traces.txt定位 ANR?布局优化有哪些手段?(减少层级、使用 ConstraintLayout、过度绘制优化)
主线程中有哪些耗时操作不能做?
包体积优化
APK 的构成有哪些?(classes.dex、resources.arsc、lib 等)
包体积优化手段有哪些?(资源压缩、图片转 WebP、代码混淆、动态交付)
什么是 ABI 分包?
arm64-v8a和armeabi-v7a有什么区别?
八、架构设计(中厂必问项目结构)
MVC、MVP、MVVM 的区别?你项目用的是哪种?
MVP 中 Presenter 怎么避免内存泄漏?
MVVM 中 ViewModel 和 LiveData 是怎么联动的?
什么是 Repository 模式?它解决了什么问题?
你们项目的包结构是怎么样的?是按功能分还是按模块分?
什么是模块化?组件化?你参与过组件化改造吗?
组件化中模块间的通信方式有哪些?
你们项目用了什么依赖注入方案?为什么选它?
常用的设计模式中,你项目里用到了哪些?(单例、工厂、观察者、责任链、建造者)
Retrofit的动态代理是怎么实现的?如何保证单例的线程安全?(DCL、静态内部类、Kotlin object)
九、项目经验(中厂面试重点!以下为开放式问题)
注意:中厂面试官非常关注你实际项目中做的事情,而不是背书。
介绍一下你负责的模块/项目,整体架构是怎样的?
你在项目中遇到的最难解决的一个 Bug 是什么?怎么排查和修复的?
你们 App 的启动时间大概是多少?你参与过启动优化吗?优化了多少?
你做过性能优化吗?具体优化了哪方面?怎么衡量效果?
你们项目遇到过内存问题吗?怎么发现和解决的?
线上出现 Crash 后,你们是怎么定位和修复的流程是什么?
你做过 SDK 开发吗?SDK 和 App 开发有什么不同?
你的代码 Review 标准是什么?你注重哪些方面?
如果要重构一个老旧模块,你会怎么规划?风险点在哪里?
你最近在技术上的学习规划是什么?为什么学这些?
十、C++/NDK(SDK方向加分项,非必问但问了要能答)
JNI 中如何把 Java 的
byte[]转成 C++ 的unsigned char*?JNI 方法注册有哪两种方式?(静态注册和动态注册)
extern "C"是做什么的?为什么 JNI 函数要加它?SO 库中的符号表是什么?
strip命令是做什么的?你遇到过 JNI 的
Local Reference Table Overflow吗?怎么解决?ndk-build和 CMake 你用过哪个?
十一、算法(中厂难度,手写代码)
中厂不会太刁难,但基础算法要能写出来。
排序:手写快速排序或归并排序(至少会一种)
链表:
反转单链表(迭代和递归两种写法)
判断链表是否有环
删除链表的倒数第 N 个节点
二叉树:
二叉树的前序遍历(递归和迭代)
二叉树的层序遍历(BFS)
求二叉树的最大深度
数组/字符串:
两数之和(HashMap 解法)
有效括号匹配
最长不重复子串(滑动窗口)
设计题:
实现 LRU 缓存(LinkedHashMap 或手写双向链表)
实现一个线程安全的单例(DCL 或静态内部类)
动态规划(中厂常考入门级):
爬楼梯
斐波那契数列
最大子序和
十二、开放性/软技能(中厂很看重)
你平时怎么学习新技术?最近在看什么技术书或博客?
你如何看待 Kotlin 和 Java 的选择?你们的项目用哪种?
你用什么工具做性能分析?说说你用过最顺手的一个工具
当你和产品经理/后端对需求有分歧时,你怎么处理?
你希望下一份工作给你带来什么?
你对加班怎么看?
你带过团队或指导过初级工程师吗?
你对自己未来 3-5 年的职业规划是什么?
相关推荐
2026 Android高级工程师 · 大厂面试题库(难度:⭐⭐⭐⭐⭐)文章浏览阅读1.8k次。本文全面覆盖了Android开发面试的关键知识点,包括Activity、Fragment、Service、BroadcastReceiver等组件的深入解析,以及视图工作机制、内存管理、性能优化等方面的技术要点。https://shuaici.blog.csdn.net/article/details/59504118Android 高级工程师面试参考答案:网络、存储与安全-CSDN博客文章浏览阅读855次,点赞18次,收藏16次。本文探讨了移动开发中网络、存储与安全三大核心模块的常见问题及解决方案。在网络方面,分析了HTTP/HTTPS区别、OkHttp价值及弱网优化策略;在存储方面,比较了SharedPreferences、MMKV和数据库的适用场景,并讨论了离线缓存设计;在安全方面,阐述了签名、混淆、加固的作用,以及WebView风险和安全系统工程的重要性。文章强调高级开发者应注重设计思路和风险控制,而非仅掌握技术概念。
https://shuaici.blog.csdn.net/article/details/160372417