某csdn面经金五银六助力大厂-🎉🎉🎉

1,180 阅读4分钟

游泳健身了解一下:github 和小伙伴一起搞的日常总结

相对于面其他一些公司的而说面试体验还挺好的,面试官也会对你进行一些指导(还可以查漏补缺),以上个人观点(后期想做一个公司面试体验的小程序),理解面试官问的问题是想要知道你当前的掌握的哪些技能点这个很关键,(每个人询问的方式都是不一样的)

fixed 相对于什么去定位的?

羞愧,不知道,感觉像是 html 不会随着高度增加而移动

答:是基于当前浏览器窗口去定位的,所以用于是在当前的最上方

一个数组里面有有一堆对象如何通过id进行去重排序,然后还有其他权重进行排序

let arr = [{id:1,msh:'1'},{id:2,msh:'1'},{id:3,msh:'1'}]

let obj = {}
for(let i=0,len=arr.length;i<len;i++){
    if(!obj[arr[i].id]){
        obj[arr[i].id] = arr[i]
    }else{
        // 当前obj 已经有了 然后可以进行其他的方式再进行对比操作
        // 复杂度 O(n)
        if(obj[arr[i].id].msg!==arr[i].msg){
            ****
        }
    }
}
let axx = []
for(let item in obj){
    axx.push(obj[item])
}
return axx

写一个注入进行排序(抽象化排序)

// 排序 arr type是当前排序字段,num 1正序,0倒序 // 默认正序
const fn = function(arr,type,num=1){
    return arr.sort((x,y)=>{
        return num?x[type]-y[type]:y[type]-x[type]
    })
}

for in for of

for in 是循环对象

for(let item in obj){
    // item 是当前的key
}

for of 循环有Generators 函数的对象 
// 普通对象不可以for of
// arr [1,2,3]
for(let val of arr){
    val 当前值
}

function* xx(){
    yield 1;
    yield 2;
    yield 3;
}

for(let val of xx()){
    val 当前值
}

for of 就是用的当前的 Generators 函数
GeneratorsSymbol.iterator 的语法糖

如果obj 需要使用for of 那么可以对当前进行修改

let obj = {
    1: 'a',
    2: 'b',
    3: 'c',
    length: 3,
    [Symbol.iterator]: function(){
        let index = 0;
        let next = ()=>{
            return {
                value: this[index],
                done: this.length === index++
            }
        }
        return {
            next
        }
    }
}

for(let item of obj){
    console.log(item)
    // a,b,c
}

typeof instanceof Object.prototype.toString

typeof 可以判断当前基本类型 但是不可以判断出当前对象比如array 和 objectfunction 都只能是object
instanceof 原型链上对比来判断当前是否是当前都类型 这样就可以判断 function array object
Object.prototype.toString 可以判断所有的类型就比较合适,值都是 [object Object] [object Array]等等

vue 依赖收集

这个题目的时候有点懵,不知道问的是什么  其实问的就是Dep 和 watch 的发布订阅
问题问的是如果data下面a一开始没有使用在我们的template 模版里面,我们的vue对data 下面的
a进行操作还可以被依赖收集吗,我没有反应过来,回答是可以被依赖收集的,其实是不能被依赖收集的
vue只对当前视图中所用到的进行依赖收集
看源码就可以知道 Dep.target 这个有值的时候才会进行收集,而Dep.target 有值需要don 上属性或者插件表达式
正则对比出来才会对new Watch() 方法进行监听,然后收集,所以一开始没有在template模版里的字段,后面进行修改是
不会被依赖收集的
 Object.defineProperty(obj,item,{
    get(){            
        Dep.target && dep.addSub(Dep.target)            
        return value       
    },      
    set(newVal){  
    // 当值不一样的时候才可以进行修改            
    if(newVal!==value){             
        value = newVal 
            // 当值进行修改的时候我们再次加上监听          
            observer(value)           
            dep.notity()       
        }      
    } 
   })


深度优先遍历和广度优先遍历

深度优先遍历 像是二叉树,前序遍历
广度优先遍历 队列

递归一个异步(不知道在询问啥),总结后可能在问当前的Promise.all 吧

那就实现下Promise.all

let PromiseAll = function(arr){
    let len = arr.length
    return new Promise((resolve,resject)=>{
        let axx = []
        let resolved = function(res){
            axx.push(res)
            if(axx.length === len){
                resolve(axx)
            }
        }
        let resjected = function(res){
            resject(res)
        }
        for(let i=0;i<len;i++){
            arr[i]().then(resolved)
            .catch(resjected)
        }
    })
}

vueRouter 初始化是怎么渲染的

问的有点广
我只准备来什么hash window.hashChange 来监听啥的

set 和 map 的类型

新数据类型,通常set用来去重

async 和 awiat

async

async 是一个promise
awiat 是 Generators 的一个语法糖
所以 awiat 后面的函数会先执行

react jsx 有了解吗

不怎么用react 希望大佬可以补一下这个

webpack

只会基础的entry output loader plugin rule model 啥的,
具体的使用功能比如热更新,原理啥的不是很懂
大佬可以补充一下

总结

webpack,vue源码理解还不是很深刻接下来会好好去准备这些东西,

最后

多多点赞在github 上面对❤️是对我最好对鼓励,我会尽量分享一些自己使用得心得以及正确对食用方式 求靠谱内推(北京地区)可以留言我 +。=