快手主站秋招前端
本周连着三轮面完,开泡
一面 题目不分先后
- 说说文档流
- 说说样式层叠(这东西跟层叠样式是两码事)
- 一个关于普通函数与箭头函数的this输出
- 说说flex与grid
- 多人文档编辑会出现什么问题,怎么解决
- js 基本数据类型
- 订阅发布
- 异步输出一道
- BFC
- 作用域与作用域链
- 闭包
很久没背八股加上问的太空了,不好回答, 反馈:你不错,有人比你还不错
二面
- 问React,diff, fiber, scheduler,diff优化,vue对比react,谁快
- 浏览器渲染,流程走一遍,blink优化怎么做,开发者可以有什么优化措施
- 网络相关,cookie,samesite
- 原型链输出一道,嘴说就行
- 手写,返回一个函数,定时执行,多少次, fn, repeat, interval,不难,要求两种实现方式
- 并发控制,题挺难的,我直接贴在这,和那种顺序index++的不是一个题目
function createRequest(maxConcurrent) {
let activeRequests = 0;
const requestQueue = [];
function processQueue() {
if (activeRequests < maxConcurrent && requestQueue.length > 0) {
const { url, params, resolve } = requestQueue.shift();
activeRequests++;
// 发起请求的逻辑,这里使用 setTimeout 模拟异步请求
setTimeout(() => {
makeRequest(url, params)
.then((result) => {
resolve(result);
})
.finally(() => {
activeRequests--;
processQueue();
});
}, 0);
}
}
function myRequest(url, params) {
return new Promise((resolve) => {
requestQueue.push({ url, params, resolve });
processQueue();
});
}
return myRequest;
}
// 模拟请求函数
function makeRequest(url, params) {
return new Promise((resolve) => {
// 这里可以根据实际情况发起请求
// 这里使用 setTimeout 模拟异步请求
setTimeout(() => {
resolve(`Result for ${url} with params ${params}`);
}, 1000); // 延迟1秒模拟异步请求的响应时间
});
}
// 示例使用:
const urlList = ['https://example.com/api/1', 'https://example.com/api/2', 'https://example.com/api/3'];
const myRequest = createRequest(2); // 最大并发量为2
Promise.all(
urlList.map((url) => {
const params = { /* 根据需要传递的参数 */ };
return myRequest(url, params);
})
)
.then((results) => {
console.log(results); // 打印所有请求的结果
})
.catch((error) => {
console.error(error); // 处理错误
});
二面:总体一般,主要是这个并发确实写不出来,react源码很久没看了,知道调度器怎么做的但是说不出来了
三面
- 说实习,组件库,单测,覆盖率,serverless函数,为什么做,为什么现在做,为什么你做,怎么做
- 让你说自己项目,说亮点
- next相关,图片优化,cdn图片处理方案思路
- 浏览器性能优化,lighthouse, performence api
- 手写一道,rgbToHex RGB(255,255,255) => #FFFFFF
三面聊实习为主,无反馈
#快手#