头条
- 如何设计一个组件库
- API设计
- 如果想抽离UI,怎么做
- 拖拽布局(问简历里的实现)
- HTTP Code
- 输入一个url,浏览器经历哪些环节
- React hook
- JS执行-性能优化
- 代码题:实现一个累加函数,传入3个数,返回和,例如:add(2,3,5), add(2)(3)(5)。
二面
- js执行顺序题目
var a = new Promise(function(resolve, reject){
console.log('1');
resolve()
}).then(function(){
console.log('2');
return new Promise(function(resolve, rejcet){
setTimeout(()=>resolve(2), 6000)
})
}).then(function(a){
console.log(a)
})
- 手写一个promise.all
Promise.all = function(args){
return new Promise((resolve, reject)=>{
var len = args.length;
var arr = [];
var errInfo;
for (var i =0; i< args.length; i++){
args[i].then((data)=>{
arr[i] = data;
len --;
if (len === 0){
resolve(arr);
}
}).catch((err)=>{
errInfo = err;
reject(err);
})
}
});
}
- 追问:Promise.all 作为polyfill 还需要做哪些适配
- 追问:Promise在每个成功和失败执行的时候,打印日志(then、catch)
- 追问:Promise在所有都成功或者存在失败的时候,打印日志
- css 如何设置宽高等比例的div
- 追问如何上面的宽高等比例的div,根据父容器来自适应,比如宽度是父容器的80%
- 如何用css实现一个轮播图
- 追问:在实现轮播图的方案中,transform和 position 的区别在哪里
- 如何快速定位用户问题?
- 追问:如何捕获浏览器异常,并上报
- 如果浏览器连续发送请求,将前面的请求abort掉,服务器还能接收到么?
- 浏览器请求缓存有哪些?
- 浏览器请求缓存中,与服务器的具体交互流程
- 如果想做一个本地编辑器,需要实时存储,??
- 如何做幂等校验,减少重复请求
总结: 深度不够,对知识点没有做深层次的总结和提炼,存在说了半天都没说到点上。
平安科技
- webpack 热更新
- loader的执行契机
- 浏览器缓存放在哪里
- HTTP有哪些了解
- typescript
某公司
- margin30%,是根据什么来
- css module
- 性能优化
- 首屏加载如何计算
神策
- dom操作
- 设计一个组件
- 实现一个大数据量的表格,滚动渲染
- 原型
- this + 箭头函数
- throttle
let a = 1; // var 和 let
var obj = {
a: 2,
getValue:()=>{
console.log(this.a)
}
}
console.log(obj.getValue());
百词斩
一面
跨域
如果没有跨域拦截,会出现什么问题
页面可访问性
语义化,语义化的作用
检测十六进制颜色值
写一个add函数
fn.length
如何关注最新的技术前沿
斐波那契数列
function fibFn(key, index){
var arr = new Array(index+1);
arr = arr.map(i=>0);
var len = key -1, cache = key;
while (len --){
arr[len] = 1;
}
for (var i = key; i<index; i++){
cache = key;
while(cache --){
arr[i] += arr[i - cache]
}
}
return arr[index];
}
二面
promise
function checkOneByOne(names, fn){
if (names.length === 0){
fn(true);
return;
}
var len = names.length;
var promises = [];
while(len --){
var promise = new Promise(function(resolve,reject){
check(names[len - 1], (flag)=>{
if (flag){
resolve(flag)
}else{
reject(flag);
}
})
})
promises.push(promise);
}
Promise.all(promise)
.then(function(){
fn(true);
}).catch(function(){
fn(false);
})
}
flattrn
//line=readline()
//print(line)
console.log('Hello World!');
function convert(config, pre =''){
var cache = {};
Object.keys(config).forEach(configKey=>{
var curr = config[configKey];
if (typeof curr === 'object'){
delete config[configKey]
cache = {...cache, ...convert(curr, `${pre}${configKey}.`)}
} else {
cache[pre + configKey] = curr;
}
});
return cache;
}
var res = convert({
a: 1,
b: {
a: 2,
c: {
a: 3,
}
}
})
console.log(JSON.stringify(res));
// 转义的字符
// DNS