Canva SDE 面经:设计工具大厂的后端面试
CanvaSDEinterviewprocessbackendjavamulti-threadingsystemdesign

Canva SDE 面经:设计工具大厂的后端面试

本文基于真实候选人面经整理Canva面试全流程。还原面试题目、解题思路与技术考察重点,覆盖Java、LeetCode、算法、系统设计,附详细准备策略助你高效备战。

Sam · · 9 分钟阅读

Canva 的面试给我最大的感受是:它不太追求 tricky 的算法题,而是重点考察代码的 robustness、思路清晰度以及对系统设计和多线程模型的理解。

他们后端主要用 Java,所以如果你能用 Java 写代码是加分项。

面试流程

投递/内推 → Recruiter 电话 → 三轮技术面试(每轮 45-60 分钟)→ Debrief → Offer

整体周期大概 2-3 周。

第一轮:纯 Coding

难度大概在 LeetCode 中等偏简单的范围。

我的题目:Summary Ranges 变种

跟 LeetCode 228(Summary Ranges)类似,但题干稍微变了一点。题目给一串整数,要求找出连续区间的表达形式。

比如 [0,1,2,4,5,7] 输出成 ["0->2","4->5","7"]

public List<String> summaryRanges(int[] nums) {
    List<String> result = new ArrayList<>();
    if (nums.length == 0) return result;
    
    int start = nums[0];
    for (int i = 1; i <= nums.length; i++) {
        if (i == nums.length || nums[i] != nums[i-1] + 1) {
            if (start == nums[i-1]) {
                result.add(String.valueOf(start));
            } else {
                result.add(start + "->" + nums[i-1]);
            }
            if (i < nums.length) start = nums[i];
        }
    }
    return result;
}

复杂度:O(n) 时间,O(1) 额外空间。

这轮的考点

  • 边界条件——空数组、单个元素、全部连续、全部不连续
  • 代码清晰度——变量命名、注释、结构
  • 测试用例——面试官会要求你写一些测试

第二轮:系统设计 + Coding

这轮我开始觉得 Canva 的风格了。

系统设计题目:设计一个图片上传服务

题目要求:

  • 支持多种图片格式(JPG、PNG、SVG)
  • 自动生成缩略图
  • 支持 CDN 分发
  • 处理大文件上传(100MB+)

我的方案:

  1. 上传接口——支持分片上传,避免大文件超时
  2. 图片处理——异步任务队列处理缩略图生成
  3. 存储——S3 存储原图和缩略图
  4. CDN——CloudFront 分发
  5. 元数据——数据库存储图片信息(尺寸、格式、URL)

Coding 题目:多线程图片处理

实现一个线程池,用于并发处理图片。要求支持动态调整线程数、任务优先级和失败重试。

这道题我用了 Java 的 ExecutorService + PriorityBlockingQueue

class ImageProcessor {
    private final PriorityBlockingQueue<Runnable> taskQueue;
    private final ExecutorService executor;
    private final int maxRetries;
    
    public ImageProcessor(int threads, int maxRetries) {
        this.maxRetries = maxRetries;
        this.taskQueue = new PriorityBlockingQueue<>();
        this.executor = Executors.newFixedThreadPool(threads);
    }
    
    public void submit(ImageTask task) {
        for (int i = 0; i <= maxRetries; i++) {
            try {
                executor.submit(task).get();
                break;
            } catch (Exception e) {
                if (i == maxRetries) throw e;
            }
        }
    }
}

这轮的考点

  • 多线程基础——线程池、并发集合、锁
  • 系统设计能力——架构设计、组件拆分
  • 工程思维——可扩展性、容错性

第三轮:Behavioral + 技术深度

比较轻松的一轮,聊了:

  • 为什么选 Canva?
  • 对设计工具的理解
  • 遇到的最大技术挑战
  • 团队协作经历

备考建议

算法

重点练习:

  • 数组/字符串处理——Canva 的 coding 题偏这类
  • 多线程——线程池、并发集合、锁
  • 系统设计基础——服务拆分、API 设计

系统设计

重点准备:

  • 图片/文件处理系统
  • 异步任务队列
  • CDN 架构
  • 多线程编程

Java 基础

  • 并发编程(ExecutorService、CompletableFuture)
  • 集合框架(HashMap、ArrayList、Queue)
  • IO 处理(File、Stream、NIO)

FAQ

Canva 面试难吗?

难度中等,不太追求 tricky 算法,但看重代码质量和系统设计能力。

Canva 的薪资怎么样?

2026 年 SDE NG 大概 $120-150K base + $40-80K RSU 总包(悉尼办公室)。在澳洲属于高水平。

面试周期多久?

一般 2-3 周。


💡 需要面试辅导?

如果你对准备技术面试感到迷茫,或者想要个性化的面试指导和简历优化,欢迎联系 Interview Coach Pro 获取一对一辅导服务。

👉 联系我们 获取专属面试准备方案

准备好拿下下一次面试了吗?

获取针对你的目标岗位和公司的个性化辅导方案。

联系我们