假如你是一名面试官、对于秒杀系统你会问哪些问题?

2021-08-05 09:05:19 +08:00
 xoxo419
6567 次点击
所在节点    程序员
43 条回复
ciddechan
2021-08-05 11:54:14 +08:00
不会让系统中有秒杀,因为会浪费资源
Poko
2021-08-05 12:14:21 +08:00
问这种的都是培训班出来的
qq976739120
2021-08-05 12:18:49 +08:00
问秒杀红包之类的问题,基本上是半吊子
no1xsyzy
2021-08-05 12:49:22 +08:00
@qping 我没说清楚。
要么拿着你的解一换一我的解,要么拿(不少的)钱换我的解。
几个空手来问的我都移 Spam 了。
非常传统的营销策略,不必通过我,多跑跑商场就能知道了,基本策略他们大概还在用。

不过 #18 已经差不多了,但缺乏了秒杀的形态。
不过,说回来,秒杀确实根本就不应该出现,这东西连营销上都不算上乘,ROI 非常低,甚至不如直接打折。
问题就是,开发秒杀系统的技术开销不算营销的开销,降不了报表 ROI,那些纯粹当个分母、之后消失无踪的人却计算为营销的收益,凭空增加报表 ROI 。实际就是,垃圾的市场营销为了自己的而非企业的利益,割运维开发的韭菜。如果一次秒杀不能借此将你的服务宣传到全网皆知,那就是失败的。
comoyi
2021-08-05 13:39:03 +08:00
秒杀==盲盒
darksword21
2021-08-05 14:15:31 +08:00
@meteor957 握🌿,🐂🍺
Jface
2021-08-05 14:22:24 +08:00
啊哈哈哈 笑出声
wangt21
2021-08-05 14:38:29 +08:00
我会甩两道 leetcode hard,因为我是高贵的字节面试官
461990781
2021-08-05 17:24:13 +08:00
@wangt21 我是你哥哥
new1viewer
2021-08-05 17:53:58 +08:00
@maxiaofeng 某多那一套呗
docx
2021-08-05 18:24:07 +08:00
@krixaar #18 有拼多多那味了
thinkingbullet
2021-08-05 20:40:02 +08:00
兄弟别在卷了,找份工作容易吗?我问你 tcp 挥手都是四次吗,如果不是说说为什么.
Dragonphy
2021-08-05 22:02:19 +08:00
@meteor957 #7
朴实无华
2kCS5c0b0ITXE5k2
2021-08-05 22:31:09 +08:00
学小米啊.前端先过滤一半
crclz
2021-08-06 00:31:20 +08:00
使用 redis 只能保证不超卖——这个答案是网上随便查得到的。

完美答案是:
假设有 N 个库存,那么就得分配 N 个 token (例如 GUID ),token 放在 redis 上面以供获取。token 作为 mongo 的_id 就可以将压力平均分散到各个 shard 。shard 越多,压力越小。如果有 100 个 shard,那么压力就变为 1/100 。再用 mongo 的_id 做幂等,保证一个 token 只用一次,保证不超卖。最后通过订阅 binlog or 业务代码 将用过的 token 同步到 redis 进行标记。并且根据数据库的压力的不同可以在 redis 中对同一个 token 使用分布式锁来缓解压力,类似于避免惊群 /击穿的方案。
本方案既能保证先来后到公平性,又能保证不超卖 /少卖,还可以支持临时加库存的情况下依然能保证上述特性。

这个方案我之前面试的时候用过了,面试官挑不出刺。当然一次别说完了,不然面试官可能理解不了,挑“token+幂等”这个重点就行了。
namelosw
2021-08-06 00:51:00 +08:00
秒杀方案都太过鸡贼,感觉如果是纯技术的话其实可以换个问题,比如拍卖。

其实国外很多搞高可用的架构师都是搞拍卖或者菠菜出身的。
chenyu0532
2021-08-06 09:10:56 +08:00
现在淘宝 京东 这些还有秒杀吗??这种是 10 年前有的吧。现在有的话也就是双 11 了。。
realpg
2021-08-06 12:41:30 +08:00
@crclz #35
15 年前做一种特殊的秒杀(不是卖东西,但是逻辑跟秒杀没区别),那时候还没有 redis,没有 memcache 。
当时的方案是纯 MYSQL,那时还没有云计算弹性扩容
当时就可以很容易的解决秒杀问题,而且严格不能超售。
多开 webserver,mysql 堆 ram 扩大连接数不让他死掉

比如秒杀商品是 100000 件每人限购一件限购一单,直接预先生成 100000 个订单,不在主订单表内,每个秒杀做一个独立的订单表,引擎 memory(heap)

简略的单一项目秒杀独立订单表如下
order_id user_id,……………………其中 user_id 挂唯一索引

所有订单 user_id 预先都设置成 0
秒杀逻辑就是大家拼命往里堆执行
update [table] set user_id = [Your user id] where user_id = 0 limit 1;

秒杀完成后( 30 秒级),直接预置一个逻辑,把这个特殊表按规则合并到主订单表

缺点就是,30 秒内,[我的订单]看不到秒杀成功的订单……


如果不想依赖手速网速,或者不像搞死最大连接数只有 800 左右的单机 MYSQL,就在前面下概率控制,随机数有一定概率往数据库里写。随机数可以引入时间加权。
Feiex
2021-08-06 14:15:47 +08:00
@no1xsyzy 秒杀的 roi 低吗?
一换一:想问下你是什么行业的秒杀活动呢?复购、库存、客群是怎样的?

我们这秒杀品的复购率非常可观(可能我们的客群覆盖比较精准)。
坐标某厂餐饮供应链营销技术
no1xsyzy
2021-08-06 14:50:46 +08:00
@Feiex 不是卖方,看过灰黑产(这算黑产还是灰产?)用假人,本人不想涉及灰黑产就没合作。
问下尖峰 QPS ?是否有控制变量对比?顺便,我有部分是夸张的暴言。
而且做供应链的话,我怀疑可能是套了「秒杀」之名的「一般限时限量促销」,可能是方便给老板解释就直接叫秒杀了。这其实不需要技术专门处理,体量小一个 MySQL 单例都行,大的 MSSQL 或者 Oracle 完全跟得上。这不算割运维开发韭菜,算收老板的智商税。不需要技术挠破头皮的都不算真秒杀,回到本主题的话确实也不需要面软件技术的时候提这问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX