快手前端一面+二面-北京效率流程中心
3.17 上午11点一面
- 题目一:实现reduce函数
function myReduce(arr, total, cur) {
} - 题目二:看一段代码的输出,涉及到原型链、构造函数、new的this指向问题
function Foo() {
Foo.a = function() {
console.log(1)
}
this.a = function() {
console.log(2)
}
}
Foo.prototype.a = function() {
console.log(3)
}
Foo.a = function() {
console.log(4)
}
Foo.a(); //4
let obj = new Foo();
obj.a(); //2
Foo.a(); //1 - 题目三:看一段代码输出,涉及宏任务、微任务
setTimeout(_ => console.log(1))
new Promise(resolve => {
resolve()
console.log(2)
}).then(_ => {
setTimeout(_ => console.log(3))
console.log(4)
Promise.resolve().then(_ => {
console.log(5)
}).then(_ => {
Promise.resolve().then(_ => {
console.log(6)
})
})
})
console.log(7)
调用栈
2
7
宏任务队列
1
3
微任务队列
4
5
6 - 题目四:实现一个 sleep 函数,如 sleep(1000) 意味着等待 1000 毫秒
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(()=>{
resolve()
}, time)
})
}
sleep(1000).then() 3.22 上午11点二面
1.自我介绍以及为什么选择前端
2.字符串反转
function reverseString(str) {
return str.split("").reverse().join("");
}
console.log(reverseString("hello world")) 3.数组拍平
function my_flat(arr) {
let ans = [];
for(let item of arr) {
if(Array.isArray(item)) {
ans = ans.concat(my_flat(item));
//ans =[...ans, ...my_flat(item)];
}else {
ans.push(item);
}
}
return ans;
}
console.log(my_flat([1, [1, [1]]])) 4.拿取树对象属性
function fn(tree, name){
//To Do
}
var tree = {
name : '中国',
children : [
{
name : '北京',
children : [
{
name : '朝阳群众'
},
{
name : '海淀区'
},
{
name : '昌平区'
}
]
},
{
name : '浙江省',
children : [
{
name : '杭州市',
code : '0571',
},
{
name : '嘉兴市'
},
{
name : '绍兴市'
},
{
name : '宁波市'
}
]
}
]
};
var node = fn(tree, '杭州市');
console.log(node); // { name: '杭州市', code: 0571 } //面试的时候写了一半被叫停了,下来自己接着先实现了一版能跑的
function fn(tree, name){
//bfs
let Queue = [[tree.name,tree.children]];
while(Queue.length > 0) {
//出队当前节点
let cur = Queue.shift();
if(cur[0] === name) return {name: name, code:cur[1]}
//将children入队
if(cur.length === 1) continue;
for(let node of cur[1]) {
let obj = [node.name];
if(node.hasOwnProperty("children")) obj.push(node.children);
if(node.hasOwnProperty("code")) obj.push(node.code);
Queue.push(obj);
}
}
return -1;
} 5. 看一段代码输出
setTimeout(function() {
console.log(1); //4
}, 0);
new Promise(function (resolve, reject) {
console.log(4); //1
resolve(2); //3
}).then(console.log);
console.log(3); //2
//调用栈
4
3
//宏任务
1
//微任务
2 6.盒子模型 以及常用的
7.常用的展示文字的标签,行内元素标签
8.常用的布局
flex布局
grid布局
float布局
绝对定位 absolute、fixed
9.float布局的使用场景及存在的问题
图片文字环绕、可能会让父元素高度塌陷
10.绝对定位使用场景
11.页面自适应
12.网页滚动怎么实现的
对文字设置overflow-y会不会滚动
13.vue组件传值
父子组件:props、$emit、$children、$parent、ref
隔代:provide、inject、$attrs
兄弟: vuex、event-bus、localstroage、sessionStroge、cookie
14.什么情况下用到vuex
15.父子组件传值,父组件中更改了这个prop,子组件会执行什么样的生命周期,有遇到过这种场景嘛?
16.计算属性与侦听属性的使用场景,结合着自己的项目来展开说明
17.使用计算属性的好处
反问:
1.实习有转正嘛?
2.进去后实习生的培养
3.对于这次面试,我还有什么需要加强和补充的
对自己的项目的细节应该掌握更清楚些
