寒冬中的面试果然没那么简单,其实最主要的还是自身能力的不足,今天的面试属实收(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:wowdog.yelp.call(dog) // global:wowlog.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) //7function 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被更新的多少次?
{ {timer}}// scriptdata() { 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) }}复制代码
大家可以在评论区留下答案,让我学习一下骚操作