跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java算法

Android 面试核心知识点汇总:32 个模块技术问答解析

综述由AI生成Android 开发岗位面试中常见的 32 个核心模块,涵盖 Java 基础、集合、多线程、虚拟机、Android 组件、Framework、算法及音视频等领域。文章详细列出了各模块的关键面试题并提供简要的技术解答,包括抽象类与接口区别、HashMap 原理、Handler 机制、Binder 跨进程通信、红黑树算法、Kotlin 协程及 Flutter 架构等核心知识点。内容经过清洗,去除了无关推广信息,专注于技术知识点的系统性总结,适用于求职者复习与查漏补缺。

云朵棉花糖发布于 2025/2/6更新于 2026/6/221 浏览
Android 面试核心知识点汇总:32 个模块技术问答解析

Android 面试核心知识点汇总

本文整理了 Android 开发岗位面试中常见的 32 个核心模块,涵盖 Java 基础、集合、多线程、虚拟机、Android 组件、Framework、算法及音视频等领域。旨在帮助开发者系统复习关键技术点。

Java 方面

Java 基础部分

抽象类与接口的区别? 抽象类可以有构造方法、成员变量和方法实现;接口只能有常量(public static final)和抽象方法(Java 8 后可有 default/static 方法)。抽象类用于代码复用,接口用于定义规范。

分别讲讲 final,static,synchronized

  • final:修饰类不可继承,修饰方法不可重写,修饰变量不可变。
  • static:属于类而非实例,内存中只有一份,可通过类名直接访问。
  • synchronized:用于线程同步,保证临界区代码的原子性。

请简述一下 String、StringBuffer 和 StringBuilder 的区别?

  • String:不可变字符序列,每次修改生成新对象。
  • StringBuffer:可变,线程安全,性能较低。
  • StringBuilder:可变,非线程安全,性能较高。

'equals'与'=='、'hashCode'的区别和使用场景?

  • ==:比较基本类型值或引用地址。
  • equals():默认比较地址,Object 子类常重写比较内容(如 String)。
  • hashCode():哈希码,配合 HashMap 使用。若 equals 相等,hashCode 必须相等。

Java 中深拷贝与浅拷贝的区别?

  • 浅拷贝:复制对象本身,内部引用类型指向同一内存地址。
  • 深拷贝:递归复制所有层级,完全独立的新对象。

谈谈 Error 和 Exception 的区别?

  • Error:严重错误,JVM 无法处理(如 OutOfMemory),通常不捕获。
  • Exception:程序可处理的异常,分为受检(Checked)和非受检(Unchecked)。

什么是反射机制?应用场景?

  • 运行时动态获取类信息并操作对象。应用:框架设计(Spring)、动态代理、序列化。

谈谈如何重写 equals() 方法?为什么还要重写 hashCode()?

  • 重写 equals 需满足自反、对称、传递、一致性、非空性。重写 hashCode 是为了保证在 HashMap/HashSet 中正确存储和检索,避免哈希冲突导致数据丢失。

谈谈你对 Java 泛型中类型擦除的理解,局限性?

  • 编译后泛型信息被擦除为原始类型。局限:无法判断具体泛型类型,无法创建泛型数组。

说说你对 Java 注解的理解?

  • 元数据,提供额外信息给编译器或运行时。常见:@Override, @Deprecated, @SuppressWarnings。

Java 集合

List, Set, Map 的区别?

  • List:有序,可重复,索引访问。
  • Set:无序(HashSet),不可重复。
  • Map:键值对,Key 唯一。

ArrayList 和 LinkedList 的区别?

  • ArrayList:基于数组,随机访问快,增删慢。
  • LinkedList:基于双向链表,增删快,随机访问慢。
  • HashMap 与 HashTable 的区别?

    • HashMap:非线程安全,允许 null 键值,速度快。
    • HashTable:线程安全,不允许 null,速度慢。

    ArrayList 的扩容机制?

    • 默认容量 10,超过时扩容为原容量的 1.5 倍,并复制数组。

    HashMap 的实现原理?

    • 数组 + 链表 + 红黑树(JDK 1.8+)。Hash 冲突时链表挂载,长度超阈值转红黑树。

    LinkedHashMap 的工作原理?

    • 维护双向链表记录插入顺序或访问顺序,支持 LRU 缓存实现。

    ConcurrentHashMap 的理解?

    • JDK 1.7 分段锁,JDK 1.8 CAS+synchronized,保证高并发下读写效率。

    Java 多线程

    Java 中使用多线程的方式?

    • 继承 Thread 类,实现 Runnable 接口,实现 Callable 接口配合 FutureTask,使用线程池。

    线程的几种状态?

    • NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED。

    如何实现多线程中的同步?

    • synchronized, Lock, volatile, Semaphore, CountDownLatch 等。

    线程死锁及避免?

    • 资源循环等待。避免:固定顺序加锁,超时尝试,死锁检测。

    线程阻塞的原因?

    • 等待 I/O,等待锁,sleep/wait,CPU 调度。

    Thread run() 与 start() 的区别?

    • start() 启动新线程执行 run();run() 只是普通方法调用。

    synchronized 和 volatile 的区别?

    • synchronized 保证原子性和可见性,volatile 仅保证可见性和禁止指令重排。

    如何保证线程安全?

    • 不可变对象,线程封闭,互斥锁,无锁编程。

    ThreadLocal 用法和原理?

    • 每个线程拥有独立副本。原理:Thread 类持有 ThreadLocalMap。

    notify 和 notifyAll 区别?

    • notify 唤醒一个等待线程,notifyAll 唤醒所有。

    什么是线程池?如何创建?

    • 管理一组线程复用。通过 Executors 工厂类或 ThreadPoolExecutor 创建。

    java 线程常见的几种锁?

    • 乐观锁,悲观锁,公平锁,非公平锁,读写锁,可重入锁。

    sleep() 和 wait() 的区别?

    • sleep 是 Thread 静态方法,不释放锁;wait 是 Object 方法,释放锁。

    Java 虚拟机

    JAVA 垃圾回收机制?

    • 自动管理内存,区分新生代/老年代,标记清除、复制、标记整理等算法。

    强、软、弱、虚引用区别?

    • 强引用:常驻内存;软引用:内存不足回收;弱引用:GC 即回收;虚引用:无法访问,仅通知回收。

    JVM 类的加载机制?

    • 加载、验证、准备、解析、初始化。双亲委派模型。

    JVM、Dalvik、ART 三者区别?

    • JVM:标准 Java SE;Dalvik:Android 早期,解释执行;ART:Android 4.4+,AOT 预编译。

    JMM 是什么?问题及解决?

    • Java 内存模型。问题:可见性、原子性、有序性。解决:volatile, synchronized, final。

    Android 方面

    四大组件

    Activity 与 Fragment 通信方式?

    • Activity 传参,Interface 回调,EventBus,ViewModel/LiveData。

    LaunchMode 应用场景?

    • standard:默认;singleTop:栈顶复用;singleTask:任务栈复用;singleInstance:独立栈。

    Context 了解多少?

    • Application, Activity, Service Context。注意内存泄漏风险,优先用 ApplicationContext。

    IntentFilter 及使用场景?

    • 声明组件能响应的 Action/Category/Data。用于隐式 Intent 跳转。

    startService 和 bindService 区别?

    • startService:生命周期独立,服务可能存活;bindService:绑定关系,断开销毁。

    Service 保活?

    • 前台服务,JobScheduler,系统广播监听,多进程守护。

    ContentProvider 数据共享?

    • 统一接口,URI 匹配,权限控制,跨进程数据访问。

    横竖屏切换 Activity 生命周期?

    • onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume。

    Intent 传输数据限制?

    • Binder 限制约 1MB。大数据走 FileProvider 或临时文件。

    Android 异步任务和消息机制

    HandlerThread 用法?

    • 自带 Looper 的后台线程,适合需要消息队列的场景。

    IntentService 应用?

    • 自动创建 HandlerThread,处理完任务自动停止,适合一次性后台任务。

    AsyncTask 优缺点?

    • 优点:简单;缺点:内存泄漏,生命周期难控,已废弃。

    子线程能否更新 UI?

    • 不能。Android UI 线程模型要求主线程更新界面。

    Handler 机制原理?

    • MessageQueue, Looper, Handler。消息入队,Looper 轮询分发。

    子线程创建 Handler 抛异常原因?

    • 子线程没有 Looper,需先 prepare。

    Loop 死循环为何不阻塞?

    • 进入 native pollOnce 等待事件,有消息才返回。

    数据结构

    冒泡排序及优化?

    • 相邻交换。优化:设置标志位,若一轮无交换则结束。

    单链表实现?

    • Node 类含 data 和 next 引用,头插法或尾插法构建。

    反转单链表?

    • 三指针法:prev, curr, next 迭代交换指向。

    时间/空间复杂度?

    • 衡量算法效率。O(1), O(log n), O(n), O(n^2) 等。

    判断链表成环?

    • 快慢指针,相遇则有环。

    红黑树?

    • 自平衡二叉查找树,保证最坏情况 O(log n)。HashMap 底层结构。

    快速排序及优化?

    • 分治法。优化:三数取中,小数组用插入排序。

    循环队列?

    • 数组模拟,首尾相接,解决假溢出。

    判断单链表交叉?

    • 计算长度差,对齐后遍历比较节点地址。

    Android Framework

    Binder

    Binder 优势?

    • 一次拷贝,跨进程高效,安全性高。

    一次拷贝原理?

    • 内核态与用户态共享内存映射,减少数据拷贝次数。

    MMAP 原理?

    • 内存映射,将文件映射到虚拟地址空间。

    Binder 跨进程?

    • 通过 ServiceManager 注册服务,Client 获取 Stub 代理,通过 IPC 通道通信。

    四大组件通信?

    • 主要依赖 Binder 机制进行进程间通信。

    Intent 大数据限制?

    • 同上,走 Binder 限制,大数据需文件化。

    Handler

    HandlerThread 存在原因?

    • 提供带 Looper 的线程,简化后台消息处理。

    Looper 存在哪?

    • 每个线程一个。Main Looper 在主线程。

    ThreadLocal 作用?

    • 线程隔离变量,确保线程私有。

    Main Looper 与一般 Looper 异同?

    • 功能相同,Main Looper 负责 UI 事件分发。

    Looper loop() 为什么不卡死?

    • 调用 native pollOnce 阻塞等待消息。

    Message 获取?

    • 从 MessageQueue 取出,按优先级和时间戳排序。

    AMS

    AMS 是什么?

    • ActivityManagerService,系统核心服务,管理 Activity/Service/Window。

    ActivityThread/ApplicationThread?

    • ActivityThread 是 App 主线程入口;ApplicationThread 是 Binder 服务端接口。

    Instrumentation?

    • 监控应用与系统交互,测试框架基础。

    ActivityRecord/TaskRecord?

    • 记录 Activity 和 Task 的状态信息,AMS 内部管理结构。

    手写简化版 AMS?

    • 涉及 Binder 通信,状态机管理,进程调度逻辑。

    算法方面

    二分查找?

    • 有序数组查找,O(log n),注意边界条件。

    接雨水问题?

    • 单调栈或双指针,计算每个位置左右最大值差值。

    最长回文子串?

    • 中心扩展法或 Manacher 算法。

    去除有序数组重复元素?

    • 双指针,覆盖重复项。

    模幂运算?

    • 快速幂算法,结合取模防止溢出。

    跳跃游戏?

    • 贪心算法,维护最远可达距离。

    回文链表?

    • 快慢指针找中点,反转后半段,对比前后半段。

    随机抽取元素?

    • 蓄水池抽样算法。

    括号合法性?

    • 栈结构,左进右出,最后栈空且匹配。

    缺失和重复元素?

    • 数学求和或位运算,或原地置换。

    SparseArray 原理?

    • 数组存储 key-value,比 HashMap 节省内存,适合 int key。

    ConcurrentHashMap 线程安全?

    • CAS + synchronized,分段锁或桶锁。

    HashMap put 冲突?

    • 链表遍历比较 key,一致覆盖,不一致追加,转红黑树。

    Kotlin 方面

    Kotlin 特性?

    • 空安全,协程,扩展函数,数据类,Lambda 等。

    单例实现?

    • object 关键字,Companion Object。

    内联函数?

    • inline + lambda,消除闭包开销,提升性能。

    Coroutines vs 线程?

    • 协程轻量级,挂起恢复,无需线程切换开销。

    Any 与 Object?

    • Any 是顶层类,Object 是 Java 顶层类,Kotlin 中 Any 对应 Java Object。

    隐式转换?

    • 有,如 Int 转 Long,但需注意精度损失。

    集合遍历?

    • for, forEach, map, filter 等。

    let 原理?

    • Lambda 接收 this,返回 Lambda 结果。

    run 原理?

    • Lambda 接收 this,返回 Lambda 最后一个表达式结果。

    音视频方面

    直播秒开优化?

    • 预加载,关键帧策略,CDN 加速,首屏渲染优化。

    图像滤波?

    • 均值滤波,高斯滤波,中值滤波。

    图像特征?

    • 边缘,角点,纹理,颜色直方图。

    FFmpeg 合成视频?

    • ffmpeg -i input.jpg -loop 1 -c:v libx264 output.mp4。

    音视频格式?

    • MP4, MKV, FLV, HLS, DASH。

    MPEG 码流结构?

    • 序列头,GOP,P 帧,B 帧。

    降低延迟?

    • 减小缓冲,优化编码参数,网络协议优化(QUIC/WebRTC)。

    软解硬解?

    • 软解:CPU 解码;硬解:GPU/专用芯片解码。

    Flutter 方面

    Dart 特性?

    • 面向对象,可选类型,异步编程,Hot Reload。

    Dart 并行?

    • Isolate 实现真正并行,避免 GC 停顿。

    值传递还是引用?

    • 值传递,但对象引用也是值传递。

    Flutter 特性?

    • 跨平台,热重载,声明式 UI。

    Widget/Element/RenderObject?

    • Widget 配置,Element 状态管理,RenderObject 布局绘制。

    Mixins 条件?

    • 类未继承其他 Mixin,符合单一职责。

    Stream 订阅模式?

    • listen (一次性), asBroadcastStream (多订阅)。

    Widget/State/Context?

    • Widget 蓝图,State 状态,Context 上下文环境。

    Hot Reload/Restart?

    • Reload:保留状态注入代码;Restart:重启应用。

    Flutter 与原生通信?

    • Platform Channel,MethodChannel,EventChannel。

    状态管理?

    • Provider, Riverpod, Bloc 等。解决 Widget 重建频繁问题。

    注:以上内容为技术要点梳理,实际面试中需结合项目经验深入阐述。

    目录

    1. Android 面试核心知识点汇总
    2. Java 方面
    3. Java 基础部分
    4. Java 集合
    5. Java 多线程
    6. Java 虚拟机
    7. Android 方面
    8. 四大组件
    9. Android 异步任务和消息机制
    10. 数据结构
    11. Android Framework
    12. Binder
    13. Handler
    14. AMS
    15. 算法方面
    16. Kotlin 方面
    17. 音视频方面
    18. Flutter 方面
    • 💰 8折买阿里云服务器限时8折了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • Python 3.14 在 Windows 上的安装指南
    • QClaw 上手指南:本地 AI 代理的桌面化实践
    • AI 时代前端范式跃迁:从静态页面到智能交互架构
    • Graph+AI 白皮书解读:大模型浪潮下图计算的未来方向
    • NTC 热敏电阻测温实战:电路设计与代码实现详解
    • 国内常用 Python 镜像源及 pip 配置指南
    • Android 大厂面试核心考点与问题汇总
    • Python 流程控制核心:条件语句与循环实战
    • NUS 尤洋教授《实战 AI 大模型》书籍推荐与核心技术解析
    • Android 求职指南:简历优化与面试核心问题解析
    • Spring Web MVC 入门:从概念到实践
    • Python 判断变量或输入是否为数字的几种实用方法
    • Ubuntu 24.04 使用 Flatpak 安装迅雷实战
    • 免费 Trae 编辑器实测:i18n 任务排队千名,AI 编程效率与坑点分析
    • C++ STL 容器详解:set 与 map 底层实现及应用
    • JavaScript 生成 UUID 的常用方法及注意事项
    • GitHub Copilot 接入 Figma MCP 实现设计稿转前端代码
    • Git SSH 公钥认证失败 Permission denied (publickey) 解决方法
    • 汽车雷达多径幽灵目标检测与 GLRT 算法研究
    • 非科班出身:工作十年后转行程序员,35 岁依然不焦虑

    相关免费在线工具

    • Keycode 信息

      查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

    • Escape 与 Native 编解码

      JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

    • JavaScript / HTML 格式化

      使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

    • JavaScript 压缩与混淆

      Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online