web前端常見面試題

轉載自:http://www.javashuo.com/article/p-sssacgbs-bk.htmlphp

1、理論知識css

1.一、講講輸入完網址按下回車,到看到網頁這個過程當中發生了什麼html

a. 域名解析前端

b. 發起TCP的3次握手html5

c. 創建TCP鏈接後發起http請求git

d. 服務器端響應http請求,瀏覽器獲得html代碼程序員

e. 瀏覽器解析html代碼,並請求html代碼中的資源github

f. 瀏覽器對頁面進行渲染呈現給用戶web

參考《一次完整的HTTP事務是怎樣一個過程》後端

1.二、談談你對前端性能優化的理解

a. 請求數量:合併腳本和樣式表,CSS Sprites,拆分初始化負載,劃分主域

b. 請求帶寬:開啓GZip,精簡JavaScript,移除重複腳本,圖像優化,將icon作成字體

c. 緩存利用:使用CDN,使用外部JavaScript和CSS,添加Expires頭,減小DNS查找,配置ETag,使AjaX可緩存

d. 頁面結構:將樣式表放在頂部,將腳本放在底部,儘早刷新文檔的輸出

e. 代碼校驗:避免CSS表達式,避免重定向

參考《前端工程與性能優化》

1.三、前端 MV*框架的意義

早期前端都是比較簡單,基本以頁面爲工做單元,內容以瀏覽型爲主,也偶爾有簡單的表單操做,基本不太須要框架.

隨着 AJAX 的出現,Web2.0的興起,人們能夠在頁面上能夠作比較複雜的事情了,而後前端框架才真正出現了。

若是是頁面型產品,多數確實不太須要它,由於頁面中的 JavaScript代碼,處理交互的絕對遠遠超過處理模型的,可是若是是應用軟件類產品,這就太須要了。

長期作某個行業軟件的公司,通常都會沉澱下來一些業務組件,主要體如今數據模型、業務規則和業務流程,這些組件基本都存在於後端,在前端不多有相應的組織。

從協做關係上講,不少前端開發團隊每一個成員的職責不是很清晰,有了前端的 MV框架,這個情況會大有改觀。

之因此感覺不到 MV*框架的重要性,是由於Model部分代碼較少,View的相對多一些。若是主要在操做View和Controller,那固然 jQuery 這類庫比較好用了。

參考《前端 MV*框架的意義》

1.四、請簡述盒模型

IE6盒子模型與W3C盒子模型。

文檔中的每一個元素被描繪爲矩形盒子。盒子有四個邊界:外邊距邊界margin, 邊框邊界border, 內邊距邊界padding與內容邊界content。

CSS3中有個box-sizing屬性能夠控制盒子的計算方式,

content-box:padding和border不被包含在定義的width和height以內。對象的實際寬度等於設置的width值和border、padding之和。(W3C盒子模型)

border-box:padding和border被包含在定義的width和height以內。對象的實際寬度就等於設置的width值。(IE6盒子模型)

參考《盒模型》

1.五、請你談談Cookie的弊端

a. 每一個特定的域名下最多生成的cookie個數有限制

b. IE和Opera 會清理近期最少使用的cookie,Firefox會隨機清理cookie

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

d. 安全性問題。若是cookie被人攔截了,那人就能夠取得全部的session信息。

1.六、瀏覽器本地存儲

在HTML5中提供了sessionStorage和localStorage.

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

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

 

1.七、web storage和cookie的區別

a. Cookie的大小是受限的

b. 每次你請求一個新的頁面的時候Cookie都會被髮送過去,這樣無形中浪費了帶寬

c. cookie還須要指定做用域,不能夠跨域調用

d. Web Storage擁有setItem,getItem等方法,cookie須要前端開發者本身封裝setCookie,getCookie

e. Cookie的做用是與服務器進行交互,做爲HTTP規範的一部分而存在 ,而Web Storage僅僅是爲了在本地「存儲」數據而生

f. IE七、IE6中的UserData經過簡單的代碼封裝能夠統一到全部的瀏覽器都支持web storage

 

 

 

1.九、線程與進程的區別

a. 一個程序至少有一個進程,一個進程至少有一個線程

b. 線程的劃分尺度小於進程,使得多線程程序的併發性高

c. 進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率

d. 每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制

e. 多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配

 

1.十、請說出三種減小頁面加載時間的方法

a. 儘可能減小頁面中重複的HTTP請求數量

b. 服務器開啓gzip壓縮

c. css樣式的定義放置在文件頭部

d. Javascript腳本放在文件末尾

e. 壓縮合並Javascript、CSS代碼

f. 使用多域名負載網頁內的多個文件、圖片

參考《減低頁面加載時間的方法》

 

1.十一、你都使用哪些工具來測試代碼的性能?

JSPerf, Dromaeo

 

1.十二、你遇到過比較難的技術問題是?你是如何解決的?

 

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

 

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

a. IE的排版引擎是Trident (又稱爲MSHTML)

b. Trident內核曾經幾乎與W3C標準脫節(2005年)

c. Trident內核的大量 Bug等安全性問題沒有獲得及時解決

d. JS方面,有不少獨立的方法,例如綁定事件的attachEvent、建立事件的createEventObject等

e. CSS方面,也有本身獨有的處理方式,例如設置透明,低版本IE中使用濾鏡的方式

參考《Trident(排版引擎)》

 

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

漸進加強 progressive enhancement:

針對低版本瀏覽器進行構建頁面,保證最基本的功能,而後再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。

優雅降級 graceful degradation:

一開始就構建完整的功能,而後再針對低版本瀏覽器進行兼容。

區別:

a. 優雅降級是從複雜的現狀開始,並試圖減小用戶體驗的供給

b. 漸進加強則是從一個很是基礎的,可以起做用的版本開始,並不斷擴充,以適應將來環境的須要

c. 降級(功能衰減)意味着往回看;而漸進加強則意味着朝前看,同時保證其根基處於安全地帶

參考《優雅降級和漸進加強的區別》

 

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

a. html5 websoket

b. WebSocket 經過 Flash

c. XHR長時間鏈接

d. XHR Multipart Streaming

e. 不可見的Iframe

f. <script>標籤的長時間鏈接(可跨域)

 

1.1七、對前端界面工程師這個職位是怎麼樣理解的?

a. 前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好

b. 參與項目,快速高質量完成實現效果圖,精確到1px;

c. 與團隊成員,UI設計,產品經理的溝通;

d. 作好的頁面結構,頁面重構和用戶體驗;

e. 處理hack,兼容、寫出優美的代碼格式;

f. 針對服務器的優化、擁抱最新前端技術。

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

1.1九、你的優勢是什麼?缺點是什麼?

1.20、如何管理前端團隊?

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

1.2二、平時如何管理你的項目?

a. 先期團隊必須肯定好全局樣式(globe.css),編碼模式(utf-8) 等;

b. 編寫習慣必須一致(例如都是採用繼承式的寫法,單樣式都寫成一行);

c. 標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方);

d. 頁面進行標註(例如 頁面 模塊 開始和結束);

e. CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css);

f. JS 分文件夾存放 命名以該JS功能爲準的英文翻譯。

g. 圖片採用整合的 images.png png8 格式文件使用 儘可能整合在一塊兒使用方便未來的管理

 

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

CSDN、SegmentFault、php.net、MDN、css參考手冊、iconfont、

underscore、github、Bootstrap、W3Shool、W3Cplus、caniuse

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

Flash:

a. Flash適合處理多媒體、矢量圖形、訪問機器

b. 對CSS、處理文本上不足,不容易被搜索

Ajax:

a. Ajax對CSS、文本支持很好,支持搜索

b. 多媒體、矢量圖形、機器訪問不足

共同點:

a. 與服務器的無刷新傳遞消息

b. 能夠檢測用戶離線和在線狀態

c. 操做DOM

1.2五、請解釋一下 JavaScript 的同源策略

同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議。

指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。

 

1.2六、AMD和CMD 規範的區別?

AMD 提早執行依賴 - 儘早執行,requireJS 是它的實現

CMD 按需執行依賴 - 懶執行,seaJS 是它的實現

參考《SeaJS與RequireJS最大的區別》、《與 RequireJS 的異同》

 

1.2七、網站重構的理解

重構:在不改變外部行爲的前提下,簡化結構、添加可讀性,而在網站前端保持一致的行爲。

a. 使網站前端兼容於現代瀏覽器(針對於不合規範的CSS、如對IE6有效的)

b. 對於移動平臺的優化,針對於SEO進行優化

c. 減小代碼間的耦合,讓代碼保持彈性

d. 壓縮或合併JS、CSS、image等前端資源

 

1.2八、瀏覽器的內核分別是什麼?

IE瀏覽器的內核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera內核原爲Presto,現爲Blink;

 

1.2九、請介紹下cache-control

每一個資源均可以經過 Cache-Control HTTP 頭來定義本身的緩存策略

Cache-Control 指令控制誰在什麼條件下能夠緩存響應以及能夠緩存多久

Cache-Control 頭在 HTTP/1.1 規範中定義,取代了以前用來定義響應緩存策略的頭(例如 Expires)。

 

1.30、前端頁面有哪三層構成,分別是什麼?做用是什麼?

a. 結構層:由 HTML 或 XHTML 之類的標記語言負責建立,僅負責語義的表達。解決了頁面「內容是什麼」的問題。

b. 表示層:由CSS負責建立,解決了頁面「如何顯示內容」的問題。

c. 行爲層:由腳本負責。解決了頁面上「內容應該如何對事件做出反應」的問題。

 

1.3一、知道的網頁製做會用到的圖片格式有哪些?

png-8,png-24,jpeg,gif,svg

Webp:谷歌(google)開發的一種旨在加快圖片加載速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,並能節省大量的服務器帶寬資源和數據空間。Facebook Ebay等知名網站已經開始測試並使用WebP格式。

Apng:全稱是「Animated Portable Network Graphics」, 是PNG的位圖動畫擴展,能夠實現png格式的動態圖片效果。04年誕生,但一直得不到各大瀏覽器廠商的支持,直到日前獲得 iOS safari 8的支持,有望代替GIF成爲下一代動態圖標準。

 

1.3二、一次js請求通常狀況下有哪些地方會有緩存處理?

a. 瀏覽器端存儲

b. 瀏覽器端文件緩存

c. HTTP緩存304

d. 服務器端文件類型緩存

e. 表現層&DOM緩存

參考《一次HTTP請求中有哪些地方能夠緩存》

 

1.3三、一個頁面上有大量的圖片(大型電商網站),加載很慢,你有哪些方法優化這些圖片的加載,給用戶更好的體驗。

a. 圖片懶加載,滾動到相應位置才加載圖片。

b. 圖片預加載,若是爲幻燈片、相冊等,將當前展現圖片的前一張和後一張優先下載。

c. 使用CSSsprite,SVGsprite,Iconfont、Base64等技術,若是圖片爲css圖片的話。

d. 若是圖片過大,可使用特殊編碼的圖片,加載時會先加載一張壓縮的特別厲害的縮略圖,以提升用戶體驗。

 

1.3四、談談之前端角度出發作好SEO須要考慮什麼?

a. 瞭解搜索引擎如何抓取網頁和如何索引網頁

b. meta標籤優化

c. 關鍵詞分析

d. 付費給搜索引擎

e. 連接交換和連接普遍度(Link Popularity)

f. 合理的標籤使用

 

2、HTML

2.一、<img>標籤上title屬性與alt屬性的區別是什麼?

alt屬性是爲了給那些不能看到你文檔中圖像的瀏覽者提供文字說明的。且長度必須少於100個英文字符或者用戶必須保證替換文字儘量的短。

這包括那些使用原本就不支持圖像顯示或者圖像顯示被關閉的瀏覽器的用戶,視覺障礙的用戶和使用屏幕閱讀器的用戶等。

title屬性爲設置該屬性的元素提供建議性的信息。使用title屬性提供非本質的額外信息。參考《alt和title屬性的區別及應用》

 

2.二、分別寫出如下幾個HTML標籤:文字加粗、下標、居中、字體

加粗:<b>、<strong>

下標:<sub>

居中:<center>

字體:<font>、<basefont>、參考《HTML標籤列表》

 

2.三、請寫出至少5個html5新增的標籤,並說明其語義和應用場景

section:定義文檔中的一個章節

nav:定義只包含導航連接的章節

header:定義頁面或章節的頭部。它常常包含 logo、頁面標題和導航性的目錄。

footer:定義頁面或章節的尾部。它常常包含版權信息、法律信息連接和反饋建議用的地址。

aside:定義和頁面內容關聯度較低的內容——若是被刪除,剩下的內容仍然很合理。

參考《HTML5 標籤列表》

 

2.四、請說說你對標籤語義化的理解?

a. 去掉或者丟失樣式的時候可以讓頁面呈現出清晰的結構

b. 有利於SEO:和搜索引擎創建良好溝通,有助於爬蟲抓取更多的有效信息:爬蟲依賴於標籤來肯定上下文和各個關鍵字的權重;

c. 方便其餘設備解析(如屏幕閱讀器、盲人閱讀器、移動設備)以意義的方式來渲染網頁;

d. 便於團隊開發和維護,語義化更具可讀性,遵循W3C標準的團隊都遵循這個標準,能夠減小差別化。

 

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

<!DOCTYPE> 聲明位於文檔中的最前面,處於 <html> 標籤以前。告知瀏覽器以何種模式來渲染文檔。

嚴格模式的排版和 JS 運做模式是,以該瀏覽器支持的最高標準運行。

在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。

DOCTYPE不存在或格式不正確會致使文檔以混雜模式呈現。

 

2.六、你知道多少種Doctype文檔類型?

標籤可聲明三種 DTD 類型,分別表示嚴格版本、過渡版本以及基於框架的 HTML 文檔。

HTML 4.01 規定了三種文檔類型:Strict、Transitional 以及 Frameset。

XHTML 1.0 規定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。

Standards (標準)模式(也就是嚴格呈現模式)用於呈現遵循最新標準的網頁,

Quirks(包容)模式(也就是鬆散呈現模式或者兼容模式)用於呈現爲傳統瀏覽器而設計的網頁。

 

2.七、HTML與XHTML——兩者有什麼區別

a. XHTML 元素必須被正確地嵌套。

b. XHTML 元素必須被關閉。

c. 標籤名必須用小寫字母。

d. XHTML 文檔必須擁有根元素。

參考《XHTML 與 HTML 之間的差別》

 

2.八、html5有哪些新特性、移除了那些元素?

a. HTML5 如今已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增長。

b. 拖拽釋放(Drag and drop) API

c. 語義化更好的內容標籤(header,nav,footer,aside,article,section)

d. 音頻、視頻API(audio,video)

e. 畫布(Canvas) API

f. 地理(Geolocation) API

g. 本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉後數據不丟失

h. sessionStorage 的數據在頁面會話結束時會被清除

i. 表單控件,calendar、date、time、email、url、search

j. 新的技術webworker, websocket等

移除的元素:

a. 純表現的元素:basefont,big,center, s,strike,tt,u;

b. 對可用性產生負面影響的元素:frame,frameset,noframes;

 

2.九、iframe的優缺點?

優勢:

a. 解決加載緩慢的第三方內容如圖標和廣告等的加載問題

b. iframe無刷新文件上傳

c. iframe跨域通訊

缺點:

a. iframe會阻塞主頁面的Onload事件

b. 沒法被一些搜索引擎索引到

c. 頁面會增長服務器的http請求

d. 會產生不少頁面,不容易管理。

參考《iframe的一些記錄》

 

2.十、Quirks模式是什麼?它和Standards模式有什麼區別?

在寫程序時咱們也會常常遇到這樣的問題,如何保證原來的接口不變,又提供更強大的功能,尤爲是新功能不兼容舊功能時。IE6之前的頁面你們都不會去寫DTD,因此IE6就假定 若是寫了DTD,就意味着這個頁面將採用對CSS支持更好的佈局,而若是沒有,則採用兼容以前的佈局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。

區別:整體會有佈局、樣式解析和腳本執行三個方面的區別。

a. 盒模型:在W3C標準中,若是設置一個元素的寬度和高度,指的是元素內容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。

b. 設置行內元素的高寬:在Standards模式下,給<span>等行內元素設置wdith和height都不會生效,而在quirks模式下,則會生效。

c. 設置百分比的高度:在standards模式下,一個元素的高度是由其包含的內容來決定的,若是父元素沒有設置百分比的高度,子元素設置一個百分比的高度是無效的用

d. 設置水平居中:使用margin:0 auto在standards模式下可使元素水平居中,但在quirks模式下卻會失效。

 

2.十一、請闡述table的缺點

a. 太深的嵌套,好比table>tr>td>h3,會致使搜索引擎讀取困難,並且,最直接的損失就是大大增長了冗餘代碼量。

b. 靈活性差,好比要將tr設置border等屬性,是不行的,得經過td

c. 代碼臃腫,當在table中套用table的時候,閱讀代碼會顯得異常混亂

d. 混亂的colspan與rowspan,用來佈局時,頻繁使用他們會形成整個文檔順序混亂。

e. table須要屢次計算才能肯定好其在渲染樹中節點的屬性,一般要花3倍於同等元素的時間。

f. 不夠語義

參考《爲何說table表格佈局很差?》

 

2.十二、簡述一下src與href的區別

src用於替換當前元素;href用於在當前文檔和引用資源之間確立聯繫。

src是source的縮寫,指向外部資源的位置,指向的內容將會嵌入到文檔中當前標籤所在位置

href是Hypertext Reference的縮寫,指向網絡資源所在位置,創建和當前元素(錨點)或當前文檔(連接)之間的連接

相關文章
相關標籤/搜索