20 问覆盖渲染原理(Flutter 三棵树/RN JSI 新架构/KMP 共享粒度/ArkUI-X)、方案对比(选型三清单/坚决不跨端的场景)与工程实践(桥接要点/混排栈/CI 矩阵),含「引入跨端的渐进路线」设计题。
跨端开发面试的本质是选型论证:面试官想看的是你有没有「按约束做决策」的能力,而不是背一遍框架列表。这份 20 问覆盖渲染原理、方案对比、工程实践三个层面——先把原理问清楚,再谈怎么选。
一、渲染原理(6 问)
1. Flutter 为什么能跨端保持一致渲染?
自带渲染引擎(Impeller/Skia)完整接管 UI 绘制,不依赖平台控件,用同一个渲染管线在所有平台画一样的像素。代价:包体自带引擎、无障碍/系统字体等平台能力要走桥接。
2. Flutter 的三棵树是什么?
Widget(不可变配置)、Element(实例与生命周期,持有复用关系)、RenderObject(布局与绘制)。Widget 重建很廉价(只是配置对象),真正昂贵的是 RenderObject 重建——这是「const 优化」的理论基础。
3. React Native 新架构解决了什么?
旧架构的异步桥序列化开销大;新架构(JSI + Fabric + TurboModules)让 JS 与原生直接同步调用,UI 管理由 Fabric 统一,原生模块按需懒加载。答题要点:JSI 是同步、无序列化的直接调用通道。
4. WebView H5 与原生容器方案的本质差异?
WebView 方案所有渲染走浏览器引擎,桥接是「JS ↔ 原生」的消息通道;原生容器方案渲染与逻辑都在原生/自绘管线里。体验差距的根源在渲染路径长短与线程模型。
5. KMP(Kotlin Multiplatform)的定位与其他方案的差别?
KMP 默认只共享逻辑层(网络、存储、业务规则),UI 各端原生写;配合 Compose Multiplatform 才共享 UI。它不是「一套代码全端跑」,而是「按层选择共享粒度」——这是它面试里最大的加分认知。
6. HarmonyOS ArkUI-X 的跨端机制?
ArkTS/ArkUI 代码复用到 iOS/Android,同样走「框架自渲染 + 平台桥接」路线。对国内团队的意义:鸿蒙优先的应用可以以鸿蒙工程为主干,跨出双端。以官方文档的最新支持矩阵为准。

二、方案对比与选型(7 问)
7. Flutter 与 RN 怎么选?
一致性体验与复杂动效优先 → Flutter(自绘一致性最好);团队 React 栈、需要热更新与 Web 生态 → RN。动态更新能力在国内的合规现状是必问的追问点。
8. KMP 与 Flutter 能共存吗?
能:KMP 共享业务逻辑层,Flutter 只做 UI 壳,通过 Kotlin/Native 或 FFI 桥接。适合已有 KMP 基础设施又想要自绘 UI 的团队,但复杂度高,中小团队不建议。
9. 「一套代码跑所有端」的承诺怎么评估?
看三个清单:目标端能力覆盖度(小程序/鸿蒙支持?)、条件编译比例(代码里 if (platform) 越多承诺越虚)、双端体验下限。承诺兑现度 = 最弱那端的表现。
10. 小程序跨端框架(Taro/uni-app)的运行时成本?
编译时方案产物接近原生小程序(体积小、兼容性好);运行时方案(如在小程序里模拟 DOM/BOM 跑 React)灵活但多一层开销。新项目优先编译时。
11. 什么场景坚决不要跨端?
强平台特性(系统级动画、繁重原生 API)、性能极限场景(大型游戏、实时图形)、单端业务却背上跨端复杂度。答出「跨端是成本换覆盖,不覆盖就不该付成本」。
12. 跨端方案的团队技能迁移成本怎么评估?
看语言亲和(React 栈 → RN,移动端 Kotlin 栈 → KMP/Compose MP,Web 全栈 → Flutter 学习曲线最平缓的是 Dart 类 JS 语法)与原生深度需求(需要写多少原生插件)。
13. 多端灰度与发布节奏怎么统一?
跨端不等于同步发布:各端审核节奏不同,需按端独立灰度;业务功能开关下沉到服务端配置,让「代码已发但功能未开」成为常态。
三、工程实践(7 问)
14. 原生插件/桥接的开发要点?
接口最小化(桥上只传数据不传行为)、异步优先(避免阻塞 UI 线程)、错误码规范、版本兼容(原生 API 降级路径)。桥是跨端方案里最容易出事故的层。
15. 跨端状态管理与数据同步?
逻辑层共享时状态放共享层(KMP 的 ViewModel、Flutter 的 Riverpod/Bloc),UI 层各端绑定;禁止 UI 层各自维护一份业务状态副本。
16. 跨端 UI 的一致性怎么验收?
设计 token 统一(颜色/间距/字号集中定义)、截图对比自动化(各端跑同一页面 diff)、设计评审时按端过稿。
17. 跨端项目的 CI/CD 有什么不同?
多端构建矩阵(iOS 签名/Android/小程序/鸿蒙)、产物分发到各自渠道、版本对齐管理(公共层版本 ↔ 各端壳版本)。加分点:提到「壳版本与业务包版本解耦」。
18. 混合栈(原生 + 跨端页面混排)的关键问题?
页面栈统一(跨端容器作为原生路由的叶子)、内存与生命周期对齐、预加载与回收策略(容器预初始化,进退场不白屏)。
19. 跨端的性能监控怎么做?
分端采集(各自的启动/崩溃/帧率)+ 统一业务维度聚合;共享逻辑层的性能问题要在逻辑层埋点才能定位,不能只看端侧指标。
20. 让你为一个「已有双端原生 App 的团队」引入跨端,怎么答?
先问动机(降本?新业务提效?鸿蒙补充?),再给渐进路线:新业务模块用跨端做(风险隔离)→ 建立桥接与发布基建 → 逐步替换低频页面 → 原生保留核心体验页。这问考察「渐进迁移」思维,答「全量重写」基本出局。
#跨端开发#Flutter#React Native#面试题

