穗彩科技 java 一面面经(校招)base深圳

一面后1小时通知二面
——————————
#面试问题记录#

整整一个小时的拷打,场景题+项目拷打 几乎无八股文
🧠 个人背景与项目经历
1.你自我介绍一下?
2.你做的两个项目中,哪个是实习?哪个是练手项目?
3.实习项目主要做了什么?用到了哪些技术和框架?
4.练手项目是独立做的吗?用了哪些模块和功能?    
5.你对这个练手项目熟悉吗?可以详细介绍一下它的功能模块?

💻 技术能力 - 后端开发
1.你项目的XX流程是怎么实现的?Redis + Lua 在其中起到什么作用?
2.你项目的Redis 缓存预热结构是怎样的?怎么判断用户状态?
3.你用 MQ 的目的是什么?为什么不是直接操作数据库?
4.MQ 消费失败的情况下你是怎么处理的?有重试机制吗?
5.死信队列和超时取消使用的是同一个吗队列?怎么区分消息类型?
6.redis成功执行写入了但 MQ 落库消费失败怎么办?Redis 写成功就代表成功吗?
7.JWT 是怎么生成和校验的?用了什么加密算法?
8.用户主动登出是怎么实现的?

🧵 多线程与分布式
9.Redis 的原子性是怎么保证的?
10.项目中你有没有考虑幂等性?怎么防止重复请求的幂等性?
11.XX场景中是否能做到最终一致性?如何通知用户成功?

☁ MQ & 延迟任务
12.延迟队列的作用是什么?项目中用来处理哪类业务?
13.死信队列是如何配置的?超时和消费者消费失败如何分别处理?
14.如果 MQ 消息失败进入死信队列,你是如何排查和处理的?
15.MQ 消息失败重试到上限后该怎么办?
16.使用 RabbitMQ 是为了提高性能还是为了消息可靠性?
17.项目中有没有处理 MQ 消息重复消费问题?

🧩 MySQL & 数据库能力
18.MySQL 的 B+树结构你了解吗?聚簇索引和非聚簇索引有什么区别?
19.建立索引有什么原则?如何判断字段是否适合建索引?
20.用“性别”字段建索引合适吗?为啥说选择性低不适合?
21.全表扫描和使用区分度低的索引扫描哪种情况下更快?
22.大分页 offset 性能差怎么优化?
23.在实习中是怎么优化SQL的?

 🎯场景题:高并发请求失败后处理方式
💡 题目背景描述:
你接入了一个第三方服务,该服务每天发送约 300 万次请求给你们系统。其中,每个请求都包含一个全局唯一的 requestId(一个 40 字节的 UUID 字符串)。如果因为网络中断、超时等原因导致第三方没有收到响应,它会重新发起完全相同的请求(带相同的 requestId),业务上有几个关键限制:
    1、每个 requestId 表示一次业务处理,例如支付通知、回调、交易同步等。
    2、你方必须保证对于每个 requestId,只能处理一次(典型的幂等性要求)。
    3、不能重复请求第三方服务(第三方服务不具备幂等性)
    4、由于网络波动或响应失败,同一个 requestId 有可能会在不同时间再次被发送过来,甚至有以下复杂时间分布:
        4.1、绝大部分重复请求会在20 分钟内重发;
        4.2、一小部分会在1 天内重发;
        4.3、极个别(例如接口挂起重试)会在一年后突然重发。
🤯 关键技术难点:
    如何快速识别“是否已处理过某 requestId”?
    如何既不误判(重复处理)又不滥用资源(存一年)?
    如何兼顾吞吐量、IO压力、成本?
全部评论

相关推荐

04-17 23:29
中南大学 Java
查看17道真题和解析
点赞 评论 收藏
分享
评论
点赞
12
分享

创作者周榜

更多
牛客网
牛客企业服务