字节跳动后端实习生 三面面经

一面

1.自我介绍
2.详细谈了项目并提问
3.算法题:买卖股票,使用暴力法,复杂度n^2,面试官要求用更优解达到n,被疯狂暗示后使用动态规划,一次遍历出结果
因为之前有看岗位要求,是要应对高并发的,所以事先在网上看了很多解决方案的思路,结合项目一起被提问了,因此没有再问专业课

二面

1.自我介绍
2.详细谈了项目并提问
开始问专业课
3.线程和进程
4.进程间通信
5.说一下网络都有哪几层,TCP是哪一层的,TCP和UDP的区别
6.数据是在哪一层被切分的
7.UDP如何分包
8.HTTP的状态码,尽可能说全并解释
9.说一下401和403的区别?
10.HTTP版本有了解吗?说一下区别
11.PHP5和7的GC区别
12.Mysql的mvcc了解吗
13.Mysql的事务了解吗?说一下特性
14.既然说到了“隔离性”,说一下事务隔离级别
15.可重复读底层是怎么实现的
16.简历上说使用过docker,讲一下
17.Redis相关的问题
18.做一道算法题:给一个root节点,判断是否为二叉搜索树,并要求分析时间、空间复杂度,递归可以写,要求空间复杂度是常数
19.做一道SQL题:给出一个表记录所有学生的各科成绩,查出总分前十名
20.说一下聚簇索引和非聚簇索引的区别
21.索引命中,给出一个题,建立的索引是(a,b),那么我WHERE b = 1命中吗,为什么
感觉二面问的基础题实在太多了,猝不及防

三面

1.自我介绍,问了一下比赛、奖项等,让我自己评价比赛和奖项的价值?
2.非常详细谈了项目并提问,具体的实现都被问了,并且还质疑了一些项目的设计合理性,我及时认错
3.做一道算法题:二数之和问题,不能暴力法,我首先想到双指针法,时间复杂度上排序nlogn+遍历n,一共是nlogn,AC了,但面试官要求我把时间复杂度降低到O(n),于是使用HashMap查找避免内层遍历。然后难度提升,要考虑数字重复情况,对上面的两种解法分别完善。
开始问专业课
4.详细讲一下从浏览器输入URL到网页呈现出来经历的过程
5.TCP详细过程(从三次握手到四次挥手,包括其中握手的报文都有什么、主动端、被动端状态的变化)
6.为什么是四次挥手(换句话说,为什么2、3次挥手是分开的,先发ACK,后发FIN而不是一起发)
7.讲一下DNS
8.CDN解释一下
9.面试结束了,还有什么想问我的?

总结

这算是我第一次面试,之前没有太多经验,复习主要是参考网上的面经。
本以为一面会侧重基础,二面灵活,三面不是技术面,结果都猜错了。
如果看的面经比较多,就会发现计网和操作系统对实习的提问范围比较小,需要现场思考的基础问题也不多。
算法我觉得考了比较简单的题目,看到一些岗位的算法提问都是非常难的,比如字典序K小问题、最大矩形问题等,这些即使做过现场手撕也有些难度。
最后就是准备了很多JAVA相关的知识,可惜没有考,反而是考了PHP的垃圾回收,我想了一下大概是因为简历中的后端项目主要是PHP做的,这也说明面试官不会为难你问基础题以外的、简历没写的东西。当然也不能心存侥幸,因为如果你写了一些比较贴近现实生产的技术,可能会被深入问及,比如Mysql的MVCC、可重复读的实现等问题我没有准备,只能凭记忆和猜测来回答,后来查了一下好在基本答在点上,而我其实在简历里没有提对MySQL的理解什么的……
希望这篇博客对你有所帮助。

你可能感兴趣的:(面试)