字节跳动一面

日期 12.13 时间 20:00 - 21:00 岗位 后台开发 形式 视频面试 结果 PASS

大三的第一次技术面。一面的问题的确都非常基础,但是没怎么复习答得并不好。

字节跳动一面

日期 12.13

时间 20:00 - 21:00

岗位 后台开发

形式 视频面试

结果 PASS

流程&问题

算法编程题

一束平行光从左侧投射向一棵二叉树,输出所有能够被照亮的节点, 不考虑输出顺序

(白板编程写代码,不要求运行)

Input

1
2
3
4
5
6
7
    1
/ \
2 3
/ \ /\
4 5 6 7
\
8

Output

1
1 2 4 8

自我介绍

5分钟时间简单介绍自己,可以陈述自己的优势,劣势可以不说。

计算机基础

  • Post和Get的区别?可不可以混用?
  • HTTP协议的组成
  • Session和cookie的区别,为什么要设置session和cookie
  • 简述tcp的三次握手和四次挥手
  • 为什么要进行三次握手?
  • 简历上面项目询问,你都负责了哪些工作

闲聊部分

  • 平时看过什么课本之外的课外书么?
  • 你最喜欢哪本?为什么?
  • 你有什么问题要问我?

回放

面试官:先给你出道题吧,多线程熟吗?

: 不熟

面试官:行,那不问你多线程,我再找道题。

面试官:做一下这道题吧(编程题)

:思考…这道题就是bfs输出每一层的第一个节点。

面试官:写一下代码吧

:(在线写代码,bfs部分完成的很快,但是在实现输出第一个节点的时候遇到了一点问题,稍微思考了一下写出来了)写好了

面试官:我看一下。嗯,逻辑没有问题。

面试官:好,你来做一个五分钟的自我介绍吧,介绍一下自己的优势,擅长的东西,劣势可以不说。

:(我本来以为一面只做算法题,完全没做好自我介绍和计算机基础知识的准备,很宽泛地说了一下)

面试官:嗯(估计在翻我的简历)。我看到你做过一个web file browser的项目,这个项目是干什么的,可以简要介绍一下么?

:(简要介绍了一下)

面试官:用到数据库了么

:没有

面试官:用框架了么

:没有,这只是个python写的小轮子,实现了一个http server用来处理http请求。

面试官:哦,那你对http很熟吧

:比较熟悉(内心慌得一批,我把面经上http部分跳过了)

面试官:你先说一下post和get有什么区别?

:get用来查询,参数一般直接附在url里面;post用来提交数据,数据放在http的主体部分

面试官:说一下http的构成。

:(突然有点懵,就答出了header)

面试官:(补充了一下)分为url,header,body。你再从http构成的角度阐释一下post和get的区别。

:(内心os:我刚刚难道不是说了?)get请求的body部分是没有数据的,post把数据放在body里。

面试官:他们可以混用么?

:但从功能上来说是可以的,post可以实现的功能get也可以实现,但是这样做是不好的,因为get会有一些安全性问题,不太适合提交数据。

面试官:(总结并补充了我的回答)

面试官:嗯,对的。说一下cookie和session的区别吧。

:我不太清楚他们的区别。(只研究过cookie,对session没有什么了解)我只知道cookie和session都是用来保存用户的信息。因为http是无状态的协议,所以只能通过cookie或者session的方式来标识用户。

面试官:你说了他们的相同点。我来说一下不同点吧。session是保存的服务器上的,cookie是保存在浏览器上的。你说一下为什么要有cookie和session?

:(内心os:我刚刚不是说了么…)因为http是无状态的协议,需要cookie和session来实现状态的维持。

面试官:嗯,你说的是对的(然后又把我的回答总结了一番)。你了解tcp三次握手和四次挥手么?

:了解。(然后陈述了一遍)

面试官:嗯。为什么要三次握手?

:我们假设只有两次握手,那么就有可能失效的连接到达了服务器。如果不进行第三次握手,服务器就会错误地打开连接,造成资源浪费。如果有第三次握手,客户端会忽略服务器之后发送的连接请求,连接就不会打开。

面试官:嗯…你说的不太清晰啊。

:(内心os,我背的面经答案啊 = =)

面试官:应该这样说,三次握手是为了确保建立可靠的连接,如果一次握手,那服务器端很有可能收不到,有三次就可以确保连接是建立起来了。

:嗯。有道理。

面试官:(又问了我简历上的几个项目)分别是rdt可靠传输和地震查询系统

:(简单介绍了自己的项目)

接下来就是闲聊阶段了

感受&反思

  1. 不要轻信面经,还是要全面准备。之前看字节跳动的面经发现一面只有算法编程题,于是一面之前就只刷了几道leetcode,复习了动归和排序。
  2. 准备好一段自我介绍。优势是什么?非常重要,几乎主导了面试的方向。
  3. 重新复习一下项目。遇到了哪些问题,是怎么解决的?
  4. 没听过没用过的东西直接说不会,尽快换话题。
  5. 基础知识要牢固。明白概念和能说清楚还是有很大区别的。尤其当你的面试官和你学的东西并不一样的时候。