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 stack;但懂一點 backend / GraphQL會加分(Duolingo 主 stack 是 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