Berry Learn

Berry Learn

expand_more

Jetpack Compose

면접 준비简体中文Interview Prep
account_tree136 topicscalendar_monthJuly 2026

本知识树专为 Android 开发者准备 Jetpack Compose 技术面试而设计,聚焦高频考点与核心原理。内容覆盖 Compose 基础概念、状态管理、重组机制、副作用处理、Modifier 原理、布局与自定义绘制、导航、性能优化等面试必问方向。通过结构化的知识点梳理,帮助学习者快速建立 Compose 知识体系,掌握回答深度与广度,从容应对初、中、高级面试问题。适合已有 Android View 开发经验、正在转向 Compose 或准备技术面试的开发者。

Learning Outline

1Compose 核心概念与声明式 UI

理解 Compose 的设计思想、与命令式 UI 的区别,以及组合与重组的基本概念。

声明式 UI 与命令式 UI 对比

掌握两种范式核心差异及其在面试中的表述方式。

  • circle什么是声明式 UI
  • circleCompose 与传统 View 系统的关键区别
  • circle声明式 UI 的优势与挑战

组合(Composition)与重组(Recomposition)

理解 Compose 如何构建和更新 UI 树。

  • circle组合的定义与作用
  • circle重组触发条件
  • circle重组的作用域与智能跳过
  • circle重组与性能的关系

可组合函数基础

Compose 的函数编写规范、参数与预览。

  • circle@Composable 注解的含义
  • circle可组合函数命名约定与最佳实践
  • circle使用 @Preview 预览 UI

2状态管理与状态提升

面试重点:remember、mutableStateOf、状态提升、ViewModel 集成与数据流。

在 Compose 中创建和管理状态

状态的定义、创建方式与重组关系。

  • circleMutableState 与 State<T> 接口
  • circleremember 的作用与原理
  • circleremember 与 key 参数
  • circlederivedStateOf 使用场景

状态提升模式

单数据源原则,将状态提升到公共父级。

  • circle什么是状态提升
  • circle无状态可组合项与有状态可组合项
  • circle状态提升的常见模式:槽位 API

ViewModel 与 Compose 集成

在架构层面管理 UI 状态与业务逻辑。

  • circle使用 viewModel() 获取 ViewModel
  • circle将 ViewModel 的 StateFlow 转换为 Compose State
  • circle单向数据流与事件处理

3副作用与效应处理器

区分重组中的副作用与受控副作用 API,正确使用 LaunchedEffect、rememberCoroutineScope 等。

副作用基本概念与分类

理解 Compose 中的副作用及不当使用引发的问题。

  • circle什么是副作用
  • circle重组中的副作用风险
  • circle受控副作用 API 总览

常用副作用 API 详解

各 API 的适用场景与使用示例。

  • circleLaunchedEffect 用法
  • circlerememberCoroutineScope 用法
  • circleDisposableEffect 生命周期处理
  • circleSideEffect 与与组合后操作

副作用最佳实践与常见陷阱

避免内存泄漏、重复执行等问题。

  • circle何时使用 snapshotFlow
  • circle副作用与生命周期绑定
  • circle避免在无副作用的函数中启动协程

4Modifier 深度解析

掌握 Modifier 的链式调用顺序、自定义 Modifier 及布局相关 modifier。

Modifier 基本概念与链式顺序

理解 Modifier 的设计及其对布局与绘制的影响。

  • circleModifier 的作用与本质
  • circleModifier 链的从左到右顺序
  • circle内置 Modifier 分类

常用 Modifier 详解

面试中常被提问的 modifier 及其作用。

  • circlesize、fillMaxWidth、fillMaxSize 等尺寸 Modifier
  • circlepadding、offset 与 margin 关系
  • circlebackground 与 border 绘制顺序
  • circleclickable 与 combineClickable

自定义 Modifier 实现

高级话题:通过 Modifier.Node 或 composed 自定义修饰符。

  • circle使用 Modifier.composed 创建组合型修饰符
  • circle基于 Modifier.Node 的高性能自定义 Modifier
  • circle自定义 Modifier 访问布局信息示例

5布局、测量与自定义绘制

理解 Compose 的布局原理、约束传递、常用布局组件以及自定义布局实现。

Compose 布局核心原理

掌握从父向子传递约束、子向上报告尺寸的单次测量规则。

  • circle布局的三阶段:测量、放置、绘制
  • circleConstraints 约束机制
  • circleIntrinsicSize 测量

常用布局组件

横向/纵向线性布局、Box、FlowRow/FlowColum 等。

  • circleRow、Column 及对齐与排列
  • circleBox 布局与对齐覆盖
  • circleLazyColumn/LazyRow 高效列表
  • circleConstraintLayout 在 Compose 中的使用

自定义布局与绘制

满足特殊设计需求的自定义实现。

  • circle使用 Layout 可组合项自定义测量与放置
  • circleCanvas 与 DrawScope 自定义绘制
  • circle使用 Modifier.drawBehind 与 drawWithContent

6主题、样式与动画

Material3 主题、颜色系统、字体、形状,以及 Compose 动画 API 的核心概念。

主题系统与资源管理

定义颜色、排版、形状,并支持深色主题。

  • circleMaterialTheme 与自定义颜色、排版、形状
  • circle深色主题适配
  • circleCompositionLocal 传递隐式数据

动画基础 API

基于状态的动画与基于过渡的动画。

  • circleanimate*AsState 系列
  • circle使用 Animatable 实现细粒度动画
  • circleTransition 管理多个属性的协调动画

高级动画与可见性

AnimatedVisibility、共享元素、手势驱动动画。

  • circleAnimatedVisibility 与 enterTransition/exitTransition
  • circleAnimatedContent 内容切换动画
  • circle共享元素转场(SharedTransitionScope)

7导航

使用 Navigation Compose 进行页面路由与参数传递。

Navigation Compose 基础

设置 NavHost、NavController 及定义路由。

  • circle添加依赖与创建 NavController
  • circleNavHost 与 composable 路由注册
  • circle使用 NavController 导航与返回栈操作

参数传递与深层链接

如何在路由中传递 Parcelable 或基础类型参数,以及 Deep Link。

  • circle路由参数定义与提取
  • circle使用导航类型安全传递复杂数据
  • circle深层链接与 PendingIntent 处理

导航最佳实践与 Testing

单 Activity 架构,导航测试思路。

  • circleScaffold 与底部导航集成
  • circle导航与 ViewModel 作用域
  • circle测试导航

8性能优化与调试

识别重组问题、使用 Profiler 工具、避免不必要的重组等面试高频话题。

重组优化策略

减少重组范围、稳定参数、key 的作用。

  • circle使用稳定的类型与 @Stable 注解
  • circlekey 参数与 content lambda 的稳定化
  • circle避免在组合中使用高成本计算
  • circle延迟组合信息读取

调试工具与技巧

利用 Layout Inspector、Compose Compiler 指标。

  • circleAndroid Studio Compose 布局检查器
  • circle开启重组计数与 Compose 编译器报告
  • circleCompose Tracing 与系统跟踪

常见性能陷阱

不当使用 Modifier 链、大量 BackHandler、频繁测量等。

  • circle不要在高频重组位置读取配置
  • circle避免在 modifier 中使用 remember 过重状态
  • circleLazyList 项目 key 的重要性

9测试

面试中常询问如何对 Compose UI 进行单元测试和 UI 测试。

Compose 测试基础

测试依赖、ComposeTestRule 与语义树。

  • circle添加测试依赖
  • circleComposeTestRule 的创建与使用
  • circleSemantics 树与查找器

常见测试操作与断言

模拟用户交互,验证 UI 状态。

  • circle执行手势操作
  • circle断言节点属性与状态
  • circle测试重组与状态变化

高级测试与最佳实践

同步、空转、自定义语义及与 ViewModel 集成测试。

  • circle使用 waitForIdle 与主线程同步
  • circle自定义 SemanticsProperty 以便测试访问
  • circle与 ViewModel 和 Hilt 的结合测试

10Compose 与 View 系统互操作

如何在现有 View 工程中集成 Compose,以及 Compose 中嵌入 View。

在 View 系统中使用 Compose

通过 ComposeView 在布局中嵌入可组合项。

  • circleComposeView 的使用与生命周期绑定
  • circle在 RecyclerView 中混合使用 Compose
  • circle与现有的 ViewModel 和 LiveData 结合

在 Compose 中嵌入传统 View

使用 AndroidView 包装旧 View。

  • circleAndroidView 基础用法
  • circleAndroidView 的更新时机与缓存
  • circle在 Compose 中嵌入 MapView 或 WebView 等复杂 View

过渡策略与迁移建议

逐步从 View 迁移到 Compose 的实践方法。

  • circle按功能模块逐步引入 Compose
  • circle共享资源与主题兼容
  • circle处理事件分发与返回键冲突