前言
持续了大半年的面试终于结束了,自从 5 月被前公司优化之后,一直陆陆续续有面试邀约。
收获 offer 还是比较满意的,拿下了小红书、小米的 offer。着实有点可惜的是汽车之家,倒在了三面,只能说自己还是太菜,以后还需要继续努力。
这期间只投递了互联网中大厂,面试并不多,以下是我在这大半年以来的面试经历,发出来总结一波,也供大家参考参考!
以下面试均为 Android 开发的社招岗。
汽车之家
- 看简历上掌握 Kotlin,说一说协程:考察 Kotlin 协程的基本原理、挂起函数与恢复函数的区别,以及协程在异步任务中的优势。
- 说一说 Java 的反射?反射为什么性能差?:涉及反射机制的实现原理,动态获取类信息,以及因安全检查导致的性能损耗。
- 熟悉 Android 的四大组件,说一说 Activity 的 launchMode 中的 singleTask 和 singleTop 的区别:重点在于任务栈的管理策略及实例复用逻辑。
- provider 中 getContext() 获取到的 context 是什么 context?:考察 Context 类型的区分(Application, Activity, Service)及其生命周期影响。
- 协程是什么?:基础概念,轻量级线程,结构化并发。
- 知道集合和多线程,那说一说你知道的线程安全的集合:如 ConcurrentHashMap, CopyOnWriteArrayList 等及其内部实现。
- 讲一讲你知道的锁?从不同角度可以分为类锁和对象锁、公平锁和非公平锁、乐观锁和悲观锁,追问自旋锁:深入 JVM 层面的锁升级过程(偏向锁->轻量级锁->重量级锁)。
- 讲一讲 LeakCanary 的原理(弱引用队列+Activity 生命周期),使用 LeakCanary 检测到了什么内存泄漏?是先知道这里会出现内存泄漏吗?:分析 WeakReference 队列机制及 GC Root 的判定逻辑。
- LeakCanary 用到了一个 GC 机制,GC Root 都有哪些?:静态变量、活动对象、栈帧局部变量等。
- 阅读文章的 App,这些文章有做本地存储吗?具体实现?:考察 SQLite, Room, SharedPreferences 或文件 IO 的使用场景。
技术解析
在汽车之家面试中,除了常规组件知识,对底层原理的考察非常细致。特别是关于内存管理和并发编程的部分,面试官倾向于询问具体的实现细节而非泛泛而谈。例如在锁机制方面,不仅要求说出分类,还要求解释自旋锁在 CPU 调度中的行为。LeakCanary 作为常用的内存检测工具,其背后的弱引用队列和 GC Root 追踪机制是理解 Android 内存模型的关键。
小红书
- Handler 机制是什么?在没有 message 的时候为什么不会导致应用程序 ANR?:Handler 消息循环机制,Looper 的阻塞等待原理。
- 介绍一下四大组件?:Activity, Service, BroadcastReceiver, ContentProvider 的基本职责。
- Activity 启动模式?:Standard, SingleTop, SingleTask, SingleInstance 的区别与应用场景。
- 进程和线程的区别?:资源分配单位 vs 执行单元,上下文切换成本。
- 你知道 Android 程序的入口吗?知道 ActivityThread 吗?:main 方法调用 Application.attach 的过程。
- View 的事件分发机制?View 的绘制机制?:onInterceptTouchEvent, dispatchTouchEvent, onDraw 流程。
- 如果要在一个 Activity 里面获取一个 View 的宽高应该在哪一个回调方法获取?:post, onSizeChanged, layout 回调等时机选择。
- 知道共享内存模型吗?:Android IPC 机制的基础。
- 内存里面的寄存器有了解吗?指针寄存器?指令寄存器?:计算机组成基础,CPU 架构相关。
- :SoftReference 允许在内存不足时被回收,WeakReference 则不受限。


