高頻率Vue面試題匯總以及答案
目錄
- 什么是三次握手?
- 什么是四次揮手?(close觸發(fā))
- 什么是VUEX?
- 什么是同源----跨域?
- 什么是Promise?
- 什么是fexl布局?
- 數(shù)據(jù)類型
- 什么是深淺拷貝?
- 什么是懶加載?
- 什么是守衛(wèi)?
- DOM
- Vue2與Vue3的區(qū)別
- Vue中data為什么是函數(shù)?Vue根實(shí)例為什么沒有這個(gè)限制?
- Vue設(shè)計(jì)原理
- Web時(shí)代的演變
- Vue優(yōu)化性能方法
- 總結(jié)
什么是三次握手?
是TCP連接時(shí)服務(wù)器和客戶端的相互發(fā)送報(bào)文,是為了確認(rèn)雙方接受、接受能力是否正常,指定自己的初始化序列號,為后面的可靠性傳遞做準(zhǔn)備。
剛開始客戶端處于Closed(關(guān)閉)狀態(tài),服務(wù)器處于Listen(監(jiān)聽)狀態(tài)。
第一次:客戶端給服務(wù)器發(fā)送一個(gè)SYN報(bào)文(建立連接),并指明客戶端的初始化序列號ISN,此時(shí)客戶端處于SYN-END(請求連接)狀態(tài),首部的同步位SYN=1,初始序列號seq=x,SYN的報(bào)文不能攜帶數(shù)據(jù),但是會消耗一個(gè)序列號。
第二次:服務(wù)器收到后會返回一個(gè)SYN報(bào)文,指定自己的初始化序列號ISN,同時(shí)會把客戶端的ISN+1做為自己的ACK(確認(rèn)字符)值,表示已經(jīng)收到,此時(shí)處于SYN_RCVD(表示已接受到,半列隊(duì))狀態(tài)。在確認(rèn)報(bào)文段中SYN=1,ACK=1,確認(rèn)號ack=x+1,seq=y。
第三次:客戶端收到SYN報(bào)文后,會發(fā)送ACK報(bào)文,將服務(wù)器的ISN+1作為ACK的值,此時(shí)客戶端處于ESTABLISHED(已連接)狀態(tài)。在確認(rèn)報(bào)文中ACK=1,ack=y+1,seq=x+1,ACK報(bào)文可以攜帶數(shù)據(jù)了,不攜帶不消耗序列號。
為什么要三次?
是要確定發(fā)送、接收發(fā)送、發(fā)送接收是否可靠。
什么是四次揮手?(close觸發(fā))
是由TCP半關(guān)閉造成的,就是結(jié)束塔的發(fā)送后還能接受來自另一端數(shù)據(jù)的能力。剛開始都處于ESTANLISHED狀態(tài)。
如果是客戶端發(fā)送:
第一次:發(fā)送FIN報(bào)文,報(bào)文中會指定序列號,客戶端處于FIN_WAIT1(終止等待1)狀態(tài)。
第二次:服務(wù)器收到后發(fā)送ACK報(bào)文,接受得序列號+1作為ACK的值,處于CLOSE_WAIT(半關(guān)閉)狀態(tài)。
第三次:服務(wù)器收到后發(fā)送FIN報(bào)文,指定序列號處于LAST_ACK(最后確認(rèn))狀態(tài),
第四次:客戶端收到后發(fā)送ACK報(bào)文進(jìn)入TIME_WAIT狀態(tài),等一會進(jìn)入CLOSED(關(guān)閉連接)狀態(tài),客戶端收到關(guān)閉連接。
在socket編程中,任何一方執(zhí)行close()操作就可以產(chǎn)生揮手操作。
什么是VUEX?
是一個(gè)為Vue設(shè)計(jì)的狀態(tài)管理庫,以利用Vue.js的細(xì)粒數(shù)據(jù)響應(yīng)機(jī)制進(jìn)行高效的狀態(tài)更新。
state:存放公用數(shù)據(jù)/狀態(tài)的地方;
getter:類似于vue中的計(jì)算屬性。
mutation:修改state的地方,$store.commit([xxx,'name'])
actions:是mutation的上一級,提交到mutation執(zhí)行,可調(diào)用異步方法。 $store.dispach([xxx,'name'])
什么是同源----跨域?
同源:是一種約定,DOM同源/XMLHTTP同源,要求域名、端口號、協(xié)議相同。
CROE解決跨域,croe的書寫方法和axios一樣,通常不需要進(jìn)行修改,常用。
Jsonp:是一種利用動態(tài) 創(chuàng)建script利用src進(jìn)行跨域,雖然無兼容性問題,但是只能get請求,從別的域加載執(zhí)行可能會攜帶惡意代碼,不易確定失敗。
Nginx反向代理:在vue.confing中proxy
"/api":{ target :"https://www.easy-mock.com",//設(shè)置代理 target :"http://10.10.29.26:8882", //代理的接口域名以及端口號 ws:true,//支持ws協(xié)議,websocket的縮寫, changeOrigin: true,// 是否跨域, pathRewrite:{ //路徑替換"^/api":"" }}
什么是Promise?
是異步編程的一種解決方案,是一個(gè)容器,存放著未來結(jié)束的事件結(jié)果,語法上說是對象,可以獲取異步消息。
三個(gè)狀態(tài):padding(等待)、fulfiled(成功)、reject(失?。?/p>
三個(gè)方法:.then(resolve成功、reject失?。?/p>
.catch(獲取異常信息)
.funally()都會執(zhí)行
解決異步無法返回值,new時(shí)自身同步,調(diào)用方法的時(shí)候異步。
什么是fexl布局?
彈性布局由父容器、子容器構(gòu)成,通常設(shè)置主軸和交叉軸來控制子元素的排序方式。
定義子元素的排列方向:
felx-direction:row|row-reverse|column|column-reverse //row :默認(rèn)值,主軸水平方向 左往右對齊
