【IMWeb秋招訓(xùn)練營】【Day10】面試題總結(jié)

經(jīng)典面試題

37.哪些地方會出現(xiàn)css阻塞,哪些地方會出現(xiàn)js阻塞?
  • js的阻塞特性
    所有瀏覽器在下載JS的時候,會阻止一切其他活動,比如其他資源的下載,內(nèi)容的呈現(xiàn)等等。直到JS下載、解析、執(zhí)行完畢后才開始繼續(xù)并行下載其他資源并呈現(xiàn)內(nèi)容。為了提高用戶體驗(yàn),新一代瀏覽器都支持并行下載JS,但是JS下載仍然會阻塞其它資源的下載(例如圖片,css文件等)。
    由于瀏覽器為了防止出現(xiàn)JS修改DOM樹,重新構(gòu)建DOM樹的情況,所以就會阻塞其他的下載和呈現(xiàn)。
    嵌入JS會阻塞所有內(nèi)容的呈現(xiàn),而外部JS只會阻塞其后內(nèi)容的顯示,2種方式都會阻塞其后資源的下載。也就是說外部樣式不會阻塞外部腳本的加載,但會阻塞外部腳本的執(zhí)行。

  • CSS阻塞
    CSS本來是可以并行下載的,在什么情況下會出現(xiàn)阻塞加載了(在測試觀察中,IE6下CSS都是阻塞加載)。當(dāng)CSS后面跟著嵌入的JS的時候,該CSS就會出現(xiàn)阻塞后面資源下載的情況。而當(dāng)把嵌入JS放到CSS前面,就不會出現(xiàn)阻塞的情況了。
    根本原因:因?yàn)闉g覽器會維持html中css和js的順序,樣式表必須在嵌入的JS執(zhí)行前先加載、解析完。而嵌入的JS會阻塞后面的資源加載,所以就會出現(xiàn)上面CSS阻塞下載的情況。

  • 嵌入JS應(yīng)該放在什么位置?

    • 放在底部,雖然放在底部照樣會阻塞所有呈現(xiàn),但不會阻塞資源下載
    • 如果嵌入JS放在head中,請把嵌入JS放在CSS頭部。
    • 使用defer(只支持IE)
    • 不要在嵌入的JS中調(diào)用運(yùn)行時間較長的函數(shù),如果一定要用,可以用setTimeout來調(diào)用
  • Javascript無阻塞加載具體方式

    • 將腳本放在底部。<link>還是放在head中,用以保證在js加載前,能加載出正常顯示的頁面。<script>標(biāo)簽放在</body>前。
    • 成組腳本。由于每個<script>標(biāo)簽下載時阻塞頁面解析過程,所以限制頁面的<script>總數(shù)也可以改善性能。適用于內(nèi)聯(lián)腳本和外部腳本。
    • 非阻塞腳本。等頁面完成加載后,再加載js代碼。也就是,在window.onload事件發(fā)出后開始下載代碼。
      1. defer屬性。支持IE4和fierfox3.5更高版本瀏覽器
      2. 動態(tài)腳本元素。文檔對象模型(DOM)允許使用js動態(tài)創(chuàng)建HTML的幾乎全部文檔內(nèi)容。代碼如下:
<script>
var script=document.createElement("script");
script.type="text/javascript";
script.src="file.js";
document.getElementsByTagName("head")[0].appendChild(script);
</script>

此技術(shù)的重點(diǎn)在于:無論在何處啟動下載,文件額下載和運(yùn)行都不會阻塞其他頁面處理過程。即使在head里(除了用于下載文件的http鏈接)。

38.CSS選擇符有哪些?哪些屬性可以繼承?優(yōu)先級算法如何計(jì)算?內(nèi)聯(lián)和important哪個優(yōu)先級高?
  • 選擇符

    • id選擇器( # myid)
    • 類選擇器(.myclassname)
    • 標(biāo)簽選擇器(div, h1, p)
    • 相鄰選擇器(h1 + p)
    • 子選擇器(ul > li)
    • 后代選擇器(li a)
    • 通配符選擇器( * )
    • 屬性選擇器(a[rel = "external"])
    • 偽類選擇器(a: hover, li: nth - child)
  • 可繼承的樣式: font-size,font-family,colorul,li,dd,dt;

  • 不可繼承的樣式:border padding margin width height ;

  • 優(yōu)先級

    • 就近原則 :外部樣式 < 內(nèi)部樣式 < 內(nèi)聯(lián)樣式
    • 選擇器優(yōu)先權(quán):內(nèi)聯(lián)樣式(權(quán)重1000)> ID選擇器(權(quán)重100) > class選擇器(權(quán)重10)> html標(biāo)簽
    • !important最大
39.在JavaScript我們會遇到閉包,請你們根據(jù)自己的理解分析一下什么是閉包?閉包有什么好處?使用閉包要注意什么?

傳送門:https://segmentfault.com/a/1190000000652891

40.如何阻止事件冒泡和默認(rèn)事件(程序)
// 阻止事件冒泡
stopPropagation: function(ev) {
    if (ev.stopPropagation) {
        ev.stopPropagation();
    } else {
        ev.cancelBubble = true;
    }
},
// 取消事件的默認(rèn)行為
preventDefault: function(event) {
    if (event.preventDefault) {
        event.preventDefault();
    } else {
        event.returnValue = false;
    }
},

兩道思考題~

19.談?wù)劺厥諜C(jī)制方式及內(nèi)存管理.

內(nèi)存泄漏指任何對象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對象,并計(jì)算引用了每個對象的其他對象的數(shù)量。如果一個對象的引用數(shù)量為 0(沒有其他對象引用過該對象),或?qū)υ搶ο蟮奈┮灰檬茄h(huán)的,那么該對象的內(nèi)存即可回收。
setTimeout 的第一個參數(shù)使用字符串而非函數(shù)的話,會引發(fā)內(nèi)存泄漏。
閉包、控制臺日志、循環(huán)(在兩個對象彼此引用且彼此保留時,就會產(chǎn)生一個循環(huán))

20.開發(fā)過程中遇到的內(nèi)存泄露情況,如何解決的?

之前自己總結(jié)的內(nèi)存泄漏筆記:http://blog.csdn.net/az_77/article/details/74930137

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前端開發(fā)面試知識點(diǎn)大綱: HTML&CSS: 對Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,774評論 0 25
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,152評論 1 92
  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,827評論 1 19
  • 來源:微信公眾號表妹的EXCEL 敲黑板...小葵花媽媽課堂開課啦~~孩子公式總不好,多半是廢了,額,不對,多半是...
    表妹的EXCEL閱讀 1,772評論 0 4
  • 當(dāng)我堂堂正正,坦坦蕩蕩的說,我不再想他了,我有自己努力方向的時候,才是一個真性情的人。
    longlong8612009閱讀 163評論 0 1

友情鏈接更多精彩內(nèi)容