Range take-home 面经 2026:90分钟 TypeScript 笔试全解与高分策略
引言
Range take-home 面经 2026 是近期很典型的题型。
这是我们学员贡献的最新面经。
因此,这份复盘以实战为主。
并且会明确 2026年最新 的考察口径。
如果你正准备 Range take-home 面经 2026,这篇会很省时间。
此外,文章会覆盖代码修复与测试设计。
也会讲清 IRR 数值求解的稳定写法。
最后给你可复用的答题模板。
2026 面试流程深度复盘:Range take-home 面经 2026
这轮题目通常给你约 90 分钟。
因此,前 10 分钟先跑测试并定位红灯。
重点先看 test/holdings.test.ts。
先复现,再锁定最小改动面。
10 到 35 分钟要修基础方法。
具体来说,要先稳住 getCurrentHoldings()。
与此同时,校验零仓位过滤。
再确认键值映射是否一致。
35 到 65 分钟进入新功能。
但是,先写 hasWashSale(symbol, days=30) 的规则。
你要抓住亏损卖出与时间窗口。
并且处理边界日与同日交易。
65 到 85 分钟处理 moneyWeightedReturn。
换句话说,要先建现金流再求 IRR。
此外,起始和期末持仓估值必须并入。
无有效现金流时要返回 0.0。
最后 5 到 10 分钟补单测与文档。
因此,test/newFeature.test.ts 建议至少 2 例。
一例正向,一例反向。
并且更新 CHANGELOG.md 保证可追溯。
核心题目解析
在 Range take-home 面经 2026 中,主线是“时序正确”。
因此,交易必须先排序。
否则平均成本会漂移。
后续 Wash Sale 与 IRR 都会错。
先看持仓与成本。
具体来说,getCurrentHoldings() 是买加卖减。
getCostBasis() 用平均成本法。
getUnrealizedPnl() 复用成本结果更稳。
再看 Wash Sale。
此外,判定分两步。
第一步是亏损卖出。
第二步是 ±days 内同标的买入。
亏损卖出的核心很明确。
但是,要用“卖出时点平均成本”比较。
即 sell price < avg cost at sale。
这要求你按历史交易逐步回放。
最后看 IRR。
因此,买入记负流,卖出记正流。
起始持仓估值记负,期末估值记正。
数值法优先二分,收敛更稳。
from dataclasses import dataclass
from datetime import datetime
from typing import List, Tuple
@dataclass
class Trade:
symbol: str
side: str # BUY or SELL
qty: float
price: float
ts: datetime
def has_wash_sale(trades: List[Trade], symbol: str, days: int = 30) -> bool:
# 先排序,保证成本与时序一致
rows = sorted([t for t in trades if t.symbol == symbol], key=lambda x: x.ts)
buys = [t for t in rows if t.side == "BUY"]
qty, avg_cost = 0.0, 0.0
for t in rows:
if t.side == "BUY":
total = avg_cost * qty + t.price * t.qty
qty += t.qty
avg_cost = total / qty
continue
if qty <= 0:
continue
is_loss_sale = t.price < avg_cost # 亏损卖出
if is_loss_sale:
for b in buys:
if abs((b.ts.date() - t.ts.date()).days) <= days:
return True
qty -= t.qty
if qty <= 0:
qty, avg_cost = 0.0, 0.0
return False
def money_weighted_return(
trades: List[Trade],
start_date: datetime,
end_date: datetime,
start_value: float,
end_value: float
) -> float:
flows: List[Tuple[datetime, float]] = [
(start_date, -start_value),
(end_date, end_value),
]
for t in trades:
if start_date <= t.ts <= end_date:
amt = -t.price * t.qty if t.side == "BUY" else t.price * t.qty
flows.append((t.ts, amt))
if not any(c > 0 for _, c in flows) or not any(c < 0 for _, c in flows):
return 0.0
def npv(r: float) -> float:
return sum(c / ((1 + r) ** ((d - start_date).days / 365.0)) for d, c in flows)
lo, hi = -0.9999, 10.0
if npv(lo) * npv(hi) > 0:
return 0.0
# 二分法鲁棒,适合面试限时场景
for _ in range(120):
mid = (lo + hi) / 2
val = npv(mid)
if abs(val) < 1e-7:
return mid
if npv(lo) * val <= 0:
hi = mid
else:
lo = mid
return (lo + hi) / 2
建议新增单测如下。
因此,覆盖正反两面最关键。
loss sell + 30天内买回 -> true。
仅单向现金流 -> IRR 为 0.0。
系统流程图(Mermaid)
flowchart TD
A[读取CSV] --> B[解析与类型化]
B --> C[按时间排序]
C --> D[交易回放]
D --> E[getCurrentHoldings]
D --> F[getCostBasis]
D --> G[getUnrealizedPnl]
D --> H[亏损卖出判定]
H --> I[±days买入窗口]
I --> J[hasWashSale]
D --> K[现金流构建]
K --> L[二分法IRR]
L --> M[moneyWeightedReturn]
M --> N[新增单测]
N --> O[更新CHANGELOG]
专家备考策略与高频考点:Range take-home 面经 2026
准备 Range take-home 面经 2026 时,先练“读测修复”。
因此,先从失败断言反推业务规则。
此外,再补最小测试锁回归。
这比盲改源码更稳。
高频核心考点如下。
- 因此,先看交易时序与排序稳定性。
- 此外,检查平均成本是否逐笔更新。
- 但是,卖出后仓位归零要重置成本。
- 与此同时,Wash Sale 要做同标的过滤。
- 具体来说,IRR 要处理无根与不收敛。
- 总而言之,文档更新要可审计可追溯。
Range take-home 面经 2026 的 BQ 也会卡人。
换句话说,你要把技术动作讲成业务价值。
STAR 可以直接这样说。
并且每段控制在 20 到 40 秒。
- S:线上收益统计偶发偏差,且影响报表。
- T:在截止前修复计算,并补测试防回归。
- A:先重放交易,再修成本与 IRR 求解器。
- R:测试全绿,结果与对账一致,后续零事故。
总结与行动号召(CTA)
Range take-home 面经 2026 的破题关键是三点。
因此,先保时序正确。
此外,现金流建模要完整。
最后用测试与 Changelog 收口。
如果你想做一轮实战模拟,直接预约。
- 联系我们的专家进行一对一面试辅导
- 权威算法参考