← 返回博客列表 BlackRock OA 真题指南:题型分类与高频考点全解析|2026
BlackRock

BlackRock OA 真题指南:题型分类与高频考点全解析|2026

2026-05-12

BlackRock 是全球最大的资产管理公司,管理资产规模超过 10 万亿美元。作为金融科技领域的巨头,BlackRock 的 OA 既考察标准的编程能力,也融入了金融数据处理投资组合优化等业务场景。本文基于最新面经,全面拆解 BlackRock OA 的题型分布与备考策略。

BlackRock OA 难度分布

根据近期面经统计,BlackRock OA 的难度分布如下:

难度 占比 说明
Easy 43% 基础数组/字符串操作
Medium 50% 图论、DP、模拟
Hard 7% 复杂优化问题

OA 基本信息

维度 详情
平台 HackerRank
时长 90 分钟
题量 2-3 道编程题 + 可能的 SQL 题
语言 Java, Python, C++
考察重点 数组、图论、DP、SQL

题型一:数组与字符串操作

典型题目:Happy Number 模拟

给定一个正整数,判断它是否为 Happy Number。一个 Happy Number 是指:将该数替换为其各位数字的平方和,重复这个过程,最终结果为 1。

def is_happy_number(n):
    seen = set()
    
    while n != 1 and n not in seen:
        seen.add(n)
        n = sum(int(d) ** 2 for d in str(n))
    
    return n == 1

def count_happy_numbers(start, end):
    """统计区间 [start, end] 内的 Happy Number 数量"""
    count = 0
    for num in range(start, end + 1):
        if is_happy_number(num):
            count += 1
    return count

典型题目:投资组合收益计算

给定一组股票的每日收益率和持仓权重,计算投资组合在给定时间段内的累计收益。

def portfolio_return(daily_returns, weights, start_day, end_day):
    """
    daily_returns: [[stock1_day1, stock2_day1, ...], ...]
    weights: [w1, w2, ...]
    """
    cumulative = 1.0
    
    for day in range(start_day, end_day + 1):
        daily_portfolio_return = sum(
            daily_returns[day][i] * weights[i] 
            for i in range(len(weights))
        )
        cumulative *= (1 + daily_portfolio_return)
    
    return cumulative - 1

题型二:图论问题

典型题目:Modified Graph Problem

给定一个无向图,找到从节点 A 到节点 B 的最短路径,但有一个限制:路径中不能连续经过两条权重相同的边。

from collections import defaultdict
import heapq

def shortest_path_no_repeat_weight(n, edges, start, end):
    graph = defaultdict(list)
    for u, v, w in edges:
        graph[u].append((v, w))
        graph[v].append((u, w))
    
    # state: (distance, node, last_edge_weight)
    dist = defaultdict(lambda: float('inf'))
    dist[(start, -1)] = 0
    pq = [(0, start, -1)]  # (dist, node, last_weight)
    
    while pq:
        d, u, last_w = heapq.heappop(pq)
        
        if u == end:
            return d
        
        if d > dist[(u, last_w)]:
            continue
        
        for v, w in graph[u]:
            if w != last_w:  # 不能连续经过相同权重的边
                new_dist = d + w
                if new_dist < dist[(v, w)]:
                    dist[(v, w)] = new_dist
                    heapq.heappush(pq, (new_dist, v, w))
    
    return -1

时间复杂度:O(E * W * log(V * W)),W 为不同权重数
空间复杂度:O(V * W)

题型三:动态规划

典型题目:资产配置优化

给定 n 种资产,每种资产有预期收益率和风险值。在总风险不超过阈值 T 的约束下,选择资产组合使得总收益最大化。

def max_return_with_risk_limit(assets, risk_limit):
    """
    assets: [(return_rate, risk_value)]
    risk_limit: 最大可承受风险
    """
    n = len(assets)
    # 0-1 背包变体
    dp = [0] * (risk_limit + 1)
    
    for ret, risk in assets:
        for r in range(risk_limit, risk - 1, -1):
            dp[r] = max(dp[r], dp[r - risk] + ret)
    
    return dp[risk_limit]

典型题目:交易费用最小化

给定一系列必须执行的交易,每笔交易可以选择不同的执行方式(不同费率和延迟),在满足所有交易截止时间的前提下,最小化总费用。

def min_transaction_cost(transactions, methods):
    """
    transactions: [(deadline, volume)]
    methods: [(cost_rate, delay)]
    """
    transactions.sort(key=lambda x: x[0])
    n = len(transactions)
    
    dp = [float('inf')] * n
    
    for i, (deadline, volume) in enumerate(transactions):
        for cost_rate, delay in methods:
            if delay <= deadline:
                cost = volume * cost_rate
                if i == 0:
                    dp[i] = min(dp[i], cost)
                else:
                    dp[i] = min(dp[i], dp[i-1] + cost)
    
    return dp[-1] if dp[-1] != float('inf') else -1

题型四:SQL 查询

BlackRock 部分岗位的 OA 会包含 SQL 题目,常见考点:

-- 示例:计算每只基金过去30天的滚动收益率排名
SELECT 
    fund_id,
    fund_name,
    rolling_return_30d,
    RANK() OVER (ORDER BY rolling_return_30d DESC) as return_rank
FROM (
    SELECT 
        f.fund_id,
        f.fund_name,
        (p_end.nav / p_start.nav - 1) as rolling_return_30d
    FROM funds f
    JOIN prices p_end ON f.fund_id = p_end.fund_id 
        AND p_end.date = CURRENT_DATE
    JOIN prices p_start ON f.fund_id = p_start.fund_id 
        AND p_start.date = CURRENT_DATE - INTERVAL '30 days'
) sub;

备考路线图

第一周:基础巩固

第二周:核心算法

第三周:金融场景


FAQ

BlackRock OA 的难度如何?

BlackRock OA 整体难度适中,约 43% Easy + 50% Medium + 7% Hard。相比纯科技公司(如 Google、Meta),算法难度略低,但会融入金融业务场景,需要一定的领域知识。

BlackRock OA 会考 SQL 吗?

部分岗位(尤其是 Data Engineer、Quant Analyst)的 OA 会包含 SQL 题目,主要考察窗口函数、复杂 JOIN 和聚合查询。SWE 岗位通常只有编程题。

BlackRock 的面试流程是怎样的?

典型流程为:OA → HR 电话面 → 技术面试(1-2 轮)→ Super Day(含行为面试和技术深度面试)。从投递到 offer 通常需要 4-6 周。

BlackRock 看重什么技术栈?

BlackRock 主要使用 Java 和 Python,部分团队使用 Scala。面试中需要展示对 OOP、数据结构、算法的扎实理解,以及对金融产品的基本认知。

如何准备 BlackRock 的金融场景题?

建议了解以下基本概念:NAV(净值)、收益率计算、风险度量(VaR、Sharpe Ratio)、投资组合理论基础。不需要深入的金融工程知识,但要能理解题目中的业务背景。


正在准备 BlackRock OA?

oavoservice 提供专业的金融科技公司 OA/VO 辅助服务,覆盖 BlackRock、Goldman Sachs、JP Morgan、Two Sigma 等顶级机构。

👉 立即添加微信:Coding0201获取真题与辅助方案


联系方式

Email: [email protected]
Telegram: @OAVOProxy