作者:阿秀
校招八股文学习网站:https://interviewguide.cn
这是阿秀的第「221」篇原创
你好,我是阿秀。
很多学弟学妹都一致纠结到底是学C++还是Java好呢?其实以前就聊过这个问题:Java or C++?选哪个?、再次认真聊一聊,Java or C++?
不过也有些人看的比较开,不选择这两种后端语言,而是将目光转向了另一种这几年比较火的编程语言Golang上,按照他们的话说就是这条赛道人少点。
阿秀已经分享过很多校招上岸经验了,其中有Java的,也有C++的、还有前端、测开、测试等方面的,也有一些算法岗的,但在我印象里貌似还没分享过选择Go语言上岸的文章,今天就来分享一下一位学弟的校招上岸字节系统架构的总结文章,他的技术栈就是Golang。
这篇文章是今年九月份这位师弟分享在阿秀的学习圈中的,现在已经快十二月份了,如果你想与他一对一沟通的话可以在阿秀的学习圈中的「精华区」找到本文作者。
以下是原文,其中的我代表这位师弟本人:
1、第一次转折点
2、第二次转折点
3、第三次转折点
4、我的面经(一二三面)
这里是迹寒,对于秀哥给我的这次机会,我十分感激,我想借这个平台给大家介绍一点秋招的经验。
秋招也是成功拿到字节提前批offer~,回顾这几年我感觉自己有几比较关键的转折点。
我比较幸运,本硕都是985,本科读的光电,硕士读的计算机。虽然说学历还行,但秋招我还是碰了一鼻子灰。
本科专业和计算机不沾边,而且当时很想搞硬件,很长时间都在准备出国,2月拿到美国某名学校offer。
但是很不巧,那年是2020年,充满厄运的一年,疫情彻底改变了我的人生轨迹。
隔离期间,我在家无事可干,便抱着玩的态度打开leetcode刷题,当时没想太远,就是想体验一下编程,结果这一刷就是三年。
截止今年为止,我的力扣刷题量大概在900+了。
2020年8月底,我收到学校的电话,问我想不想保研,我当时还犹豫再三,最终选择保研,进了计算机专业,研究计算机体系结构。
现在想,我那时还是做了很正确的决定,没有去美国读硕士。
本以为读研就万事大吉了,大厂offer躺着就能拿到手。
结果我发现事实并不如此,因为没经历考研,我的计算机基础可以说是0。
于是研究生前两年,我基本在恶补基础课:数据结构、计算机网络、操作系统、数据库等等。
但自学还是没老师讲的明白,许多知识都一知半解,后来也是各种看经典书籍、啃大黑书,才弄明白好多东西的。
读研期间导师给了一个课题,但是后面就不管了,基本是自己在做,但我还是坚持了下来,做了一个小项目放在github上,虽然做的很辣鸡,不过还是被我放在简历上。
我的项目的模板是geektutu的go分布式系统,有兴趣的可以看一下,写的很详细。
我从去年9月开始学习go,推荐看尚硅谷go教程:youtube、bilibili,是韩顺平老师主讲的。
然后就是一些教程,Go语言圣经(翻译国外)和Go语言42章经(李骁著);
有一定基础之后再看看geektutu的项目教程,每一行代码都有讲解。
正是凭借这个项目,我在今年3月拿到阿里实习的offer。
关于Go语言的学习路线和项目推荐,我看秀哥也写过,其中也推荐过geektutu的项目:https://interviewguide.cn/notes/02-learning_route/02-language/02-golang.html
记得当时的面试官(阿里P7)没有问八股,一个劲的问项目的细节,我也非常顺利的答了出来。
今年的6月到8月,也就是2022年608月,我都在阿里实习。
在这之前,我对程序员的理解仅仅是停留在各种媒体的报道中,最显著的标签就是高薪
、钱多
、秃头
、裁员
等。
真正进了大厂,我的认识才被刷新。
第一次看到这么多人在一起写代码,做一些很酷炫的产品,不管是手机上的APP,还是背后的云技术,都在深深改变我们的生活。
我的mentor很好,任何不懂的技术,问他就能解决。
Leader是P8,待人十分温柔,没有发过一次火,专门指导架构设计上的问题,在阿里八年就实现了财富自由。
7月8日,我投递了字节提前批,这也是我秋招第一次投递,相比之前的简历,我加了实习的内容。
当时想着提前批练练手,秋招再认真找,毕竟提前批和秋招是两个独立项目。
然后就随便投了一个客户端,7.18第一次面试到7.25三面,我都没好好准备,面试也没遇到啥大问题,结果过了几天,hr就通知我挂了,原因是方向不匹配。
我当时白天实习,晚上面试,一个人在杭州,离爸妈十万八千里,工作 + 想家让我觉得非常累,但上次的失利也让我感觉非常不甘,私下里也是一直复盘。
好在不久之后,我的简历就被另一个部门捞了,hr小姐姐很好,主动加我微信。
有了上次的教训,我决定认真看面经,我主要看秀哥的学习总结,秀哥以前的学习笔记很清晰,也很全面,给了我很大的帮助。
在跟他的聊天中我得知这是他以前的学习笔记,并不是各种拼凑在一起的八股文,确实质量很高阿秀的校招求职笔记PDF版本。
实习期间,我也用到了很多基础技术,用的过程中就自然加深了对知识的理解。
8月1日到8日,我面完了3面,第二天,hr就通知我过了。
不得不说,字节的效率特别高,过不过的另说,至少整个过程不拖着你,快刀斩乱麻。
8.17日我拿到了oc,真的巨开心,感觉所有的累都是值得的。
总的来说,我觉得面试考的不是你背的能力,而是独立思考和知识栈的深度;
平时最好养成写博客的习惯,自己亲手写的东西更容易理解记忆,最好能参加实习,感受真正的业务场景;
面试时候不要紧张,多说点话,也不要不懂装懂,知之为知之,不知为不知;
面试后不管过没过都应该记录面经,去修补知识漏洞,这样才能不断提高面试能力。
今年已是极寒之年,只要经历过,不管成功与否,都足以铭记一辈子。
1、上来面试官自己介绍了自己。(太尽职了) 部门的业务,主要做边缘计算,包括基础设施,PaaS,SaaS,FaaS,存储,云原生等。
2、问项目中遇到哪些问题,如何解决的?
我一想,我还没介绍项目就问如何解决,是不是有些不合适,就果断介绍项目。
结果面试官没怎么听,直接又问了一遍刚才的问题。 。。。
3、k8s了解吗。
4、TCP是怎么保证可靠性的。
5、接上题,发送20个包,第三个包丢了,发送端和接收端会怎么做。
6、MySQL有哪些隔离级别。
7、MySQL间隙锁知道吗。(知道是解决“幻读”,不知道原理)
8、接上题,问“幻读”解决什么问题。
9、了解哪些分布一致性协议。(Paxos,Raft)
10、介绍一下Paxos协议。
11、如果发生脑裂怎么办。(IO hence,忘了)
12、写个SQL,从表中获取学生的名字和选课最多的前五个学生。
13、编程 最长的回文子串。 让我先讲思路,我讲了一个O(n^2)的,面试官说还可以优化。(不会) 力扣上有O(n)的实现,不过用的是manacher算法,我打死都不背。 面试官叫我运行,结果报错了,尴尬的一批,还好面试官说思路是对的。
14、编程 go基础语法 复制代码 1 2 3 4 5 6 7 8 9 10
func main() {
defer A{ fmt.Println("defer1") }()
defer B{ fmt.Println("defer2") }()
fmt.Println("main")
}
main() 打印结果是?
15、虚拟内存知道吗?
16、什么时候会发生缺页中断。
17、死锁如何避免。
18、系统什么时候陷入内核态。
反问: 你们部门用什么语言? 你们部门base在哪?
面试官看我简历比较有特点,问了linux 文件描述符1,2,3,-是什么意思。
自我介绍+项目(10min) 针对项目狂问。
1、你们的项目架构是什么样的。(说了一大堆)
2、hook的原理知道吗。(不知道)
3、 有三种代码覆盖率统计方法,你知道吗?(语句覆盖、判定覆盖,分支覆盖)
4、代码覆盖率为什么要达到80%
5、MySQL的DoubleWriteBuffer是什么?为什么要关闭?
6、aio的优点和缺点是啥?(优点我知道,缺点。。。)
7、aio是半异步模式还是全异步模式?(???)
8、网络IO发展历程。(从阻塞IO到reactor模型)
9、题目:链表倒数第k个节点。 写完之后,知道太简单了,又问,返回值如何写注释,应该返回哪些标准错误。
反问: 同一面。 这次面试直接把我打回原形,觉得自己确实还有很多不足的地方,是纸老虎。
面试官全程没开摄像头,可能忙别的事。
上来介绍项目,我叽里呱啦说了一大堆,发现只用了四分钟。
1、你们的文件系统和别的文件系统(比如AFS)相比有什么区别。
2、问你们项目一个完整的IO路径是什么样的。
3、项目中遇到什么难点,怎么解决的?
4、介绍一下aio模型
5、多线程模拟aio和linux原生aio有什么区别。(libeio和libaio)
7、epoll和poll有什么区别。
8、TCP的拥塞控制。
9、实现一个队列,能够入队,出队,统计最小值。 我的方法是队列queue+map,感觉还可以优化。
10、红黑树原理是什么。(只记得旋转,平衡,其它都忘记了)
11、红黑树优势。
12、A,B文件各有50亿条数据,内存无法放下全部数据,问如何快速找到两个文件公共数据。 我说用哈希,但是面试官说不对。
13、对什么语言比较了解。(C++) ,new/delete和malloc/free有什么区别。
14、有继承的类,new/delete构造和析构的顺序。
15、什么是多态。
16、你有看过什么开源项目吗?(Ceph)
17、Ceph的CRUSH算法原理是什么。
做题:最长不重复子串。
反问: 你们部门业务场景? 面试多久出结果?(一周)
一起加油,跑下去,太阳自然会升起,不要在黎明到来前的一刻被黑暗吞噬了。