字节后端暑期实习 电商(一二三面已OC)
语言:golang 尽量回忆了一些重点
一面:(总时长1h)
1.自我介绍
2.项目:先自己介绍整个项目,面试官在你说的过程中会提问
(1)描述一下从浏览器输入域名到返回结果整个流程中负载均衡的应用情况。
(2)七层负载均衡和四层负载均衡了解吗?
(3)缓存和数据库的一致性怎么保证?
(4)local cache 怎么做的?如果多机场景下怎么保证一致性?(最后我还说了下使用atomic代替mutex,性能会好一些,但是有一些别的问题要考虑)
(5)遇到了什么具体问题?怎么解决的?(答:分布式锁没做超时控制,导致后续请求无法建立连接)
(6)隔离怎么做的?
3.lru 和 lfu 算法是什么?说一说怎么实现的,具体一些?应用场景有什么?
4.redis 的淘汰算法有哪些?
5.I0 多路复用了解吗?(select、poll、epoll 具体介绍了一下)
6.epoll 的两种触发方式了解吗?(水平和边缘)
7.算法:
(1)写一个超时控制,三个goroutine,分别取名a,b,c,a和c控制在100ms内,b控制在200ms内。外面主goroutine超时控制在300ms内。(也算是前面给自己挖坑了,写了个七七八八吧,面试官中途有提醒)
(2)岛屿数量(leetcode200)
二面:(总时长54min)
1.自我介绍
2.项目:
(1)为什么选择哈希一致性算法?和别的一致性算法有什么优势?
(2)上一个问题引申了一下,是我自己说的。虚拟节点起到了什么作用?增加和删除节点的时候为什么有优势?
(3)分布式锁怎么设计的?详细说说。(说了代码完整流程)
(4)local cache怎么做的?(一面就问过了,应该是看我面完回去有没有思考,我就说了一下一面结束后的思考)
3.redis 的数据类型有哪些?底层数据结构分别用了什么?
4.还有什么?(bitmap、hyperloglog、geo)hyperloglog 做什么用的?有什么问题?误差范围是多少?是固定的还是浮动的?为什么有误差了解吗?
5.进程、线程、协程、goroutine 的区别?
6.GMP 模型说说?
7. 2 T的两个大文件A、B,文件中每一行都存储一个字符串。内存只有 1 G,找出两个文件中相同的字符串。(hash后取余分成小文件,A小文件读进内存用map或者字典树存储,然后对比相同序号的B小文件来找)
(1)map 和 字典树的复杂度?
(2)你这种方式每个字符串会遍历几次?能不能优化?还有没有别的方法?
(3)使用bitmap来统计,存在误差怎么解决?(母鸡鸭)
8.算法:最长有效括号(leetcode32)
三面:(总时长40min)
1.自我介绍
2.看你科研经验挺丰富的,为啥转工程?
3.你本科时候的专利为什么不在简历上多写写,我挺感兴趣的,说说?
4.对比你的项目(秒杀系统),说一说12306整个系统应该怎么设计?(🤯这个问题也太大了,就从限流到负载均衡、鉴权、缓存数据库一致性说了说)
5.我们暂停一下,从业务逻辑上来说说,12306和商品秒杀有什么区别,怎么设计?(打完后面试官说很好,基本都考虑到了)
6.最后做一道算法题吧:重复的子字符串(leetcode459)
(居然是KMP??忘了啊。)面试官我用暴力做可以吗? 可以,做出来就行。
总结:
1.算法是重中之重,一定要做出来。想不到优解那就暴力。
2.项目被diss了,和别人重复度太高。
3.三轮面试几乎没有突然出现的八股文,全是在你介绍项目或者场景题中提到顺口问。
4.回答问题即要抓住面试官的重点,不然可能会觉得你理解能力不太行,也要尽可能的发散,把自己了解的都说了。
5.学习的时候一定要有深度,面试官问问题都是立足一个点,尽可能往深了问,知道你答不出来为止。
6.不要面试官问一句你答一句,这样会很尴尬,尽量以讨论话题的形式完成面试,要在回答中引导面试官问问题的方向(虽然这样也可能给自己挖坑)。
查看20道真题和解析