Harvey 店面面经 2026:词级高亮与来源归因题深度拆解
引言
Harvey 店面面经 2026 是一道高频电面题。首先,题干很短。
但是,隐藏约束很多。因此,候选人常在细节失分。
此外,这是我们学员贡献的最新面经。这是一份 2026年最新 复盘。
与此同时,本文给出可运行代码。换句话说,你可直接对照训练。
2026 面试流程深度复盘:Harvey 店面面经 2026
首先,面试通常先做简短沟通。随后,很快进入 coding。
但是,面试官不会一次说全规则。因此,你要先反问边界。
具体来说,Harvey 店面面经 2026 常见四段追问。
第一段,要求 <yellow>...</yellow> 高亮。第二段,要求追加 [1][3]。
第三段,要求处理 overlap。第四段,要求解释频次优先。
此外,面试官会给误匹配反例。例如,row 不能命中 brown。
与此同时,还会给 0 命中场景。因此,你必须返回原句。
最后,Harvey 店面面经 2026 很看重口头表达。
你要先讲规则顺序。然后再写代码。总而言之,先定义再实现。
核心题目解析
首先,Harvey 店面面经 2026 的核心是“先统计,再标注”。
先做词级命中。再做重叠消解。最后做来源归因。
其次,推荐你按这个顺序实现。
1. 首先,按词边界切分 sentence。
2. 其次,按同样规则切分 matching phrases。
3. 然后,统计每个 phrase 在句子中的频次。
4. 此外,在每个 source 中判定词级出现。
5. 然后,生成候选片段和来源集合。
6. 随后,按“频次降序、长度降序、起点升序”排序。
7. 接着,贪心选择不重叠片段。
8. 最后,渲染 <yellow>片段</yellow>[k]。
与此同时,overlap 规则必须稳定。频次高的片段先占位。
但是,频次相同会冲突。因此,长片段优先。
如果仍相同,则左侧优先。这样输出可复现。
此外,来源映射要支持多对多。一个片段可对应多个 source。
所以输出可为 [1][3][5]。并且编号要升序。
换句话说,标签顺序也属于评分点。
Python 参考代码
import re
from dataclasses import dataclass
from collections import defaultdict
from typing import List, Dict, Tuple, Set
WORD_RE = re.compile(r"\b\w+\b", re.UNICODE)
@dataclass
class Match:
sw: int
ew: int
sc: int
ec: int
freq: int
src_ids: Set[int]
def words_with_spans(text: str) -> List[Tuple[str, int, int]]:
return [(m.group(0).lower(), m.start(), m.end()) for m in WORD_RE.finditer(text)]
def phrase_words(phrase: str) -> List[str]:
return [w for w, _, _ in words_with_spans(phrase)]
def contains_phrase_word_level(text: str, pwords: List[str]) -> bool:
if not pwords:
return False
arr = [w for w, _, _ in words_with_spans(text)]
k = len(pwords)
for i in range(len(arr) - k + 1):
if arr[i:i + k] == pwords:
return True
return False
def find_occ(words: List[Tuple[str, int, int]], pwords: List[str]) -> List[Tuple[int, int, int, int]]:
arr = [w for w, _, _ in words]
k = len(pwords)
out = []
for i in range(len(arr) - k + 1):
if arr[i:i + k] == pwords:
sw, ew = i, i + k - 1
sc, ec = words[sw][1], words[ew][2]
out.append((sw, ew, sc, ec))
return out
def highlight_with_sources(sentence: str, sources: List[str], matching_phrases: List[str]) -> str:
s_words = words_with_spans(sentence)
if not s_words:
return sentence
# 去重 phrase,并先统计句内频次
phrase_map: Dict[str, List[str]] = {}
for p in matching_phrases:
pw = phrase_words(p)
key = " ".join(pw)
if key and key not in phrase_map:
phrase_map[key] = pw
freq: Dict[str, int] = {}
occ_map: Dict[str, List[Tuple[int, int, int, int]]] = {}
for key, pw in phrase_map.items():
occ = find_occ(s_words, pw)
occ_map[key] = occ
freq[key] = len(occ)
# phrase -> source ids
src_map: Dict[str, Set[int]] = defaultdict(set)
for key, pw in phrase_map.items():
for i, src in enumerate(sources, start=1):
if contains_phrase_word_level(src, pw):
src_map[key].add(i)
# 候选片段
cands: List[Match] = []
for key, occs in occ_map.items():
for sw, ew, sc, ec in occs:
cands.append(Match(sw, ew, sc, ec, freq[key], set(src_map[key])))
if not cands:
return sentence
# overlap 消解
cands.sort(key=lambda m: (-m.freq, -(m.ew - m.sw + 1), m.sw))
used = set()
chosen = []
for m in cands:
span = set(range(m.sw, m.ew + 1))
if used & span:
continue
chosen.append(m)
used |= span
# 渲染输出
chosen.sort(key=lambda m: m.sc)
out = []
cur = 0
for m in chosen:
out.append(sentence[cur:m.sc])
tags = "".join(f"[{i}]" for i in sorted(m.src_ids))
out.append(f"<yellow>{sentence[m.sc:m.ec]}</yellow>{tags}")
cur = m.ec
out.append(sentence[cur:])
return "".join(out)
System Design 流程图
flowchart TD
A[输入 sentence/sources/phrases]
B[词级切分与标准化]
C[统计 phrase 频次]
D[建立 phrase 到 source 映射]
E[生成候选片段]
F[按频次/长度/位置排序]
G[贪心消解 overlap]
H[渲染 yellow 与来源标签]
I[输出结果]
A --> B --> C --> D --> E --> F --> G --> H --> I
此外,建议你准备最小测试集。
1. 首先,row 与 brown 的误匹配测试。
2. 其次,重复 phrase 的频次测试。
3. 然后,多个 source 同时归因测试。
4. 最后,0 命中和空输入测试。
专家备考策略与高频考点:Harvey 店面面经 2026
首先,Harvey 店面面经 2026 要求你“边写边解释”。
你要先说优先级。然后再落代码。这样最稳。
此外,面试官常追问复杂度。你可直接给口径。
设句子词数为 n,短语总词数为 m。
朴素扫描约为 O(n*m)。因此,结论清晰可控。
与此同时,沟通层面也会评分。你要用 STAR 结构。
先说问题冲突。再说决策标准。最后给可验证结果。
BQ 核心考点
- 首先,是否主动澄清输入边界。
- 其次,是否能解释规则取舍。
- 此外,是否能快速补齐反例。
- 然后,是否保证输出稳定。
- 最后,是否在压力下沟通清楚。
STAR 应对策略
- S:首先,说明题目存在多规则冲突。
- T:其次,目标是可复现且可测试。
- A:然后,给出频次优先与词级匹配。
- R:最后,展示边界用例全部通过。
总结与行动号召(CTA)
总而言之,Harvey 店面面经 2026 的胜负在细节。
你要守住词级边界。你要说清 overlap 规则。
并且,你要输出稳定的来源标签。
此外,想做针对性冲刺,可点这里:
联系我们的专家进行一对一面试辅导
与此同时,可补充阅读:
权威算法参考