Google SWE Intern 的面试就2轮面试,主要考察算法设计部分,重点考察数据结构和算法基础,包括动态规划、图算法、树操作、排序搜索等经典问题。常见题目有最大子数组和、LRU缓存实现、二叉树LCA、序列化反序列化等,需要熟练掌握时间空间复杂度分析。Google 面试用自家的text editor,没用Google Doc;建议mock的同学用text editor 练习。
Google SWE Intern VO 第一轮
题目:Google Company有一堆会议室预订记录请求,每条record有start_time和end_time。返回最少需要多少room。
澄清问题
- 时间区间是start开始还是end开始?
- 若为 半开区间
[start, end):end == next.start可复用同一间房。 - 若为 闭区间
[start, end]:end == next.start视为冲突,需要新房间。(面试时需要先问清,若未明确,通常默认半开区间。)
- 若为 半开区间
- 输入是否可能为空?是否存在
start == end的会议? - 时间是否有上界/是否为整数?
- 输入是否已按
start_time升序?
思路
按开始时间处理会议,用一个小根堆存“正在占用的房间的最早结束时间”,每来一个新会议:
- 若堆顶结束时间
<=新会议开始时间,说明有房间空出来了——弹出并复用; - 否则需要新开一间房——直接把新会议的结束时间压入堆。
用一个变量记录堆曾达到的最大大小,即所需房间数。
复杂度:时间复杂度 O(Nlog N),空间复杂度:O(N)。
Google SWE Intern VO 第二轮
这轮面试包含BQ环节和两道coding题。面试官是位美国小哥,人很nice,简单寒暄后直接进入正题,整体节奏挺舒服的,下面简单分享一下。
BQ
- 讲一个你从项目失败中学到重要经验的例子?
- 如果你和同事在技术方案上意见不合,你会怎么处理?
- 描述一次你主动帮助团队成员提升技术能力的经历?
Coding
题目:可变范围求和 这题要求设计一个数据结构,既能查询数组某个区间的和,又能支持更新某个元素的值。
思路:用线段树来解决最合适,把数组构建成二叉树结构,每个节点存储子节点的和,这样查询和更新都能在O(log n)时间内完成。
Follow up:
- 除了线段树,你还能想到其他方法吗?请比较一下它们的优劣。
- 如果这个数组非常大,并且需要频繁更新,你的线段树实现在内存和性能上可能会有什么瓶颈?如何优化?
整场下来,顺利通过! 在Amazon、Meta、微软、Google等等北美大厂OA和VO都很熟悉,都能顺利通过。如果你也需要Google面试助攻、面试辅助、OA代写等服务,请与我们联系。