2026 Android高级工程师 · 中厂面试题库(难度:⭐⭐⭐⭐)
2026/7/20 20:54:12 网站建设 项目流程

目录

一、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 部分

基础与面向对象

  1. valconst val的区别是什么?

  2. AnyObject有什么区别?

  3. UnitNothing的区别?Nothing什么时候用?

  4. lateinitlazy分别适用于什么场景?lateinit如何判断是否已初始化?

  5. companion object和 Java 的static完全等价吗?编译后是什么?

  6. data class自动生成了哪些方法?什么情况下需要手动重写equals/hashCode

  7. sealed class在什么场景下比enum更好?举一个实际例子

  8. value class有什么用?能减少内存开销吗?

高阶函数与inline

  1. 什么是高阶函数?Android 中你用过哪些高阶函数?(举例:letapplyrunwithalso的区别)

  2. inline是什么?不加inline的高阶函数有什么性能问题?

  3. reified关键字是做什么的?为什么可以获取泛型的Class

  4. crossinlinenoinline分别是用来解决什么问题的?

  5. DSL 是什么?你用 Kotlin 写过 DSL 吗?(比如 Gradle 配置就是 DSL)

协程(重点!中厂必问)

  1. 协程是什么?它和线程是什么关系?

  2. 协程的launchwithContext有什么区别?

  3. Dispatchers.MainDispatchers.IODispatchers.Default分别用于什么场景?

  4. 在 Activity/Fragment 中如何正确管理协程的生命周期?lifecycleScopeviewModelScope怎么用?

  5. 协程如何取消?cancel()ensureActive()的区别?

  6. 协程中的异常怎么处理?try-catchCoroutineExceptionHandler各自在什么场景用?

  7. 多个网络请求并行执行怎么处理?async.await()怎么用?

  8. FlowLiveData的区别是什么?为什么推荐用Flow

  9. StateFlowSharedFlow的区别是什么?各自用在什么场景?

  10. flowOnlaunchIn的作用是什么?

二、Java/JVM 部分

基础

  1. Java 内存模型(JMM)是什么?volatile能保证原子性吗?

  2. synchronizedReentrantLock的区别?你在 Android 中用过哪个?

  3. HashMapConcurrentHashMap的区别?ConcurrentHashMap为什么线程安全?

  4. ArrayListLinkedList的区别?什么场景用哪个?

  5. HashSet如何保证元素不重复?

JVM与内存

  1. JVM 运行时数据区有哪些?Stack 和 Heap 分别存什么?

  2. 什么是 GC Root?有哪些类型的 GC Root?

  3. Android 中常见的 OOM 有哪些类型?怎么排查?

  4. 强引用、软引用、弱引用、虚引用的区别?Android 中哪里用到了软/弱引用?

  5. String为什么设计成不可变的?StringBuilderStringBuffer的区别?

  6. String.intern()是做什么的?什么场景下用?

ClassLoader

  1. 双亲委派模型是什么?为什么要这样设计?

  2. 热修复的原理是基于什么?ClassLoader 在其中扮演什么角色?

三、Android Framework(中厂高频区)

Handler & 消息机制

  1. Handler 的工作原理是什么?LooperMessageQueueMessage分别是什么关系?

  2. 主线程的Looper是怎么初始化的?为什么不会导致 ANR?

  3. Message.obtain()为什么要用对象池?

  4. Handler内存泄漏怎么解决?(静态内部类 + 弱引用)

  5. IdleHandler是什么?可以在什么场景下使用?(比如延迟加载)

  6. Handler 的postDelayed是怎么实现的?

Binder & IPC

  1. Binder 是什么?它和 Socket 比有什么优势?

  2. AIDL 怎么用?inoutinout是什么意思?

  3. 你用过Messenger吗?和 AIDL 比有什么优缺点?

  4. Binder 的一次拷贝原理能大概讲一下吗?

Activity & Application 启动

  1. Application 的onCreate中能做什么?不能做什么?

  2. Activity 启动流程中,AMS 做了什么?

  3. ActivityThread的 main 方法中做了哪些事?

JNI & NDK(SDK方向重点)

  1. JNI 是什么?什么场景下需要用 JNI?

  2. JNI 中FindClassGetObjectClass的区别?

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

  4. SO 库是如何加载的?System.loadLibrary做了什么?

  5. Native Crash 如何定位?logcat的 backtrace 怎么看?addr2line怎么用?

  6. ANR Trace 文件中怎么看 Native 调用栈?

四、四大组件与 View 体系

Activity & Fragment

  1. Activity 的生命周期在屏幕旋转时怎么变化?onSaveInstanceState什么时候调用?

  2. Activity 的四种启动模式分别是什么?singleTasksingleInstance有什么区别?

  3. onNewIntent什么时候调用?有什么用?

  4. Fragment 的生命周期和 Activity 的对应关系?

  5. Fragment 之间的通信方式有哪些?(接口回调、ViewModel、LiveData)

  6. FragmentManageraddreplace有什么区别?

Service & Broadcast

  1. startServicebindService的区别?Service 的生命周期有什么不同?

  2. IntentService和普通 Service 的区别?(Android 8.0 后还有吗?)

  3. 广播的两种注册方式(静态和动态)有什么区别?静态广播有什么限制?

  4. 本地广播LocalBroadcastManager的原理?和全局广播比有什么优缺点?

View & 事件分发

  1. View 的measurelayoutdraw流程简单说一下

  2. onMeasureMeasureSpec的三种模式是什么?

  3. 自定义 View 和自定义 ViewGroup 分别要重写哪些方法?

  4. 事件分发机制:dispatchTouchEventonInterceptTouchEventonTouchEvent的执行顺序

  5. 滑动冲突怎么解决?(外部拦截法、内部拦截法)

  6. RecyclerView 的缓存机制(四级缓存)和 ListView 有什么区别?

  7. RecyclerView 的布局管理器有哪几种?

  8. RecyclerView 的 Item 动画怎么实现?

绘制优化

  1. 什么是过度绘制?怎么检测和优化?

  2. ViewStubincludemerge的作用和区别?

  3. Choreographer是什么?和 VSYNC 有什么关系?

五、Jetpack 部分(中厂使用率极高)

  1. Lifecycle是怎么感知生命周期变化的?@OnLifecycleEvent怎么用?

  2. ViewModel的作用是什么?横竖屏旋转时数据如何保存?

  3. ViewModel可以持有 View 的引用吗?为什么?

  4. LiveDataMutableLiveData的区别?postValuesetValue的区别?

  5. LiveData的粘性事件是什么?怎么解决?

  6. Room@Entity@Dao@Database分别的作用?

  7. Room 中如何在数据库升级时保留原有数据?

  8. DataStoreSharedPreferences的区别?为什么推荐用 DataStore?

  9. WorkManager是做什么的?它能保证任务一定执行吗?

  10. Hilt@HiltAndroidApp@AndroidEntryPoint@Inject分别怎么用?

  11. Navigation组件怎么管理 Fragment 的返回栈?

  12. Compose 和传统 View 体系能混用吗?ComposeViewAndroidView分别是做什么的?

  13. Compose 中rememberrememberSaveable的区别?

六、网络部分

  1. HTTP 和 HTTPS 的区别是什么?HTTPS 的加密过程简单说一下

  2. TCP 三次握手和四次挥手的过程

  3. HTTP/2 相比 HTTP/1.1 有哪些改进?

  4. OkHttp 的拦截器链是怎么工作的?你项目中用过哪些自定义拦截器?

  5. OkHttp 的连接池如何复用连接?

  6. 网络请求失败时如何做重试?指数退避策略是什么?

  7. DNS 解析流程是什么?DNS 劫持怎么应对?

  8. WebSocket 是什么?什么场景下用?

  9. 如何做弱网测试?你遇到过哪些弱网问题?

  10. 图片加载库(Glide/Picasso)的缓存机制是怎样的?(内存缓存+磁盘缓存)

七、性能优化(中厂最看重实战能力)

启动优化

  1. 冷启动、温启动、热启动的区别?

  2. 启动时间怎么测量?adb shell am start -WApplication#onCreate插桩分别测什么?

  3. 启动优化的具体手段有哪些?(异步初始化、延迟加载、懒加载、启动任务梳理)

  4. ContentProvider 对启动速度有什么影响?怎么处理?

内存优化

  1. 内存泄漏的常见场景有哪些?(Handler、匿名内部类、静态引用、资源未释放)

  2. LeakCanary 的原理是什么?为什么它能检测内存泄漏?

  3. 如何分析内存占用?Android Studio Profiler 和 MAT 怎么用?

  4. Bitmap 的内存占用怎么计算?getByteCount()返回的是什么?

  5. Bitmap 优化策略有哪些?(inSampleSizeinBitmapRGB_565

  6. 图片加载中的Glide是怎么做内存缓存的?LRU Cache是什么?

卡顿与流畅度

  1. 什么是掉帧(Jank)?16ms 原则是什么?

  2. 如何检测 UI 卡顿?BlockCanary 的原理是什么?

  3. ANR 的类型有哪些?如何通过/data/anr/traces.txt定位 ANR?

  4. 布局优化有哪些手段?(减少层级、使用 ConstraintLayout、过度绘制优化)

  5. 主线程中有哪些耗时操作不能做?

包体积优化

  1. APK 的构成有哪些?(classes.dex、resources.arsc、lib 等)

  2. 包体积优化手段有哪些?(资源压缩、图片转 WebP、代码混淆、动态交付)

  3. 什么是 ABI 分包?arm64-v8aarmeabi-v7a有什么区别?

八、架构设计(中厂必问项目结构)

  1. MVC、MVP、MVVM 的区别?你项目用的是哪种?

  2. MVP 中 Presenter 怎么避免内存泄漏?

  3. MVVM 中 ViewModel 和 LiveData 是怎么联动的?

  4. 什么是 Repository 模式?它解决了什么问题?

  5. 你们项目的包结构是怎么样的?是按功能分还是按模块分?

  6. 什么是模块化?组件化?你参与过组件化改造吗?

  7. 组件化中模块间的通信方式有哪些?

  8. 你们项目用了什么依赖注入方案?为什么选它?

  9. 常用的设计模式中,你项目里用到了哪些?(单例、工厂、观察者、责任链、建造者)

  10. Retrofit的动态代理是怎么实现的?

  11. 如何保证单例的线程安全?(DCL、静态内部类、Kotlin object)

九、项目经验(中厂面试重点!以下为开放式问题)

注意:中厂面试官非常关注你实际项目中做的事情,而不是背书。

  1. 介绍一下你负责的模块/项目,整体架构是怎样的?

  2. 你在项目中遇到的最难解决的一个 Bug 是什么?怎么排查和修复的?

  3. 你们 App 的启动时间大概是多少?你参与过启动优化吗?优化了多少?

  4. 你做过性能优化吗?具体优化了哪方面?怎么衡量效果?

  5. 你们项目遇到过内存问题吗?怎么发现和解决的?

  6. 线上出现 Crash 后,你们是怎么定位和修复的流程是什么?

  7. 你做过 SDK 开发吗?SDK 和 App 开发有什么不同?

  8. 你的代码 Review 标准是什么?你注重哪些方面?

  9. 如果要重构一个老旧模块,你会怎么规划?风险点在哪里?

  10. 你最近在技术上的学习规划是什么?为什么学这些?

十、C++/NDK(SDK方向加分项,非必问但问了要能答)

  1. JNI 中如何把 Java 的byte[]转成 C++ 的unsigned char*

  2. JNI 方法注册有哪两种方式?(静态注册和动态注册)

  3. extern "C"是做什么的?为什么 JNI 函数要加它?

  4. SO 库中的符号表是什么?strip命令是做什么的?

  5. 你遇到过 JNI 的Local Reference Table Overflow吗?怎么解决?

  6. ndk-build和 CMake 你用过哪个?

十一、算法(中厂难度,手写代码)

中厂不会太刁难,但基础算法要能写出来。

  1. 排序:手写快速排序或归并排序(至少会一种)

  2. 链表

    • 反转单链表(迭代和递归两种写法)

    • 判断链表是否有环

    • 删除链表的倒数第 N 个节点

  3. 二叉树

    • 二叉树的前序遍历(递归和迭代)

    • 二叉树的层序遍历(BFS)

    • 求二叉树的最大深度

  4. 数组/字符串

    • 两数之和(HashMap 解法)

    • 有效括号匹配

    • 最长不重复子串(滑动窗口)

  5. 设计题

    • 实现 LRU 缓存(LinkedHashMap 或手写双向链表)

    • 实现一个线程安全的单例(DCL 或静态内部类)

  6. 动态规划(中厂常考入门级)

    • 爬楼梯

    • 斐波那契数列

    • 最大子序和

十二、开放性/软技能(中厂很看重)

  1. 你平时怎么学习新技术?最近在看什么技术书或博客?

  2. 你如何看待 Kotlin 和 Java 的选择?你们的项目用哪种?

  3. 你用什么工具做性能分析?说说你用过最顺手的一个工具

  4. 当你和产品经理/后端对需求有分歧时,你怎么处理?

  5. 你希望下一份工作给你带来什么?

  6. 你对加班怎么看?

  7. 你带过团队或指导过初级工程师吗?

  8. 你对自己未来 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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询