天天看點

前端面試題七

1. slot的作用,何時會用到它

用法:<slot name="ddd"></slot>放置你需要插入内容的地方

場景:元件中插入内容,如果不使用<slot>則元件中不會顯示插入的内容

2. ES6 module和commonjs的差別

CommonJS

  1. 對于基本資料類型,屬于複制。即會被子產品緩存。同時,在另一個子產品可以對該子產品輸出的變量重新指派。
  2. 對于複雜資料類型,屬于淺拷貝。由于兩個子產品引用的對象指向同一個記憶體空間,是以對該子產品的值做修改時會影響另一個子產品。
  3. 當使用require指令加載某個子產品時,就會運作整個子產品的代碼。
  4. 當使用require指令加載同一個子產品時,不會再執行該子產品,而是取到緩存之中的值。也就是說,CommonJS子產品無論加載多少次,都隻會在第一次加載時運作一次,以後再加載,就傳回第一次運作的結果,除非手動清除系統緩存。
  5. 循環加載時,屬于加載時執行。即腳本代碼在require的時候,就會全部執行。一旦出現某個子產品被"循環加載",就隻輸出已經執行的部分,還未執行的部分不會輸出。

ES6子產品

  1. ES6子產品中的值屬于【動态隻讀引用】。
  2. 對于隻讀來說,即不允許修改引入變量的值,import的變量是隻讀的,不論是基本資料類型還是複雜資料類型。當子產品遇到import指令時,就會生成一個隻讀引用。等到腳本真正執行時,再根據這個隻讀引用,到被加載的那個子產品裡面去取值。
  3. 對于動态來說,原始值發生變化,import加載的值也會發生變化。不論是基本資料類型還是複雜資料類型。
  4. 循環加載時,ES6子產品是動态引用。隻要兩個子產品之間存在某個引用,代碼就能夠執行。

3. vue.$nextTick作用

應用場景:常用的場景是在進行擷取資料後,需要對新視圖進行下一步操作或者其他操作時,發現擷取不到dom。因為指派操作隻完成了資料模型的改變并沒有完成視圖更新。

在created()鈎子函數執行的時候DOM 其實并未進行任何渲染,而此時進行DOM操作無異于徒勞,是以此處一定要将DOM操作的js代碼放進Vue.nextTick()的回調函數中。

與之對應的就是​

​mounted()​

​鈎子函數,因為該鈎子函數執行時所有的DOM挂載和渲染都已完成,此時在該鈎子函數中進行任何DOM操作都不會有問題 。

在資料變化後要執行的某個操作,而這個操作需要使用随資料改變而改變的DOM結構的時候,這個操作都應該放進​

​Vue.nextTick()​

​的回調函數中。

4. 前端前沿知識

5. vue的diff​​算法​​,具體是如何比較新舊vnode的,以及節點的比較是深度優先還是廣度優先

6. 實作String.prototype.indexOf,以及優化

function indexOf(tar){
  for(let i=0;i<str.length;i++){
        if(str[i]==tar)
            return i
    }
    if(i>=str.length)
         return -1
}      

7. WecSocket應用場景

WebSocket:它是HTML5一種新的協定。它實作了浏覽器和伺服器之間的全雙工通信,能夠更好的節省伺服器資源和帶寬并達到實時通訊,同HTTP一樣通過TCP來傳輸資料,但是它和HTTP最大的不同是:

  • WebSocket是一種雙向通信協定,在建立連接配接後,WebSocket伺服器和Browser/Client Agent 都能主動向對方發送或接受資料,就像Socket一樣。
  • WebSocket需要類似TCP用戶端和服務端通過握手連接配接,連接配接成功後才能互相通信。

在 WebSocket API 中,浏覽器和伺服器隻需要做​

​一個握手的動作,​

​然後,浏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。

其他特點包括:

1.建立在 TCP 協定之上,伺服器端的實作比較容易。

2.與 HTTP 協定有着良好的相容性。預設端口也是80和443,并且握手階段采用 HTTP 協定,是以握手時不容易屏蔽,能通過各種 HTTP 代理伺服器。

3.資料格式比較輕量,性能開銷小,通信高效。

4.可以發送文本,也可以發送二進制資料。

5.沒有同源限制,用戶端可以與任意伺服器通信。

6.協定辨別符是ws(如果加密,則為wss),伺服器網址就是 URL。

前端面試題七
前端面試題七

 應用場景:

社交聊天、彈幕、多玩家遊戲、協同編輯、股票基金實時報價、體育實況更新、視訊會議/聊天、基于位置的應用、線上教育

8. 遞歸和疊代的差別,兩者可以互相轉換嗎

遞歸(recursion):遞歸常被用來描述以自相似方法重複事物的過程,在數學和計算機科學中,指的是在函數定義中使用函數自身的方法。(A調用A)

疊代(iteration):重複回報過程的活動,每一次疊代的結果會作為下一次疊代的初始值。(A重複調用B)

理論上遞歸和疊代可以互相轉換,但實際從算法結構來說,遞歸聲明的結構并不總能轉換為疊代結構(原因有待研究)。疊代可以轉換為遞歸,但遞歸不一定能轉換為疊代。

前端面試題七

9. webpack相關,提取common chunk,tree shaking是如何實作的  

10. 對稱加密和非對稱加密的差別

對稱加密:對稱加密指的就是加密和解密使用同一個秘鑰,是以叫做對稱加密。對稱加密隻有一個秘鑰,作為私鑰。

常見的對稱加密算法:DES,AES,3DES等等。

非對稱加密指的是:加密和解密使用不同的秘鑰,一把作為公開的公鑰,另一把作為私鑰。公鑰加密的資訊,隻有私鑰才能解密。私鑰加密的資訊,隻有公鑰才能解密。

常見的非對稱加密算法:RSA,ECC

(1)對稱加密算法相比非對稱加密算法來說,加解密的效率要高得多。但是缺陷在于對于秘鑰的管理上,以及在非安全信道中通訊時,密鑰交換的安全性不能保障。是以在實際的網絡環境中,會将兩者混合使用.

(2)對稱加密:加密解密用同一個密鑰,被黑客攔截不安全

(3)非對稱加密:公鑰加密,私鑰解密;公鑰可以公開給别人進行加密,私鑰永遠在自己手裡,非常安全,黑客攔截也沒用,因為私鑰未公開。著名的RSA加密算法用的就是非對稱加密。

11. 程序和線程的差別

根本差別:程序是作業系統資源配置設定的基本機關,而線程是任務排程和執行的基本機關

在開銷方面:每個程序都有獨立的代碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;線程可以看做輕量級的程序,同一類線程共享代碼和資料空間,每個線程都有自己獨立的運作棧和程式計數器(PC),線程之間切換的開銷小。

所處環境:在作業系統中能同時運作多個程序(程式);而在同一個程序(程式)中有多個線程同時執行(通過CPU排程,在每個時間片中隻有一個線程執行)

記憶體配置設定方面:系統在運作的時候會為每個程序配置設定不同的記憶體空間;而對線程而言,除了CPU外,系統不會為線程配置設定記憶體(線程所使用的資源來自其所屬程序的資源),線程組之間隻能共享資源。

包含關系:沒有線程的程序可以看做是單線程的,如果一個程序内有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是程序的一部分,是以線程也被稱為輕權程序或者輕量級程序。

12. 數組和連結清單的差別是什麼

數組:數組存儲的時候需要一個連續的空間,數組要預留白間,在使用前要申請占記憶體的大小,可能會浪費空間。

   插入資料和删除資料效率低,插入資料時,這個位置後面的資料在記憶體中都要後移。

   随機讀取的效率很高。因為數組是連續的,知道每一個資料的記憶體位址,可以直接找到給資料的位址。

   并且不利于擴充,數組空間不夠時,還要重新定義數組。

連結清單:在記憶體中可以存在任何地方,不需要空間連續。

   每一個資料都儲存了下一個資料的位址,通過這個位址找到下一個資料。

   增加資料和删除資料很容易。

   查找資料時效率低。

   不指定大小,擴充友善。

上一篇: Vue-建立項目