更新時間:2018年11月26日13時21分 來源:傳智播客 瀏覽次數(shù):
web前端面試題(匯總)
一、理論知識
1.1、講講輸入完網(wǎng)址按下回車,到看到網(wǎng)頁這個過程中發(fā)生了什么
a. 域名解析
b. 發(fā)起TCP的3次握手
c. 建立TCP連接后發(fā)起http請求
d. 服務(wù)器端響應(yīng)http請求,瀏覽器得到html代碼
e. 瀏覽器解析html代碼,并請求html代碼中的資源
f. 瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給用戶
參考《一次完整的HTTP事務(wù)是怎樣一個過程》
1.2、談?wù)勀銓η岸诵阅軆?yōu)化的理解
a. 請求數(shù)量:合并腳本和樣式表,CSS Sprites,拆分初始化負(fù)載,劃分主域
b. 請求帶寬:開啟GZip,精簡JavaScript,移除重復(fù)腳本,圖像優(yōu)化,將icon做成字體
c. 緩存利用:使用CDN,使用外部JavaScript和CSS,添加Expires頭,減少DNS查找,配置ETag,使AjaX可緩存
d. 頁面結(jié)構(gòu):將樣式表放在頂部,將腳本放在底部,盡早刷新文檔的輸出
e. 代碼校驗:避免CSS表達(dá)式,避免重定向
參考《前端工程與性能優(yōu)化》
1.3、前端 MV*框架的意義
早期前端都是比較簡單,基本以頁面為工作單元,內(nèi)容以瀏覽型為主,也偶爾有簡單的表單操作,基本不太需要框架.
隨著 AJAX 的出現(xiàn),Web2.0的興起,人們可以在頁面上可以做比較復(fù)雜的事情了,然后前端框架才真正出現(xiàn)了。
如果是頁面型產(chǎn)品,多數(shù)確實不太需要它,因為頁面中的 JavaScript代碼,處理交互的絕對遠(yuǎn)遠(yuǎn)超過處理模型的,但是如果是應(yīng)用軟件類產(chǎn)品,這就太需要了。
長期做某個行業(yè)軟件的公司,一般都會沉淀下來一些業(yè)務(wù)組件,主要體現(xiàn)在數(shù)據(jù)模型、業(yè)務(wù)規(guī)則和業(yè)務(wù)流程,這些組件基本都存在于后端,在前端很少有相應(yīng)的組織。
從協(xié)作關(guān)系上講,很多前端開發(fā)團(tuán)隊每個成員的職責(zé)不是很清晰,有了前端的 MV框架,這個狀況會大有改觀。
之所以感受不到 MV*框架的重要性,是因為Model部分代碼較少,View的相對多一些。如果主要在操作View和Controller,那當(dāng)然 jQuery 這類庫比較好用了。
參考《前端 MV*框架的意義》
1.4、請簡述盒模型
IE6盒子模型與W3C盒子模型。
文檔中的每個元素被描繪為矩形盒子。盒子有四個邊界:外邊距邊界margin, 邊框邊界border, 內(nèi)邊距邊界padding與內(nèi)容邊界content。
CSS3中有個box-sizing屬性可以控制盒子的計算方式,
content-box:padding和border不被包含在定義的width和height之內(nèi)。對象的實際寬度等于設(shè)置的width值和border、padding之和。(W3C盒子模型)
border-box:padding和border被包含在定義的width和height之內(nèi)。對象的實際寬度就等于設(shè)置的width值。(IE6盒子模型)
參考《盒模型》
1.5、請你談?wù)凜ookie的弊端
a. 每個特定的域名下最多生成的cookie個數(shù)有限制
b. IE和Opera 會清理近期最少使用的cookie,F(xiàn)irefox會隨機清理cookie
c. cookie的最大大約為4096字節(jié),為了兼容性,一般不能超過4095字節(jié)
d. 安全性問題。如果cookie被人攔截了,那人就可以取得所有的session信息。
1.6、瀏覽器本地存儲
在HTML5中提供了sessionStorage和localStorage.
sessionStorage用于本地存儲一個會話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個會話中的頁面才能訪問并且當(dāng)會話結(jié)束后數(shù)據(jù)也隨之銷毀,是會話級別的存儲。
localStorage用于持久化的本地存儲,除非主動刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會過期的。
1.7、web storage和cookie的區(qū)別
a. Cookie的大小是受限的
b. 每次你請求一個新的頁面的時候Cookie都會被發(fā)送過去,這樣無形中浪費了帶寬
c. cookie還需要指定作用域,不可以跨域調(diào)用
d. Web Storage擁有setItem,getItem等方法,cookie需要前端開發(fā)者自己封裝setCookie,getCookie
e. Cookie的作用是與服務(wù)器進(jìn)行交互,作為HTTP規(guī)范的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲”數(shù)據(jù)而生
f. IE7、IE6中的UserData通過簡單的代碼封裝可以統(tǒng)一到所有的瀏覽器都支持web storage
1.9、線程與進(jìn)程的區(qū)別
a. 一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程
b. 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高
c. 進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率
d. 每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制
e. 多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應(yīng)用,來實現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配
1.10、請說出三種減少頁面加載時間的方法
a. 盡量減少頁面中重復(fù)的HTTP請求數(shù)量
b. 服務(wù)器開啟gzip壓縮
c. css樣式的定義放置在文件頭部
d. Javascript腳本放在文件末尾
e. 壓縮合并Javascript、CSS代碼
f. 使用多域名負(fù)載網(wǎng)頁內(nèi)的多個文件、圖片
參考《減低頁面加載時間的方法》
1.11、你都使用哪些工具來測試代碼的性能?
JSPerf, Dromaeo
1.12、你遇到過比較難的技術(shù)問題是?你是如何解決的?
1.13、常使用的庫有哪些?常用的前端開發(fā)工具?開發(fā)過什么應(yīng)用或組件?
1.14、列舉IE與其他瀏覽器不一樣的特性?
a. IE的排版引擎是Trident (又稱為MSHTML)
b. Trident內(nèi)核曾經(jīng)幾乎與W3C標(biāo)準(zhǔn)脫節(jié)(2005年)
c. Trident內(nèi)核的大量 Bug等安全性問題沒有得到及時解決
d. JS方面,有很多獨立的方法,例如綁定事件的attachEvent、創(chuàng)建事件的createEventObject等
e. CSS方面,也有自己獨有的處理方式,例如設(shè)置透明,低版本IE中使用濾鏡的方式
參考《Trident(排版引擎)》
1.15、什么叫優(yōu)雅降級和漸進(jìn)增強?
漸進(jìn)增強 progressive enhancement:
針對低版本瀏覽器進(jìn)行構(gòu)建頁面,保證最基本的功能,然后再針對高級瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗。
優(yōu)雅降級 graceful degradation:
一開始就構(gòu)建完整的功能,然后再針對低版本瀏覽器進(jìn)行兼容。
區(qū)別:
a. 優(yōu)雅降級是從復(fù)雜的現(xiàn)狀開始,并試圖減少用戶體驗的供給
b. 漸進(jìn)增強則是從一個非?;A(chǔ)的,能夠起作用的版本開始,并不斷擴充,以適應(yīng)未來環(huán)境的需要
c. 降級(功能衰減)意味著往回看;而漸進(jìn)增強則意味著朝前看,同時保證其根基處于安全地帶
參考《優(yōu)雅降級和漸進(jìn)增強的區(qū)別》
1.16、WEB應(yīng)用從服務(wù)器主動推送Data到客戶端有那些方式?
a. html5 websoket
b. WebSocket 通過 Flash
c. XHR長時間連接
d. XHR Multipart Streaming
e. 不可見的Iframe
f.