目录
正在加载目录...

Google SWE Intern Interview|两轮 Back-to-Back Coding 45 分钟

在 Google SWE Intern Interview 的招聘流程中,部分候选人会经历两轮 back-to-back coding interviews 45 分钟。本次面经记录了两轮 coding 面试的题目和后续 follow-up,整体重点集中在二维网格搜索、记忆化 DFS、字符串处理以及复杂度优化。

Google SWE Intern Interview|两轮 Back-to-Back Coding 45 分钟

Google 27 Intern Coding Interview Overview

  • 岗位: Google 2027 Intern
  • 面试轮次: 2 轮 Coding Interview
  • 面试形式: Back-to-back
  • 每轮时间: 45 分钟
  • 主要考察: Coding、算法思路、复杂度分析、Follow-up

After two interview rounds, candidates are soon notified to advance. The steps may vary by batch and candidate, leading to the Google SWE Intern Interview Team Match phase.

R1:二维高度矩阵中的水流终点

第一轮是一道二维矩阵搜索题。

给定一个二维高度矩阵,假设每个格子中都有一滴水。水会沿着最陡的下降方向流动。如果当前位置已经位于最低点,水会停留在当前格子;如果水流到边界之外,则认为水流出矩阵。

要求返回每个格子的最终终点坐标。

解题思路

对于每个格子,可以检查其相邻位置,找到高度下降幅度最大的方向,也就是最陡的下降方向。

确定下一个位置后,可以继续寻找该位置的最终终点。

如果当前格子位于边界,并且水可以继续流出矩阵,则直接记录对应的越界坐标。如果当前位置已经没有更低的位置,则当前位置就是最终终点。

由于不同格子的水流路径可能重复,可以使用 Memoization + DFS。

第一次计算某个格子的终点后,将结果保存下来。之后其他格子再次到达这个位置时,就可以直接使用已经计算好的结果,而不需要重复搜索。

可以将每个格子的状态理解为:

current cell
      ↓
steepest downhill neighbor
      ↓
neighbor's final destination

如果没有更低的邻居,则:

current cell → current cell

如果水流出边界,则:

current cell → outside coordinate

complexity

使用记忆化 DFS 后,每个格子的最终状态只需要计算一次,因此整体复杂度可以控制在:

时间复杂度:O(m × n)

空间复杂度:O(m × n)

where m × n 是矩阵的大小。

R2:使用 9 个字母组成最长单词

第二轮是一道字典和字符串处理题。

给定一个 dictionary 和 9 个字母,需要从 dictionary 中找到一个可以由这 9 个字母组成的最长单词。

每个输入字母最多只能使用一次。

例如,可以将输入的 9 个字母统计成:

a: 2
b: 1
c: 1
...

然后检查 dictionary 中的单词是否能够由这些字母组成。

解题思路

可以先对 dictionary 进行预处理。

对于每个单词,统计其中每个字母出现的次数,并保存对应的单词长度。

例如:

apple

可以转换成对应的字母计数:

a: 1
p: 2
l: 1
e: 1

然后对所有单词按照长度从大到小排序。

查询时,首先统计输入的 9 个字母分别出现多少次,然后从最长的单词开始检查。

如果某个单词中每个字母的出现次数都不超过输入字母的数量,那么这个单词就是符合条件的最长单词,可以直接返回。

判断条件可以理解为:

word_count[c] <= input_count[c]

对于单词中的每一个字符都满足这个条件,则说明该单词可以由给定字母组成。

complexity

如果 dictionary 已经完成预处理,并且按照单词长度进行排序,那么查询时可以优先检查较长的单词。

具体复杂度取决于 dictionary 的规模以及单词平均长度。

面试过程中除了完成 coding,还需要根据 follow-up 进一步讨论如何优化复杂度。

Follow-up:复杂度优化

这两轮 coding 面试中,一个比较明显的特点是,完成基本题目后还会继续进行 follow-up。

Follow-up 重点之一是:

如果需要处理更大的输入,如何优化当前 solution 的时间复杂度?

因此面试时不能只停留在:

“代码可以通过。”

还需要能够解释:

  • current solution 的时间复杂度是多少
  • 哪一步是主要的性能瓶颈
  • 是否存在重复计算
  • 能不能提前预处理数据
  • 能不能使用 Hash Map / Memoization
  • 如果输入规模扩大,solution 是否仍然可行

例如第一题中,Memoization 的作用就是避免不同路径重复计算同一个格子的最终终点。

第二题则可以通过 dictionary preprocessing、字母频次统计以及按照单词长度排序,减少查询过程中不必要的检查。

Google Coding Interview 中需要注意什么

除了代码本身,这类 Coding Interview 也比较重视候选人与面试官之间的沟通。

拿到题目之后,可以先确认:

  1. 输入的数据范围是什么?
  2. 是否存在重复元素?
  3. 边界情况怎么处理?
  4. 如果存在多个满足条件的结果,应该返回什么?
  5. 是否要求最优复杂度?

确定题意后,再开始讲解自己的思路。

Coding 过程中也建议保持沟通,不要长时间沉默写代码。可以一边实现,一边说明当前正在处理什么,以及为什么选择这种方法。

代码完成后,还需要主动检查 test cases,并准备解释 edge cases 和 complexity。

如果面试官继续提出 follow-up,不要只修改代码,也要先说明新的要求会对原来的算法产生什么影响,再讨论优化方案。

Google 27 Intern Coding Interview FAQ

Google 27 Intern 有几轮 Coding Interview?

本次面经记录的是两轮 back-to-back coding interviews 45 分钟。具体面试轮次可能根据招聘流程有所变化。

Google Intern Coding Interview 每轮多长时间?

本次两轮 coding interview 每轮约 45 分钟。

Google Coding Interview 会问 Follow-up 吗?

本次面经中,两道 coding 题完成后都会继续进行 follow-up,重点涉及复杂度优化以及 solution 的进一步改进。

Google Coding Interview 需要解释思路吗?

Coding 面试不仅需要完成代码,也需要向面试官解释思路、复杂度和测试案例。沟通方式也是面试过程中的重要部分。

Google Intern Coding Interview 主要考什么?

从本次两道题来看,涉及二维矩阵搜索、DFS、Memoization、字符串处理、字母频次统计以及复杂度优化等内容。不同候选人实际遇到的题目可能有所不同。

备考建议 & 联系我们

如果你也在准备 Google 2027 Intern(或其他大厂)的 Coding Interview / OA / VO,感觉复习方向不清晰、真题不够、或者想针对二维网格 + Memoization DFS、字符串频次统计这类题做针对性强化,欢迎联系我们。

Interview Show 专注北美技术岗位的面试辅助,团队来自一线大厂工程师与面试官,提供:

  • Coding / Algorithm 真题辅导与复杂度优化指导
  • VO 辅助、模拟面试、Follow-up 应对训练
  • 一对一针对性备考方案

有需要可以直接访问官网了解详情或预约免费评估~

我们会根据你的背景和目标岗位,给出更精准的准备建议。祝大家面试顺利,早日拿到心仪 Offer!

END