美团一面,有点难度。
一位粉丝朋友分享了最近参与美团民宿旅游业务线的一面的经历,全程约1小时,面试官围绕高并发、分布式事务、性能优化等高频考点展开追问,问题密集且注重落地细节。以下是完整问题整理+回答思路+扩展解析,助你避坑!
一、项目与高并发场景
1. “介绍一个项目中的难点,并说明QPS和用户量峰值?”
- 回答示例:
- 项目背景:民宿节日大促活动,瞬时流量激增(如春节、国庆),用户抢购特价房源。
- 核心数据:
- QPS峰值:约8000(主要集中在活动开始前5分钟);
- 用户量峰值:单日活跃用户12万,抢购时段并发用户3万+;
- 难点:
- 库存超卖:多节点并发扣减库存的原子性问题;
- 系统崩溃风险:流量洪峰导致服务雪崩;
- 响应延迟:用户提交订单后长时间卡顿。
2. “高并发下如何设计抢购功能?异步订单处理具体做了什么?”
- 详细方案:
- 异步削峰:
- 用户点击下单后,前端直接返回“排队中”状态,请求进入MQ队列(如RocketMQ);
- 后端消费者分批拉取消息,通过Redis Lua脚本原子性扣减库存;
- 库存扣减成功则生成订单,失败则MQ重试(限制最大重试次数,避免死循环)。
- 防超卖补充:
- 预扣库存:活动开始前预热Redis,库存按房源ID分片存储;
- 库存回滚:用户15分钟内未支付,系统自动释放库存(通过延迟队列实现)。
- 异步削峰:
3. “如何用Lua脚本保证不超卖?限流除了令牌桶,还有其他方案吗?”
- Lua脚本示例:
local stock = redis.call('get', KEYS[1]) -- 获取库存 if tonumber(stock) > 0 then redis.call('decr', KEYS[1]) -- 扣减库存 return 1 -- 成功 else return 0 -- 失败 end - 限流方案对比:
- 令牌桶(Guava RateLimiter):允许突发流量(如预热期积攒令牌),适合秒杀场景;
- 漏桶:恒定速率处理请求,保护下游系统(如数据库);
- 滑动窗口(Sentinel):实时统计时间窗口内请求量,精准控制流量。
4. “Redis集群用了多少机器?选举机制和设计模式如何应用?”
- 集群架构:
- Redis Cluster:共6主6从,每个分片承载约1.3万QPS;
- 选举机制:主节点故障时,从节点通过Raft协议投票选举新主;
- 设计模式实践:
- 策略模式:根据不同活动类型(如限时折扣、拼团),动态选择库存扣减策略;
- 观察者模式:订单状态变更时,通知营销系统(发放优惠券)、日志系统(记录行为)。
二、分布式事务与锁
5. “项目中分布式事务如何实现?2PC和TCC有什么区别?”
- 最终一致性方案:
- 下单主事务:本地事务中插入订单记录,同时写入消息表(状态为“未发送”);
- MQ异步通知:事务提交后,扫描消息表发送MQ(若发送失败,定时任务补偿);
- 库存服务消费:保证幂等性(通过唯一订单ID去重),扣减真实库存。
- 方案对比:
- 2PC:
- 优点:强一致性(如XA协议);
- 缺点:同步阻塞(协调者单点问题)、MySQL性能瓶颈;
- 适用场景:银行转账、资金扣减。
- TCC:
- Try阶段:预留资源(如冻结库存);
- Confirm/Cancel阶段:确认或释放资源;
- 缺点:业务侵入性强,需自行实现回滚逻辑。
- 2PC:
6. “分布式锁除了Redis,还有哪些实现方式?”
- Redis分布式锁陷阱:
- 误释放锁:A线程超时导致锁过期,B线程加锁后A完成操作误删B的锁;
- 解决方案:value存储唯一ID(如UUID),删除时校验归属;
- ZooKeeper方案:
- 创建临时有序节点,最小节点获得锁;
- Watch机制监听前序节点释放,避免惊群效应;
- 优点:无超时问题;缺点:性能低于Redis。
三、性能优化与问题排查
7. “慢SQL优化时,执行计划要关注哪些参数?”
- EXPLAIN关键字段:
- type:
const(主键查询) >range(索引范围扫描) >ALL(全表扫描); - rows:预估扫描行数,越大性能越差;
- Extra:
Using filesort:需优化排序字段索引;Using temporary:用了临时表,常见于GROUP BY未走索引。
- type:
- 案例:某查询
type=ALL且rows=50w,通过添加(user_id, status)联合索引,耗时从2s降至50ms。
8. “线程池参数怎么设置?拒绝策略有哪些?”
- 参数设定公式:
- 核心线程数:CPU密集型任务 = CPU核数 + 1;IO密集型任务 = CPU核数 * 2;
- 队列容量:根据任务特性,内存敏感场景用同步队列(如
SynchronousQueue),允许丢任务;
- 拒绝策略:
- AbortPolicy:直接抛异常(默认策略,需做好降级);
- CallerRunsPolicy:由提交任务的线程执行(减缓提交速度);
- 自定义策略:记录日志并触发告警(如钉钉通知研发)。
9. “线上突发CPU飙升,如何快速定位问题?”
- 排查流程:
- TOP命令:找到占用CPU最高的进程和线程;
- 线程转储:
jstack pid > thread.log,分析线程状态(如死锁、无限循环); - Arthas工具:
thread -n 3:查看最忙的3个线程;watch com.example.Service method '{params,returnObj}':动态监控方法入参和返回值;
- 案例:某次CPU 100%因日志组件异步队列阻塞,改用Disruptor框架后解决。
四、算法题扩展
10. “接雨水除了双指针,还有其他解法吗?”
- 暴力解法:对每个柱子,找左右最大高度,时间复杂度O(n²);
- 动态规划:预处理左右最大值数组,时间O(n),空间O(n);
- 单调栈:维护递减栈,计算凹槽面积,时间O(n),空间O(n);
- 面试官意图:考察对多种解法的理解和时间/空间复杂度权衡。
11. “合并回文链表时,如果链表长度差很大,如何优化?”
- 优化思路:
- 若链表A长度远大于B,先遍历A到中间节点,再与B合并,减少反转次数;
- 空间换时间:将链表B全部存入List,逆序后合并(需权衡内存占用)。
五、总结与避坑指南
-
高频考点总结:
- 高并发:Redis+Lua+MQ三板斧,限流算法必须手写伪代码;
- 分布式事务:至少掌握2种方案(如最终一致性+TCC),并能对比优缺点;
- 性能优化:从SQL到JVM调优,需结合具体数据说明优化效果。
-
避坑建议:
- 忌空谈理论:所有方案必须关联项目场景(如“为什么不用2PC?因为QPS要求高,事务管理器可能成为瓶颈”);
- 准备项目图谱:提前画好系统架构图、表结构设计,应对“集群怎么部署”类问题;
- 算法刷题技巧:面试前手写高频题(如链表、二叉树、双指针),重点注释时间/空间复杂度。
最后:若你想进一步深入某个技术点(如Redis集群选举源码、TCC完整实现),欢迎留言!下期可针对性拆解🔥
欢迎关注 ❤
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我:wangzhongyang1993,备注:面试群。
相关文章:
美团一面,有点难度。
一位粉丝朋友分享了最近参与美团民宿旅游业务线的一面的经历,全程约1小时,面试官围绕高并发、分布式事务、性能优化等高频考点展开追问,问题密集且注重落地细节。以下是完整问题整理回答思路扩展解析,助你避坑! 一、项…...
7-Zip Final绿色版:高效压缩解压缩工具
在工作与学习旅程中,我们时常需要与各式各样的文件和文件夹打交道。为了更有效地利用存储空间或促进文件的便捷传输,压缩与解压工具自然而然地成为了我们不可或缺的助手。在众多同类工具中,7-Zip凭借其高效能、免费及开源的特性,深…...
详解如何使用Pytest内置Fixture tmp_path 管理临时文件
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 临时目录在测试中起着至关重要的作用,它为执行和验证代码提供了一个可控…...
QML使用ChartView绘制饼状图
一、工程配置 首先修改CMakeLists.txt,按下图修改: find_package(Qt6 6.4 REQUIRED COMPONENTS Quick Widgets) PRIVATEtarget_link_libraries(appuntitledPRIVATE Qt6::QuickPRIVATE Qt6::Widgets )其次修改main.cpp,按下图修改ÿ…...
用大模型学大模型03-数学基础 概率论 最大似然估计(MLE)最大后验估计(MAP)
https://metaso.cn/s/r4kq4Ni 什么是最大似然估计(MLE)最大后验估计(MAP)?深度学习中如何应用,举例说明。 好的,我现在需要回答关于最大似然估计(MLE)和最大后验估计&…...
Rust学习总结之结构体(一)
一:结构体定义 定义结构体,需要使用 struct 关键字并为整个结构体提供一个名字。结构体的名字需要描述它所组合的数据的意义。接着,在大括号中,定义每一部分数据的名字和类型,我们称为 字段(field…...
【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决
问题描述 我们将Debug版本的安装包发送到手机上安装,会发现华为手机有如下情况 解决办法 在文件gradle.properties中粘贴代码: android.injected.testOnlyfalse 最后点击“Sync now”,等待重新加载gradle资源即可 后面我们重新编译Debug安装…...
Ubuntu添加桌面快捷方式
以idea为例 一. 背景 在ubuntu中,很多时候是自己解压的文件并没有桌面快捷方式,需要自己找到对应的目录的执行文件手动打开,很麻烦 而只需要在 /usr/share/applications 中创建自定义的desktop文件就能自动复制到桌面 二. 添加方法 创建desk…...
day09_实时类标签/指标
文章目录 day09_实时类标签/指标一、日志数据实时采集2、Flume简介2.3 项目日志数据采集Flume配置2.3.1 涉及的Flume组件和参数2.3.2 Nginx日志采集2.3.3 用户行为日志采集 二、Nginx日志数据统计1、日志格式说明2、数据ETL2.1 日志抽取2.1.1 正则表达式2.1.2 基于Spark实现Ngi…...
排序算法的魔法世界:用C语言揭开数据排列的奥秘
当数据开始跳集体舞:排序的意义 想象你面前有一群调皮的数字精灵在开派对,7和3在跳探戈,9和1在玩捉迷藏,5和2在抢蛋糕。这时候就需要排序算法这位神奇的派对管家出场了!它像音乐指挥家一样挥动魔棒,让所有数字精灵乖乖排成整齐的队伍。在计算机的世界里,排序算法就是处…...
网页模板免费HTML源码 HTML网页设计模板
在现代网站开发中,拥有一个美观且功能齐全的网页模板是至关重要的。对于许多开发者和设计师来说,获取高质量的免费HTML源码和网页设计模板可以大大简化开发流程。本文将探讨网页模板免费HTML源码的资源、优势以及如何有效利用这些模板。 什么是网页模板…...
Python实现语音识别详细教程【2025】最新教程
文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装必要的库 二、使用 SpeechRecognition 库进行语音识别1.识别本地音频文件2.实时语音识别3. 使用其他语音识别引擎 注意事项 前言 以下是一份较为完整的 Python 语音识别教程,涵盖环境搭建、使…...
与传统光伏相比 城电科技的光伏太阳花有什么优势?
相比于传统光伏,城电科技的光伏太阳花有以下优势: 一、发电效率方面 智能追踪技术:光伏太阳花通过内置的智能追踪系统,采用全球定位跟踪算法,能够实时调整花瓣(即光伏板)的角度,确…...
Qt——连接MySQL数据库之ODBC的方法详细总结(各版本大同小异,看这一篇就够了)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...
Python的那些事第二十二篇:基于 Python 的 Django 框架在 Web 开发中的应用研究
基于 Python 的 Django 框架在 Web 开发中的应用研究 摘要 Django 是一个基于 Python 的高级 Web 框架,以其开发效率高、安全性和可扩展性强等特点被广泛应用于现代 Web 开发。本文首先介绍了 Django 的基本架构和核心特性,然后通过一个实际的 Web 开发项目案例,展示了 Dj…...
pytest测试专题 - 1.3 测试用例发现规则
<< 返回目录 1 pytest测试专题 - 1.3 测试用例发现规则 执行pytest命令时,可以不输入参数,或者只输入文件名或者目录名,pytest会自己扫描测试用例。那pytest基于什么规则找到用例呢? 文件名:满足文件名称为tes…...
【Bluedroid】 BLE连接源码分析(一)
BLE链接过程分析见【Bluedroid】BLE连接过程详解-CSDN博客,本篇主要围绕HCI_LE_Create_Connection展开。基于Android14源码进行分析。在蓝牙低功耗技术中,设备之间建立连接是进行数据传输等操作的前提。HCI LE Extended Create Connection Command 提供了一种更灵活、功能更丰…...
Unity DeepSeek API 聊天接入教程(0基础教学)
Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日,DeepSeek-R1正式上线,和当前市面上的主流AI相比,它在仅有极少标注数据的情况下&am…...
【16届蓝桥杯寒假刷题营】第1期DAY4
4.可达岛屿的个数 - 蓝桥云课 题目背景 在一个神奇的魔法世界中,有一座古老的迷幻之城。迷幻之城被分成 n 个鸟屿,编号从 1 到 n,共有 m 座桥。迷幻之城的居民们希望能够建立起紧密的联系,每个岛屿上的居民都想知道自己最多能到…...
Flink提交pyflink任务
1.官方文档: flink1.14:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/cli/#submitting-pyflink-jobs flink1.18:https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/cli/#submitting-pyflink-jobs 2.提…...
大语言模型中one-hot编码和embedding之间的区别?
1. 维度与稀疏性 One-Hot编码 定义:每个词被表示为一个高维稀疏向量,维度等于词汇表大小。例如,词汇表有10,000个词,每个词对应一个10,000维的向量,其中仅有一个位置为1(表示当前词)࿰…...
CAN学习记录
CAN(Controller Area Network),是ISO国际标准化的串行通信协议,为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求 低速CAN(ISO11519)通信速率10~125kbps,总线长度可达1000米 高速CAN&#…...
滑动窗口算法篇:连续子区间与子串问题
1.滑动窗口原理 那么一谈到子区间的问题,我们可能会想到我们可以用我们的前缀和来应用子区间问题,但是这里对于子区间乃至子串问题,我们也可以尝试往滑动窗口的思路方向去进行一个尝试,那么说那么半天,滑动窗口是什么…...
机器翻译同样的文本,是从英语翻译成日语更准确还是中文翻译成日语更准确
在大多数情况下,从英语翻译成日语会比从中文翻译成日语更准确,原因如下: 1. 语言结构的相似性 英语和日语的句子结构更接近,特别是在语法、从句使用、定语位置等方面。例如,日语和英语都使用 SVO 结构(主…...
MybatisMybatisPllus公共字段填充与配置逻辑删除
Mybatis/MybatisPllus公共字段填充与配置逻辑删除 在开发过程中,很多时候需要处理一些公共字段,例如:创建时间、修改时间、状态字段等。这些字段通常会在插入或更新数据时进行填充,以便记录数据的变化和状态。同时,逻…...
001-监控你的文件-FSWatch-C++开源库108杰
fswatch 原理与应用简介fswatch 安装fswatch 实践应用具体应用场景与细节补充 1. 简介 有些知识,你知道了不算厉害,但你要是不知道,就容易出乱。 很多时候,程序需要及时获取磁盘上某个文件对象(文件夹、文件࿰…...
SpringMVC环境搭建
文章目录 1.模块创建1.创建一个webapp的maven项目2.目录结构 2.代码1.HomeController.java2.home.jsp3.applicationContext.xml Spring配置文件4.spring-mvc.xml SpringMVC配置文件5.web.xml 配置中央控制器以及Spring和SpringMVC配置文件的路径6.index.jsp 3.配置Tomcat1.配置…...
ESXi安装【真机和虚拟机】(超详细)
项目简介: ESXi(Elastic Sky X Integrated)是VMware公司开发的一种裸机虚拟化管理程序,允许用户在单一物理服务器上运行多个虚拟机(VM)。它直接安装在服务器硬件上,而不是操作系统之上ÿ…...
学习笔记之debian的thonny开发(尚未验证)--从stm32裸机到linux嵌入式系统
这应该算 stm32裸机用户 转 linux嵌入式系统 的入门学习笔记。 【鲁班猫】39-vnc远程桌面连接鲁班猫_哔哩哔哩_bilibili 本集的鲁班猫的视频介绍中,没有清晰明确指出需要linux开发板接入网络,接入网络可以使用有线网口或者wifi路由,有些提示…...
React常用库
React 生态系统非常丰富,有许多常用的库可以帮助开发者更高效地构建应用。以下是一些常见的 React 库及其用途: --- ### 1. **状态管理** - **Redux** 最流行的全局状态管理库,适合中大型应用。 官网: https://redux.js.org/ - **…...
