面试问题集合

184 阅读2分钟

头条

  • 如何设计一个组件库
    • 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

URL进行参数转义的原因,以及转义哪些字符

DNS查询的具体细节