寒冬中的面試果真沒那麼簡單,其實最主要的仍是自身能力的不足,今天的面試屬實收(da)獲(ji)很大。學習技術不能淺嘗輒止停留在api的使用,最主要的是要掌握原理,這樣才能更好的理解與使用,對自身之後的發展也很重要。vue
進入正題,首先是筆試題:web
1.inline和block元素有哪些?它們的區別是什麼?面試
2.請寫出如下代碼的打印值api
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在函數執行的時候才能肯定,誰調用就指向誰(大體就是這意思^_^)promise
3.請解釋元素fixed、absolute、relative、static的區別bash
4.HTTP中200、40四、500分別表明什麼意思?30四、403呢?dom
5.把字符串'abcde'處理成'edbca'async
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
}
}
}複製代碼
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)
}
}複製代碼
你們能夠在評論區留下答案,讓我學習一下騷操做