1.為什么使用Vuex來管理狀態
2.還有什么多級組件的傳遞方式
$attrs/$listeners:實作多層嵌套傳遞,$attrs包含沒有被props宣告的屬性(不包括class和style),如果某個prop被子組件宣告了(這個屬性已經再子組件的props中),再子組件的$attr會把宣告的prop踢出,并且可以通過v-bind=“$attrs”傳入內部組件,inheritAttrs:false可以關閉自動掛載到根元素上的沒有再props宣告的屬性,
$listeners:包含了父作用域中的(不含.native修飾器的)v-on事件監聽器,它可以通過v-on=“$listeners”傳入內部組件,
Provide/inject:主要解決了跨級組件間的通信問題,祖先通過provider來提供變數,然后再子孫組件中通過inject來注入變數,但是provide和inject系結并不是回應式的,如果傳入例如一個可監聽的物件,那么其物件的屬性還是可回應的,
3.Vue的雙向系結
https://segmentfault.com/a/1190000006599500
mvvm 模式實作雙向系結,view與model不直接進行互動利用VM來實作資料的互動,MVVM 作為資料系結的入口,整合 Observer(資料監聽器,能夠對資料物件的所有屬性進行監聽,如有變動可拿到最新值并通知訂閱者)、Compile (指令決議器,對每個元素節點的指令進行掃描和決議,根據指令模板替換資料,以及系結相應的更新函式)和 Watcher (觀察者,能夠訂閱并收到每個屬性變動的通知,執行指令系結的相應的回呼函式)三者,通過Observer來監聽自己的 model 資料變化,通過 Compile 來決議編譯模板指令,最終利用 Watcher 搭起 Observer 和 Compile 之間的通信橋梁,達到資料變化 -> 視圖更新;視圖互動變化(input) -> 資料 model 變更的雙向系結效果,
4.MVVM是什么演變過來的
https://www.jianshu.com/p/b0aab1ffad93
https://www.jianshu.com/p/ff6de219f988
5.MVC解決了什么問題,為什么前端采用MVC模式
6.狀態碼304,404,500
304 快取未改動,使用原先快取內容,404服務器請求不到頁面資源
500,服務器內部錯誤
7.協商快取和強制快取
https://segmentfault.com/a/1190000008956069
8.ES6的特性
9.面向物件的三大特性
繼承,封裝,多型
封裝:就是當你需要隱藏一些屬性和方法是,就可以將這些屬性和方法封裝起來,然后通過一個外部可以呼叫的特定介面(也可以說是一個公共的方法)進行呼叫,
繼承:原型鏈的繼承,建構式繼承,組合繼承,寄生繼承,寄生組合繼承
多型:多型就是通過對傳遞的引數判斷來執行邏輯,即可實作一種多型處理機制
10.TCP,UDP的區別,http是基于哪個協議的,是哪個層,DNS是哪個層
TCP是面向連接的,而UDP是無連接的,即發送資料前不建立連接
TCP提供可靠的服務,通過TCP傳輸的資料無差錯,不丟失,不重復;UDP盡最大努力交付,不保證可靠交付,可能出現丟包,
TCP是面向位元組流,分組發送;UDP面向報文,并且網路擁塞不會使得發送速率降低
TCP只能是1對1的,UDP支持一對多
http是基于TCP協議的,是應用層,DNS決議也是應用層
11.Js函式提升和變數提升,為什么
js代碼執行前引擎會先進行預編譯,預編譯期間會將變數宣告與函式宣告提升至其對應作用域的最頂端,
在我們的js中,代碼的執行時分兩步走的,1、決議 2、一步一步執行
那么變數提升就是變數宣告會被提升到作用域的最頂上去,也就是該變數不管是在作用域的哪個地方宣告的,都會提升到作作用域的最頂上去,函式宣告式,會將函式的宣告和定義一起提升到作用域的最頂上去,如果函式宣告和變數宣告使用的是同一個變數名稱,函式宣告的優先級高于變數宣告的優先級,
12.寫了一個JS腳本,在瀏覽器上執行,是怎么樣的一個執行程序(任務佇列)
https://www.jianshu.com/p/12b9f73c5a4f
13.Vue-router原理
https://www.jianshu.com/p/4295aec31302
可以通過mode方法選擇路由方式,harsh模式,history模式,
hash模式:在瀏覽器中符號“#”,#以及#后面的字符稱之為hash,用window.location.hash 讀取;
特點:hash雖然在URL中,但不被包括在HTTP請求中;用來指導瀏覽器動作,對服務 端完全無用,hash不會重加載頁面,加載url中指示網頁中的位置,
hash 模式下,僅 hash 符號之前的內容會被包含在請求中,如 http://www.xxx.com,因 此對于后端來說,即使沒有做到對路由的全覆寫,也不會回傳 404 錯誤,
HashHistory.push() **將新路由添加到瀏覽器訪問歷史的堆疊頂
replace()方法與push()方法不同之處在于,它并不是將新路由添加到瀏覽器訪問歷史的堆疊頂,而是替換掉當前的路由
這種 #,后面 hash 值的變化,并不會導致瀏覽器向服務器發出請求,瀏覽器不發出請 求,也就不會重繪頁面,另外每次 hash 值的變化,還會觸發hashchange 這個事件, 通過這個事件我們就可以知道 hash 值發生了哪些變化,然后我們便可以監聽 hashchange來實作更新頁面部分內容的操作:
history模式:通過back(), forward(), go()等方法,我們可以讀取瀏覽器歷史記錄堆疊的信 息,進行各種跳轉操作,且提供了兩個新方法:pushState(),replaceState()可以對 瀏覽器歷史記錄堆疊進行修改,以及popState事件的監聽到狀態變更,這2個方法有個 共同的特點:當呼叫他們修改瀏覽器歷史堆疊后,雖然當前url改變了,但瀏覽器不會立 即發送請求該url,這就為單頁應用前端路由,更新視圖但不重新請求頁面提供了基礎
history 模式下,前端的 URL 必須和實際向后端發起請求的 URL 一致, 如 http://www.xxx.com/items/id,后端如果缺少對 /items/id 的路由處理,將回傳 404 錯誤,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/27636.html
標籤:其他
上一篇:我今天正式入職了
下一篇:樹---重建二叉樹
