淘天集团Java开发工程师面经

面试过程

  1. 自我介绍面试一开始,面试官让我做了一个简短的自我介绍。
  2. 项目介绍接下来,面试官让我详细介绍了一个项目,特别是项目的亮点、难点和架构设计。这部分我们聊了大约半个小时。
  3. 系统设计:商品打标签系统面试官要求我设计一个给商品打标签的系统。系统需要对外提供打标签接口,传入商品ID和标签ID,数据存储在数据库中。考虑到数据量级很大,需要采用分表分库的方式进行存储。具体规则如下:
  • 10个数据库实例,每个实例上有100张表。
  • 库号计算:hash(商品ID + "库盐") % 10
  • 表号计算:hash(商品ID + "表盐") % 100
  • 为了提高访问速度,加一层缓存,数据存储在Redis中,采用hash结构,key为"prefix_{商品ID}",field为标签ID,value为version。
  1. 数据流设计面试官问我打标操作的数据流是怎样的。我回答说,首先判断标签是否有效,有效则存入数据库,数据库产生binlog,另一端消费binlog事件,将标签hset到Redis并更新version。
  2. 应对瞬时流量面试官问如果打标的瞬时流量很大怎么办。我建议将打标接口异步化,外部调用打标接口后,将请求发送到Kafka,按照商品ID hash到对应的partition,Kafka消费端控制消费速度,对数据库进行限流,确保匀速打标,避免数据库崩溃。
  3. 不同意异步操作的解决方案面试官进一步问如果不接受异步操作怎么办。我提出了两个方案:
  • 扩容数据库以抗更高的并发量。
  • 先将打标操作写入Redis(因为Redis能承受更高的并发),然后异步存储到数据库中,确保消息不丢失,可以将消息放入Kafka,另一端尽快消费。但需要注意极端情况下,数据在Redis中过期而Kafka未消费到消息时,可能会查不到数据。

#牛客创作赏金赛#
全部评论
为啥你的项目这么复杂
点赞 回复 分享
发布于 2024-08-16 19:08 上海

相关推荐

2024-12-31 15:43
已编辑
河北工程大学 Java
10.26 投递12.27 一面自我介绍1. 项目是自己做的还是实习?2. 论坛项目中Kafka应用于什么场景?3. 单个帖子你如何控制重复性点赞?4.  点赞功能如何实现?5. redis中key和value分别存储什么?6. redis缓存会落库吗?举例?有设置过期时间吗?7. Quartz定时任务解决什么问题?8. 项目中前端是自己做的吗?9. 深度分页优化是如何做的?(没答好,应该说用ES来优化的)10. 数据库中表的设计有添加哪些索引?11. 表的字段大概有多少个?12. 说一说Redis分布式锁如何解决资源抢夺的问题?(答的太少,没说到点上,面试官建议我尝试谢谢Lua脚本)13. 讲一下CompletableFuture多线程应用的场景?(获得线程返回值和实现future异步)14. 有了解过ThreadPoolExecutor的实现类?有配置过它的参数吗?15. 代驾项目中MongoDB数据库是自己搭的吗?16. MongoDB和MySQL有什么区别?17. 项目是自己在编辑器中启动还是在服务器上搭建?非技术问题:1. 最快什么时候可以到岗?2. 目前在校吗?未来有在江沪浙发展的意愿吗?3. 聊一下你自己的性格和做事风格?4. 你的优缺点?反问:1. 部门业务?(微服务比较多)2. 面试有几轮?(两轮)==========分割线=============12.30 二面1. 相比非计算机专业,经过培训也能上手工作的人,你的优势?2. 计算机网络中ARP协议有什么作用?3. ARP协议工作原理是什么?单播还是广播?怎么查ARP表项?4. 你对AI怎么看?5. 去苏州两周考察可以接受吗?
查看25道真题和解析
点赞 评论 收藏
分享
01-14 17:52
马鞍山学院 Java
oppo 后端开发 n*15
点赞 评论 收藏
分享
评论
6
9
分享

创作者周榜

更多
牛客网
牛客企业服务