字节跳动校招,抖音电商前端,一二面面经
3月3日 一面(50min)
原本定于2.25一面的,但是面试官临时有事。。。拖到了3.3
自我介绍
在学校参加了一些项目和比赛,然后有一段实习经历,去年九月系统学习前端
学习渠道:入门是同学带,系统学习是红宝书,b站,然后踩坑就找掘金思否CSDN
1.基本数据类型
多说了symbol和bigint,面试官稍微问了下用过没,是干啥的,symobol用过,bigint只在教程里看见过
2.一个原型链的输出题
function Ctor(x){ this.x=x } Ctor.prototype.x='12345' const a=new Ctor(4) a.x=undefined console.log(a.x)//这里我答的12345,以为赋值undefined会去原型链上找hhhh,实际上赋值啥就是啥(undefined) const b=new Ctor(5) delete b.x console.log(b.x)//这里是12345
3.事件循环,输出题
//1 3 4 5 2 new Promise(resolve=>{ console.log(1) setTimeout(()=>{ resolve() },0) }) .then(()=>{ console.log(4) }) .then(()=>{ console.log(5) }) setTimeout(() => { console.log(2) }, 0); console.log(3)
4.web安全
xss,csrf,http劫持,dns劫持,ddos
仔细问了一下csrf的攻击原理
5.跨域的解决方法
简单说了下跨域的产生,和同源策略的限制
父子域名location.domain再设置端口号,代理服务器,websocket,cors,jsonp,cors问了怎么携带cookie,没答上来(withcredential)
6.ssl加密的过程
追问非对称加密加密的是什么(会话秘钥)
7.动画效果方案
transition(嘴瓢说了transiform),animation,requestAnimationFrame
8.手写一个深拷贝
自己没考虑数组,而且没用hasOwnProperty,复制了原型上的属性
9.为Array实现一个getReader
题目上是TS写法,然后我不会,就实现了一个函数返回一个Reader
10.反问
问了问哪里答得不好需要加强
学习建议
3月15日 二面(1h)
原本是3.11的,结果面试官也有事,然后跟hr小姐姐又换了好几个面试官都没空,最后又定到3.15
自我介绍
跟一面差不多的自我介绍
问了问实习项目中怎么解决eCharts没法用相对单位的问题
1.js的类型检测
回答了typeof instanceof constructor Object.prototype.toString().call()
追问了一下为啥要用Objcet原型上的toString,慌神了直接胡言乱语说不用原型找不到hhhh(实际上是别的toSrring经常被重写)
2.如何理解js动态类型,有什么优缺点
声明时类型不固定,可以修改,不用调用各种类型转换的函数,编码灵活但容易出错
又追问了一下js数组的内存分配,我这里猜测和c++数组动态内存一样动态分配,不够就翻倍之类的
3.判断this
//一开始被绕进去了,面试官提醒了一下,我重头开始分析,后来对了 var length=10; function fn(){ return this.length+1 }; var obj={ length:5, test1(){ return fn() } } console.log(obj.test1())//11 obj.test2=fn console.log(obj.test1()===obj.test2())//11===6,false
4.new的原理,过程
这里我直接给面试官手写了一个
5.js代码在V8中怎么执行的
这里直接问蒙了,啥也不会啊hhhh,如实和面试官说了不会,但说了一下自己的看法,分为编译过程和运行过程
追问这两个过程干了些什么,回答了编译期有语法检查之类的
6.从url到页面呈现经历了那些过程
找缓存-dns解析-tcp链接-http请求-页面渲染
追问了dns解析的过程(递归和迭代)和页面渲染的过程(css,html同步解析,遇到js就请求执行)
再追问js阻塞怎么办(script写在body后面,async,defer)
7.事件传播
先捕获再冒泡,addEventLisener的第三个参数是干什么的(决定事件在哪个阶段执行,true是捕获,false冒泡),这个属性有没有改变事件传播的顺序(只是决定事件在哪执行,没有改变事件传播的顺序)
8.浏览器存储和调用它们的api
localStorage,SessionStorage,Cookie
9.vue解决了什么问题
不用操作dom,组件化
追问vue的响应式(Object.defineProperty)
然后又问了vue怎么做的依赖收集(不清楚)
10.webpack解决了什么问题
回答了less sass转css,babel转es5,热更新,混淆压缩
问了less-loader,css-loader和style-loader分别的作用,这里如实说了不清楚,但自己认为less-loader是把less转css,css-loader是为了解决css的模块化,样式隔离,style-loader真不知道
11.js的模块化了解多少
用过commonjs的require和es6的import
12.flex:1效果是什么
先回大了flex:1是三个属性的简写,然后回答了效果
13.box-sizing干什么的(盒模型)
14.并发和并行的区别(不知道,说了句废话,面试官说我说了等于没说,哈哈哈哈)
15.线程和进程的联系和区别,这里回答的比较详细
追问了线程间通信的方式(消息队列,共享内存,信号量)
然后又追问了一个进程的内存空间里会存些什么(运行时的状态,信号量)
16.tcp为什么三次握手
说话已经开始结巴了,一开始说了一点没说清楚,;捋了捋说清楚了,四次会造成资源浪费,两次无法确定
17.对称和非对称加密的优缺点
回答了安全和速度
追问浏览器和服务器加密算法谁更快(不知道)
18.V8垃圾回收
(自己对V8了解确实不够呀)
问了垃圾回收的时机,回答内存不够就运行
追问了新旧GC的区别,回答不清楚区别,但知道旧GC的原理和缺点,猜测新GC应该一定程度上有所解决
追问谁执行的更频繁(我回答老的不如新的,得多清理几次,没想到错了hhhhh)
19.算法题-括号生成,我用动态规划写的,力扣上有
20.反问
问了问哪里答得不好
哪里需要加强(并行并发,还说V8不感兴趣没关系,面试官人真的挺好的,还跟我讲了一些业务上的问题)
学习建议
直接问过没过,面试官笑嘻嘻跟我说,不能讲,我觉得还不错,你自己体会
后来等了会hr就跟我说过了