快手前端实习 --- 商业化部门 (一面,base北京)
1、自我介绍
2、聊聊项目(30min)20min讲了后台项目,10min讲了移动端项目(记住要用star法则描述你的项目,直击项目的亮点和重难点讲)
3、移动端适配几种方案,答了rpx+px+flex适配,问了如何解决移动端0.5px的问题
4、聊聊flex,以及flex:1代表什么意思,什么是BFC,如何清除浮动
5、聊项目中的搜索模块的联想功能-->引出防抖和节流,分别是什么,以及应用场景,(没考分别怎么实现,我觉得要准备这个,很多都要考手写)
6、slice、splice分别怎么用
7、涉及原型链,以及new的过程是什么
Function.prototype.a = () => alert(1); Object.prototype.b = () => alert(2); function A() {} const a = new A(); a.a(); a.b(); //分别输出什么
8、在new的过程中,fn.apply(this)除了能改变this指向, call和apply的区别,怎么使用怎么传参(加一条,你们要会手写这些方法)
9、promise、事件循环机制、输出什么,以及原理是什么,event loop要讲清楚
console.log(1); setTimeout(() => { console.log(2); }); new Promise(resolve => { console.log(3); resolve('resolve'); console.log(4); reject('error') }).catch((err) => { console.log(err); }).then((res) => { console.log(res) }); Promise.resolve().then(() => { console.log(5); }); console.log(6);
10、快结束了,反转链表/手写promise.all方法的实现两题,选一题,我选的promise.all
11、实现一个es6的数组去重,[...new Set(arr)],这个...什么意思,为什么set可以用...,这里涉及了iterator接口的问题,不会的可以去看阮一峰的es6的iterator和for...of那一章。