前端筆試題面試題系列(一)

前端開發筆面試常見問題及答案解析

前端開發面試知識點大綱:

 

 

1.請你談談Cookie的弊端

cookie雖然在持久保存客戶端數據提供了方便,分擔了服務器存儲的負擔,但仍是有不少侷限性的。 第一:每一個特定的域名下最多生成20個cookiejavascript

IEOpera 會清理近期最少使用的cookieFirefox會隨機清理cookiecss

cookie的最大大約爲4096字節,爲了兼容性,通常不能超過4095字節。html

IE 提供了一種存儲能夠持久化用戶數據,叫作uerData,從IE5.0就開始支持。每一個數據最多128K,每一個域名下最多1M。這個持久化數據放在緩存中,若是緩存沒有清理,那麼會一直存在。前端

優勢:極高的擴展性和可用性

 

 

缺點:

 

 

2.瀏覽器本地存儲

 

在較高版本的瀏覽器中,js提供了sessionStorageglobalStorage。在HTML5中提供了localStorage來取代globalStoragehtml5

html5中的Web Storage包括了兩種存儲方式:sessionStoragelocalStoragejava

sessionStorage用於本地存儲一個會話(session)中的數據,這些數據只有在同一個會話中的頁面才能訪問而且當會話結束後數據也隨之銷燬。所以sessionStorage不是一種持久化的本地存儲,僅僅是會話級別的存儲。node

localStorage用於持久化的本地存儲,除非主動刪除數據,不然數據是永遠不會過時的。git

3.web storage和cookie的區別

Web Storage的概念和cookie類似,區別是它是爲了更大容量存儲設計的。Cookie的大小是受限的,而且每次你請求一個新的頁面的時候Cookie都會被髮送過去,這樣無形中浪費了帶寬,另外cookie還須要指定做用域,不能夠跨域調用。程序員

除此以外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie須要前端開發者本身封裝setCookie,getCookiegithub

可是Cookie也是不能夠或缺的:Cookie的做用是與服務器進行交互,做爲HTTP規範的一部分而存在 ,而Web Storage僅僅是爲了在本地「存儲」數據而生

瀏覽器的支持除了IE7及如下不支持外,其餘標準瀏覽器都徹底支持(ie及FF需在web服務器裏運行),值得一提的是IE老是辦好事,例如IE七、IE6中的UserData其實就是javascript本地存儲的解決方案。經過簡單的代碼封裝能夠統一到全部的瀏覽器都支持web storage

localStoragesessionStorage都具備相同的操做方法,例如setItem、getItemremoveItem

CSS 相關問題

display:none和visibility:hidden的區別?

 

 

CSS中 link 和@import 的區別是?

 

 

position的absolute與fixed共同點與不一樣點

 

 

介紹一下CSS的盒子模型?

 

 

CSS 選擇符有哪些?哪些屬性能夠繼承?優先級算法如何計算? CSS3新增僞類有那些?

 

 

css定義的權重

 

 

列出display的值,說明他們的做用。position的值, relative和absolute分別是相對於誰進行定位的?

 

 

CSS3有哪些新特性?

 

 

爲何要初始化CSS樣式。

 

 

對BFC規範的理解?

 

 

解釋下 CSS sprites,以及你要如何在頁面或網站中使用它。

 

 

html部分

說說你對語義化的理解?

 

 

Doctype做用? 嚴格模式與混雜模式如何區分?它們有何意義?

 

 

你知道多少種Doctype文檔類型?

 

 

HTML與XHTML——兩者有什麼區別

 

 

常見兼容性問題?

 

 

解釋下浮動和它的工做原理?清除浮動的技巧

 

 

浮動元素引發的問題和解決辦法?

 

解決方法: 使用CSS中的clear:both;屬性來清除元素的浮動可解決二、3問題,對於問題1,添加以下樣式,給父元素添加clearfix樣式:

清除浮動的幾種方法:

 

IE 8如下版本的瀏覽器中的盒模型有什麼不一樣

 

 

DOM操做——怎樣添加、移除、移動、複製、建立和查找節點。

 

 

html5有哪些新特性、移除了那些元素?如何處理HTML5新標籤的瀏覽器兼容問題?如何區分 HTML 和 HTML5?

 

 

iframe的優缺點?

 

 

如何實現瀏覽器內多個標籤頁之間的通訊?

 

 

webSocket如何兼容低瀏覽器?

 

 

線程與進程的區別

 

 

你如何對網站的文件和資源進行優化?

 

 

請說出三種減小頁面加載時間的方法。

 

 

你都使用哪些工具來測試代碼的性能?

 

 

什麼是 FOUC(無樣式內容閃爍)?你如何來避免 FOUC?

 

 

null和undefined的區別?

null是一個表示」無」的對象,轉爲數值時爲0;undefined是一個表示」無」的原始值,轉爲數值時爲NaN

當聲明的變量還未被初始化時,變量的默認值爲undefined。 null用來表示還沒有存在的對象,經常使用來表示函數企圖返回一個不存在的對象。

undefined表示」缺乏值」,就是此處應該有一個值,可是尚未定義。典型用法是:

null表示」沒有對象」,即該處不該該有值。典型用法是:

 

new操做符具體幹了什麼呢?

 

 

JSON 的瞭解?

 

 

js延遲加載的方式有哪些?

 

 

如何解決跨域問題?

 

具體參見:詳解js跨域問題

documen.write和 innerHTML的區別

 

 

.call() 和 .apply() 的區別和做用?

做用:動態改變某個類的某個方法的運行環境。 區別參見:JavaScript學習總結(四)function函數部分

哪些操做會形成內存泄漏?

 

詳見:詳解js變量、做用域及內存

JavaScript中的做用域與變量聲明提高?

詳見:詳解JavaScript函數模式

如何判斷當前腳本運行在瀏覽器仍是node環境中?

 

 

其餘問題?

你遇到過比較難的技術問題是?你是如何解決的?

常使用的庫有哪些?經常使用的前端開發工具?開發過什麼應用或組件?

列舉IE 與其餘瀏覽器不同的特性?

99%的網站都須要被重構是那本書上寫的?

 

 

什麼叫優雅降級和漸進加強?

 

詳見:css學習概括總結(一)

WEB應用從服務器主動推送Data到客戶端有那些方式?

對Node的優勢和缺點提出了本身的見解?

 

 

除了前端之外還了解什麼其它技術麼?你最最厲害的技能是什麼?

你經常使用的開發工具是什麼,爲何?

對前端界面工程師這個職位是怎麼樣理解的?它的前景會怎麼樣?

 

 

你在如今的團隊處於什麼樣的角色,起到了什麼明顯的做用?

你認爲怎樣纔是全端工程師(Full Stack developer)?

介紹一個你最得意的做品吧?

項目中遇到什麼問題?如何解決?

你的優勢是什麼?缺點是什麼?

如何管理前端團隊?

最近在學什麼?能談談你將來3,5年給本身的規劃嗎?

你有哪些性能優化的方法?

詳情請看雅虎14條性能優化原則)。

 

http狀態碼有那些?分別表明是什麼意思?

 

詳情:http://segmentfault.com/blog/trigkit4/1190000000691919

一個頁面從輸入 URL 到頁面加載顯示完成,這個過程當中都發生了什麼?

 

詳情:從輸入 URL 到瀏覽器接收的過程當中發生了什麼事情?

平時如何管理你的項目?

 

 

說說最近最流行的一些東西吧?常去哪些網站?

 

 

javascript對象的幾種建立方式

 

 

javascript繼承的6種方法

 

詳情:JavaScript繼承方式詳解

ajax過程

 

詳情:JavaScript學習總結(七)Ajax和Http狀態字

異步加載和延遲加載

 

 

前端安全問題?

 

 

ie各版本和chrome能夠並行下載多少個資源

 

 

javascript裏面的繼承怎麼實現,如何避免原型鏈上面的對象共享

 

 

grunt, YUI compressor 和 google clojure用來進行代碼壓縮的用法。

 

詳情請見:你須要掌握的前端代碼性能優化工具

Flash、Ajax各自的優缺點,在使用中如何取捨?

 

 

請解釋一下 JavaScript 的同源策略。

概念:同源策略是客戶端腳本(尤爲是Javascript)的重要的安全度量標準。它最先出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不一樣源裝載。

這裏的同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議。 指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。

爲何要有同源限制?

咱們舉例說明:好比一個黑客程序,他利用Iframe把真正的銀行登陸頁面嵌到他的頁面上,當你使用真實的用戶名,密碼登陸時,他的頁面就能夠經過Javascript讀取到你的表單中input中的內容,這樣用戶名,密碼就輕鬆到手了。

什麼是 「use strict」; ? 使用它的好處和壞處分別是什麼?

ECMAscript 5添加了第二種運行模式:」嚴格模式」(strict mode)。顧名思義,這種模式使得Javascript在更嚴格的條件下運行。

設立」嚴格模式」的目的,主要有如下幾個:

注:通過測試IE6,7,8,9均不支持嚴格模式。

缺點: 如今網站的JS 都會進行壓縮,一些文件用了嚴格模式,而另外一些沒有。這時這些原本是嚴格模式的文件,被 merge 後,這個串就到了文件的中間,不只沒有指示嚴格模式,反而在壓縮後浪費了字節。

GET和POST的區別,什麼時候使用POST?

 

 

哪些地方會出現css阻塞,哪些地方會出現js阻塞?

js的阻塞特性:全部瀏覽器在下載JS的時候,會阻止一切其餘活動,好比其餘資源的下載,內容的呈現等等。直到JS下載、解析、執行完畢後纔開始繼續並行下載其餘資源並呈現內容。爲了提升用戶體驗,新一代瀏覽器都支持並行下載JS,可是JS下載仍然會阻塞其它資源的下載(例如.圖片,css文件等)。

因爲瀏覽器爲了防止出現JS修改DOM樹,須要從新構建DOM樹的狀況,因此就會阻塞其餘的下載和呈現。

嵌入JS會阻塞全部內容的呈現,而外部JS只會阻塞其後內容的顯示,2種方式都會阻塞其後資源的下載。也就是說外部樣式不會阻塞外部腳本的加載,但會阻塞外部腳本的執行。

CSS怎麼會阻塞加載了?CSS原本是能夠並行下載的,在什麼狀況下會出現阻塞加載了(在測試觀察中,IE6CSS都是阻塞加載)

CSS後面跟着嵌入的JS的時候,該CSS就會出現阻塞後面資源下載的狀況。而當把嵌入JS放到CSS前面,就不會出現阻塞的狀況了。

根本緣由:由於瀏覽器會維持htmlcssjs的順序,樣式表必須在嵌入的JS執行前先加載、解析完。而嵌入的JS會阻塞後面的資源加載,因此就會出現上面CSS阻塞下載的狀況。

嵌入JS應該放在什麼位置?

 

Javascript無阻塞加載具體方式

  • 將腳本放在底部。<link>仍是放在head中,用以保證在js加載前,能加載出正常顯示的頁面。<script>標籤放在</body>前。
  • 成組腳本:因爲每一個<script>標籤下載時阻塞頁面解析過程,因此限制頁面的<script>總數也能夠改善性能。適用於內聯腳本和外部腳本。
  • 非阻塞腳本:等頁面完成加載後,再加載js代碼。也就是,在window.onload事件發出後開始下載代碼。 (1)defer屬性:支持IE4和fierfox3.5更高版本瀏覽器 (2)動態腳本元素:文檔對象模型(DOM)容許你使用js動態建立HTML的幾乎所有文檔內容。代碼以下:

 

此技術的重點在於:不管在何處啓動下載,文件額下載和運行都不會阻塞其餘頁面處理過程。即便在head裏(除了用於下載文件的http連接)。

閉包相關問題?

詳情請見:詳解js閉包

js事件處理程序問題?

詳情請見:JavaScript學習總結(九)事件詳解

eval是作什麼的?

 

 

寫一個通用的事件偵聽器函數?

 

 

Node.js的適用場景?

 

 

JavaScript原型,原型鏈 ? 有什麼特色?

 

 

頁面重構怎麼操做?

 

 

WEB應用從服務器主動推送Data到客戶端有那些方式?

 

 

事件、IE與火狐的事件機制有什麼區別? 如何阻止冒泡?

 

 

ajax 是什麼?ajax 的交互模型?同步和異步的區別?如何解決跨域問題?

詳情請見:JavaScript學習總結(七)Ajax和Http狀態字

 

js對象的深度克隆

 

 

AMD和CMD 規範的區別?

詳情請見:詳解JavaScript模塊化開發

網站重構的理解?

 

 

如何獲取UA?

 

 

js數組去重

如下是數組去重的三種方法:

  HTTP狀態碼


    100  Continue  繼續,通常在發送post請求時,已發送了http header以後服務端將返回此信息,表示確認,以後發送具體參數信息
    200  OK   正常返回信息
    201  Created  請求成功而且服務器建立了新的資源
    202  Accepted  服務器已接受請求,但還沒有處理
    301  Moved Permanently  請求的網頁已永久移動到新位置。
    302 Found  臨時性重定向。
    303 See Other  臨時性重定向,且老是使用 GET 請求新的 URI。
    304  Not Modified  自從上次請求後,請求的網頁未修改過。
    
    400 Bad Request  服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。
    401 Unauthorized  請求未受權。
    403 Forbidden  禁止訪問。
    404 Not Found  找不到如何與 URI 相匹配的資源。
    
    500 Internal Server Error  最多見的服務器端錯誤。
    503 Service Unavailable 服務器端暫時沒法處理請求(多是過載或維護)。

cache-control
-------------

  網頁的緩存是由HTTP消息頭中的`「Cache-control」`來控制的,常見的取值有`private、no-cache、max-age、must-revalidate`等,默認爲`private`。

  `Expires` 頭部字段提供一個日期和時間,響應在該日期和時間後被認爲失效。容許客戶端在這個時間以前不去檢查(發請求),等同`max-age`的效果。可是若是同時存在,則被`Cache-Control`的`max-age`覆蓋。

    Expires = "Expires" ":" HTTP-date

例如

    Expires: Thu, 01 Dec 1994 16:00:00 GMT (必須是GMT格式)

若是把它設置爲`-1`,則表示當即過時

`Expires`和`max-age`均可以用來指定文檔的過時時間,可是兩者有一些細微差異

    1.Expires在HTTP/1.0中已經定義,Cache-Control:max-age在HTTP/1.1中才有定義,爲了向下兼容,僅使用max-age不夠;
    2.Expires指定一個絕對的過時時間(GMT格式),這麼作會致使至少2個問題:1)客戶端和服務器時間不一樣步致使Expires的配置出現問題。 2)很容易在配置後忘記具體的過時時間,致使過時來臨出現浪涌現象;
    
    3.max-age 指定的是從文檔被訪問後的存活時間,這個時間是個相對值(好比:3600s),相對的是文檔第一次被請求時服務器記錄的Request_time(請求時間)
    
    4.Expires指定的時間能夠是相對文件的最後訪問時間(Atime)或者修改時間(MTime),而max-age相對對的是文檔的請求時間(Atime)
    
    若是值爲no-cache,那麼每次都會訪問服務器。若是值爲max-age,則在過時以前不會重複訪問服務器。

js操做獲取和設置cookie

 //建立cookie     function setCookie(name, value, expires, path, domain, secure) {         var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);         if (expires instanceof Date) {             cookieText += '; expires=' + expires;         }         if (path) {             cookieText += '; expires=' + expires;         }         if (domain) {             cookieText += '; domain=' + domain;         }         if (secure) {             cookieText += '; secure';         }         document.cookie = cookieText;     }          //獲取cookie     function getCookie(name) {         var cookieName = encodeURIComponent(name) + '=';         var cookieStart = document.cookie.indexOf(cookieName);         var cookieValue = null;         if (cookieStart > -1) {             var cookieEnd = document.cookie.indexOf(';', cookieStart);             if (cookieEnd == -1) {                 cookieEnd = document.cookie.length;             }             cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));         }         return cookieValue;     }          //刪除cookie     function unsetCookie(name) {         document.cookie = name + "= ; expires=" + new Date(0);     }

相關文章
相關標籤/搜索