傳智播客旗下品牌:|||||

全國咨詢/投訴熱線:400-618-4000

web前端高頻面試試題含答案_2019最新升級版【超全】

更新時間:2018年11月27日16時05分 來源:傳智播客

本文是傳智播客根據多份關于web前端面試試題抽取的企業面試時用到最多的一些試題,僅供參考。

web前端高頻面試題

怎么去設計一個組件封裝?

1.組件封裝的目的是為了重用,提高開發效率和代碼質量

2。低耦合,單一職責,可復用性,可維護性

3.前端組件化設計思路

js 異步加載的方式

1.渲染引擎遇到 script 標簽會停下來,等到執行完腳本,繼續向下渲染

2.defer 是“渲染完再執行”,async 是“下載完就執行”,defer 如果有多個腳本,會按照在頁面中出現的順序加載,多個async 腳本不能保證加載順序

3.加載 es6模塊的時候設置 type=module,異步加載不會造成阻塞瀏覽器,頁面渲染完再執行,可以同時加上async屬性,異步執行腳本(利用頂層的this等于undefined這個語法點,可以偵測當前代碼是否在 ES6 模塊之中)

css 動畫和 js 動畫的差異

1.代碼復雜度,js 動畫代碼相對復雜一些

2.動畫運行時,對動畫的控制程度上,js 能夠讓動畫,暫停,取消,終止,css動畫不能添加事件

3.動畫性能看,js 動畫多了一個js 解析的過程,性能不如 css 動畫好

XSS 與 CSRF 兩種跨站攻擊

1.xss 跨站腳本攻擊,主要是前端層面的,用戶在輸入層面插入攻擊腳本,改變頁面的顯示,或則竊取網站 cookie,預防方法:不相信用戶的所有操作,對用戶輸入進行一個轉義,不允許 js 對 cookie 的讀寫

2。csrf 跨站請求偽造,以你的名義,發送惡意請求,通過 cookie 加參數等形式過濾

3.我們沒法徹底杜絕攻擊,只能提高攻擊門檻

事件委托,目的,功能,寫法

1.把一個或者一組元素的事件委托到它的父層或者更外層元素上

2.優點,減少內存消耗,動態綁定事件

3。target 是觸發事件的最具體的元素,currenttarget是綁定事件的元素(在函數中一般等于this)

4.JavaScript 事件委托詳解

線程,進程

1.線程是最小的執行單元,進程是最小的資源管理單元

2.一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程

負載均衡

1.當系統面臨大量用戶訪問,負載過高的時候,通常會使用增加服務器數量來進行橫向擴展,使用集群和負載均衡提高整個系統的處理能力

什么是CDN緩存

1。CDN 是一種部署策略,根據不同的地區部署類似nginx 這種服務服務,會緩存靜態資源。前端在項目優化的時候,習慣在講臺資源上加上一個 hash 值,每次更新的時候去改變這個 hash,hash 值變化的時候,服務會去重新取資源

2.(CDN)是一個經策略性部署的整體系統,包括分布式存儲、負載均衡、網絡請求的重定向和內容管理4個要件

閉包的寫法,閉包的作用,閉包的缺點

1.使用閉包的目的——隱藏變量,間接訪問一個變量,在定義函數的詞法作用域外,調用函數

2.閉包的內存泄露,是IE的一個 bug,閉包使用完成之后,收回不了閉包的引用,導致內存泄露

3.閉包造成內存泄露的實驗

跨域問題,誰限制的跨域,怎么解決

1.瀏覽器的同源策略導致了跨域

2.用于隔離潛在惡意文件的重要安全機制

3.[jsonp ,允許 script 加載第三方資源]segmentfault.com/a/11...

4.nginx 反向代理(nginx 服務內部配置 Access-Control-Allow-Origin *)

5.cors 前后端協作設置請求頭部,Access-Control-Allow-Origin 等頭部信息

6.iframe 嵌套通訊,postmessage


javascript 中常見的內存泄露陷阱

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.不要縮放圖片,使用雪碧圖,使用字體圖表(阿里矢量圖庫)

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

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

5.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 任務隊列的執行時機不同

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

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

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

淺拷貝和深拷貝的問題

1。深拷貝和淺拷貝是只針對Object和Array這樣的復雜類型的

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

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

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

開放性問題

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

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

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

3。項目中有沒有遇到什么難點,怎么解決

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

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

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

7。你的學習來源是什么

8.你覺得哪個框架比較好,好在哪里

9。你覺得最難得技術難點是什么

10.你見過的最好的代碼是什么



2019最新整理部分

最新整理部分沒有標注答案,如果有什么問題不清楚,歡迎通過網站在線聯系傳智播客老師,獲得老師的幫助。


CSS篇 

1. CSS 盒子模型,絕對定位和相對定位

2. 清除浮動,什么時候需要清除浮動,清除浮動都有哪些方法

3. 如何保持浮層水平垂直居中

4。 position 和 display 的取值和各自的意思和用法

5。 樣式的層級關系,選擇器優先級,樣式沖突,以及抽離樣式模塊怎么寫,說出思路,有無實踐經驗

6. css3動畫效果屬性,canvas、svg的區別,CSS3中新增偽類舉例

7. px和em和rem的區別,CSS中link 和@import的區別是?

5. 了解過flex嗎?

JavaScript 篇 

JavaScript 基礎

1. JavaScript 里有哪些數據類型,解釋清楚 null 和 undefined,解釋清楚原始數據類型和引用數據類型。比如講一下 1 和 Number(1)的區別

2。 將一下 prototype 是什么東西,原型鏈的理解,什么時候用 prototype

3. 函數里的this什么含義,什么情況下,怎么用。

4。 apply和 call 什么含義,什么區別?什么時候用。(我有篇文章 重點分析過)

5. 數組和對象有哪些原生方法,列舉一下,分別是什么含義,比如連接兩個數組用哪個方法,刪除數組的指定項和重新組裝數組(操作數據的重點)。

6. 怎樣避免全局變量污染?ES5嚴格模式的作用,ES6箭頭函數和ES5普通函數一樣嗎?

JavaScript 的面向對象

1. JS 模塊包裝格式都用過哪些,CommonJS、AMD、CMD。定義一個JS 模塊代碼,最精簡的格式是怎樣。

2. JS 怎么實現一個類。怎么實例化這個類。

3。 理解閉包嗎?請講一講閉包在實際開發中的作用;閉包建議頻繁使用嗎?

4. 說一下了解的js 設計模式,解釋一下單例、工廠、觀察者。

5. ajax 跨域有哪些方法,jsonp 的原理是什么,如果頁面編碼和被請求的資源編碼不一致如何處理?

開源工具 

1)是否了解開源的架構工具 bower、npm、yeoman、gulp、webpack,有無用過,有無寫過,一個 npm 的包里的 package.json 具備的必要的字段都有哪些(名稱、版本號,依賴)

2)github常用不常用,關注過哪些項目

3)會不會用 ps 扣圖,png、jpg、gif 這些圖片格式解釋一下,分別什么時候用。如何優化圖像、圖像格式的區別

4)說一下你常用的命令行工具

5)會不會用git,說上來幾個命令,說一下git和svn的區別,有沒有用git解決過沖突

計算機網絡基礎 

1)說一下HTTP 協議頭字段說上來幾個,是否盡可能詳細的掌握HTTP協議。一次完整的HTTP事務是怎樣的一個過程?

2)cookies 是干嘛的,服務器和瀏覽器之間的 cookies 是怎么傳的,httponly 的 cookies 和可讀寫的 cookie 有什么區別,有無長度限制

請描述一下cookies,sessionStorage和localStorage的區別

3)從敲入 URL 到渲染完成的整個過程,包括 DOM 構建的過程,說的約詳細越好。

4)是否了解Web注入攻擊,說下原理,最常見的兩種攻擊(XSS 和 CSRF)了解到什么程度。

5)是否了解公鑰加密和私鑰加密。如何確保表單提交里的密碼字段不被泄露。驗證碼是干嘛的,是為了解決什么安全問題。

6)編碼常識:文件編碼、URL 編碼、Unicode編碼 什么含義。一個gbk編碼的頁面如何正確引

前端框架 

1) 對 MVC、MVVM的理解

2) vue、angularjs等 相對于 jQuery在開發上有什么優點?

3)前后分離的思想了解嗎?

4)你上一個項目都用到了那些方法優化js的性能?

5)angular的生命周期?

6)說一下你對vue和vuex的使用方法,vue的組件復用機制

考察學習能力和方法

1)你每天必須登錄的網站(前端技術相關)是什么?

2)前端技術方面看過哪些書,有無筆記,都有哪些收獲。

3)收藏了哪些代碼片段?有想過開源自己的代碼嘛?

4)怎么理解前端技術的大趨勢?自己再做哪方面的知識儲備?

5)是否了解或精通其他(后端)的編程語言?

6)做項目有沒有遇到哪些印象深刻的技術攻關,具體遇到什么問題,怎么找答案的,最后怎么解的。

7)對以后自己的前端職業路線,怎么規劃?


猜你喜歡:

最新Web前端開發面試題及參考答案
70道web前端開發面試題(2018版含答案)
傳智播客整理的2018web前端開發最新面試試題(含答案)
2018最新web前端面試題附答案
web前端面試試題(html)(附答案)
傳智播客整理的web前端JavaScript面試試題(附答案)
web前端面試題(匯總)
Web前端入門教程:html+css+JavaScript下載
2019最新网赚器 北京28预测 易发彩注册 为什么网赚这么难呢 海南4+1 上海11选5走势图 极速快三 2019网赚好项目 广发彩票 秒速时时彩