前言 得物电商公司2023年底国内大范围招人
失业后,每天早上第一件事就是都打开xx直聘和猎xAPP刷职位,好多新职位都是base长沙,一看公司-- 《得物》,这个APP虽然只用过两次,也知道是做零售电商的.. 但是一看条件, 要先去上海 or 杭州996半年后,再转战长沙... 待遇还是挺有诱惑的... 手上也没有其它offer,就跟猎头说试试看吧,简历推过去了, 运气好,过了简历筛选那关。 选了周六晚上7点面试。
面试
我是面的golang后端:
问: sync.Mutex 和 sync.RWMutex有什么区别,底层原理,使用场景 答: mutex比较简单粗暴,只要有一个协程获取到锁,其它协程都只能等待这把锁被释放; RWMutex 是支持单写多读模式的, 也就是在读锁占用情况下, 会阻止其它协程写,但是不妨碍其它协程读;也就是其它协程可同时获取读锁(读锁调用RLock(),写锁Lock()方法),在读多写少的场景 RWMutex性能更好。必须要有对应的解锁操作,比如 defer RUnlock() 、defer Unlock()防止死锁
问: es 的分词查询原理 我回答了倒排查询,按索引查询这些,相关性评分机制等, 后面问了一个如果中文打错字了,能否搜索想要的结果,我回答是能... 后面我查了, 是不能的!
问: redis分布式锁 如何保证锁能正常释放, 如何设置超时; 答: .. 用setnx,分布式锁+超时设置(原子性设置); 追问:如果任务还没执行完,锁就释放了呢? 我: 可以改用 defer 的方式去释放锁;
......还问了以下几点:
- mysql的数据结构b+tree 的特点;
- 什么情况下会内存逃逸;
- redis zset 数据结构;
- 布隆过滤器的原理
- 检测慢sql的方法
- 并发写内存数据时要注意什么
- 什么情况下会出现内存逃逸
- 秒杀场景设计
- sync包用过哪些
后面还是没过... 可能后面的回答不够好,过于简单了. 总结,现在面试,不但要背八股文,还要理解底层原理; 临时给一个业务场景,要能说出关键的12345. 这样才有机会脱颖而出.. 加油,不断提高自己,不断总结!