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