中信建投证券笔试 和 酷我音乐笔试

264 阅读1分钟

这两家公司都是要求去现场先做笔试题,然后进行一面。由于笔试题无法全部记忆,现将其中的几道题汇总一下

1.使用函数实现一个eventBus

class EventBus{
    constructor(){
        this.__events = {}
        // 对象结构: {click: [{listener: fn,once:false}]}
    }
    on(event,listener){
        if(!event || !listener){
            throw Error('参数错误')
        }
        // 如果当前event不在__events里,则新建
        if(!this.__events[event]){
            this.__events[event] = []
        }
        // once是为了只执行一次
        this.__events[event].push({
            listener,
            once: false || listener.once
        })
    }
    off(event,listener){
        const listeners = this.__events[event]
        if(listeners && listeners.length){
            const newListeners = listeners.filter((i,idx) => i.listener !== listener)
            this.__events = [...newListeners]
        }
    }
    once(event,listener){
        this.on(event,{
            listener: listener,
            once: true
        })
    }
    emit(event,...args){
        const listeners = this.__events[event]
        if(!listeners || !listeners.length){
            return false
        }else{
            listeners.forEach((i,idx)=>{
                i.listener(...args)
                if(i.once){
                    this.off(event,i.listener)
                }
            })
        }
        return true
    }
}

2.flex布局如何将1、2、3个块按照3、2、1的方式倒排

通过在子元素设置order,order越小越靠前

3.flex布局如何将1、2、3个块按照1:2:3的大小自动填充空间

子元素分别设置flex-grow:1 、2、3

flex布局的题 it.cha138.com/jingpin/sho…

4.promise、setTimeout等的输出顺序

5.强缓存和协商缓存中有哪些字符,字符的优先级是怎样的 juejin.cn/post/708317…

6.输出题

console.log({} == false)  // false

console.log({} == true)  // false

console.log([] == true)  // false

console.log([] == false)  // true


let a = '10';a.sum=1;console.log(a.sum)  // undefined

7.手写实现一个轮播图组件

8.手写将vdom转换成真实dom

www.jianshu.com/p/699fa3cdf…