Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

00 面试路线与自我定位

这一篇不讲技术,讲策略。你不是普通的应届/转行选手,你是“底层强、应用层有空白“的特殊画像。打法和别人不一样。

一、你的优势与劣势盘点

优势(面试中要主动亮出来)

能力普通应用开发者
C/C++ / NDK / JNI大多不会或只会调用能独立写 SDK
系统底层 / so / 内存模糊熟悉
逆向 / 安全 / 对抗视角几乎没有是你的饭碗
性能极限优化意识一般强(SDK 对体积/性能敏感)

这些是你的护城河。很多 App 团队正缺懂 native、懂性能、懂安全的人(音视频、IM、支付、出海 App 尤其需要)。

劣势(面试中会被重点拷问,必须补)

  1. UI 层:View 绘制流程、事件分发、自定义 View、Compose —— 应用岗的核心,你接触少。
  2. Kotlin 协程 / Flow:现代 Android 异步基石,你不熟。
  3. Jetpack 全家桶:ViewModel/Room/Navigation/Hilt/DataStore,应用开发日常。
  4. 应用架构:MVVM/MVI、单向数据流、分层 —— 中级必考。
  5. 主流业务库实战:Retrofit/Glide/OkHttp 的工程化用法。

二、转型叙事:怎么讲你的故事

面试官一定会问:“你之前做风控 SDK,为什么转应用开发?能行吗?” 准备好这套话术:

“我在风控 SDK 做的是 Android 最底层的部分——native 采集、对抗、性能与体积优化。这让我对系统机制(Binder、进程、内存、so 加载)有比一般应用开发者更深的理解。我想往上走,把这份底层功底用在完整的产品上。UI 和上层框架是我最近重点补的,我已经系统学了协程、Compose、Jetpack 和 MVVM 架构。”

关键三点:

  • 不贬低过去:底层经验是稀缺的,要包装成“比别人更懂系统“。
  • 承认短板但展示行动:“我已经系统学了 X、Y、Z”(配合本资料的学习成果)。
  • 给团队一个理由:“我能补团队在 native / 性能 / 安全上的短板”。

三、目标岗位选型(扬长避短)

优先投这些方向,你的底层背景是加分项而非累赘。每个方向都按“为什么契合 → 面试会问什么 → 怎么包装经历 → 可能追问“准备:

  • 音视频 / 直播 App
    • 为什么契合:音视频链路常接触 FFmpeg、编解码、OpenGL/音频采集、native crash 与性能调优,你的 C++/NDK/JNI 经验能直接迁移。
    • 面试会问:JNI 调用开销怎么控制?native 崩溃怎么定位?音视频卡顿如何拆解到采集、编码、网络、渲染各环节?
    • 怎么包装:把风控 SDK 里的 native 模块讲成“在宿主 App 约束下做稳定、低开销、可回滚的 native 能力“,突出跨层调用、线程模型、so 体积和崩溃治理。
    • 可能追问:如果没做过播放器,不要硬装;回答“音视频业务链路我需要补,但 native 性能、JNI 边界、crash 定位这些底层问题我能快速接住“。
  • IM / 通讯
    • 为什么契合:IM 重视连接稳定性、弱网、消息可靠性、离线/重连和端侧性能,很多问题不是纯 UI,而是协议与状态机。
    • 面试会问:弱网下如何保证体验?长连接断线重连怎么设计?消息去重、ACK、重试和本地落库怎么取舍?
    • 怎么包装:强调你做 SDK 时对宿主环境、网络/设备差异、异常采集和后台约束的敏感度,把它转成“端侧可靠性“语言。
    • 可能追问:若被问到完整 IM 架构,先按“连接层 → 消息状态 → 本地缓存 → UI 同步 → 失败补偿“分层,不要一上来堆大规模服务端名词。
  • 出海 App / 工具类
    • 为什么契合:出海和工具类常受包体积、机型兼容、启动速度、隐私合规、多语言环境影响,SDK 背景天然关注“不能拖累宿主“。
    • 面试会问:包体积怎么拆?so ABI 如何收敛?低端机启动/内存如何优化?兼容性问题怎么排查?
    • 怎么包装:讲你如何在 SDK 约束里做延迟初始化、按需加载、ABI/符号裁剪、异常兜底;这些都能转化为 App 侧工程质量。
    • 可能追问:遇到隐私/合规问题时,用“最小化采集、用户授权、可配置开关、日志脱敏“这类工程原则回答,不要编造具体合规项目。
  • 支付 / 金融 App
    • 为什么契合:支付金融对安全、风控、稳定性和审计非常敏感,你的对抗视角能帮助团队提前发现风险点。
    • 面试会问:如何防 Hook/篡改/重放?敏感数据怎么保护?安全能力如何避免影响性能和用户体验?
    • 怎么包装:把风控经验翻译成“安全风险识别 + 端侧防护 + 性能可控 + 可观测“;强调防御和工程治理,而不是炫攻击细节。
    • 可能追问:被追具体安全方案时,保持防御视角,说清威胁模型、边界和误报成本;不要夸大成“完全防住“。
  • 大厂基础架构 / 性能团队
    • 为什么契合:基础架构和性能团队关注启动、APM、稳定性、包体积、native 质量和跨业务复用,与你的 SDK 工程经验最接近。
    • 面试会问:启动耗时如何拆解?APM 指标怎么定义?native crash 符号化怎么做?一个优化如何灰度和回滚?
    • 怎么包装:突出“做给多个宿主/业务使用“的 SDK 思维:接口稳定、兼容性、监控、降级、性能预算、发布质量。
    • 可能追问:如果问到业务产品经验不足,回应“我更适合先从性能/稳定性/native 基建切入,同时补齐 UI 和业务架构“。

谨慎投:纯营销活动类、纯 UI 堆叠的业务岗 —— 这类岗位你的优势用不上,而短板暴露无遗。

四、典型面试流程与各轮重点

轮次考察重点典型问题回答结构易翻车点
一面(基础)Kotlin、四大组件、UI、协程、集合并发“协程取消怎么生效?”“View 事件分发怎么走?”“Activity 重建怎么保状态?”先给一句结论,再按“机制 → 场景 → 易错点“三段答;不会展开源码时,至少说清生命周期/线程/状态边界只会背概念、不敢承认 UI/Jetpack 短板;把底层强项当借口跳过基础题
二面(深入)架构、性能、原理、项目细节“一个页面你怎么分层?”“启动慢怎么定位?”“SDK 怎么不拖累宿主?”用“问题现象 → 指标拆解 → 定位工具 → 方案取舍 → 验证结果“讲;项目题用 STAR,结果处只填真实数据讲项目只有职责没有决策;性能优化只说“异步/缓存“不讲指标和验证
三面(亮点)难题、系统设计、native、稳定性“native crash 怎么治理?”“设计一个端侧 APM/埋点 SDK”“安全能力如何灰度?”把主场拉到“NDK/JNI → 稳定性 → 性能预算 → 监控回滚“;系统设计按需求、约束、模块、数据流、失败处理讲炫技过多,忽略业务约束;安全话题讲成攻击教程;承诺无法验证的效果
HR 面稳定性、薪资、转型动机“为什么转应用?”“短板怎么补?”“未来 2-3 年规划?”用第二节叙事:肯定过去价值,承认上层短板,展示学习行动和岗位匹配;薪资提前准备区间抱怨前公司/旧方向;把转型说成逃离;用空话证明学习能力

每轮都要准备一个“桥接句“:我过去做的是底层 SDK,现在补的是应用层 API 和架构实践;底层经验能帮助我在性能、稳定性、安全问题上比普通应用开发者更快定位根因。 这句话不是万能答案,而是把话题从“你没做过完整 App“拉回“你能给团队补什么能力“。

五、两个月冲刺计划(参考)

  • 第 1-2 周:Kotlin 核心 + 协程/Flow(02 篇,最薄弱,先攻)。
  • 第 3-4 周:UI 体系 View + Compose(05、06 篇)。
  • 第 5 周:Jetpack + 架构(07、08 篇)。
  • 第 6 周:系统原理 + 性能优化(09、10 篇)。
  • 第 7 周:复习强项 NDK/JNI 做亮点(11),刷主流库(12)。
  • 第 8 周:项目复盘(14)、算法、模拟面试、iOS 速览(13)。

六、心态提醒

你不是从零开始。底层功底是很多面试官给不出、也很羡慕的硬实力。你要补的是“上层广度“,这是可以在两个月内系统补齐的知识型短板,而不是需要多年积累的经验型短板。把姿态放在“我是带着系统功底来做应用“的位置,而不是“我是个 UI 新手“。