Block(Square / Cash App)真实面试现场复刻:「Social Network – Best Friend & Potential Friend 推荐系统」全流程解析

最近很多同学在准备 Block(Square / Cash App)的 Engineer 面试,这家公司非常喜欢 数据结构 + 图结构 + 关系推荐 组合题。
这次给大家拆解一道真实出现过的题目,包含完整英文原题 + 思路还原 + 最终逻辑结构

整篇文章不包含任何个人隐私,仅从技术角度帮你理解题目和提升面试能力。


🔵 一、完整英文原题(原文必须保留)

Assume we have a database table that records friendship and mutual “like” counts between users.

Columns:
UserA | UserB | likesAtoB | likesBtoA

Example Rows:
Jack   | Rachel | 5 | 3
Mark   | Ellen  | 3 | 1
Rachel | Ellen  | 6 | 4
Jack   | Mark   | 0 | 6
Mark   | Rachel | 1 | 1

Task 1 – Transform Data Structure

Design a data structure that efficiently supports queries such as:
“How many times did User A like User B?”


Task 2 – Find Each User’s “Best Friend”

Definition:
A user’s best friend is the one who liked their content the most.

Example:
Jack liked Rachel 5 times → Rachel is Jack’s best friend.


Task 3 – Recommend “Potential Friend”

Definition:

For each user, find their best friend’s best friend,
but exclude:

  1. The user themselves
  2. Users already in the user’s friend list

Output format:

User X’s potential friend is Y

🔵 二、题目到底要考什么?

这道题看似像“社交关系”业务逻辑,实际上考点非常明确:

✔ 1. 如何把原始表结构转成可查的数据结构

通常用:

Map<String, Map<String, Integer>>

存储 likesAtoB。

✔ 2. 如何寻找“最大值对应的人”

也就是 best friend 的定义。

✔ 3. 如何处理链式推荐、排除规则

Best friend → best friend’s best friend
并且要过滤掉:

  • 自己
  • 已经认识的人

✔ 4. 是否会处理环、重复、无解等情况

这一点非常容易被问 Follow-up。


🔵 三、从头构建解决方案(过程型讲解)

Step 1:将数据库表转成嵌套字典

输入的数据看起来像这样(来自你上传的 pdf 和文本材料):

目标是转成:

likes["Jack"]["Rachel"] = 5
likes["Rachel"]["Jack"] = 3
...

这样就能在 O(1) 时间查 likesAtoB。


Step 2:寻找每个人的“Best Friend”

算法:

  1. 对每个用户遍历所有出边(Ta → Friend)
  2. 找出 likes 最大的那个人
  3. 记录到一个 bestFriend 映射表里

最终结果类似:

Jack   -> Rachel
Rachel -> Ellen
Mark   -> Ellen
Ellen  -> Rachel

(示例,不同输入可能不同)


Step 3:寻找每个用户的「Potential Friend」

逻辑来自原题:

best friend’s best friend,排除自己和已有好友。

举例:

  • Jack 的 best friend 是 Rachel
  • Rachel 的 best friend 是 Ellen
  • Ellen 不是 Jack 自己
  • Ellen 不是 Jack 的好友(如果不是)

→ Jack 的 potential friend = Ellen

最终输出类似:

Jack’s potential friend is Ellen
Mark’s potential friend is Rachel
Rachel’s potential friend is Jack
...

每个人都能按链路找到推荐人。


🔵 四、常见 Follow-up 问题(面试必问)

Block 非常喜欢在最后问一些“扩展性”问题,比如:


❓1. 如果 best friend 有平手(tie)怎么办?

建议回答:

  • 按字典序、按用户 ID、或按最早出现顺序
  • 关键是:定义清楚即可

❓2. 如果形成环怎么办?

如:A → B → A

可以直接允许,不影响结果;
Potential Friend 会在过滤中排掉自己的情况。


❓3. 如何优化性能?

  • 给 likesAtoB 做缓存
  • 预先计算 best friend 映射
  • 使用 adjacency list 加快访问
  • 若数据量大,可考虑分片或 redis

这类回答非常加分。


这道题很经典,非常适合判断:

能力是否被测试到?
数据结构建模
图遍历 & 最大值查找
多级关系推荐
去重过滤逻辑
可扩展性思维

几乎完整覆盖 Block 的考点风格。


如果你正在准备
Square / Cash App / Stripe / Google / Meta 的面试,
需要:

  • 真题拆解
  • Live coding 演练
  • 高频题库
  • 全流程模拟

我们专注北美 科技公司面试,

提供真题还原、代码思路引导、面试流程模拟等支持。

➡️ 可以联系 CSOAHelp(我们提供高质量 OA/VO 面试辅助与全流程解析)。

Leave a Reply

Your email address will not be published. Required fields are marked *