第一次電話面試,被面試官虐慘了,以后電話面試一定要準(zhǔn)備好兩樣?xùn)|西。。。
第一,一個安靜的環(huán)境
第二,一支筆和一個草稿本
晚上7點(diǎn)開始,騎車在回寢的路上接到了面試官的電話,在瑟瑟寒風(fēng)中開始了第一次電面
1,自我介紹
2,ES6
常用的let,const,解構(gòu)賦值,箭頭函數(shù),promise,map函數(shù)等
其中promise用于優(yōu)雅地處理異步請求,面試官問,如何在兩個請求都響應(yīng)結(jié)束后再操作數(shù)據(jù)
let httpOne = new Promise((resolve,reject)=>{
if(請求成功){
resolve(res)
}else{
reject(err)
}
})
httpOne.then(promise異步請求2).then(數(shù)據(jù)操作).catch(err=>{})
---------------------------------------------------------------------------------------
//或者
let p1 = new Promise(...)
let p2 = new Promise(...)
Promise.all([p1,p2]).then(values=>{...}).catch(err=>{...})
promise常用api
- promise.all()
- promise.resolve()
- promise.reject()
- promise.then()
- promise.catch()
map
map的用法與forEach的區(qū)別
map與forEach差別不大,map和forEach方法,都是遍歷數(shù)組,接收value和index,區(qū)別在于map的速度會快于forEach,且map函數(shù)可以有返回值,而且返回的是一個新的數(shù)組,forEach沒有
3,如何刪除對象數(shù)組中擁有指定屬性的數(shù)組元素
沒答上來,好尷尬,不過面試官人很好,給了我很多思考的時間,但是當(dāng)時怎么也想不起hasOwnproperty的用法了。。。
其實還可以用in操作符,判斷一個對象中是否存在指定屬性,例如
var arr = [{a:1},{b:2},{c:3}]
arr.map((value)=>{
console.log('a' in value)
})
true
false
false
還可以用Object.keys(obj),返回一個屬性數(shù)組
Object.values(obj),返回該對象中的屬性值
問題第一種解決方案,使用delete
arr.forEach((value,index)=>{
if(value.hasOwnProperty('指定屬性') || Object.prototype.hasOwnProperty.call(value,'指定屬性')){
//注意,此處不能直接使用splice和index來刪除數(shù)組中的元素否則數(shù)組長度會減小,影響后面的操作
//這里可以使用delete方法來進(jìn)行刪除操作,delete不會改變數(shù)組的長度,刪除元素后用一個undefined占位,返回的時候清除
delete arr[index]
}
})
第二種解決方案,取而不刪,使用filter方法
filter方法是ES6提供的新方法,遍歷數(shù)組返回條件函數(shù)中符合條件的元素
arr.filter(value=>{
//若返回true,則取出值,若為false,則過濾掉
return value.hasOwnProperty('指定屬性')
})
4,vue的生命周期
當(dāng)時沒有答全,的確是對生命周期理解不夠透徹造成的,以下是生命周期詳解
- beforecreated (未掛載el,未初始化data)
- created (未掛載el,初始化data)
- beforeMount (完成了data和el的初始化)
- mounted (完成掛載)
- beforeUpdate (數(shù)據(jù)實例改變之前,先占坑)
- update (完成更新狀態(tài))
- beforeDestroyed (銷毀之前)
- Destoryed (銷毀)
生命周期使用
beforecreate : 舉個栗子:可以在這加個loading事件 (可以的)
created :在這結(jié)束loading,還做一些初始化,實現(xiàn)函數(shù)自執(zhí)行
mounted : 在這發(fā)起后端請求,拿回數(shù)據(jù),配合路由鉤子做一些事情
beforeDestory: 你確認(rèn)刪除XX嗎?
destoryed :當(dāng)前組件已被刪除,清空相關(guān)內(nèi)容
5,前端性能優(yōu)化
這里主要問了CDN加速的原理
CDN加速將網(wǎng)站的內(nèi)容緩存在網(wǎng)絡(luò)邊緣(離用戶接入網(wǎng)絡(luò)最近的地方),然后在用戶訪問網(wǎng)站內(nèi)容的時候,通過調(diào)度系統(tǒng)將用戶的請求路由或者引導(dǎo)到離用戶接入網(wǎng)絡(luò)最近或者訪問效果最佳的緩存服務(wù)器上,有該緩存服務(wù)器為用戶提供內(nèi)容服務(wù);相對于直接訪問源站,這種方式縮短了用戶和內(nèi)容之間的網(wǎng)絡(luò)距離,從而達(dá)到加速的效果。
6,微信小程序與普通開發(fā)的區(qū)別
- 微信小程序是單向綁定。而vue存在v-model這種雙向綁定的指令與特性,微信小程序只能通過this.setData來改變數(shù)據(jù)
- 微信小程序?qū)υ膉s表達(dá)式不支持。
7,http1.0和http2.0的區(qū)別
http2.0是一次大版本的升級,相比http1.0,http1.1有以下優(yōu)點(diǎn)
- http2.0使用了多路復(fù)用的技術(shù),做到同一個連接并發(fā)處理多個請求。
(多路復(fù)用:同一個信道傳輸多路信號。(信道:網(wǎng)絡(luò)中的傳輸媒介)) - http2.0對header數(shù)據(jù)進(jìn)行了壓縮,使得在網(wǎng)絡(luò)傳輸中更快捷
- http2.0的服務(wù)器推送功能,服務(wù)器接收到請求之后,返回請求需要的資源同時,推送一些客戶端必要的的靜態(tài)資源如(stylesheets.css)
8,http和https的區(qū)別
介紹:http以明文方式傳輸數(shù)據(jù)內(nèi)容,不提供任何的加密機(jī)制,因此不適合用來傳輸一些重要信息。
https全稱超文本傳輸安全協(xié)議,在http的基礎(chǔ)上加入了SSL協(xié)議,SSL協(xié)議基于證書來驗證服務(wù)器的身份,從而為瀏覽器和服務(wù)器的通信加密
詳解
SSL全稱安全套接層(Secure Sockets Layer),其證書中包含了很多信息,包括證書的頒發(fā)機(jī)構(gòu),證書的過期時間等
客戶端通過TLS(Transport Layer Secure)傳輸層安全協(xié)議,來解析證書,若發(fā)現(xiàn)證書異常則彈出一個警告框,提示證書存在問題
否則,TLS生成一個隨機(jī)值,客戶端與服務(wù)端皆通過此隨機(jī)值來進(jìn)行通信,對傳輸內(nèi)容加密。
9,CORS原理
CORS全稱 跨域資源共享 ,服務(wù)端返回的 Access-Control-Allow-Origin: * 表明,該資源可以被任意 外域 (或者說 源 )訪問。