CoderPad 是 Goldman Sachs 首选的编程面试平台。这篇按真实候选人复盘整理,把 CoderPad 上四大题型和应对策略讲清楚,帮你把准备的方向对上 GS 真正考的东西。
一、面试前准备
- 公司与技术调研:了解 GS 的业务领域(交易、风控、数据)和技术栈(Java、Python、C++)。
- 在 CoderPad 上练手:熟悉它的界面——运行代码、调试、注释、快捷键,别在面试时第一次摸平台。
- 复习核心 CS 基础:数据结构(链表、树、哈希表)和算法(排序、查找、DP)。LeetCode、牛客刷题都推荐。
二、四大题型
1. 算法题
中上难度、带现实场景的变体(例如「找出所有和为 target 的不重复子数组」)。用哈希表 + 双指针 / 前缀和,先讲思路再写带注释的干净代码。
def subarrays_with_sum(nums, target):
res, prefix = [], 0
seen = {0: [-1]} # 前缀和 -> 左端索引列表
for r, x in enumerate(nums):
prefix += x
for l in seen.get(prefix - target, []):
res.append(nums[l + 1 : r + 1])
seen.setdefault(prefix, []).append(r)
return res
含负数时不能滑窗,前缀和 + 哈希才是正解,整体 O(n)。
2. 数据结构设计
典型如 LRU 缓存:要求 get / put 都 O(1)。做法是哈希表 + 双向链表——哈希表存 key→节点定位,双向链表维护使用顺序,最近用的移到头部,淘汰从尾部出。
from collections import OrderedDict
class LRUCache:
def __init__(self, capacity: int):
self.cap = capacity
self.cache = OrderedDict() # key -> value,维护使用顺序
def get(self, key: int) -> int:
if key not in self.cache:
return -1
self.cache.move_to_end(key) # 标记为最近使用
return self.cache[key]
def put(self, key: int, value: int) -> None:
if key in self.cache:
self.cache.move_to_end(key)
self.cache[key] = value
if len(self.cache) > self.cap:
self.cache.popitem(last=False) # 淘汰最久未用
面试时要能说清为什么选这两个结构、各操作的复杂度。如果面试官要求手写双向链表(不用 OrderedDict),也得能现场实现节点的插入 / 摘除。
3. 代码优化
给一段慢代码(如嵌套循环 O(n²)),让你提优化方案:
- 减少冗余计算:把循环内重复算的量提到外面,或用前缀和 / 缓存中间结果。
- 换更优的数据结构:用哈希表把「查找是否存在」从
O(n)降到O(1),把两层循环降成一层。 - 时间换空间或反之:明确说出 trade-off,让面试官看到你权衡的过程。
例如「两数之和」从双重循环 O(n²) 优化到哈希表一遍扫 O(n),就是这类题的缩影。
4. 金融场景题
模拟交易撮合引擎:处理订单的创建、撮合、撤单。要展现贴合业务的技术设计,包括可靠性与并发。
- 买卖盘各用一个优先队列(堆):买单按价格从高到低、卖单从低到高;
- 新订单进来时,与对手盘价格能成交就撮合,部分成交要更新剩余量;
- 撤单要能按 order id 快速定位(哈希表辅助);
- 追问点:并发下如何保证撮合的原子性(锁 / 单线程撮合 + 队列)、如何做幂等和持久化。
import heapq
class MatchingEngine:
def __init__(self):
self.buys = [] # 最大堆:存 (-price, ts, qty)
self.sells = [] # 最小堆:存 (price, ts, qty)
def submit_buy(self, price, ts, qty):
while qty > 0 and self.sells and self.sells[0][0] <= price:
sp, sts, sqty = heapq.heappop(self.sells)
traded = min(qty, sqty)
qty -= traded
if sqty > traded:
heapq.heappush(self.sells, (sp, sts, sqty - traded))
if qty > 0:
heapq.heappush(self.buys, (-price, ts, qty))
三、样题速览
- 算法 / DS:整数数组里找所有和为 target 的不重复子数组——前缀和(哈希)+ 双指针
O(n)。 - 编程:Excel 列号转列名(
27 → "AA")——26 进制无 0,循环取模。 - 行为:用 STAR——讲一个你设定并达成的高挑战目标;讲一次团队分歧及你如何化解。
四、总结
GS CoderPad 的四大题型——算法、数据结构设计、代码优化、金融场景——覆盖了从基础功底到工程权衡再到业务建模的完整光谱。准备时别只盯算法,要练讲清结构选型、复杂度和 trade-off 的能力。
FAQ
Q1:Goldman Sachs CoderPad 主要考哪几类题?
四类:算法(带现实场景的中上难度题)、数据结构设计(如 LRU)、代码优化(给慢代码提速)、金融场景(如交易撮合)。
Q2:LRU 为什么用哈希表 + 双向链表?
哈希表负责 O(1) 定位节点,双向链表维护使用顺序、O(1) 移动和淘汰。两者配合才能让 get/put 都 O(1)。Python 里可用 OrderedDict 简化,但要能手写底层。
Q3:撮合引擎题的关键追问是什么?
并发下的原子性(锁或单线程撮合 + 队列)、撤单的快速定位、幂等与持久化。要把可靠性和并发讲到位。
Q4:怎么高效准备 GS CoderPad?
按四大题型分别准备,重点练「先讲思路、说清复杂度与 trade-off」。如需按岗位线做题型预测 + CoderPad 限时 mock + 复盘,可联系 oavoservice 定制陪练计划。
正在准备 Goldman Sachs CoderPad?
GS CoderPad 四大题型各有重点。oavoservice 提供 GS 全流程陪练:算法 / LRU 设计 / 代码优化 / 撮合引擎题限时模拟,CoderPad 实时讲思路演练,复杂度与 trade-off 表达训练,按岗位线做题型预测。教练含前大厂资深工程师,熟悉 GS 判分风格。
立即添加微信 Coding0201,获取 GS 真题与陪练。
联系方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy