字节面试题:抖音大V直播间,200万QPS如何设计?

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

见字如面,我是军哥!

前几天,我和朋友架构师伦哥去字节面试,遇到如题的面试场景题,他感觉答的一般,我问了一下这个场景面试题的上下文,我来尝试答一答。

下面的文章,采用一问一答形式还原真实面试场景,大家来看看,我这个水平还行吗?

面试官:给你出道超难的场景面试题!我们公司抖音大V直播间,粉丝过亿,500 万人在线,100 万单商品瞬间被抢,下单并发高达 200 万QPS。结果,评论区卡死,商品页白屏,库存服务挂了,订单系统也崩溃了!这是咋回事?

我:面试官,这可不是普通的技术难题!库存服务挂了,订单系统也跟着崩,肯定是服务依赖没处理好,或者压测不到位,引发了连锁反应。

面试官:哈哈,思路不错!但关键问题来了:如果你是这个系统的负责人,你觉得问题的根源到底在哪?

我:面试官,我觉得问题的核心是系统缺乏“防护机制”。一个服务挂了,其他服务也跟着崩,这就像是“多米诺骨牌”效应。

问题可以总结为三点:

1. 流量失控:没有限流、削峰措施,高并发直接把系统压垮了。

2. 强依赖:服务之间耦合太紧,库存挂了,订单也跟着受影响。

3. 隔离不足:资源和逻辑没隔离,单点故障迅速蔓延,整个系统瘫痪。

面试官:如果让你来设计,如何避免这种悲催的局⾯?

我:我会⽤我最厉害的三板斧——拦、缓、隔来解决这个棘手问题:

第一个拦:拦截和限制流量,⽐如限流、熔断,阻挡过量流量冲击系统,通过压测提前 知道库存服务和订单服务的最⼤承载能⼒,⽐如库存服务的极限是50万 QPS。在⾼于这个阈值时,直接限流或降级,保证服务不被压垮。  

第二个缓:缓解系统压⼒,⽐如通过缓存、排队等⽅式削峰填⾕,提升系统吞吐能⼒。 比如,订单太多就先排队,让用户知道“别急,慢慢来”,这样系统压力小多了。

第三个隔:隔离故障域,把问题限制在局部,不影响全局,⽐如服务隔离、线程池隔 离、资源隔离,防⽌故障蔓延。 

这三板斧一出,系统稳如泰山,抗压能力直接拉满!

面试官:说的有那么点道理,但我不确定你是不是ppt架构师,先来深入聊⼀下你的第⼀板斧,假设库存服务挂了,你在订单服务设计了熔断机制,⽤户下单会直接返回‘库存紧张ʼ的提⽰,系统勉强还能运⾏。

但接下来,⽤户疯狂重试,导致订单服务的压⼒暴增,线程池很快被打满,系统依然崩了!你觉得问题出在哪里?除了熔断,还有什么更好的方案么?

我:嗯,这个问题的核⼼其实不在熔断本⾝,⽽在于⽤户⾏为和系统承载能⼒之间的⽭盾。熔断确实能保护库存服务,但它没有考虑到⽤户‘疯狂重试ʼ这种常⻅的⾏为模式,导致订单服务压⼒暴增。

换句话说,熔断只是‘断了依赖ʼ,但没有‘断掉压⼒ʼ,所以系统依然会崩。

 讲真,熔断机制的本质是保护下游服务,但它对⽤户⾏为没有约束,所以此时光靠熔断显然是不够的。还需要结合其他的⼿段,⽐如限流、⽤户反馈优 化、异步排队等,让系统不仅能‘断依赖ʼ,还能‘断冲击ʼ。

面试官:那具体怎么做呀?

我:我从 2 个方面说下我的做法:

首先,在订单服务上增加限流机制,限制单个用户短时间内只能提交一次订单请求,防止“疯狂重试”压垮服务(可通过缓存记录访问频率,即白名单机制)。同时优化给用户提示文案,如返回“系统繁忙,请稍后再试”或排队信息,避免用户反复尝试。

其次,若流量仍大,可以考虑使⽤第⼆板斧, 缓⼀下。

1. 比如对库存扣减做预分配机制;

2. 增加异步排队机制,订单服务将请求放入队列异步处理,并告知用户“已进入排队中,XXX分钟后系统会在XX中通知”,缓解并发压力;

3. 在订单服务前增加预约逻辑和资格缓存,未获得资格的用户无法进入订单服务。

面试官:小伙子,有点东西呀,那对于你的第⼆板斧,如果在⼀次压测中,你发现系统的 QPS 突然在 10 万的时候卡住了,延迟飙升,CPU、内存等资源使⽤率却不⾼,数据库压⼒也正常。这种情况下你会如何排查瓶颈?具体会⽤哪些⼯具和⽅法?

我:嗯,这个问题很有意思,系统卡住但资源未用满,说明瓶颈可能在“隐藏角落”,如线程池、消息队列积压、锁竞争或网络连接问题。我的排查思路是从系统调用链和资源分配入手,逐层分析每个环节的运行情况,找到真正的瓶颈。

面试官:小伙子确实有两把刷子,最后一个难题要是你过了,我就让你过我这一关哈,前面你多次提到三板斧,最后一招”隔”能深入讲讲吗?

我:好的呀,关于这个隔,从系统的上到下分成三个层次来说就是:逻辑层、服务层和基础层。 

逻辑层:梳理业务逻辑,找出关键路径(如订单、支付)和支撑路径(如弹幕评论)。关键路径必须稳定,支撑路径出问题可通过降级或异步化解决,不影响核心链路。

服务层:重点是服务调用和资源隔离。通过线程池隔离(如库存、支付服务独立线程池),防止服务间相互影响;限流控制客户端请求量,防止异常流量拖累服务;高耗资源模块可独立进程运行,减少对主服务的影响。

基础层:隔离底层资源,划分独立资源池(如线程池、数据库连接池),按用户类型(VIP用户和普通用户)或业务模块分开使用,避免普通用户耗尽资源影响VIP用户;通过区域隔离,让不同地域或业务模块使用各自资源组,防止局部问题波及整体。核心是局部问题局部解决,保障系统整体运行。

这个场景面试题结束了,你有什么观点和看法?来评论区留言。

最后,我最近弄了一个架构群,讨论业务架构,基础架构,云原生,安全,支付,AI、区块链,全链路测试测试架构,技术管理等备领域知识,如果你感兴趣,加我微信备注架构,我拉你入群哈~

目前已经有近 500 多人加入。

如果你已经在群里,请忽略~

如果你发现加的人太多加不上的话,请加这个微信(jeff_cheng02)

综上,希望今天这篇文章对你帮助!

全文完,觉得我说的不错的话点个赞或者在看吧!

以往热文推荐:

我身边那些P9,CTO大佬之所以成为大佬的 6 个原因!


更多精彩,关注我公号,一起学习、成长

从零到一:基于PX4+Gazebo+ROS2的无人机轨迹跟踪仿真环境全栈搭建 本文详细介绍了在Ubuntu 22.04系统上,从零开始搭建基于PX4、Gazebo Garden和ROS2 Humble的无人机轨迹跟踪仿真环境的完整流程。内容涵盖PX4 SITL编译、Gazebo安装、ROS2配置、Micro XRCE-DDS Agent通信桥接以及QGroundControl地面站部署,并提供了创建自定义ROS2节点实现圆形轨迹跟踪的实战代码与关键调试技巧,帮助开发者快速构建全栈仿真开发环境。 阅读详情

相关推荐

在微信小程序中如何引入iconfont

略

sayyy的专栏 4326

直播系统聊天技术(四):百度直播的海量用户实时消息系统架构演进实践

本文原题“百度直播消息服务架构实践”,由百度APP消息中台团队原创分享于“百度Geek说”公众号,为了让文章内容更通俗易懂,本次已做排版优化和内容重新划分,原文链接在文末。 1、引言 一套完整的直播系统核心功能有两个: 1)实时音视频的推拉流; 2)直播间消息流的收发(包括聊天消息、弹幕、指令等)。 本文主要分享的是百度直播的消息系统的架构设计实践和演进过程。 实际上:直播间内用户的聊天互动,虽然形式上是常见的IM聊天消息流,但直播消息流不仅仅是用户聊天。 除用户聊天外:直播间内常见的用户送礼物

hellojackjiang2011的博客 1994

保姆级教程:在Linux上用IGH EtherCAT主站搞定从站时钟同步(附sync_datagram报文详解)

本文详细介绍了在Linux系统上使用IGH EtherCAT主站实现从站时钟同步的保姆级教程,重点解析了sync_datagram报文的结构和工作原理。通过实战案例和代码示例,帮助开发者掌握微秒级同步精度的实现方法,适用于工业自动化领域的高精度设备协同控制。

weixin_30733003的博客 263

Confetti AI题库深度解析:面向AI求职与招聘的实战能力诊断体系

AI工程师能力评估正从知识记忆转向工程决策与业务建模。Confetti AI题库以‘临床有效性’为核心,将机器学习、数据科学与系统设计题目转化为可诊断、可归因、可演进的能力图谱。其底层融合数学直觉还原、工程防呆设计、架构分层权衡与职业黑话解码四层知识结构,依托Jupyter Notebook实践载体与Discord社区驱动机制,精准锚定真实面试场景与产业一线水位。该体系不仅服务于应届生求职冲刺与在职者能力跃迁,更成为招聘方高效初筛与人才画像的技术基础设施——当一道题能暴露Pipeline设计缺环或特征一致性

weixin_34392435的博客 506

vue + video.js 加载多种视频流(HLS、FLV、RTMP、RTSP)

由于需要在一个项目内接入多种常用的视频流,所以接触到video.js,这里就做个记录。vue安装就不讲了,直接从项目开始了。RTSP格式已测试,无法成功播放,浏览器就识别不了STSP协议(提供两个解决方案:第一个是通过后端去转格式。第二个方案就是安装插件/中间件。目前想用浏览器直接播放RTSP格式流,没有其他更好的解决方法。

qq_17627195的博客 1万+

从零到自动化:用Python脚本搞定华为CE12800的NETCONF初始配置(含完整代码)

本文详细介绍了如何使用Python脚本实现华为CE12800交换机的NETCONF初始配置自动化。从环境准备、脚本架构设计到SSH连接与NETCONF配置实战,提供了完整的代码示例和错误处理建议,帮助运维工程师高效完成网络设备自动化配置,提升工作效率。

weixin_42525551的博客 401

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 303

RT-DETR 模型剪枝优化:结构化剪枝对 R18/R50 性能的影响

本文提出分层结构化剪枝策略R18:参数量减少 42%(28M→16.2M),推理速度提升 35%(15→20.3 FPS@Jetson Nano),mAP@0.5 仅降 1.2%;R50:参数量减少 55%(170M→76.5M),推理速度提升 48%(42→62.2 FPS@T4),mAP@0.5 仅降 2.1%。核心价值:为 RT-DETR 提供“精度-效率-部署”平衡的轻量化方案,推动其在边缘设备、工业质检等场景的大规模落地。部署建议。

走向CTO的路上... 466

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 527

Python航空航天设计神器!从入门到实操,小白也能搞定飞机优化

AeroSandbox的核心价值的是:​降低航空工程优化的门槛,用Python实现高效、简洁的工程设计​。无论是科研、学习还是实际项目,它都能帮你节省大量时间,不用再手动推导导数、编写复杂的优化逻辑。对于新手来说,建议先从案例1(Rosenbrock函数)入手,熟悉优化流程,再尝试案例2(翼型优化),逐步掌握核心用法;对于有航空相关需求的小伙伴,可以深入研究内置的物理模型,结合自己的项目进行定制化开发。最后,互动时间到!👉 你是用AeroSandbox做科研、练手还是实际项目?

源代码杀手的博客 126

Python 爬虫实战:亚马逊 + eBay 商品信息跨平台抓取(价格 / 销量 / 评价对比)

亚马逊和 eBay 是全球知名的电商平台,拥有海量的商品信息。对于消费者来说,比较不同平台上的商品价格、销量和用户评价可以帮助他们找到性价比最高的商品。对于商家而言,了解竞争对手的商品信息有助于优化自身的产品策略和定价策略。然而,手动在两个平台上逐一比较商品信息是非常耗时且低效的。因此,开发一个能够自动抓取并对比这两个平台商品信息的爬虫工具具有重要的实际意义。

yansideyucsdn的博客 618

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 355

[PCIE5.0] 2.2.8.3 Error Signaling Messages

错误信号消息用于在 PCI Express 设备之间传递错误信息,帮助系统发现并报告错误。每当发生某种错误时,检测到该错误的设备会通过发送这些消息来通知系统。• 没有数据负载:这些错误信号消息不包含任何数据(即 TLP Type 是 Msg),它们仅用于错误报告。• 长度字段保留:在这些消息中,长度字段是保留的,不使用。• 功能号(Function Number)字段:这个字段标识哪个设备发生了错误。

系统固件工程师 293

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 332

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 563

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 422

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1121

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 231

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 368

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 176

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 341

动态代理两大流派:JDK 代理与子类代理

业务类想加日志,最直白的写法是侵入式修改: 问题很明显:每个方法都要改一遍,改一个业务要动十处。代理模式的解法是:调用方不直接依赖 ,而是依赖一个代理对象。代理对象长得跟目标一模一样,调用它 → 代理先执行增强逻辑 → 再转调真实对象。 关键在于:代理对象的类型是哪来的?这就是"动态"二字的含义:代理类在运行时才诞生。两个角色: 承载增强逻辑, 负责生成代理类。 组装代理并调用: 输出: 业务代码 一行没动,增强逻辑全在 里。这就是 AOP 的味道。 内部四步: 第 2 步 内部:先查 (同一个接口

Android的专栏 603

c++ explicit关键字详解

explicit。

拒绝AI文,努力在AI时代写出感动人心的好文章 166

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 312

Teamcenter Java SOA 开发:连接、查询与保存

本文介绍如何通过 Java 调用 Teamcenter SOA 接口实现外部系统对接,涵盖连接登录、查询保存等核心操作。以最小闭环示例展示 Connection、Service、ModelObject 等关键组件的使用,强调错误处理与事务管理要点。梳理了 DataManagement、Query、File Management 等 API 模块分工,并结合“工作移交WebService”案例,说明幂等性设计与流程状态返回的重要性。适用于 Web 门户、ERP 集成等场景,建议批量操作用 bulk 接口优化性

软件工程师文艺 258

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

Programming is a highly artistic endeavor 387
上一篇: 我身边那些P9,CTO大佬之所以成为大佬的 6 个原因!
下一篇: 技术人职场混的差赚不到大钱的 5 个真相!
军哥手记
军哥手记 业界专家认证 业界专家认证
博客等级 码龄21年 661粉丝 608原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值