在北美找 SDE,CodeSignal 的 GCA(General Coding Assessment)几乎是绕不开的一关。它不是普通的刷题网站,而是一套数据驱动的标准化能力测评——Databricks、Uber、Robinhood、Asana、Brex 等公司都直接用 GCA 分数决定要不要给你下一轮。很多人考完一脸疑惑:"我明明所有用例都过了,为什么分数比同学低?"
答案就在评分模型里。GCA 满分约 850,但它远不止看通过率。这篇文章专门讲清楚 GCA 的评分逻辑:正确率、速度、代码简洁度、稳定性这四个维度是怎么合成最终分数的,以及针对每个维度该怎么系统性地提高。姊妹篇《CodeSignal GCA 第一轮筛选生存指南》讲的是整体流程与门槛,本文则是评分模型的深度拆解。
CodeSignal GCA 速查表
| 维度 | 详情 |
|---|---|
| 平台 | CodeSignal(GCA 通用测评 / 公司专属 OA) |
| 常见用家 | Databricks、Uber、Robinhood、Asana、Brex 等 |
| 满分 | 约 850 分 |
| 题量 / 时长 | 4 题,约 70 分钟,难度递增 |
| 评分维度 | 正确率 + 速度 + 简洁度 + 稳定性 |
| 语言 | Python / Java / JS / Go 等多种 |
| 重做 | 通常一次性,成绩可复用给多家公司 |
一、为什么"全部通过"分数还会不同
先破除一个最常见的误解:GCA 不是"通过用例数 ÷ 总用例数 × 850"。如果只是这样,那所有 AC 的人分数就该一样。真实情况是,GCA 综合评估你解决问题的整个过程,主要看四个维度:
- 正确率(Correctness):通过了多少测试用例,包括隐藏用例。这是基础分。
- 速度(Speed):你多快提交出正确解。更早提交正确答案的分数更高——因为它衡量的是能力密度,不只是"最终能不能做出来"。
- 简洁度(Cleanliness):代码是否精炼、可读、符合语言惯例。冗余、重复、绕远路的实现会被扣分。
- 稳定性(Stability):解法是否在所有情况下都成立,包括边界用例和大数据量的性能用例。一个能过样例但在极端输入下超时或崩的解法,稳定性分会掉。
所以两个都"全部用例通过"的人,可能一个在第 20 分钟就交出干净的 O(n) 解,另一个磨到第 65 分钟才交出一个能过但很啰嗦的解——前者速度分和简洁度分明显更高,总分自然拉开。此外 Q4 存在部分给分(partial credit),即使没全 AC,过的用例也计分。
二、评分维度拆解表
| 维度 | 对分数的影响 | 怎么提高 |
|---|---|---|
| 正确率 | 基础分,决定分数下限 | 主动枚举边界(空输入、单元素、重复值、越界);提交前用极端输入自测 |
| 速度 | 同样正确下,越早提交越高分 | 限时模拟练手速;高频题型形成肌肉记忆,读题即知套路 |
| 简洁度 | 冗余/绕路实现拉低上限 | 用惯用写法(Counter、双指针、切片);一个函数只做一件事,避免嵌套过深 |
| 稳定性 | 极端/性能用例决定能否拿满 | 先想清最优复杂度再动手;避免 list.pop(0) 之类 O(n) 陷阱,用 deque |
关键认知:这四个维度不是相互独立的加分项,而是互相咬合的。写得干净往往也写得快,想清复杂度往往稳定性也好。所以备考的核心不是"多刷题",而是把常见题型练到又快又干净又稳。
三、GCA 与公司专属 OA 的区别
CodeSignal 上有两类测评,评分侧重和题型都不同,备考前要分清:
| 对比项 | GCA(通用测评) | 公司专属 OA(Custom) |
|---|---|---|
| 代表公司 | Databricks、Uber、Robinhood、Asana、Brex | Ramp、Two Sigma、Opendoor、Cruise、Square |
| 题型 | 标准算法:数组、字符串、图、DP | 复杂 JSON 解析、大量字符串处理、业务建模、DP |
| 分数复用 | 一份成绩可投多家 | 通常只对该公司有效 |
| 难度曲线 | Q1→Q4 稳定递增 | 单题体量更大,题面更长 |
| 备考重点 | 高频套路 + 手速 + 稳定性 | 读题建模能力 + 边界覆盖 |
简单说:GCA 比的是"标准题做得又快又稳",公司专属 OA 比的是"复杂题面能不能准确建模"。两者都吃"简洁 + 稳定",但公司专属 OA 更考验读长题和拆解需求的能力。
四、高频题型
无论 GCA 还是公司专属 OA,下面这几类反复出现,值得练到形成肌肉记忆:
| 题型 | 典型考点 | 推荐 LeetCode |
|---|---|---|
| 滑动窗口 | 数组/字符串区间统计 | 3, 76, 209 |
| 字符串分割/处理 | split、解析、频率统计 | 49, 819, 271 |
| 图 | BFS/DFS、连通分量 | 200, 133, 994 |
| 排列/模拟 | 状态推进、规则执行 | 46, 289, 54 |
| 动态规划 | 计数、最优子结构 | 70, 322, 300 |
五、一道代表题:干净又快的滑动窗口解法
题目背景
给一个整数数组 nums 和窗口大小 k,返回每个长度为 k 的连续窗口中不同元素的个数。这是 GCA 里滑动窗口 + 哈希计数的典型组合,也最能体现"简洁"与"稳定"如何影响分数。
思路
- 用一个哈希表维护当前窗口里每个值的出现次数,
len(count)就是不同元素个数。 - 窗口右移时:新元素计数 +1,滑出的旧元素计数 -1,减到 0 就从表里删除。
- 全程 O(n),不重复扫描——这就是拿到速度分和稳定性分的关键。
Python 解法
from collections import defaultdict
from typing import List
def distinct_in_windows(nums: List[int], k: int) -> List[int]:
"""返回每个长度为 k 的窗口中不同元素的个数。"""
# 边界:空数组或 k 非法时直接返回空,保证稳定性
if k <= 0 or k > len(nums):
return []
count = defaultdict(int)
result = []
for i, x in enumerate(nums):
count[x] += 1 # 新元素进入窗口
if i >= k: # 窗口已满,移出最左元素
left = nums[i - k]
count[left] -= 1
if count[left] == 0: # 计数归零就删除,len 才准确
del count[left]
if i >= k - 1: # 窗口凑满 k 个才开始记录
result.append(len(count))
return result
if __name__ == "__main__":
print(distinct_in_windows([1, 2, 1, 3, 4, 2, 3], 3)) # [2, 3, 3, 3, 3]
print(distinct_in_windows([1, 1, 1], 2)) # [1, 1]
print(distinct_in_windows([], 3)) # []
时间复杂度:O(n),每个元素进出窗口各一次 空间复杂度:O(k)
为什么这个版本分数更高:对比一下"每个窗口都重新
len(set(nums[i:i+k]))"的暴力写法——那样是 O(n·k),样例能过,但性能用例会超时,稳定性分直接丢掉。而滑动窗口版本不仅 O(n) 稳过大数据,代码也更短、意图更清晰(简洁度分),写熟了 5 分钟就能交(速度分)。同一道题,同样"全 AC",这三点差异就足以拉开总分。
六、备考策略
把评分模型翻译成可执行的训练动作:
| 目标维度 | 训练方式 |
|---|---|
| 正确率 | 每道题先手写 3-4 个边界用例,再写主逻辑,提前把隐藏用例想到 |
| 速度 | 每周 2 次 70 分钟 4 题限时模拟,读题即认套路 |
| 简洁度 | 刷题后回看,把能用 Counter/双指针/切片简化的地方重写一遍 |
| 稳定性 | 每道题都问一句"最坏输入是什么",先定复杂度再动手 |
我们的 OA辅助 / OA代面 服务正是围绕这套评分模型设计的端到端陪练:评分体系讲解(把 850 分怎么算讲透)、题型预测(按公司给当周高频题型)、完整解法 + 复杂度分析(每题给出又快又干净的最优写法)、以及 mock 与实时协作陪练——帮你在正式考试里稳定发挥、把每个维度的分都拿满。
FAQ
Q1:GCA 满分多少? 满分约 850。它不是简单的"通过率 × 850",而是综合正确率、速度、代码简洁度和稳定性四个维度合成的分数。约 70 分钟做 4 题,难度递增。
Q2:全部用例都通过了,为什么分数还是不一样? 因为 GCA 还看你多快提交、代码是否精炼、解法在极端和性能用例下是否稳定。两个人都 AC,但一个 20 分钟交出干净 O(n) 解、另一个 65 分钟交出啰嗦解,速度分和简洁度分会明显拉开总分。
Q3:怎么提高 GCA 分数? 四个方向同时练:主动覆盖边界用例提正确率、限时模拟练手速、用惯用写法保持简洁、先定复杂度避免超时保稳定。核心是把高频题型练到又快又干净又稳,而不是单纯堆刷题量。
Q4:GCA 和公司专属 OA 有什么区别? GCA 是通用标准测评,题型偏标准算法,一份成绩可投多家公司;公司专属 OA(如 Ramp、Two Sigma、Cruise)题面更长、更偏复杂 JSON 解析和业务建模,通常只对该公司有效。两者都重视简洁和稳定。
Q5:Q4 没做完还有分吗? 有。Q4 支持部分给分(partial credit),通过的每个用例都计分。所以策略是前三题稳拿满分,第四题即使做不全,也要尽量多 AC 用例、覆盖边界,把能拿的分都拿到。
正在准备 CodeSignal GCA?
如果你担心手速不够、Q4 AC 不全,或者搞不清自己"全过却分低"卡在哪个维度,可以聊聊完整的 OA辅助 / OA代面 方案——从评分体系讲解到题型预测、限时 mock 与实时陪练,帮你带着准备走进考场、稳定拿分。
立即添加微信 Coding0201,获取真题与备战计划。
联系方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy