字节跳动后台开发实习面经
背景:
研一,非科班,Top2;
之前一直不知道以后做些什么,疫情期间和其他人交流之后决定走开发,大概开始学习是6月上旬;
在同学的怂恿下投了懂车帝的后台开发日常实习,每天就一直在疯狂地刷题、看书、看面经,因为实在不太自信;
慌手慌脚地就投了,突然就要开始面试了,其实自己知道还缺不少斤两。
技术栈主要是 Go,项目写了简单的网站、简易的分布式缓存、实现了 Raft 协议;
然后力扣刷题大概刷了 200 题,主要是树、双指针、剑指和其他一些乱七八糟的,
其实刷的题目都比较简单,高中学过竞赛可能会稍微熟悉一点(其实早忘光了);
个人前一个月主要在补操作系统、计算机网络之类的知识;
看的东西比较多,但是都不深入,导致面试问啥能讲点但是深入就 GG。
字节的效率太快了,快到我措手不及,傍晚投完简历晚上就过了,第二天大睡午觉的时候 HR 电话过来要约面试;
而且前一天晚上吃了冰西瓜几年没发作老肠胃病怒犯,凌晨就去医院挂水了,属实惨;
也就是说面试前的准备时间,基本用来磨磨蹭蹭恢复身体上了,而且也就两天时间。
一面:
自我介绍,非科班问了一些问题,为什么转开发;
算法,两数之和,讲了 O(n) 时间的算法,再改用 O(1) 的空间,用快排排序,问了时空效率,让改成非递归快排;
进程和线程的区别;
进程间通信的方式;
TCP 连接的客户端和服务端状态。
二面:
自我介绍,问了非科班的问题,学习和规划是怎么做的,和科班比有哪些不足,之类的;
LRU 算法里面,键值的存储形式,值 interface;
interface 不是个好的形式,会导致 GC 压力大,为啥,那用什么形式比较好;
goroutine 里面 panic 了会怎么样;
map 是否是并发安全的,不是如何做到,还有什么其他方法;
不加锁并发读写 map 会出现什么问题;
redis 的数据类型;
redis 的 zset 底层是如何实现的,zset 根据 member 查询 score 的效率,zset 获取排名的效率;
raft 解决了什么问题;
raft 脑裂是怎么解决的;
提出一个场景,根据 raft 协议接下来会怎么样;
虚拟内存的概念,为什么要保护物理内存;
页面置换算法;
session 和 cookie,为什么用 sessionId 不用 uid;
算法,给出字符串和字符,等概率地输出一个字符所在的位置;
再写个 SQL 查询。
体验:
一面很快就结束了,非递归快排没见过但是也能很快写出来,然后空间效率也算出来了。
二面还是比较难,不少是从项目延伸开来,然后更加深入和更偏工程化,经验不足的就答不上来,倒是 raft 可能讲得比较详细;
操统和计网的知识没怎么考察,Go 的考察了但是正好没准备到,之前看过忘了;
算法题偏数学了,没抽象出来,提示了一下发现高中甚至初中时候绝对碰见过,还是想不出来,再交流突然就抽象出来了。
个人感觉字节的面试可能还是比较少看你背书的情况;
最好就是能以自己的语言讲出来,尤其是项目的问题,要有自己的理解,最好再越过本身更深入一些。
两次面试间隔很短,确实还是蛮耗体力的,尤其是知识水平不够答不出来的时候,挠挠头皮硬撑过去;
二面真的是发现自己还缺太多东西,然后面试官也很好,给我讲了好多需要努力的地方,然后鼓励我好好加油,还问了之后的规划。
总结就是面试体验极好,感谢面试官,而且还是能认识到好多不足的地方,以后继续加油,再许个愿!!!
#面经##字节跳动##golang工程师##实习#