2025-2026 Duolingo 多邻国 SDE 最新面经:OA + Karat + VO 全流程解析 | 代面辅导
综合多位候选人 2025-2026 年 Duolingo SDE Recent Grad / NG 面试经历,整理从 OA 到 VO 的完整流程、真题解析及过面技巧。

一、面试流程总览
Duolingo SDE 的面试链路清晰,主要分三个阶段:
| 阶段 | 形式 | 时长 | 内容 |
|---|---|---|---|
| CodeSignal OA | 在线编程 | ~90min | General Coding,可分享代码,不开摄像头 |
| Karat 视频面试 | 真人视频 | ~45min | 3 道简答 + 1 道 Coding |
| Virtual Onsite (VO) | 多轮视频 | 4-5h | Pair Coding / Code Review / Whiteboard / Coffee Chat |
时间线参考:OA → 约一周后 Karat → 通过后约两周 VO → HR 反馈后出结果(通常 1-2 周,但有多位候选人反映 HR ghost 后第三周才发拒信)。
二、CodeSignal OA
- 形式:CodeSignal General Coding 测评
- 宽松度:极高 —— 可以分享做过的 OA、不用开摄像头、似乎没有网页检测
- 难度:中等,General Coding 题型以中等算法为主
💡 Tip:Duolingo 的 OA 是整个流程中最宽松的一环,好好准备 General Coding 题库即可。
三、Karat 视频面试
Karat 是 Duolingo 的核心筛选环节,包含 3 道简答题 + 1 道 Coding。
简答题(Behavioral)
简答题与 Duolingo 常见题库一致,建议准备:
- 冲突解决 / 团队协作场景
- 技术决策 / 架构权衡
- 个人成长 / 学习能力
⚠️ 重要信息:Karat 官方邮件和面试官都表示可以对第一次不满意的话在 24h 内重新约,两次结果一起发给 Duolingo。但有候选人反馈 Karat 工作人员称是 Duolingo HR 要求不给第二次机会。建议认真对待每一轮,不要依赖"第二次机会"。
Coding 真题:麻将手牌验证
这是 Karat 中一道较新的 Coding 题:
题目描述:
一副包含 1-9 的麻将手牌(字符串形式),如
"11123456",要求判断手牌是否合规。合规规则:
- 必须包含一组且仅一组"将"(两张相同的牌,如
11)- 剩余牌可组成任意多组顺子(连续三张,如
123)和刻子(相同三张,如111)共 15 个测试用例,无 hidden test case。
解题思路:回溯法(Backtracking)
def is_valid_mahjong(hand: str) -> bool:
"""判断麻将手牌是否合规"""
counts = [0] * 10 # 1-9 的计数
for ch in hand:
counts[int(ch)] += 1
n = len(hand)
if n % 3 != 2: # 合法手牌长度必须满足 3k+2
return False
def backtrack(start):
# 基础情况:所有牌已用完
if all(c == 0 for c in counts):
return True
# 找到第一个有剩余的非零牌
i = start
while i <= 9 and counts[i] == 0:
i += 1
if i > 9:
return False
# 尝试刻子 (triplet)
if counts[i] >= 3:
counts[i] -= 3
if backtrack(i):
return True
counts[i] += 3
# 尝试顺子 (sequence)
if i <= 7 and counts[i+1] > 0 and counts[i+2] > 0:
counts[i] -= 1
counts[i+1] -= 1
counts[i+2] -= 1
if backtrack(i):
return True
counts[i] += 1
counts[i+1] += 1
counts[i+2] += 1
return False
# 枚举每一对作为"将"
for pair in range(1, 10):
if counts[pair] >= 2:
counts[pair] -= 2
if backtrack(pair):
counts[pair] += 2
return True
counts[pair] += 2
return False
复杂度分析:
- 时间:,枚举将牌 ,回溯分支最多 2 种(刻子/顺子)
- 空间: 递归深度
💡 关键坑点:一定要包含一组且仅一组将。有 2 个测试用例专门考察这一点 —— 比如
"111111"虽然全是刻子但没有将牌,应返回False。

🎯 Duolingo Karat 偏好:多位候选人反映 Duolingo 非常喜欢考 Backtracking 题型,建议重点准备排列组合、子集枚举、回溯搜索类题目。
四、Virtual Onsite (VO) 全流程
VO 总时长约 4-5 小时,分 5 个环节,每轮开始都有简单的双方自我介绍,没有拷打简历环节。可选语言为 Python 和 Java。
Round 1: HR Welcome Session(15min)
- 介绍 timeline 和面试流程
- HR 会特别关注 GPA —— 有候选人反馈 HR 主动询问 GPA,说明 Duolingo 可能比较看重学历背景
- 建议准备几个自己的问题
Round 2: Pair Coding(75min)⭐ 核心轮
形式:VSCode Live Share,面试官在其前端网页实时查看你的代码运行结果。
真题:
给一句英文句子,每个单词有多个可选的西语翻译(称作 "hints")。要求按以下规则对 hints 排序:
- Step 1:按字典序排序
- Step 2:给定整句的最佳翻译和可选翻译,据此生成 hints 的优先级并重新排序
from collections import defaultdict
def sort_translation_hints(sentence: str, hints: dict, best_translation: str) -> dict:
"""
sentence: 英文原句
hints: {word: [hint1, hint2, ...]} 每个单词的可选翻译
best_translation: 最佳西语翻译
"""
result = {}
best_words = best_translation.split()
for i, word in enumerate(sentence.split()):
word_hints = hints.get(word, [])
best_hint = best_words[i] if i < len(best_words) else None
# Step 1: 字典序排序
sorted_hints = sorted(word_hints)
# Step 2: 最佳翻译优先
if best_hint and best_hint in sorted_hints:
# 将最佳翻译移到第一位
sorted_hints.remove(best_hint)
sorted_hints.insert(0, best_hint)
result[word] = sorted_hints
return result
⚠️ 极其重要的 Tip:一定要非常注意标点符号的处理!多位候选人提到这道题中标点符号(逗号、句号、感叹号等)是容易出错的地方。建议和面试官充分 clarify 细节。
Round 3: Code Review(1h)
形式:不需要写代码,只需在代码旁加 comments。
真题:
Review 两个函数,功能是 filter 用户在给定时间段内上过的课程。需要阅读的代码行数和文件不多,理解 context 约 5-10 分钟。
考察点:
- Bug 识别(多位候选人表示光是找 bug 就快用完时间)
- 改进 / 重构建议
- 至少需要找出 bug 并提出一些 High-Level 的 refactor 建议
💡 好消息:虽然是 "Backend Code Review",但不需要任何 Backend 知识。重点在于代码阅读能力和 review 方法论。
Round 4: Whiteboard(1h)⭐ 核心轮
真题:LeetCode 329 最长上升路径的变种 —— 最长下降路径(Longest Decreasing Path in a Matrix)。
题目:给定一个 整数矩阵,找出最长严格下降路径的长度。可以从任一单元格开始,向上下左右四个方向移动。
def longest_decreasing_path(matrix: list[list[int]]) -> int:
if not matrix or not matrix[0]:
return 0
m, n = len(matrix), len(matrix[0])
memo = {}
def dfs(r, c):
if (r, c) in memo:
return memo[(r, c)]
max_len = 1
for dr, dc in [(-1,0), (1,0), (0,-1), (0,1)]:
nr, nc = r + dr, c + dc
if 0 <= nr < m and 0 <= nc < n and matrix[nr][nc] < matrix[r][c]:
max_len = max(max_len, 1 + dfs(nr, nc))
memo[(r, c)] = max_len
return max_len
return max(dfs(r, c) for r in range(m) for c in range(n))
复杂度:
- 时间:,每个单元格只计算一次
- 空间:,memo 表 + 递归栈
Follow Up 1:输出最长路径本身(而非仅长度)
解法:对每个点额外记录从该点出发的最长路径方向(上下左右),最后根据记录的方向遍历矩阵即可重建路径。
Follow Up 2:有 次机会可以忽略高度限制,从一个点跳到任意相邻点
解法:DFS 过程中加入参数 ,扩展 memo 维度为
memo[r][c][k],记录剩余次数为 时从 出发的最长路径长度。复杂度变为 。

Round 5: Coffee Chat(15min)
与入职不久的 SWE 闲聊。建议多准备几个问题,不然很快就没话说了。可以问:
- 团队日常 workflow
- 技术栈和代码规范
- 新人 onboarding 体验
- 公司对 Recent Grad 的成长支持
五、Duolingo 面试经验总结
通过技巧
- Karat 重点练 Backtracking:Duolingo Karat 非常偏好回溯类题目
- Pair Coding 注意标点符号:这是最容易翻车的地方
- Code Review 找 Bug + 提 Refactor:不要只找 bug,high-level 重构建议同样重要
- Whiteboard 准备 DFS/Memo 经典题:矩阵路径问题是高频考点
- 充分 Clarify:每轮留 10 分钟问答,善用这个时间
注意事项
- Duolingo 面试基本都是原题,难度和区分度不高,刷面经效果显著
- 有候选人反映 Duolingo 会根据学校背景筛选,即使 VO 面完也可能因学校被拒
- 多人反映感觉面得很好但最终被拒,Duolingo 的 bar 比较玄学,不必因被拒而自我怀疑
- HR 可能 ghost 消息,出结果时间不确定,保持耐心
六、Duolingo 代面 / 辅导服务
Duolingo SDE 面试流程相对固定,题目复用率高,是可以通过充分准备高效通过的。我们的代面团队有多位 Duolingo VO 成功通过经验,覆盖 Pair Coding、Code Review、Whiteboard 各轮。
如果你正在准备 Duolingo 面试或希望获得一站式代面服务,欢迎联系我们 👉 点击咨询
我们也提供:
- Duolingo OA 代做 | Karat 代面 | VO 代面
- 简历修改 | 面试辅导 | 一对一模拟面试
- 更多公司面经:浏览博客