字节跳动测试开发二面(1hour)

面试官一开始给的压力很足,差点把家乡话给我逼出来,聊了一会就好了,增长了压力面试的经验。

主要应该是关注项目是不是自己做的。

1. 自我介绍
2. 介绍项目,开始深挖
3. 多级缓存。
4. redis缓存更新机制
5. redis的LRU机制
6. redis集群(还不怎么会)
7. redis持久化
8. 继续介绍项目
9. ElasticSearch检索机制
10. ElasticSearch怎么使用
11. 项目里RabbitMq起到了什么作用
12. RabbitMq防止数据丢失?
13. 当数据量变大的时候,数据堆积会怎么样(没有答出来),面试官说可以使用限速
14. 继续介绍项目
15. redis 主从复制,哨兵机制
16. redis集群(没答出来)
17. 继续介绍项目(挖到数据库表怎么实现,哥们我2月做的项目现在问我有什么外键,不要啊哥们)
18. ThreadLocal原理
19. ThreadLocal用来干啥
20. 项目有Java反射吗
21. 微信收发红包写些测试用例,从收发分别考虑

算法:
#牛客AI配图神器#最长不重复子串。
写测试用例

---------------

许愿二面过
全部评论
在红包领取过程中,网络数据包不完整确实可能导致“已领取但金额未增加”的情况,具体原因和机制如下: 可能的原因分析 1. 网络通信中断与状态不一致 - 领取请求已提交但响应丢失: 用户点击“领取红包”后,客户端向服务器发送领取请求,服务器处理成功并标记红包为“已领取”,但返回给客户端的响应数据包在网络中丢失(如路由器故障、信号中断)。此时: - 服务器端状态:红包已被领取,金额从红包池扣除。 - 客户端状态:未收到成功响应,界面可能显示“领取中”或失败,但实际服务器已完成处理。 - 结果:用户后续刷新时发现红包已被领取,但自己的余额未增加(因为服务器可能未完成余额入账的后续步骤,或入账请求因网络问题未成功)。 2. 分布式事务中的部分成功 - 红包系统通常采用分布式架构(如订单服务、账户服务分离): - 领取红包时,服务器先在订单服务中标记红包为“已领取”,再调用账户服务增加用户余额。 - 若账户服务调用时网络数据包丢失(如超时),可能导致: - 订单服务:红包状态已更新(已领取)。 - 账户服务:未收到入账请求,余额未增加。 - 结果:用户看到红包已被领取,但余额未变化。 3. 客户端本地状态错误 - 客户端可能因缓存或逻辑错误,错误显示“领取成功”: - 例如,客户端在发送领取请求后,未等待服务器响应就自行更新界面状态为“已领取”,但实际服务器未处理请求,导致余额未增加。 - 这种情况属于客户端逻辑漏洞,与网络数据包不完整间接相关(如请求未真正发送成功)。 系统如何避免此类问题? 1. 分布式事务最终一致性 - 采用“事务补偿”机制(如TCC模式): - 若账户入账失败,订单服务自动回滚红包状态,或触发重试机制,确保“领取”与“入账”要么都成功,要么都失败。 2. 幂等性设计 - 服务器对领取请求做幂等处理: - 即使客户端重复发送领取请求(如网络重传),服务器通过唯一请求ID判断是否已处理,避免重复标记红包状态或重复入账。 3. 对账与补偿机制 - 定期对账: - 后台定时检查红包状态与账户余额的一致性,发现“已领取但未入账”的记录时,自动补发金额或回滚红包状态。 - 客户端重试: - 若用户发现余额未增加,可手动刷新或重试领取,客户端重新向服务器查询真实状态并同步余额。 典型场景示例 - 用户A领取红包时突然断网: - 服务器已记录A领取红包,但向A的账户打款时网络中断,打款请求失败。 - 服务器后台对账时发现该记录,自动补发金额到A的账户,或标记红包为“未领取”并退回金额。
点赞 回复 分享
发布于 今天 09:29 广东

相关推荐

谦虚的布莱克选钝角:华为呢,那个很热情的
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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