面灵AI→

拼多多服务端一面:手撕扑克牌 2+3 与两次变形

轮次
一面
结果
已约二面
时间
2026-09
来源
牛客网

《面试题目》

  1. 手撕:五张扑克牌能否组合成 2+3(两张成一组、三张成一组)?
  2. 变形一:允许 1 当 A 放在 J、K 后面。
  3. 变形二:鬼牌可以当万能牌。
  4. 解释一下你的科研项目。
  5. 实习经历中遇到过什么困难?
  6. 你们系统有多少台机器、多少 CPU、线上流量有多大,如何保障可靠性?

《参考解析》

先把「2+3」的规则问清楚,再动手

这道题的关键不是算法难度,而是规则口径。面试里必须先跟面试官对齐:2 张和 3 张各自要成什么牌型(同点数、顺子、同花顺),花色算不算,A 的取值是 1 还是 14。对齐之后再写代码,把「牌型判定」抽成一个纯函数,主流程只做分组枚举——从 5 张里任选 2 张有 C(5,2)=10 种组合,剩下 3 张自动成组,对每组调用校验函数即可,复杂度是常数级。如果要求输出所有方案或牌数不固定,就改成回溯并记录已用牌。

校验函数针对「同点数」这类规则是数一下点数分布;针对「顺子」是先按点数排序去重(有重复即非法),再判断是否连续且长度匹配。写的时候把 A 的处理做成一个可配置的取值集合,把鬼牌数量作为参数传进去,后面的变形就不用改主流程。

变形一:A 可以当最大牌

顺子的判定本来是「排序后逐位加一」,加上 A 可高之后,A 就有了两个候选值 1 和 14(对应「A 2 3 4 5」和「10 J Q K A」两种顺子)。处理方式有两种:一种是把 A 的点数集合写成 {1, 14},判定时对候选值做小规模枚举(最多 2 种);另一种是复制一份手牌,把 A 替换成 14 再跑一遍原判定。前者更省,后者更好写。注意 J、Q、K 应该映射成 11、12、13,别用字符直接比较。

变形二:鬼牌当万能牌

有了万能牌就不需要穷举替换成哪张牌,用贪心即可:统计非鬼牌里各点数与花色的分布,算出「要凑成目标牌型还缺几张」,如果缺的张数不超过鬼牌数就成立。wildcards >= need 是判定条件,同时要限制鬼牌数量本身不能超过该组张数。这一步能讲清「为什么贪心是对的」比写出来更重要:鬼牌可以变任意牌,所以只要缺口能被填满,就一定存在一种合法填法。

这类「不断加条件」的手撕在考什么

考的是抽象能力和现场沟通,不是一次写完。正确姿势是:先写能跑通基础规则的版本,把可变点(A 的取值、鬼牌数量、牌型规则)都收敛到参数或函数里,然后每加一个条件只改一处,并当场跑几个样例验证。加条件时主动说一句「这次我改的是校验函数,主流程不动」,面试官就知道你有可扩展的意识。做题过程中卡住就先讲思路,别沉默。

科研项目怎么讲

用「问题—方法—结果」三段:这个方向要解决什么问题、现有方法差在哪、你提出或实现了什么、量化结果是什么(指标提升多少、数据集规模、有没有投稿或落地)。面试官未必懂你的方向,所以要准备一个 30 秒的通俗版本和一个 3 分钟的深入版本,并想清楚「这段经历和这个岗位有什么关系」。

系统规模与可靠性怎么答

这是典型的「你实习的系统到底多大」的追问,答不出量级会显得很虚,所以要提前背下来:机器数与单机核数、QPS 峰值与均值、数据量与增长、延迟的 P99、可用性目标。可靠性按层次讲:冗余(多副本、多可用区、主从切换)、流量治理(限流、熔断、降级、排队)、正确性(超时重试要配幂等、幂等键与去重表)、变更安全(灰度、可回滚、灰度指标)、可观测(P99、错误率、饱和度、告警到人)、容量(压测与扩容预案)。最后说明你负责的那部分具体做了什么,避免把团队的功劳说成自己的。