大厂 Android 开发核心面试题汇总
汇总了美团、腾讯、字节等大厂 Android 岗位的核心面试题,涵盖 Java 基础、JVM 机制、Android 系统原理、网络通信、音视频及算法等领域。内容包含常见问题的标准解答思路,旨在帮助开发者梳理知识体系,提升面试通过率。

汇总了美团、腾讯、字节等大厂 Android 岗位的核心面试题,涵盖 Java 基础、JVM 机制、Android 系统原理、网络通信、音视频及算法等领域。内容包含常见问题的标准解答思路,旨在帮助开发者梳理知识体系,提升面试通过率。

本文汇总了美团、腾讯、字节、京东等互联网大厂 Android 岗位的核心面试题,涵盖 Java 基础、JVM 机制、Android 系统原理、网络通信、音视频及算法等领域。内容包含常见问题的标准解答思路,旨在帮助开发者梳理知识体系,提升面试通过率。
Java 方法调用涉及栈帧的创建、参数传递、指令执行和返回。在 JVM 中,方法调用通过 invoke 系列指令实现(如 invokevirtual, invokespecial)。
Volatile 保证变量的可见性和禁止指令重排序。它不保证原子性。当一个线程修改了 volatile 变量,新值会立即刷新到主内存;其他线程读取时,会强制从主内存重新加载该变量。
JVM 使用分代收集理论,将堆内存分为新生代(Eden, Survivor)和老年代。常用算法包括标记 - 清除、标记 - 复制、标记 - 整理。GC Root 包括虚拟机栈引用、静态属性引用、常量引用等。
程序计数器记录当前线程执行的字节码行号,是唯一不会 OOM 的区域。虚拟机栈描述 Java 方法执行的内存模型,每个方法执行时会创建一个栈帧。
HashMap 非线程安全,基于数组 + 链表/红黑树实现。ConcurrentHashMap 在 JDK 1.7 中使用分段锁,JDK 1.8 后使用 CAS + synchronized 保证线程安全。
类加载遵循双亲委派模型:先委托父类加载器尝试加载,若失败再由子类加载器加载。这保证了核心类库的安全性和唯一性。
Handler 用于线程间通信。主线程默认有 Looper 和 MessageQueue。Handler 发送消息到队列,Looper 循环取出消息并分发给对应的 Handler 处理。ThreadLocal 用于存储每个线程独立的 Looper 实例。
ViewRootImpl 触发 performTraversal -> measure(测量) -> layout(布局) -> draw(绘制)。MeasureSpec 由父控件决定子控件的测量模式(精确、最大、未指定)和大小。
requestLayout 触发整个视图树的重新测量和布局,开销较大。invalidate 仅触发重绘(draw),不改变布局结构,性能更优。
ActivityManagerService (AMS) 协调启动。经过 startActivity -> AMS -> ActivityStackSupervisor -> 目标进程 -> ActivityThread -> attach -> onCreate。
Binder 是 Android 特有的 IPC 机制,支持跨进程对象传递。Native 层通过 binder_driver 内核模块管理,用户态通过 ServiceManager 注册服务。
Fragment 是 Activity 的一部分,可复用性强,适合适配不同屏幕尺寸。生命周期受宿主 Activity 影响。
HTTPS 在 HTTP 基础上加入 SSL/TLS 加密层,保证数据传输安全。HTTPS 需要证书验证,握手过程涉及对称与非对称加密结合。
OkHttp 采用拦截器链(Interceptor Chain)设计。请求经过 RealCall -> Dispatcher -> InterceptorChain -> Call -> Response。支持连接池、缓存、Gzip 压缩。
OkHttp 通过 Keep-Alive 保持长连接,利用 ConnectionPool 复用 Socket 连接,减少握手开销。
常见的有 AES、DES、3DES。AES 是目前主流标准,支持 128/192/256 位密钥。
通过去除空间冗余(帧内预测)和时间冗余(运动补偿)来压缩数据。H.264/H.265 是常见标准。
预加载策略、降低首屏分辨率、使用 HLS/DASH 协议、CDN 加速、服务端转码优化。
滤波方法包括高斯滤波、中值滤波等。图像特征提取常用 SIFT、SURF、ORB 等算法。
RTP 包包含序列号和时间戳。接收端根据序列号进行排序重组,处理乱序和丢包。
使用快慢指针法。快指针每次走两步,慢指针每次走一步。若相遇则有环。
使用队列 BFS。根节点入队,循环出队并将左右子节点入队。
遍历链表,若当前节点值等于下一节点值,则跳过下一节点,直到不相等为止。
适用于有序数组。维护左右边界,计算中间值比较,调整边界直至找到目标或边界交叉。
动态规划或中心扩展法。中心扩展法时间复杂度 O(N^2),空间 O(1)。
应用层、Framework 层、HAL 层、Linux Kernel 层。分层设计便于维护和扩展。
Bootloader -> Kernel -> Init -> SystemServer -> Zygote -> App Process。
涉及 C/C++ 开发,包括 JNI 调用、NDK 构建、性能优化等。
除 Binder 外,还有 AIDL、Messenger、ContentProvider、Socket 等。
Touch 事件从 Window -> DecorView -> ViewGroup -> View。onTouchEvent 和 dispatchTouchEvent 配合处理。
RecycledViewPool 复用旧 View。第一级缓存为 mScrapViews,第二级为 mAttachedScrap,第三级为 mCachedViews。
ACID 特性。保证操作要么全部成功,要么全部失败。可通过锁或 MVCC 实现隔离。
操作系统通过时间片轮转调度,快速切换上下文,实现并发假象。
C++ 中的 shared_ptr, unique_ptr 等,自动管理内存生命周期,防止泄漏。
虚函数表(vtable)存储在代码段。运行时通过 vptr 指向 vtable 实现动态绑定。
注:以上答案基于通用技术原理整理,实际面试中需结合项目经验灵活作答。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online