字节跳动内推
字节跳动内推 - 【入职】
岗位:后台开发实习生
投递日期:2019/03/01
笔试日期:2019/03/16 时长:2小时
一面日期:2019/03/23 时长:1小时
二面日期:2019/03/23 时长:1小时
三面日期:2019/03/23 时长:30分钟
笔试
- 时间太久了,很多都不记得了,由于当时做的不太好,所以以为没有面试了,也就没做记录
- 目前仅记得笔试时一共就 4 道编程题目,没有其他的选择题,然后本人仅做出来两道水题,后面的题目一个没做出来。但没想到居然获得了面试资格
一面
- 首先进行简单的自我介绍
- 直接进行算法题:
- 实现一个大数相加的程序,正常思路是使用两个字符串相加,但面试官要求使用链表。例如给你两个链表1->2->3 + 2->3 即:123+23=146 返回结果为:1->4->6 的链表。给出半小时时间编写代码,本人是 python 选手,于是用 python 编写了一个逆转链表的函数,一个实现相加的函数,最后计算结果,现场出现了 BUG,大概花了 7 分钟左右找到 BUG 并修复
- 经典题目:实现跳台阶,一个人一次只能上一个台阶或两个台阶,问有多少种方法。经典的斐波那契数列题
- 问了一下数据库方面的知识:解释一下数据库事务的隔离等级,为什么会有这四个等级
二面
- 首先进行简单的自我介绍
- 直接进行算法题:
- 给你两个整数,然后转化成二进制,实现二进制中的 N 位和 N+1 位替换成另一个数的 N 位和 N+1 位。一开始想到了利用位运算,但是没有清晰的思路,于是面试官说先利用最简单的方式,不要最优方式,和面试官说了一下转成字符串然后替换再转回整数的方法,把代码写完后。和面试官开始探讨如何利用位运算解决这道题目。最后有了一个相对清晰的思路,就是利用子网掩码的形式去做,但是由于替换的位置前面有数据,后面也有数据,在利用掩码运算的时候需要额外考虑数据的长度,正负问题。面试官可能感觉我代码写短时间不出来,于是就跳过了该题
- 给你一个链表,该链表除了正常的 next 指针,还有一个 random 指针指向链表中的随机一个链表节点或者空,然后题目要求是复制一个链表出来。一开始讲了最简单的方法,就是先把链表复制出来,然后再进行一个一个的判断 random 指针指向哪里,时间复杂度 N2,后来说了时间复杂度位 N 的方法,并把代码写出
- 问了一下 HTTP 的内容,数据在网络中传输利用 socket 套接字传输 byte 流,然后利用各种协议进行数据流解析,最后呈现出真正的数据。那么 HTTP 协议是如何解析数据流,判断这个数据流的开始结束。提问过于底层,并没有回答的上来。
- 对于该问题,我简单的说了一下 HTTP 协议中 request 请求的结构,请求行 请求头 主体。随即面试官提问那再这个数据流中 HTTP 协议是如何区分请求行的结束,请求的结束 主体的结束呢?
- 不明觉厉,诚实的回答了,不会。没了解过那么底层的东西。面试官很好的给解释了一下,问这个问题不是为难你,只是我们需要自定义协议,这些内容都需要考虑。我能说什么?明白,了解。没事,是我学习的不够彻底
- 最后问了一下 get 和 post 请求的区别。本人从两个方面简单的说了一下,从 HTTP 协议本身,这两者是没有任何区别的,然后在浏览器中使用时的区别有哪些,简单说了一些
三面
- 首先进行简单的自我介绍
- 提问了一些项目中使用的东西
- nginx 如何配置 HTTPS
- nginx 的反向代理和负载均衡
- 情况模拟题:现在某个网站的 URL 长度太长,如何将这个 URL 缩短,然后还能正常的访问,利用短 URL 可以访问到长的,利用长的可以转到短的。一开始说建立两个 HASH 映射,长短即可互相查找。后又想到可以利用对称密钥的方式对 URL 进行加密,设计算法后,生成的长度可以固定,即可以直接利用算法实现长短互换
- 情况模拟题:现在某个网站有很多的 URL 然后某些 URL 又是火热页面,那么如何实现网站的稳定性。简单的说了一些可以利用的技术:缓存、负载均衡、反向代理、动静分离等
个人感受
三场面试下来,感觉字节跳动的面试官都很好,每个人都不会看不起人,或者有不耐烦的表现,对于一些问题还会启发式的提醒。感觉面试过程没有那么紧张。发挥也是还可以。现在静等通知,不知道最后能不能获得offer