8月大前端面試題,新鮮出爐!

1.內存洩露會導致一系列問題,比如:運行緩慢,崩潰,高延遲

2.內存洩露是指你用不到(訪問不到)的變量,依然佔居著內存空間,不能被再次利用起來

3.意外的全局變量,這些都是不會被回收的變量(除非設置 null 或者被重新賦值),特別是那些用來臨時存儲大量信息的變量

4.週期函數一直在運行,處理函數並不會被回收,jq 在移除節點前都會,將事件監聽移除

5.js 代碼中有對 DOM 節點的引用,dom 節點被移除的時候,引用還維持

6.JavaScript 中 4 種常見的內存洩露陷阱

十二、babel把ES6轉成ES5或者ES3之類的原理是什麼

1.它就是個編譯器,輸入語言是ES6+,編譯目標語言是ES5

2.babel 官方工作原理

3.解析:將代碼字符串解析成抽象語法樹

4.變換:對抽象語法樹進行變換操作

5.再建:根據變換後的抽象語法樹再生成代碼字符串

十三、Promise 模擬終止

1.當新對象保持“pending”狀態時,原Promise鏈將會中止執行。

2.return new Promise(()=>{}); // 返回“pending”狀態的Promise對象

3.從如何停掉 Promise 鏈說起(promise內存洩漏問題)

十四、promise 放在try catch裡面有什麼結果

1.Promise 對象的錯誤具有冒泡性質,會一直向後傳遞,直到被捕獲為止,也即是說,錯誤總會被下一個catch語句捕獲

2.當Promise鏈中拋出一個錯誤時,錯誤信息沿著鏈路向後傳遞,直至被捕獲

十五、網站性能優化

1.http 請求方面,減少請求數量,請求體積,對應的做法是,對項目資源進行壓縮,控制項目資源的 dns 解析在2到4個域名,提取公告的樣式,公共的組件,雪碧圖,緩存資源,

2.壓縮資源,提取公共資源壓縮,提取 css ,js 公共方法

3.不要縮放圖片,使用雪碧圖,使用字體圖表(阿里矢量圖庫)

4.使用 CDN,拋開無用的 cookie

5.減少重繪重排,CSS屬性讀寫分離,最好不要用js 修改樣式,dom 離線更新,渲染前指定圖片的大小

6.js 代碼層面的優化,減少對字符串的計算,合理使用閉包,首屏的js 資源加載放在最底部

十六、js 自定義事件實現

1.原生提供了3個方法實現自定義事件

2.createEvent,設置事件類型,是 html 事件還是 鼠標事件

3.initEvent 初始化事件,事件名稱,是否允許冒泡,是否阻止自定義事件

4.dispatchEvent 觸發事件

十七、angular 雙向數據綁定與vue數據的雙向數據綁定

1.二者都是 MVVM 模式開發的典型代表

2.angular 是通過髒檢測實現,angular 會將 UI 事件,請求事件,settimeout 這類延遲,的對象放入到事件監測的髒隊列,當數據變化的時候,觸發 $diget 方法進行數據的更新,視圖的渲染

3.vue 通過數據屬性的數據劫持和發佈訂閱的模式實現,大致可以理解成由3個模塊組成,observer 完成對數據的劫持,compile 完成對模板片段的渲染,watcher 作為橋樑連接二者,訂閱數據變化及更新視圖

十八、get與post 通訊的區別

1.Get 請求能緩存,Post 不能

2.Post 相對 Get 安全一點點,因為Get 請求都包含在 URL 裡,且會被瀏覽器保存歷史紀錄,Post 不會,但是在抓包的情況下都是一樣的。

3.Post 可以通過 request body來傳輸比 Get 更多的數據,Get 沒有這個技術

4.URL有長度限制,會影響 Get 請求,但是這個長度限制是瀏覽器規定的,不是 RFC 規定的

5.Post 支持更多的編碼類型且不對數據類型限制

十九、有沒有去研究webpack的一些原理和機制,怎麼實現的

1.解析webpack配置參數,合併從shell傳入和webpack.config.js文件裡配置的參數,生產最後的配置結果。

2.註冊所有配置的插件,好讓插件監聽webpack構建生命週期的事件節點,以做出對應的反應。

3.從配置的entry入口文件開始解析文件構建AST語法樹,找出每個文件所依賴的文件,遞歸下去。

4.在解析文件遞歸的過程中根據文件類型和loader配置找出合適的loader用來對文件進行轉換。

5.遞歸完後得到每個文件的最終結果,根據entry配置生成代碼塊chunk。

6.輸出所有chunk到文件系統。

二十、ES6模塊與CommonJS模塊的差異

1.CommonJs 模塊輸出的是一個值的拷貝,ES6模塊輸出的是一個值的引用

2.CommonJS 模塊是運行時加載,ES6模塊是編譯時輸出接口

3.ES6輸入的模塊變量,只是一個符號鏈接,所以這個變量是隻讀的,對它進行重新賦值就會報錯

二十一、模塊加載AMD,CMD,CommonJS Modules/2.0 規範

1.這些規範的目的都是為了 JavaScript 的模塊化開發,特別是在瀏覽器端的

2.對於依賴的模塊,AMD 是提前執行,CMD 是延遲執行

3.CMD 推崇依賴就近,AMD 推崇依賴前置

二十二、Node 事件循環,js 事件循環差異

1.Node.js 的事件循環分為6個階段

2.瀏覽器和Node 環境下,microtask 任務隊列的執行時機不同

Node.js中,microtask 在事件循環的各個階段之間執行

瀏覽器端,microtask 在事件循環的 macrotask 執行完之後執行

3.遞歸的調用process.nextTick()會導致I/O starving,官方推薦使用setImmediate()

二十三、淺拷貝和深拷貝的問題

1.深拷貝和淺拷貝是隻針對Object和Array這樣的複雜類型的

2.也就是說a和b指向了同一塊內存,所以修改其中任意的值,另一個值都會隨之變化,這就是淺拷貝

3.淺拷貝, ”Object.assign() 方法用於將所有可枚舉的屬性的值從一個或多個源對象複製到目標對象。它將返回目標對象

4.深拷貝,JSON.parse()和JSON.stringify()給了我們一個基本的解決辦法。但是函數不能被正確處理

開放性問題

開放性問題主要是考察候選人業務積累,是否有自己的思考,思考問題的方式,沒有標準答案。不過有些問題挺刁的,哈哈哈哈,比如:" 你見過的最好的代碼是什麼? "總之提前準備下沒錯。

先自我介紹一下,說一下項目的技術棧,以及項目中遇到的一些問題

從整體中,看你對項目的認識,框架的認識和自己思考

項目中有沒有遇到什麼難點,怎麼解決

如果你在創業公司你怎麼從0開始做(選擇什麼框架,選擇什麼構建工具)

說一下你項目中用到的技術棧,以及覺得得意和出色的點,以及讓你頭疼的點,怎麼解決的

一個業務場景,面對產品不斷迭代,以及需求的變動該怎麼應對,具體技術方案實現

你的學習來源是什麼

你覺得哪個框架比較好,好在哪裡

你覺得最難得技術難點是什麼

你見過的最好的代碼是什麼

簡單的總結了一下,還有一些是小編添加進去的,希望對大家有所幫助,祝願各位都能面試成功!


分享到:


相關文章: