提升經(jīng)驗值,前端面試盡在掌控中
來源:
奇酷教育 發(fā)表于:
Q:如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信?A:調(diào)用localstorge、cookies等本地存儲方式Q:線程與進程的區(qū)別?A:一個程序至少有一個進程,一個進
Q:如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信?
A:調(diào)用localstorge、cookies等本地存儲方式
Q:線程與進程的區(qū)別?
A:一個程序至少有一個進程,一個進程至少有一個線程。
線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。
另外,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率。
線程在執(zhí)行過程中與進程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應(yīng)用,來實現(xiàn)進程的調(diào)度和管理以及資源分配。這就是進程和線程的重要區(qū)別。
Q:你如何對網(wǎng)站的文件和資源進行優(yōu)化?
A:期待的解決方案包括:
文件合并
文件最小化/文件壓縮
使用 CDN 托管
緩存的使用(多個域名來提供緩存)
其他
Q:請說出三種減少頁面加載時間的方法?
A:1.優(yōu)化圖片;
2.圖像格式的選擇(GIF:提供的顏色較少,可用在一些對顏色要求不高的地方);
3.優(yōu)化CSS(壓縮合并css,如margin-top,margin-left...) ;
4.網(wǎng)址后加斜杠(如www.campr.com/目錄,會判斷這個“目錄是什么文件類型,或者是目錄);
5.標(biāo)明高度和寬度(如果瀏覽器沒有找到這兩個參數(shù),它需要一邊下載圖片一邊計算大小,如果圖片很多,瀏覽器需要不斷地調(diào)整頁面。這不但影響速度,也影響瀏覽體驗;
當(dāng)瀏覽器知道了高度和寬度參數(shù)后,即使圖片暫時無法顯示,頁面上也會騰出圖片的空位,然后繼續(xù)加載后面的內(nèi)容。從而加載時間快了,瀏覽體驗也更好了);
6.減少http請求(合并文件,合并圖片);
Q:你都使用哪些工具來測試代碼的性能?
A:Profiler, JSPerf(http://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout), Dromaeo
Q:什么是 FOUC(無樣式內(nèi)容閃爍)?你如何來避免 FOUC?
A: FOUC - Flash Of Unstyled Content 文檔樣式閃爍
<style type="text/css" media="all">@import "../fouc.css";</style>
而引用CSS文件的@import就是造成這個問題的罪魁禍首。IE會先加載整個HTML文檔的DOM,然后再去導(dǎo)入外部的CSS文件,因此,在頁面DOM加載完成到CSS導(dǎo)入完成中間會有一段時間頁面上的內(nèi)容是沒有樣式的,這段時間的長短跟網(wǎng)速,電腦速度都有關(guān)系。
解決方法簡單的出奇,只要在<head>之間加入一個<link>或者<script>元素就可以了。
Q:null和undefined的區(qū)別?
A:null是一個表示"無"的對象,轉(zhuǎn)為數(shù)值時為0;undefined是一個表示"無"的原始值,轉(zhuǎn)為數(shù)值時為NaN。
當(dāng)聲明的變量還未被初始化時,變量的默認值為undefined。 null用來表示尚未存在的對象,常用來表示函數(shù)企圖返回一個不存在的對象。
undefined表示"缺少值",就是此處應(yīng)該有一個值,但是還沒有定義。典型用法是:
(1)變量被聲明了,但沒有賦值時,就等于undefined。
(2) 調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數(shù)沒有返回值時,默認返回undefined。
null表示"沒有對象",即該處不應(yīng)該有值。典型用法是:
(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。
(2) 作為對象原型鏈的終點。
Q:new操作符具體干了什么呢?
A: 1、創(chuàng)建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數(shù)的原型。
2、屬性和方法被加入到 this 引用的對象中。
3、新創(chuàng)建的對象由 this 所引用,并且最后隱式的返回 this 。
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
Q:js延遲加載的方式有哪些?
A:defer和async、動態(tài)創(chuàng)建DOM方式(創(chuàng)建script,插入到DOM中,加載完畢后callBack)、按需異步載入js
Q:如何解決跨域問題?
A:jsonp、 document.domain+iframe、window.name、window.postMessage、服務(wù)器上設(shè)置代理頁面
jsonp的原理是動態(tài)插入script標(biāo)簽