字节面经 | 国际化电商 Java后端 | 杭州 | 2022.4.11 |
4231
发布于 未知归属地

个人简介

社招,一年工作经验,之前做社区电商B端业务,985计算机本科

第一轮(4.6) | 视频面试 | 1小时

1.项目简介
2.八股文(主要是MySQL,事务隔离级别、如何实现隔离 - 间隙锁、undolog等,RR和RC之间的区别)
3.对分布式事务的了解
4.算法题(一堆不同高度的隔板,能接多少水,力扣上有原题,应该是中等难度)
总体感受:面试官感觉状态不太好,后续也没有Q&A环节

第二轮(4.11) | 视频面试 | 1小时

1.项目简介
2.求根号2的值,不允许用sqrt,double能表示的精度即可,能指定精度
用二分求,面试官要求分析算法的精度,原本说O(logN),但提醒后发现是O(n)的
3.543. 二叉树的直径(面试官要求只说思路即可,刚开始说了dfs,后来想了一下感觉不对,说了一下三种情况:左、右、横跨,比大小然后递归的思路)
4.表结构设计:学生、老师、课程,一个老师对应多个课程,一个课程对应一个老师,一个学生对应多个课程
最开始弄了四张表,学生、老师、课程(包括老师的id),以及学生和课程之间的对应关系表,后续面试官提示可以压缩,弄半天没想出来,最后时老师和学生可以压缩为一个用户表,用角色区分
5.大学抢课系统设计,一致性、公平性、实时性,如何设计?能否满足上述性质?
先想了一个用Redis的Lua脚本完成加锁然后删除剩余名额数量,随后写表,抢不到就自旋等待,自旋一段时间后返回失败让用户重试,这样有一致性和实时性,但没有公平性
问:剩余名额和具体对应关系分离后如何保证可靠性?
Redis宕掉的话就用Redis节点或者哨兵,MySQL有binlog和redolog保证宕机后恢复
问:是否还是存在风险?比如网络问题等等
因为之前没接触过类似情况,这块已经开始不太会了,大致说可以再加MQ等等保证重试一次
最后面试官说可以把加锁、减名额数量、写表都后移给数据库,这样较为简单,同时可以保证一致性和实时性
问:那公平性如何保证?
用一个全局队列,可以用生产者-消费者模式,一个往里加,一个拿出来后去写表,但没有实时性
6.Q&A环节(具体业务、目前情况等等)
总体感受:非常好,面试官是我目前参加工作以来遇到的最好的一位,很有启发性,不论这次面试是否通过,我感觉都受到了很多启发

第三轮(4.13) | 视频面试 | 50分钟

1.项目介绍,你做过的最难的项目是什么?

  • 这一部分问的很细,其实发挥空间也很大,但题主这边做的核心项目不多(去年的社区电商懂得都懂,不能说是走向辉煌吧,也可说是苟延残喘了)
  • 想了一个流量较大的服务说了一下(顶峰QPS 1w+,消息存量 百万级别,难点是MQ、限流,以及原本规划但未实施的冷热分离、分表分库,但都比较初级,感觉面试官不太满意)

2.Redis相关

  • 介绍一下Redis的数据结构,跳表是什么?复杂度如何?
  • Redis支持事务吗?
  • Redis如何保证高可用?高可用级别是什么样的?(这个高可用级别我理解就是6个9什么的,面试官也没具体说明)
  • Redis如何支持高并发?
  1. 算法题:剑指 Offer 42. 连续子数组的最大和
  2. 工作一年的绩效以及职级
  3. Q&A环节(业务模式,团队规模,发展阶段)

总体感受:正常面试,不是压力面,面试官会有一些正面反馈,感觉虽然幸运的过了二面,但基础不扎实,也没有仔细总结项目(其实也没啥可总结的项目,一堆增删改查,也没啥组件),估计要倒在三面了QAQ

最后祝大家金三银四都能找到满意的工作!

评论 (7)