淘天集团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未消费到消息时,可能会查不到数据。

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

相关推荐

不愿透露姓名的神秘牛友
11-07 19:05
已编辑
投票
神州信息 java (n-3)*13 其他
点赞 评论 收藏
分享
纯手码,望见谅:👥 面试题目拷打项目,布隆过滤器的底层原理,如何控制长度。底层是如何控制长度的?如何控制误差?扩容因子是多少?订单延迟取消队列是如何设计的。死信队列交换机。java集合,你了解的集合有哪些?synchronized的底层原理。和reentrantlock的区别java设计模式拷打。说说项目中用到了哪些设计模式。spring中哪些功能用到了模板设计模式。如何实习mysql主从,Mysql主从如何设计调优。MVCC底层。当时想提项目用到了canal伪装成mysql的子节点来实现mysql和redis的最终一致性。过于紧张就忘了。如果要实现一个LRU,如何实现?我提到可以直接继承LinkedHashMap.怎么实现的。我说各个方法分别super基础父类。继续深挖,问put的值值存储在哪?TCP的三次和四次。JVM 内存结构,垃圾回收。操作系统的内存管理方式。二、滴滴2025届校招正式启动啦!🚘岗位类别工程类/算法类/机器人类/数据类/安全技术类/产品类/运营类/职能类等🚘投递要求2024年9月~2025年8月之间毕业的海内外高校毕业生,每人可投递1个岗位🚘工作地点北京/杭州/上海/广州等🚘招聘流程简历投递-简历筛选-笔试-面试-Offer发放三、面试预约:滴滴面试采用预约制,因为面试的候选人比较多,收到面试预约邮件后尽早选择合适的面试时间,面试席位预约满后会提前关闭,就约不上啦,如果已经招到了合适的候选人,后续就不一定再约面试了,所以一定要尽早选择面试时间,如果没有什么特别的事,也尽量不要修改面试时间四、竞争比较小,进面概率较高岗位:去年秋招是前端,算法,客户端,比较卷的岗位:后端,各个大厂后端简历量都比较多,安排起来就会比较慢,大家耐心等待吧,也可以考虑投一下客户端公司福利薪资在大厂中也算是比较有竞争力的,节假日各种礼包,桔厂周边,校招礼包,司庆礼盒少不了,速来来解锁,小零食,免费晚饭🚘投递方式 内推链接:https://app.mokahr.com/m/campus_apply/didiglobal/96064?recommendCode=DSJUY6Cw&hash=%23%2Fjobs#/jobs内推码:DSJUY6Cw立刻投递,快人一步,抢跑未来!投递后可评论留言姓名缩写+岗位(ljh+研发),后台跟进,能捞就捞
滴滴
|
校招
|
94个岗位
点赞 评论 收藏
分享
自我介绍1:你介绍一下你的实习项目2:这个项目你主要做什么事?3:有哪些功能?你怎么进行测试的?4:接口测试主要做什么?5:你用jmter和postman做接口测试走的什么协议?6:http和https的区别是什么?7:https和http相比怎么保证安全性的?8:stl/tls具体是怎么保障安全性的?9:你测http的那些接口?10:说一下http的协议格式是什么样的?11:http协议是基于udp还是tcp的?12:tcp有了解过吗?例如三次握手,四次挥手,tcp的抓包?13:http的短链接和长连接是什么东西?14:它具体怎么保证短链接在不需要的时候断开连接,在需要的时候建立连接?15:静态方法和类方法的区别?16:mysql中插入数据怎么做?对数据进行排序怎么做?17:group by是干嘛的?怎么用?18:group by只能用来进行分组吗?19:  一个sql语句的执行过程是什么样的?20:连接了解吗?比如左连接,右连接,内连接,交叉连接21:你平时Java代码使用git管理的吗?22:考了一些代码的提交以及拉取的命令23:同时开发情况下,如果发现两个人代码冲突了怎么办?24:算法题:求数组中两个目标数之和,讲了一下思路面试官很专业,几乎没有陈述句,都是反问句,我觉得问的基础但很仔细,也不会出现和某马力一样很生硬的问法,回答了差不多有百分之80-90%但还是挂了,还是我太菜了,体验感不错#牛客解忧铺##牛客在线求职答疑中心##牛客创作赏金赛#
点赞 评论 收藏
分享
6 8 评论
分享
牛客网
牛客企业服务