Duolingo Android 团队近两届招聘节奏稳定但门槛在抬高。Kotlin / Compose 已是默认假设,候选人不会就直接进 reject 池。本篇基于 oavoservice 学员复盘整理,把 Duolingo Android 流程、题型、判分维度讲清楚。
一、Duolingo Android SDE 招聘流程
| 阶段 | 形式 | 时长 |
|---|---|---|
| Recruiter Screen | 30 min | BQ + 项目 |
| HackerRank Kotlin OA | 1 题 | 60 min |
| Phone Tech | Coding + Android 概念 | 45 min |
| Onsite Loop | 4 轮(含 HM) | 半天 |
| HM Wrap | 30 min | culture fit |
节奏特点:Duolingo 强调「真实交付能力」,不喜欢「只会刷 LC 不会写 App」的候选人。Onsite 至少有 1 轮是写一个完整 Compose 组件或改造一个开源 Activity。
二、HackerRank Kotlin OA:1 题 60 分钟
OA 平台是 HackerRank,Kotlin 是默认语言(也允许 Java,但出题风格仍是 Android 思维)。常见方向:
| 方向 | 频次 | 关键技巧 |
|---|---|---|
| 字符串 / 集合操作 | 高 | Kotlin extension function |
| 简单 DP | 中 | 一维 |
| 数据流处理 | 中 | Sequence + chain |
| OOP 设计 | 中 | sealed class |
学员还原题:课程进度合并
用户的多次学习记录
sessions[i] = (lesson_id, t, score),要求每个 lesson 取最高分,并按lesson_id排序输出。用 Kotlin idiomatic 写法。
fun mergeProgress(sessions: List<Triple<Int, Long, Int>>): List<Pair<Int, Int>> =
sessions
.groupBy { it.first }
.mapValues { (_, list) -> list.maxOf { it.third } }
.toSortedMap()
.toList()
判分点:能否用 groupBy + mapValues 这类 Kotlin idiom;能否避免可变变量;能否在 5 行内完成。
三、Phone Tech:Coding + Android 概念
Coding 部分
经常给一道带状态的 LC Med,例如 LRU、Snake Game 简化版、扫雷布尔展开。Duolingo 看的是:
- 命名是否清晰(Kotlin 命名规范要熟)
- 是否主动写测试用例
- 是否在 Compose / Coroutine 角度讨论扩展
Android 概念部分
| 概念 | 出现频次 |
|---|---|
| Activity / Fragment 生命周期 | 极高 |
| Coroutine 与 Flow | 极高 |
Compose 重组与 remember |
高 |
| ViewModel 与 LiveData / StateFlow | 高 |
| Memory leak(Handler / inner class) | 中 |
| Configuration change 处理 | 中 |
面试官真正想听:你能否说清 LaunchedEffect 何时触发、remember 的 key 怎么选、StateFlow.collectAsState 与 LiveData.observeAsState 的差别。
四、Onsite Loop:4 轮典型组合
Round 1: 算法 + 复杂度
LC Med 偏经典题:Word Ladder、LRU、Trie。Duolingo 不爱出 trick。
Round 2: Compose UI 实战
学员还原题:
实现一个「答题卡」组件:显示题干 + 4 个选项;选中后高亮,2 秒后自动提交;提交后显示「正确 / 错误」状态。要求 Compose 实现。
@Composable
fun AnswerCard(
question: String,
options: List<String>,
onSubmit: (Int) -> Unit,
) {
var selected by remember { mutableStateOf<Int?>(null) }
var submitted by remember { mutableStateOf(false) }
LaunchedEffect(selected) {
if (selected != null && !submitted) {
delay(2000)
submitted = true
onSubmit(selected!!)
}
}
Column {
Text(question, style = MaterialTheme.typography.h6)
options.forEachIndexed { index, opt ->
val color = when {
submitted && index == selected -> Color.Green
index == selected -> Color.Yellow
else -> Color.Transparent
}
Row(
Modifier
.fillMaxWidth()
.background(color)
.clickable(enabled = !submitted) { selected = index }
.padding(12.dp),
) {
Text(opt)
}
}
}
}
判分点:
- 是否用
remember而不是mutableStateOf直接 top-level - 是否用
LaunchedEffect(selected)而不是setTimeout类方案 - 是否有「提交后 disable 点击」防止重复提交
Round 3: 架构题(System Design 缩小版)
常见题:
- 设计 Duolingo 的「连击保护」(streak freeze)
- 设计离线模式 + sync 队列
- 设计推送通知调度(含 quiet hours)
面试官评分:能不能输出有状态机的方案,不是泛泛而谈「用 Room 存」。
Round 4: HM + Behavioral
Duolingo 文化关键词:learning, gamification, intrinsic motivation。如果你能在 BQ 里讲一个「自己为了学习一个新东西做了哪些 gamification」,会大幅提分。
五、踩坑清单
| 红线 | 说明 |
|---|---|
| Compose 不会 | 直接 reject |
| Coroutine 概念混乱 | 必问,错一次基本翻车 |
| BQ 没有量化结果 | HM 直接拒 |
| 不能用 idiomatic Kotlin | 减分但不致命 |
| 沉默写代码 | Duolingo 强调 communication |
| Onsite 不熟悉 Duolingo App | 减分(建议提前用 1 周) |
六、备战节奏(建议 4 周)
| 周次 | 任务 |
|---|---|
| W1 | LC Med 50 题 + Kotlin idiom 复习 |
| W2 | Compose 教程 + 写 3 个完整组件 |
| W3 | 架构题:流式同步、状态机 |
| W4 | 全 Loop mock + Duolingo App 实操 |
七、面试官评分维度(来自学员 debrief)
| 维度 | 占比 | 触发关键词 |
|---|---|---|
| Compose / Kotlin idiom | 30% | remember, LaunchedEffect, Flow |
| 状态管理 | 25% | StateFlow, ViewModel |
| 架构清晰 | 20% | layered, single source of truth |
| 算法基础 | 15% | LC Med 写得干净 |
| Culture fit | 10% | learning + gamification 共鸣 |
FAQ
Duolingo 用什么版本控制 / CI?
Git + GitHub Actions。Onsite 偶尔会问「你怎么写 PR description」「你怎么 review 别人代码」。
Duolingo 转正率?
近两届 Intern 转正率约 50–60%;New Grad 第一年留存率较高。
Onsite Loop 能 remote 吗?
Pittsburgh / NYC HQ 偏好 onsite,但允许部分 remote loop(视团队)。Final HM 通常希望到现场。
Duolingo 不要求会 iOS / Backend 吗?
Android 岗位主要看 Android 栈;但懂一点 backend / GraphQL会加分(Duolingo 主栈是 GraphQL + Kotlin)。
正在准备 2026 Duolingo Android SDE?
oavoservice 跟踪 Duolingo Android 流程已经超过 2 年,覆盖 OA / Phone Tech / Compose Onsite / 架构题 全流程。提供 Kotlin idiom 模板、Compose 实战包、架构题精讲、HM mock 全链路服务。
👉 立即添加微信:Coding0201,获取 Duolingo 当周 OA 真题与备考方案。
联系方式
Email: [email protected]
Telegram: @OAVOProxy