字节跳动后端开发面经
7月份提前批面的,7月底拿的offer,前后一共面了5面,第三面的时候算法题做得太久了,虽然最后写出来了,但是还是挂了,最后马上被捞起来换了部门又面了两面,然后过了。最近有空分享出来,可能有点晚了,不过希望能帮到部分同学。
一面
- 无序数组第K小的数字(堆O(nlogk)和快速选择O(n))
- HTTP状态码的含义, 200、400、501,分别说说1xx,2xx,3xx,4xx和5xx状态码的意义
- HTTPS和HTTP的区别,HTTPS的连接过程,非对称加密为什么比对称加密性能低
- 了解过加密算法吗(没有,跳过了)
- TCP三次握手过程,为什么是三次而不是两次或四次
- TIME_WAIT和CLOSE_WAIT的含义和区别
- TIME_WAIT时长为什么是2MSL而不是MSL
- 画出以下类的对象内存模型
class A { public: virtual void foo(); private: int a; }; class B : public A { public: void foo(); private: int b; int c; };
- 处理高并发有哪些方法
- epoll和select的区别,使用线程处理并发一定比使用epoll差吗
- Mysql的索引类型?主要说下B+树索引
- MapReduce的Map和Reduce怎么做的?(简单说了下wordcount,再难点就不会了)
- // 编号乱了
二面
- Mysql索引为什么要用B+树,有什么好处?
- Hash索引和B+树索引各自的优劣
- 单链表反转变体, 两两一组进行反转(1->2->3->4->5 编程5->3->4->1->2)
- 8皇后问题共有多少种解法
三面
- Epoll的水平触发和边缘触发的区别,如何处理边缘触发模式下数据的读取
- 浏览器访问一个url的过程
- redis有多少种数据类型,有序集合的底层实现,插入和查找的复杂度
- 一个数字串删除指定个数的数字字符,剩下的组成一个最大的数(3051, 若删除1个,则为351,删除2个则为51,删除3个则为5)
四面
- Linux的内核空间和用户空间的区别
- fork具体发生了哪些事情
- 使用random_int5()实现random_int7()
- 对链表进行排序,我给出归并排序的方法,又问不使用递归如何做归并排序,还有其他方法可以对它排序吗,回答冒泡排序,又问如何优化冒泡排序,如果链表部分有序如何优化?
- LRU ***的实现
- 4和5挑一个写。
五面(这一面基本没做什么吧,应该是看我前面也面了好多了,改问的也问了,就叫我说下前面有哪些地方没答好之类的,然后问了个智力题,我思考了两分钟解出来了,这个很加分)
- Mysql为什么使用B+树作为索引
- Redis有序集合为什么使用跳表而不用B+树
- 100个小球,其中红色50个,蓝色50个。有两个抽屉,每个抽屉都足以放下100个球,将这100个球放到这两个抽屉中,另一个人选其中一个抽屉并从里面随机拿一个球,如何分配才能使拿到红球概率最大。