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

前言

今天人生第一次面试给了字节跳动,面试前非常紧张,从投递简历到正式面试之间只隔了三天。
感觉这三天看的博客比三个月学的都多(-_-||)。
正式面试的时候也发生了很多状况,包括但不限于对方听不见我说话(面试前明明特地调试了话筒来着),害得人家面试官小哥哥还特地打了一通长达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

以下是我给出的代码:

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直接帮我约了二面和三面,字节跳动速度雀食快,只能说大厂不愧是大厂
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小栗帽今天吃什么

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值