记一次失败的面试(1)

375 阅读2分钟

寒冬中的面试果然没那么简单,其实最主要的还是自身能力的不足,今天的面试属实收(da)获(ji)很大。学习技术不能浅尝辄止停留在api的使用,最主要的是要掌握原理,这样才能更好的理解与使用,对自身以后的发展也很重要。

进入正题,首先是笔试题:

1.inline和block元素有哪些?它们的区别是什么?

2.请写出以下代码的打印值

var scope = 'global'
function log() {  
    var args = Array.prototype.join.call(arguments, '')  
    console.log(this.scope + ':' + args)
}
var dog = {  
    scope: 'dog',  
    yelp: function() {    
        var sope = 'dog.yelp' 
        log('wow') 
    }
}
dog.yelp() // global:wow
dog.yelp.call(dog) // global:wow
log.call(dog, 'ceeated') //dog:ceeated

这道题考察的是this的指向问题,普通函数的this在函数执行的时候才能确定,谁调用就指向谁(大致就是这意思^_^)

3.请解释元素fixed、absolute、relative、static的区别

4.HTTP中200、404、500分别代表什么意思?304、403呢?

5.把字符串'abcde'处理成'edbca'

6.请用promise改写一下代码

$(document).ready(function() {
    $.get('/get/user/info', function(result) {
        $.get('/get/city?city='+result.user.city, function(city) {
            // do sth
        })
    })
})

==>

function fetch(url) {
    return new Promise((resolve, reject) => {
        $.get(url, function(res) {
            resolve(res)
        },
        function(err) {
            reject(err)
        })
    })
}

async function getInfo() {
    let result = await fetch('/get/user/info')
    fetch(`//get/city?city=${result.user.city}`).then(res => {
        do sth
    })
}
getInfo()

7.如何实现add函数?得出一下结果

add(2, 5)  // 7   add(2)(5) //7

function add(...rest) {
       if(rest.length > 1) {
            return rest[0] + rest[1]
       } else {
            return function(sec) {
                return rest[0] + sec
            }
       }
}

下面的面试问题才是让我尴尬的点,不怕大家笑话,我回答的很差/(ㄒoㄒ)/~~

1.介绍一下vue中的vdom,与真实dom的关系,是如何映射到真实dom的?

2.项目中是如何进行优化的?减少首页的加载速度

我回答了一些常规操作,包括使用雪碧图。

面试官:为什么使用雪碧图?

我:可以减少http请求

面试官:为什么减少http请求可以优化首页的加载速度?如果合并的雪碧图太大那岂不是加载的更慢?

我:...

3.执行map函数时,dom被更新的多少次?

<div>{{timer}}</div>

// script

data() {
    return {
        timer: 2
    }
},
methods: {
    map() {
        for(let i=0;i<1000,i++){
            this.timer = i
        }
    }
}

4.重绘、回流

5.有个计算量很大的操作(执行时间3s)请问如何优化?(大概是这样)

面试官给出的答案:

     1.web worker

     2.分步骤执行

6.手写防抖函数

function debounce() {
    let timer
    return function() {
        clearInterval(timer)
        timer = setInterval(() => {
            //  do sth
        },1000)
    }
}

大家可以在评论区留下答案,让我学习一下骚操作