字节跳动一面、二面面经

date: 2020-04-02

原本打算是一面和二面的面经写在一起,对照参考一下,不过比较出乎意料的是二面仅仅问了一面里没答上来的问题,然后做了两道算法题。

一面

2020年3月23日

一面面试官人很好,很有耐心,问了特别多东西,整场面试下来花了有 100 分钟吧。

先上来就是普通的自我介绍,然后讲一下项目。下面是我整理的问题,包括项目中问到的还有额外问的。

Web

我简历上写了一个前端项目,所以先问了一些前端的技术。

  1. 为什么使用 Vue?
  2. MVC?不会
  3. 有没有用过 jsp?没有
  4. 有没有使用过 js 库?为什么使用它?jQuery
  5. 讲一下 jQuery 的选择器?
  6. 有没有用过其他库?Swiper
  7. 为什么使用 Swiper?遇到了什么问题?有没有尝试过解决?自己尝试过,比较复杂而且效果没有 swiper 好
  8. GET 和 POST 的区别?POST 能不能完全取代 GET ?后面这个没给出面试官满意的答案

Java

我主要的项目都是 Java,所以这方面问得比较深,幸亏准备充分,大部分都答得上来。

  1. 三次握手和四次挥手(问了 SYN、ACK 这些词),为什么挥手要四次?大致答上来了,但思路有点乱,感觉答得不算好
  2. 视频过程中断线了怎么办?延迟怎么办?使用 4G 时 ip 地址发生变化怎么办?这几个问题是我当时做项目时没有考虑到的,的确启发很大
  3. 为什么尝试用 UDP 实现 TCP?
  4. 讲讲垃圾回收机制?这块掌握的还是比较熟的
  5. Java 反射机制?不会
  6. 讲讲类的加载?为什么用双亲委派模型?
  7. 进程和线程的区别?这个的确是我的弱项,答得不太好
  8. 如何实现进程间通信?只了解一点点
  9. 异常和错误的区别?举几个遇到过的异常?内存溢出属于什么?为什么内存会溢出?不太熟悉,有些点答错了
  10. try...catch...finally 的执行顺序?如果有一个 itry 内令 i = 1,并 return ifinally 内令 i = 2,最后返回多少?为什么? 1。先返回值,然后执行 finally,再结束调用。
  11. 数据库?不会

C++

专业课学的是 C++,面试官随口问了点。

  1. 虚指针表是什么?它有什么用?
  2. 多态有什么用?举个例子?

不得不说这轮面试问的的确有点多,有些问题我已经记不起来了,差不多花了有七八十分钟。

之后是一道很简单的算法题,给了 25min

给定一个 n,生成一个 n*n 的二维数组,从左到右从上到下为 1 ~ n*n 。按照例中的路径依次输出,例:
输入:4
数组:
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16
输出:
1 5 2 3 6 9 13 10 7 4 8 11 14 15 12 16

斜着输出,判断一下边界条件就好,不难。

二面

2020年4月1日

二面其实没啥可写的,单纯问了一遍一面中没答好或者答错的几个问题,然后给了两道算法题,这里直接贴题吧。

题一:

给定一个未排序的整数数组,找出最长连续序列的长度.
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

LeetCode 上有相同的题目,解法很简单,这里不再赘述。

题二:

你有一个数据缓冲区,一开始它是空的,现在你要执行 q 次操作,操作共分两种:
opt=1:新添加一个整数至缓冲区
opt=2:输出缓冲区内所有整数的中位数,没有整数则输出-1,要求保留一位小数
时间复杂度要求:添加操作O(logn),输出操作O(1)
首先输入一个整数表示要执行的操作数 q,之后输入 n 行,每行 1 或 2 个整数。
例:
输入:
5
2
1 1
2
1 2
2
输出:
-1
1.0
1.5

这题没有找到原题,靠记忆还原了一下,样例是自己设计的。功能的实现并不难,主要要考虑时间复杂度。当时时间比较紧张,两题只给了20分钟,一时没有想到好办法,所以简单地通过维护一个有序数组来实现,不过数组的插入操作时间复杂度到不了 O(logn)

总结

总的来说面试的感觉还是挺不错的,面试的时候如果有不会的可以大方地告诉面试官你不了解,一般不会为难你,当然不要啥都不会,那肯定凉凉。

这次面试中也发现了很多自身的不足,知识储备还是不足,算法也很薄弱,收获还是颇丰。

我也不太会写总结,就这样吧,默默等二面的结果。

个人博客:https://wilfredshen.cn/

你可能感兴趣的:(字节跳动一面、二面面经)