3.21 美团一面 - 核心本地商业-业务研发平台 35min

问题:
1. 自我介绍 3min
2. 问项目概述, 然后问你做了哪些部分 
3. 为什么要状态机? 状态机的选型有什么依据
4. 那redis 分布式锁是怎么用的, 如果有人占了一直不取消怎么办?
5. 导出优化中, 分析是怎么做的, 具体是怎么优化的?各自因素开销占比多少? 接口超时怎么办?
6.  讲一下你对Mysql索引机制的理解?
7. 实际使用用过哪些索引?
8. 事务隔离级别; 你们项目用什么级别? 怎么实现可重复读?
9. Kafka ? 可以做到保顺序吗?
10. 怎么做到高可用? 
11. 用过redis? redis 用过哪些数据结构?有哪些数据结构?
12. 问了下另一段实习经历;感觉就是确认我是不是干了活。。
13. 消息消费失败了怎么办?
14. 如果回过头来做? 怎么做到不丢消息?
算法题: 二叉树层序遍历
队列5分钟秒了

回答:
1. 自我介绍
2. 先说项目总体概述1min 然后说自己负责的部分
3. 状态机的选型是为了定下业务模型, 状态机有三个核心参数可以作为统一的模型去丝滑的完成所有的状态流转, 同时具备单机cas加锁以及持久化机制至DB, 具备拓展性, 有新的需求不需要单独写接口和业务代码, 而是在配置类里面实现就可以。
4. 分布式锁的原因是用来保证数据一致性, 因为操作的对象我们认为是暴露出来的问题, 很容易被多人操作, 会出现分布式线程不安全的问题, 故采用分布式锁, 每个人操作前必尝试获取锁, 同时锁就限定5分钟操作时间, 每个人操作完也会释放锁, 取消Redisson自动看门狗机制, 在实际提交前还需要校验现在当前操作人是否持有锁, 否则拒绝
5. 因为一开始导出就是复用了查询的逻辑但是数据量暴增很容易OOM并且耗时很长故需要优化; arthas 分析stack 耗时, 分为网络(对外调接口)和sql开销, 46开, 对外调接口部分删掉不必要然后第一次查询存下数据; sql部分为防止OOM 采用分批分页的形式每次查100个, order by id ,用上次最后的id 作为下次查询的游标, 不仅可以走主键索引而且避开了深度分页的情况;接口肯定要超时,  先响应返回结果, 后台异步完成了后软件通知连接
6.  底层b+树, 分为主键索引、普通索引、唯一键索引、组合索引; 主键:不能为null 唯一性; 普通; 唯一键可以为null 但是不能重复; 组合 按顺序排序索引 
7. 都用过。
8. RU RC RR 可串行, 分别解决了脏读、 读不可提交、 读可提交、幻读的问题;用的是默认级别RR; MVCC 机制, RR是在第一次select 时候创建readview, 算法是根据max_trx_id、 min_trx_id本次事务id 去看是否处于活跃事务id中还是非活跃事务id 中, 如果不允许,则根据undolog 形成的版本链回退直到处于非活跃区间,则可以读; 本质上是一种快照读的形式, 不影响其他事务更新; 
9. 两种, topic 里面只给一个分区; 生产消费都在一个分区里面;因为分区内有序但是topic内不有序
10.  高可用机制:就是说如果broker 挂了依旧可以支持服务, 原理是分区有多个副本, 主分区负责读写, 从分区负责同步, 分区分布在不同的broker上, 一旦有主分区挂了, 会有选举机制让从分区顶上成为主分区; 又因为kafka具备持久化的刷盘机制, 定时以segement形式把消息存在磁盘里, 故如果所有的broker都挂了, 消息仍然在磁盘里, 重启broker可以恢复 
11. string 缓存数据 或者加锁setnx list存队列 hash 存对象 zset 用来做排行榜 set 用来做交集并集去重 hyperloglog做uv统计, bitmap做标志位识别
12. 也是讲没写的项目;具体讲效果
13.  会重试?重试次数超过了就丢掉不用了?
14.  首先消息队列作为一个中间件是不会丢消息的从生产者获取到的消息一定会发送给消费者, 所以只需要考虑消费者这端; 可以用队列或者单表去存储 收到的消息, 如果没有消费完保存待重试的状态; 后台开一个线程或者定时任务去巡检 单表扫没有消费的消息, 如果还是超过了某个阈值比如10次都没有成功, 我们会认为很可能是下游服务出现了问题, 做预警并彻底断死 只允许人工来看。 面试官说我思路非常好。。。
15. 反问部门业务也是做高并发的场景, 负责营销活动, 各种大促, 很多同事跳槽去了XXX哈哈哈哈哈, 美团混元体系的搭建; 别的也挺重要挺杂的事情, 场景高并发有很多, 有很多上百亿的数据, 接口填劵10wqps
16. 当场约二面
全部评论
太牛了,当场约二面
1 回复 分享
发布于 2025-03-25 12:17 北京
咱俩面的好像是一个部门,那人跟我说的业务也是这些,面完没结果呢还
1 回复 分享
发布于 2025-03-22 23:16 北京
你都要拿offer了我还没约面呐
1 回复 分享
发布于 2025-03-22 11:08 北京
方便问下bg么
点赞 回复 分享
发布于 2025-03-30 09:57 北京
状态机 项目是云岚到家吗
点赞 回复 分享
发布于 2025-03-26 14:16 美国
我一面完一天了,还没消息,感觉要凉啊
点赞 回复 分享
发布于 2025-03-25 17:56 陕西
接好运
点赞 回复 分享
发布于 2025-03-24 20:04 陕西
老哥可以问下是本地商业的什么团队吗
点赞 回复 分享
发布于 2025-03-23 17:01 北京
接好运
点赞 回复 分享
发布于 2025-03-23 13:19 新加坡
大佬的思路确实清晰
点赞 回复 分享
发布于 2025-03-23 11:22 上海
接好运
点赞 回复 分享
发布于 2025-03-23 10:45 陕西
楼主我面完了,为啥还在流程也不约二面我丢了,不会g了吧
点赞 回复 分享
发布于 2025-03-23 00:31 山东
接好运
点赞 回复 分享
发布于 2025-03-22 17:00 山东
佬是昨天啥时候面的
点赞 回复 分享
发布于 2025-03-22 14:09 北京

相关推荐

04-01 21:25
西北大学 Java
美团二战一面(核心本地商业-业务研发平台-美团app业务)承接了3000多的 QPS,服务端的机器有几台?这个接口(订单接口)的性能是?(响应多少毫秒) 返回哪些信息?订单列表只能看到一个商品,还是说是有个商品列表呢?分页的 每一页返回多少商品数据啊?Redis 里面主要存哪些东西本地缓存里面主要存在哪些东西 为什么固定的放在内存里面Redis 是多久更新一次吗?假设我在服务端,变更了一个库存,然后变更在那个接口发现超时了,就是你变更的时候发现返回了一个报错,但是后台其实是已经变更成功了,这种情况下怎么处理?(换了种说法 结合场景)用户下单,然后下单我调接口的时候,接下单接口超时了。但是这只是因为网络问题超时了,但是它内部其实扣减库存啊什么的都已经成功了。这种情况下怎么处理?这个 token(防重) 是在什么过程中去生成的?乐观锁解决超卖怎么解决的?为什么要用乐观锁呢?你的个性化推荐,高峰期不是会有很多很多用户会下单失败吗?JWT 的令牌认证具体是怎么做的?JWT 的三次校验(三型校验)ai封装那些订单查询、配送咨询这些问题,这个具体是怎么去做的?你是直接用用户提问的,然后直接调用大模型去询问的?你怎么知道配送状态的?因为你的那些配送不是都是兼职吗?用户下完单之后,你怎么给订单分配给兼职呢?智能客服是实现 7×24 小时智能回复。需要做到 7×24 小时吗?你还实现了那个性化菜品推荐,这具体是怎么去做的?你的那个订单数据表跟用户表,这两张表是怎么去设计的?问一个 AI 的吧,你做了一个客服问答,对吧?但是你是去调用自己封装了几个tool,然后让大模型去调用嘛,那我也想做一个智能客服,但是我的智能客服可能是基于一些,比如说我是医院,医院需要做一个智能客服,然后我会把一些那个患者常问的一些医疗上面的一些事情作为一个知识库,然后作为一个回答。那我应该怎么设计这个客户问答系统?把它给放到知识库里面,比如说我怎么切片?然后你刚讲到那个用户提问,敏感词过滤,这些我怎么去给它分词?怎么去做增强等等。按照你的那个分片,假设我按照你的那个分片形式去分片,然后我发现我检索出来的内容好像相关性并不是很强,我怎么去解决?检索相关性的算法与方案那个 Spring 框架里面有用到哪些设计模式啊?Autowired 跟 Resource 有什么区别?synchronized 跟 lock 有什么区别啊?Synchronized 底层。索引分哪几个索引?联合索引怎么创建?(具体到sql写法)不在创建表的时候创建这个索引,表已经创建完了,然后我要再创建这个索引,怎么做?like会不会走索引?MySQL 里边有哪几个日志啊?
点赞 评论 收藏
分享
评论
34
217
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务