德布罗煜
字节跳动西瓜视频一面面经

字节跳动西瓜视频一面面经

今天人生第一次面试给了字节跳动,面试前非常紧张,从投递简历到正式面试之间只隔了三天。
感觉这三天看的博客比三个月学的都多(-_-||)。
正式面试的时候也发生了很多状况,包括但不限于对方听不见我说话(面试前明明特地调试了话筒来着),害得人家面试官小哥哥还特地打了一通长达 1 个小时的电话来和我语音面试。
不过面试官人挺好的,一直都在认真听我回答问题,虽然我面试回答得稀烂,面试结束后也立刻给我发了短信通知我准备二面。

面试概况

  • 部门:字节跳动西瓜视频前端开发
  • Base:厦门

面试的问题

以下是个人回忆的面试时问到的问题(后悔没有录音了)

  1. 自我介绍
  2. 你是怎么学习前端的
    我就回答了:官方文档、大神写的博客(如阮一峰),遇到自己解决不了的问题就去 CSDN 或者 StackOverflow 上查
  3. 讲一下 jQuery、React、Vue.js 之间的区别
  4. 简要描述一下操作系统中的页表概念 √
  5. 简要介绍一下操作系统中的虚拟内存 √
  6. 讲一下你对数据库索引的了解 √
    这里还顺带问了一下数据库中所有属性是否都应该添加索引
  7. 说一下数据库中的事务,并举一个例子说明 √
  8. 问了一个简单的算法题:找出数组中前三大的数字
    这个地方我没太想明白,我感觉直接定义一个长为 3 的数组,遍历一遍原数组好像就已经能够在 O(n)的时间复杂度内完成这个流程了。面试官也没说什么,就又问了一句这个算法的空间复杂度是多少。话说这个还有更快的算法吗?
  9. 你知道 javascript 的数组排序算法怎么实现的吗?
    答:没有看过 js 的 sort 方法,但是看过 java 的源码,接着把 java 的 sort 方法的源码解释了一下。
  10. 讲一下什么是稳定排序,什么是非稳定排序,举例说明。
  11. 知道 TCP 和 UDP 之间的区别吗? √
  12. 说一下你对 Http 的了解 √
    Http 状态码、三次握手、四次挥手、Http 结构 balabala 能说的全说了一遍
  13. 因为简历上写了一个 H5+的 App 项目,所以面试官问了一句你知道 WebView 和底层的 java 怎么通信的吗?
    这段直接给我干蒙了,确实没了解过通信的原理,于是小哥哥让我解释了一下 WebView 是什么东西。
  14. 为什么 Vue 的 data 被定义成方法而不是对象?
    这段其实是知道的,但是一直没回答到重点上,很尴尬
  15. 解释一下浏览器渲染页面的过程 √
    这里因为我说了 script 标签是串行执行的,所以面试官特地问了一句如果把 script 标签提前到 head 怎么保证执行 script 的同时不阻塞浏览器渲染 html 正文(给 script 标签加 async 属性)
  16. 既然提到了 async,面试官就让我解释一下 async 是什么,有什么作用
  17. 因为上面一题的回答涉及到了 Promise 对象,所以面试官又问了一道 js 事件循环的机制,给了一串代码让我写输出。具体代码记不太清了,只要弄明白了 js 事件循环机制和宏任务微任务的话还是蛮简单的,网上有很多这种代码。
  18. 面试官让我举几个 css 中表示尺寸的单位,我随口答了几个。接着问我知不知道 rem,我回答说是相对于父元素字体的大小,他说我的回答是错的,雀食,em 才是相对于父元素字体的大小,rem 是相对于根元素字体的大小。
  19. 然后让我通过纯 css 做一个动画,我问能不能通过 js 实现……(CSS 一生之敌了属于是)
  20. 虚拟 DOM 和真实 DOM 之间的关系 √
  21. 简历上有提到过 Nginx,所以面试官问了一句除了反向代理,你有用 Nginx 实现过负载均衡吗 ×
  22. 解释一下浏览器创建 AJAX 请求的过程 √
    顺便手写了一下原生的 JS 代码
  23. AJAX 怎么携带 cookie √
  24. 说明一下 v-show 和 v-if 的区别,并问如果让你实现 v-show 你会怎么做 √
  25. http 请求有哪些方法?GET、POST、OPTIONS、PUT 等
  26. 说一下 OPTIONS 和 PUT 是做什么的 (寄了,这些基本没用过,回答得也并不好)×
  27. 说一下 GET 和 POST 之间的区别 √
  28. 介绍一下 fetch(只听过,没用过,了解得并不多) ×
  29. 说一下 http 和 websocket 的区别
  30. 最后让我写了一道算法题:

    输入一段数组表示许多格子
    每一个格子中都有一个数字,表示在这个格子可以向前挪动几步,问从第一个格子出发能否到达最后一个格子
    输入样例一 > [ 2, 3, 1, 1, 4 ] > 输出样例一 > true

    输入样例二 > [ 3, 2, 1, 0, 4] > 输出样例二 > false

以下是我给出的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static boolean canReach(int[] arr) {
int index = arr.length - 2;
while(index >= 0){
while(arr[index] != 0){
if(--index < 0){
return true;
}
}
int zeroIndex = index;
while(index >= 0 && arr[index] + index <= zeroIndex){
if(--index < 0){
return false;
}
}
}
return true;
}

我的想法是,从后往前依次遍历数组,如果遇到了 0,就往前看有没有元素能够跨过这个位置。如果没有就说明到不了末尾元素。
这题给的时间不太多,只给了差不多 5 分钟吧,这段代码只测试了用例,有没有其他 bug 还不是很清楚。

感想

这毕竟是人生第一次面试,心里非常紧张。不过面试官小哥人非常好,一直都非常有耐心。
最后我在明知自己面试表现稀烂的情况下还是斗胆问了一句,“能不能评价一下我今天的表现?”。
面试官哥哥尴尬而不失礼貌地笑了一下,然后说你计算机方面的基础还是挺扎实的,算法也还可以,就是下次多看下 CSS 方面的知识。只能说大厂不愧是大厂,是我高攀不起了。
本来以为这轮面试寄了,结果中午去食堂吃饭的时候 HR 直接帮我约了二面和三面,字节跳动速度雀食快,只能说大厂不愧是大厂
在这里插入图片描述

本文作者:德布罗煜
本文链接:https://kira.host/字节跳动西瓜视频一面面经/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可