字节跳动前端二面分享
简单的记录一下,最近字节跳动的面试。
1.面试前的状况
在boss上投的简历,三天后收到hr的短信通知,本来是电话通知,但是我的电话最近接不了陌生人的电话。接到通知后,和hr定一下面试的时间。面试当天也是故障百出,我家突然断网停电了(家里有电脑,我就把笔记本放在学校了☹),结果用手机面了半个小时的基础(稍后总结),因为没有办法写代码,面试官要求更换面试时间,于是我的一面告一段落。
2.面试当天
首先我先记录一下第一次一面的问题。一面是个很温柔的小姐姐,超好!
自我介绍——一定要准备好自我介绍,你说的内容都会成为面试官问你的问题,我说了一个大三接触前端,比如轮播图的实现等,然后面试官就问你是怎么实现轮播的。
position的定位有哪些?
fixed、absolute、relative、static各意思,然后面试官问子元素绝对定位,父元素一定是相对定位么? 不一定,父元素也可以是fixed
flex的布局了解么,它的属性有哪些
flex主要解决一些比较难的布局,比如垂直居中,它的容器属性有:flex-direction、flex-wrap、align-item、justify-content
用定位实现垂直居中
子绝父相,然后设置top和left为50%,然后面试官说这样还是有点问题。后面查了查应该还得设置transform-translateY(-50%)
vue的生命周期
beforecreate、created、mounted、beforemounted、beforeupdate、updated、beforedestory、destoryed
写一个promise对象
这个没答上来就是简单的说了一下promise的含义,知道它的执行顺序。面完查了查不知道是不是写下面的代码(如果是就。。。)
const p1 = new Promise(function(resolve, reject) { // 在这里做一些逻辑处理 // 如果异步操作成功的时候,调用resolve if (true) { resolve('success'); } else { // 操作失败后我们就调用reject() reject('fail'); } }) p1.then((val) => { console.log(val); // success }, (err) => { console.log(err) })数组扁平化
我首先用了es6的flat,但是不支持
var arr=[1,2,[3,4]] arr.toString().split(',').map(item=>{ return Number(item) })
我可能写的比较慢,然后面试官问我split(',')返回的啥。我说字符串数组,“1,2,3,4”,后来一想应该是“1“,“2“,“3“,“4”(太菜了😢)
算法:二分查找,能写一下么
我说了基本思路,就是首先找到中间值,然后从左边再找中间值,右边也找中间值,知道找到为止,然后面试官让我手写一下,我说我写代码能力不是很强,可能会慢点,我写了一半,才想起来用递归,再去加的方法名,写半截面试官说我知道你的意思了,先这样吧
算法2:找为k值的路径
这也是大家都熟悉的面试算法题了,我就说了一下思路,通过深度优先遍历到子节点,如果找到等于k的路径就返回。
然后我的一面就到此结束了,心想麻烦了面试官两天的时间,有好多不会的(可能我总结的也不完善),估计没二面了,正好要做饭,我妈让我出去买东西,买完之后,手机收到了hr的信息,说面试官再等我,还有二面,我的妈呀,心想怎么每次都让面试官等我,内心无比的。。。
3.就开始了我的二面
自我介绍以及我的歉意,二面是个小哥哥,一看就是技术大佬。二面主要问一些项目,你用的框架等
vue的组件化、模块化、工程化的理解
这是在我简历上有的,所以大家一定要把简历上的内容好好掌握一下。这个答的不好,我从网上搜一下,粘出来。
组件化:一个vue文件就是一个组件。页面上的每个独立的、可视/可交互区域视为一个组件;
模块化的话:一个文件既能实现复用也能分而治之。
工程化就是动态的HTML,CSSS,JS分离出来,将前端当成工程进行分析,组织和构建从而达到项目结构清晰,分工明确,团队配合默契,开发效率高等目的。
http请求有哪些各自区别
head option get post head和get两者差不多,option的是用来查看服务器性能,get和post本质没区别,只是get放在url里,post放在request body里,get需要一个tcp包,post需要两个。
面试官问,那get和head差不多,差在哪里?、
没答上来。后期查阅。
HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。
http请求报文
状态码、请求头、请求体 面试官问:请求头包括什么,我说content-type其他没回答上来(基础一定要打牢,现在后悔没好好看请求这方面)
后期查阅:
我说了AMD、CMD、CommonJS 他们之间的区别,我说commonjs在vue里通过export moduleAMD根据先后顺序加载,在requirejs中使用
字符串倒排(中间不是没执行函数就是没打印出来,面试官还提醒了我,我太菜了)
var str ='abc' function reverse(str){ str.split('').reverse().join("") } console.log(reverse(str))
最后就是问了一些职业规划,之后是想一直做前端还是学习更多。然后问我还有没有别的问题,我说三面多久通知,然后就第二天也没通知,我觉得应该凉凉。对了,还问有没有写博客的习惯,我发了一个链接给面试官。
总之,这也是一次经验,我一面过了,我就很开心,希望之后能够好好学好基础,在项目上也要多多实践。同时,也引起自己的反思。总之,这个世界没什么好畏惧的,反正我们只来一次。——朱德庸