社招,一年工作经验,之前做社区电商B端业务,985计算机本科
1.项目简介
2.八股文(主要是MySQL,事务隔离级别、如何实现隔离 - 间隙锁、undolog等,RR和RC之间的区别)
3.对分布式事务的了解
4.算法题(一堆不同高度的隔板,能接多少水,力扣上有原题,应该是中等难度)
总体感受:面试官感觉状态不太好,后续也没有Q&A环节
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环节(具体业务、目前情况等等)
总体感受:非常好,面试官是我目前参加工作以来遇到的最好的一位,很有启发性,不论这次面试是否通过,我感觉都受到了很多启发
1.项目介绍,你做过的最难的项目是什么?
2.Redis相关
总体感受:正常面试,不是压力面,面试官会有一些正面反馈,感觉虽然幸运的过了二面,但基础不扎实,也没有仔细总结项目(其实也没啥可总结的项目,一堆增删改查,也没啥组件),估计要倒在三面了QAQ
最后祝大家金三银四都能找到满意的工作!