
字节跳动西瓜视频一面面经
今天人生第一次面试给了字节跳动,面试前非常紧张,从投递简历到正式面试之间只隔了三天。
感觉这三天看的博客比三个月学的都多(-_-||)。
正式面试的时候也发生了很多状况,包括但不限于对方听不见我说话(面试前明明特地调试了话筒来着),害得人家面试官小哥哥还特地打了一通长达 1 个小时的电话来和我语音面试。
不过面试官人挺好的,一直都在认真听我回答问题,虽然我面试回答得稀烂,面试结束后也立刻给我发了短信通知我准备二面。
面试概况
- 部门:字节跳动西瓜视频前端开发
- Base:厦门
面试的问题
以下是个人回忆的面试时问到的问题(后悔没有录音了)
- 自我介绍
- 你是怎么学习前端的
我就回答了:官方文档、大神写的博客(如阮一峰),遇到自己解决不了的问题就去 CSDN 或者 StackOverflow 上查 - 讲一下 jQuery、React、Vue.js 之间的区别
- 简要描述一下操作系统中的页表概念 √
- 简要介绍一下操作系统中的虚拟内存 √
- 讲一下你对数据库索引的了解 √
这里还顺带问了一下数据库中所有属性是否都应该添加索引 - 说一下数据库中的事务,并举一个例子说明 √
- 问了一个简单的算法题:找出数组中前三大的数字
这个地方我没太想明白,我感觉直接定义一个长为 3 的数组,遍历一遍原数组好像就已经能够在 O(n)的时间复杂度内完成这个流程了。面试官也没说什么,就又问了一句这个算法的空间复杂度是多少。话说这个还有更快的算法吗? - 你知道 javascript 的数组排序算法怎么实现的吗?
答:没有看过 js 的 sort 方法,但是看过 java 的源码,接着把 java 的 sort 方法的源码解释了一下。 - 讲一下什么是稳定排序,什么是非稳定排序,举例说明。
- 知道 TCP 和 UDP 之间的区别吗? √
- 说一下你对 Http 的了解 √
Http 状态码、三次握手、四次挥手、Http 结构 balabala 能说的全说了一遍 - 因为简历上写了一个 H5+的 App 项目,所以面试官问了一句你知道 WebView 和底层的 java 怎么通信的吗?
这段直接给我干蒙了,确实没了解过通信的原理,于是小哥哥让我解释了一下 WebView 是什么东西。 - 为什么 Vue 的 data 被定义成方法而不是对象?
这段其实是知道的,但是一直没回答到重点上,很尴尬 - 解释一下浏览器渲染页面的过程 √
这里因为我说了 script 标签是串行执行的,所以面试官特地问了一句如果把 script 标签提前到 head 怎么保证执行 script 的同时不阻塞浏览器渲染 html 正文(给 script 标签加 async 属性) - 既然提到了 async,面试官就让我解释一下 async 是什么,有什么作用
- 因为上面一题的回答涉及到了 Promise 对象,所以面试官又问了一道 js 事件循环的机制,给了一串代码让我写输出。具体代码记不太清了,只要弄明白了 js 事件循环机制和宏任务微任务的话还是蛮简单的,网上有很多这种代码。
- 面试官让我举几个 css 中表示尺寸的单位,我随口答了几个。接着问我知不知道 rem,我回答说是相对于父元素字体的大小,他说我的回答是错的,雀食,em 才是相对于父元素字体的大小,rem 是相对于根元素字体的大小。
- 然后让我通过纯 css 做一个动画,我问能不能通过 js 实现……(CSS 一生之敌了属于是)
- 虚拟 DOM 和真实 DOM 之间的关系 √
- 简历上有提到过 Nginx,所以面试官问了一句除了反向代理,你有用 Nginx 实现过负载均衡吗 ×
- 解释一下浏览器创建 AJAX 请求的过程 √
顺便手写了一下原生的 JS 代码 - AJAX 怎么携带 cookie √
- 说明一下 v-show 和 v-if 的区别,并问如果让你实现 v-show 你会怎么做 √
- http 请求有哪些方法?GET、POST、OPTIONS、PUT 等
- 说一下 OPTIONS 和 PUT 是做什么的 (寄了,这些基本没用过,回答得也并不好)×
- 说一下 GET 和 POST 之间的区别 √
- 介绍一下 fetch(只听过,没用过,了解得并不多) ×
- 说一下 http 和 websocket 的区别
- 最后让我写了一道算法题:
输入一段数组表示许多格子
每一个格子中都有一个数字,表示在这个格子可以向前挪动几步,问从第一个格子出发能否到达最后一个格子
输入样例一 > [ 2, 3, 1, 1, 4 ] > 输出样例一 > true输入样例二 > [ 3, 2, 1, 0, 4] > 输出样例二 > false
以下是我给出的代码:
1 |
|
我的想法是,从后往前依次遍历数组,如果遇到了 0,就往前看有没有元素能够跨过这个位置。如果没有就说明到不了末尾元素。
这题给的时间不太多,只给了差不多 5 分钟吧,这段代码只测试了用例,有没有其他 bug 还不是很清楚。
感想
这毕竟是人生第一次面试,心里非常紧张。不过面试官小哥人非常好,一直都非常有耐心。
最后我在明知自己面试表现稀烂的情况下还是斗胆问了一句,“能不能评价一下我今天的表现?”。
面试官哥哥尴尬而不失礼貌地笑了一下,然后说你计算机方面的基础还是挺扎实的,算法也还可以,就是下次多看下 CSS 方面的知识。只能说大厂不愧是大厂,是我高攀不起了。
本来以为这轮面试寄了,结果中午去食堂吃饭的时候 HR 直接帮我约了二面和三面,字节跳动速度雀食快,只能说大厂不愧是大厂。