前端面試題整理彙總二

XMLJSON的區別?

(1).數據體積方面。javascript

 
JSON相對於XML來說,數據的體積小,傳遞的速度更快些。
 
(2).數據交互方面。
 
JSON與JavaScript的交互更加方便,更容易解析處理,更好的數據交互。
 
(3).數據描述方面。
 
JSON對數據的描述性比XML較差。
 
(4).傳輸速度方面。
 
JSON的速度要遠遠快於XML。

談談性能優化問題

代碼層面:避免使用css表達式,避免使用高級選擇器,通配選擇器。css

緩存利用:緩存Ajax,使用CDN,使用外部js和css文件以便緩存,添加Expires頭,服務端配置Etag,減小DNS查找等html

請求數量:合併樣式和腳本,使用css圖片精靈,初始首屏以外的圖片資源按需加載,靜態資源延遲加載。前端

請求帶寬:壓縮文件,開啓GZIP,html5

代碼層面的優化java

  • hash-table來優化查找
  • 少用全局變量
  • innerHTML代替DOM操做,減小DOM操做次數,優化javascript性能
  • setTimeout來避免頁面失去響應
  • 緩存DOM節點查找的結果
  • 避免使用CSS Expression
  • 避免全局查詢
  • 避免使用with(with會建立本身的做用域,會增長做用域鏈長度)
  • 多個變量聲明合併
  • 避免圖片和iFrame等的空Src。空Src會從新加載當前頁面,影響速度和效率
  • 儘可能避免寫在HTML標籤中寫Style屬性

移動端性能優化

  • 儘可能使用css3動畫,開啓硬件加速。
  • 適當使用touch事件代替click事件。
  • 避免使用css3漸變陰影效果。
  • 能夠用transform: translateZ(0)來開啓硬件加速。
  • 不濫用Float。Float在渲染時計算量比較大,儘可能減小使用
  • 不濫用Web字體。Web字體須要下載,解析,重繪當前頁面,儘可能減小使用。
  • 合理使用requestAnimationFrame動畫代替setTimeout
  • CSS中的屬性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)會觸發GPU渲染,請合理使用。過渡使用會引起手機過耗電增長
  • PC端的在移動端一樣適用
  • 說說你對語義化的理解?

  • 1,去掉或者丟失樣式的時候可以讓頁面呈現出清晰的結構
     
    2,有利於SEO:和搜索引擎創建良好溝通,有助於爬蟲抓取更多的有效信息:爬蟲依賴於標籤來肯定上下文和各個關鍵字的權重;
     
    3,方便其餘設備解析(如屏幕閱讀器、盲人閱讀器、移動設備)以意義的方式來渲染網頁;
     
    4,便於團隊開發和維護,語義化更具可讀性,是下一步吧網頁的重要動向,遵循W3C標準的團隊都遵循這個標準,能夠減小差別化。
  • html5有哪些新特性、移除了那些元素?如何處理HTML5新標籤的瀏覽器兼容問題?如何區分 HTML 和 HTML5?


  • 2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      HTML5 如今已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增長。
     
      拖拽釋放(Drag and drop) API
     
      語義化更好的內容標籤(header,nav,footer,aside,article,section)
     
      音頻、視頻API(audio,video)
     
      畫布(Canvas) API
     
      地理(Geolocation) API
     
      本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉後數據不丟失;
     
      sessionStorage 的數據在瀏覽器關閉後自動刪除
     
     
      表單控件,calendar、date、time、email、url、search
     
      新的技術webworker, websocket, Geolocation

前端面試題整理彙總

本文旨在加深對前端知識點的理解,資料來源於網絡,由 trigkit4 收集整理。jquery

一些開放性題目

 

 

position的值, relative和absolute分別是相對於誰進行定位的?

  • absolute :生成絕對定位的元素, 相對於最近一級的 定位不是 static 的父元素來進行定位。
  • fixed (老IE不支持)生成絕對定位的元素,一般相對於瀏覽器窗口或 frame 進行定位。
  • relative 生成相對定位的元素,相對於其在普通流中的位置進行定位。
  • static 默認值。沒有定位,元素出如今正常的流中
  • sticky 生成粘性定位的元素,容器的位置根據正常文檔流計算得出

如何解決跨域問題

JSONP:android

原理是:動態插入script標籤,經過script標籤引入一個js文件,這個js文件載入成功後會執行咱們在url參數中指定的函數,而且會把咱們須要的json數據做爲參數傳入。webpack

因爲同源策略的限制,XmlHttpRequest只容許請求當前源(域名、協議、端口)的資源,爲了實現跨域請求,能夠經過script標籤實現跨域請求,而後在服務端輸出JSON數據並執行回調函數,從而解決了跨域的數據請求。

優勢是兼容性好,簡單易用,支持瀏覽器與服務器雙向通訊。缺點是隻支持GET請求。

JSONPjson+padding(內填充),顧名思義,就是把JSON填充到一個盒子裏

 

CORS

服務器端對於CORS的支持,主要就是經過設置Access-Control-Allow-Origin來進行的。若是瀏覽器檢測到相應的設置,就能夠容許Ajax進行跨域的訪問。

經過修改document.domain來跨子域

將子域和主域的document.domain設爲同一個主域.前提條件:這兩個域名必須屬於同一個基礎域名!並且所用的協議,端口都要一致,不然沒法利用document.domain進行跨域

主域相同的使用document.domain

使用window.name來進行跨域

window對象有個name屬性,該屬性有個特徵:即在一個窗口(window)的生命週期內,窗口載入的全部的頁面都是共享一個window.name的,每一個頁面對window.name都有讀寫的權限,window.name是持久存在一個窗口載入過的全部頁面中的

使用HTML5中新引進的window.postMessage方法來跨域傳送數據

還有flash、在服務器上設置代理頁面等跨域方式。我的認爲window.name的方法既不復雜,也能兼容到幾乎全部瀏覽器,這真是極好的一種跨域方法。

XMLJSON的區別?

 

 

談談你對webpack的見解

WebPack 是一個模塊打包工具,你可使用WebPack管理你的模塊依賴,並編繹輸出模塊們所需的靜態文件。它可以很好地管理、打包Web開發中所用到的HTML、Javascript、CSS以及各類靜態文件(圖片、字體等),讓開發過程更加高效。對於不一樣類型的資源,webpack有對應的模塊加載器。webpack模塊打包器會分析模塊間的依賴關係,最後 生成了優化且合併後的靜態資源。

webpack的兩大特點:

webpack 是以commonJS的形式來書寫腳本滴,但對 AMD/CMD 的支持也很全面,方便舊項目進行代碼遷移。

webpack具備requireJsbrowserify的功能,但仍有不少本身的新特性:

 

說說TCP傳輸的三次握手四次揮手策略

爲了準確無誤地把數據送達目標處,TCP協議採用了三次握手策略。用TCP協議把數據包送出去後,TCP不會對傳送 後的狀況置之不理,它必定會向對方確認是否成功送達。握手過程當中使用了TCP的標誌:SYNACK

發送端首先發送一個帶SYN標誌的數據包給對方。接收端收到後,回傳一個帶有SYN/ACK標誌的數據包以示傳達確認信息。 最後,發送端再回傳一個帶ACK標誌的數據包,表明「握手」結束。 若在握手過程當中某個階段莫名中斷,TCP協議會再次以相同的順序發送相同的數據包。

斷開一個TCP鏈接則須要「四次握手」:

  • 第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發數據了(固然,在fin包以前發送出去的數據,若是沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),可是,此時主動關閉方還可 以接受數據。
  • 第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號)。
  • 第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,個人數據也發送完了,不會再給你發數據了。
  • 第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手。

TCP和UDP的區別

TCP(Transmission Control Protocol,傳輸控制協議)是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。一個TCP鏈接必需要通過三次「對話」才能創建起來

UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去! UDP適用於一次只傳送少許數據、對可靠性要求不高的應用環境。

說說你對做用域鏈的理解

做用域鏈的做用是保證執行環境裏有權訪問的變量和函數是有序的,做用域鏈的變量只能向上訪問,變量訪問到window對象即被終止,做用域鏈向下訪問變量是不被容許的。

建立ajax過程

 

 

漸進加強和優雅降級

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

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

常見web安全及防禦原理

sql注入原理

就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

總的來講有如下幾點:

 

XSS原理及防範

Xss(cross-site scripting)攻擊指的是攻擊者往Web頁面裏插入惡意 html標籤或者javascript代碼。好比:攻擊者在論壇中放一個

看似安全的連接,騙取用戶點擊後,竊取cookie中的用戶私密信息;或者攻擊者在論壇中加一個惡意表單,

當用戶提交表單的時候,卻把信息傳送到攻擊者的服務器中,而不是用戶本來覺得的信任站點。

XSS防範方法

首先代碼裏對用戶輸入的地方和變量都須要仔細檢查長度和對」<」,」>」,」;」,」’」等字符作過濾;其次任何內容寫到頁面以前都必須加以encode,避免不當心把html tag 弄出來。這一個層面作好,至少能夠堵住超過一半的XSS 攻擊。

首先,避免直接在cookie 中泄露用戶隱私,例如email、密碼等等。

其次,經過使cookie 和系統ip 綁定來下降cookie 泄露後的危險。這樣攻擊者獲得的cookie沒有實際價值,不可能拿來重放。

若是網站不須要再瀏覽器端對cookie 進行操做,能夠在Set-Cookie 末尾加上HttpOnly 來防止javascript 代碼直接獲取cookie 。

儘可能採用POST 而非GET 提交表單

XSS與CSRF有什麼區別嗎?

XSS是獲取信息,不須要提早知道其餘用戶頁面的代碼和數據包。CSRF是代替用戶完成指定的動做,須要知道其餘用戶頁面的代碼和數據包。

要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:

 

CSRF的防護

  • 服務端的CSRF方式方法不少樣,但總的思想都是一致的,就是在客戶端頁面增長僞隨機數。
  • 經過驗證碼的方法

Web Worker 和webSocket

worker主線程:

 

WebSocketWeb應用程序的傳輸協議,它提供了雙向的,按序到達的數據流。他是一個HTML5協議,WebSocket的鏈接是持久的,他經過在客戶端和服務器之間保持雙工鏈接,服務器的更新能夠被及時推送給客戶端,而不須要客戶端以必定時間間隔去輪詢。

HTTP和HTTPS

HTTP協議一般承載於TCP協議之上,在HTTPTCP之間添加一個安全協議層(SSLTSL),這個時候,就成了咱們常說的HTTPS。

默認HTTP的端口號爲80,HTTPS的端口號爲443。

爲何HTTPS安全

由於網絡請求須要中間有不少的服務器路由器的轉發。中間的節點均可能篡改信息,而若是使用HTTPS,密鑰在你和終點站纔有。https之因此比http安全,是由於他利用ssl/tls協議傳輸。它包含證書,卸載,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等。保障了傳輸過程的安全性

對前端模塊化的認識

AMD 是 RequireJS 在推廣過程當中對模塊定義的規範化產出。

CMD 是 SeaJS 在推廣過程當中對模塊定義的規範化產出。

AMD 是提早執行,CMD 是延遲執行。

AMD推薦的風格經過返回一個對象作爲模塊對象,CommonJS的風格經過對module.exportsexports的屬性賦值來達到暴露模塊對象的目的。

CMD模塊方式

 

 

Javascript垃圾回收方法

標記清除(mark and sweep)

這是JavaScript最多見的垃圾回收方式,當變量進入執行環境的時候,好比函數中聲明一個變量,垃圾回收器將其標記爲「進入環境」,當變量離開環境的時候(函數執行結束)將其標記爲「離開環境」。

垃圾回收器會在運行的時候給存儲在內存中的全部變量加上標記,而後去掉環境中的變量以及被環境中變量所引用的變量(閉包),在這些完成以後仍存在標記的就是要刪除的變量了

引用計數(reference counting)

在低版本IE中常常會出現內存泄露,不少時候就是由於其採用引用計數方式進行垃圾回收。引用計數的策略是跟蹤記錄每一個值被使用的次數,當聲明瞭一個 變量並將一個引用類型賦值給該變量的時候這個值的引用次數就加1,若是該變量的值變成了另一個,則這個值得引用次數減1,當這個值的引用次數變爲0的時 候,說明沒有變量在使用,這個值無法被訪問了,所以能夠將其佔用的空間回收,這樣垃圾回收器會在運行的時候清理掉引用次數爲0的值佔用的空間。

在IE中雖然JavaScript對象經過標記清除的方式進行垃圾回收,但BOM與DOM對象倒是經過引用計數回收垃圾的, 也就是說只要涉及BOM及DOM就會出現循環引用問題。

你以爲前端工程的價值體如今哪

 

 

談談性能優化問題

代碼層面:避免使用css表達式,避免使用高級選擇器,通配選擇器。

緩存利用:緩存Ajax,使用CDN,使用外部js和css文件以便緩存,添加Expires頭,服務端配置Etag,減小DNS查找等

請求數量:合併樣式和腳本,使用css圖片精靈,初始首屏以外的圖片資源按需加載,靜態資源延遲加載。

請求帶寬:壓縮文件,開啓GZIP,

代碼層面的優化

  • hash-table來優化查找
  • 少用全局變量
  • innerHTML代替DOM操做,減小DOM操做次數,優化javascript性能
  • setTimeout來避免頁面失去響應
  • 緩存DOM節點查找的結果
  • 避免使用CSS Expression
  • 避免全局查詢
  • 避免使用with(with會建立本身的做用域,會增長做用域鏈長度)
  • 多個變量聲明合併
  • 避免圖片和iFrame等的空Src。空Src會從新加載當前頁面,影響速度和效率
  • 儘可能避免寫在HTML標籤中寫Style屬性

移動端性能優化

  • 儘可能使用css3動畫,開啓硬件加速。
  • 適當使用touch事件代替click事件。
  • 避免使用css3漸變陰影效果。
  • 能夠用transform: translateZ(0)來開啓硬件加速。
  • 不濫用Float。Float在渲染時計算量比較大,儘可能減小使用
  • 不濫用Web字體。Web字體須要下載,解析,重繪當前頁面,儘可能減小使用。
  • 合理使用requestAnimationFrame動畫代替setTimeout
  • CSS中的屬性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)會觸發GPU渲染,請合理使用。過渡使用會引起手機過耗電增長
  • PC端的在移動端一樣適用

相關閱讀:如何作到一秒渲染一個移動頁面

什麼是Etag?

當發送一個服務器請求時,瀏覽器首先會進行緩存過時判斷。瀏覽器根據緩存過時時間判斷緩存文件是否過時。

情景一:若沒有過時,則不向服務器發送請求,直接使用緩存中的結果,此時咱們在瀏覽器控制檯中能夠看到 200 OK(from cache) ,此時的狀況就是徹底使用緩存,瀏覽器和服務器沒有任何交互的。

情景二:若已過時,則向服務器發送請求,此時請求中會帶上①中設置的文件修改時間,和Etag

而後,進行資源更新判斷。服務器根據瀏覽器傳過來的文件修改時間,判斷自瀏覽器上一次請求以後,文件是否是沒有被修改過;根據Etag,判斷文件內容自上一次請求以後,有沒有發生變化

情形一:若兩種判斷的結論都是文件沒有被修改過,則服務器就不給瀏覽器發index.html的內容了,直接告訴它,文件沒有被修改過,你用你那邊的緩存吧—— 304 Not Modified,此時瀏覽器就會從本地緩存中獲取index.html的內容。此時的狀況叫協議緩存,瀏覽器和服務器之間有一次請求交互。

情形二:若修改時間和文件內容判斷有任意一個沒有經過,則服務器會受理這次請求,以後的操做同①

① 只有get請求會被緩存,post請求不會

Expires和Cache-Control

Expires要求客戶端和服務端的時鐘嚴格同步。HTTP1.1引入Cache-Control來克服Expires頭的限制。若是max-age和Expires同時出現,則max-age有更高的優先級。

 

ETag應用:

Etag由服務器端生成,客戶端經過If-Match或者說If-None-Match這個條件判斷請求來驗證資源是否修改。常見的是使用If-None-Match。請求一個文件的流程可能以下:

====第一次請求===

====第二次請求===

答案是同時使用,也就是說在徹底匹配If-Modified-SinceIf-None-Match即檢查完修改時間和Etag以後,

服務器才能返回304.(不要陷入到底使用誰的問題怪圈)

爲何使用Etag請求頭?

Etag 主要爲了解決 Last-Modified 沒法解決的一些問題。

棧和隊列的區別?

 

 

棧和堆的區別?

 

 

快速 排序的思想並實現一個快排?

「快速排序」的思想很簡單,整個排序過程只須要三步:

(1)在數據集之中,找一個基準點

(2)創建兩個數組,分別存儲左邊和右邊的數組

(3)利用遞歸進行下次比較

 

你以爲jQuery或zepto源碼有哪些寫的好的地方

(答案僅供參考)

jquery源碼封裝在一個匿名函數的自執行環境中,有助於防止變量的全局污染,而後經過傳入window對象參數,可使window對象做爲局部變量使用,好處是當jquery中訪問window對象的時候,就不用將做用域鏈退回到頂層做用域了,從而能夠更快的訪問window對象。一樣,傳入undefined參數,能夠縮短查找undefined時的做用域鏈。

jquery將一些原型屬性和方法封裝在了jquery.prototype中,爲了縮短名稱,又賦值給了jquery.fn,這是很形象的寫法。

有一些數組或對象的方法常常能使用到,jQuery將其保存爲局部變量以提升訪問速度。

jquery實現的鏈式調用能夠節約代碼,所返回的都是同一個對象,能夠提升代碼效率。

ES6的瞭解

新增模板字符串(爲JavaScript提供了簡單的字符串插值功能)、箭頭函數(操做符左邊爲輸入的參數,而右邊則是進行的操做以及返回的值Inputs=>outputs。)、for-of(用來遍歷數據—例如數組中的值。)arguments對象可被不定參數和默認參數完美代替。ES6promise對象歸入規範,提供了原生的Promise對象。增長了letconst命令,用來聲明變量。增長了塊級做用域。let命令實際上就增長了塊級做用域。ES6規定,var命令和function命令聲明的全局變量,屬於全局對象的屬性;let命令、const命令、class命令聲明的全局變量,不屬於全局對象的屬性。。還有就是引入module模塊的概念

js繼承方式及其優缺點

原型鏈繼承的缺點

 

 

借用構造函數(類式繼承)

 

 

組合式繼承

 

具體請看:JavaScript繼承方式詳解

關於Http 2.0 你知道多少?

HTTP/2引入了「服務端推(server push)」的概念,它容許服務端在客戶端須要數據以前就主動地將數據發送到客戶端緩存中,從而提升性能。

HTTP/2提供更多的加密支持

HTTP/2使用多路技術,容許多個消息在一個鏈接上同時交差。

它增長了頭壓縮(header compression),所以即便很是小的請求,其請求和響應的header都只會佔用很小比例的帶寬。

defer和async

defer並行加載js文件,會按照頁面上script標籤的順序執行 async並行加載js文件,下載完成當即執行,不會按照頁面上script標籤的順序執行

談談浮動和清除浮動

浮動的框能夠向左或向右移動,直到他的外邊緣碰到包含框或另外一個浮動框的邊框爲止。因爲浮動框不在文檔的普通流中,因此文檔的普通流的塊框表現得就像浮動框不存在同樣。浮動的塊框會漂浮在文檔普通流的塊框上。

如何評價AngularJS和BackboneJS

backbone具備依賴性,依賴underscore.jsBackbone + Underscore + jQuery(or Zepto) 就比一個AngularJS 多出了2 次HTTP請求.

BackboneModel沒有與UI視圖數據綁定,而是須要在View中自行操做DOM來更新或讀取UI數據。AngularJS與此相反,Model直接與UI視圖綁定,Model與UI視圖的關係,經過directive封裝,AngularJS內置的通用directive,就能實現大部分操做了,也就是說,基本沒必要關心Model與UI視圖的關係,直接操做Model就好了,UI視圖自動更新。

AngularJSdirective,你輸入特定數據,他就能輸出相應UI視圖。是一個比較完善的前端MVW框架,包含模板,數據雙向綁定,路由,模塊化,服務,依賴注入等全部功能,模板功能強大豐富,而且是聲明式的,自帶了豐富的 Angular 指令。

用過哪些設計模式?

工廠模式:

 

 

構造函數模式

使用構造函數的方法 ,即解決了重複實例化的問題 ,又解決了對象識別的問題,該模式與工廠模式的不一樣之處在於:

 

說說你對閉包的理解

使用閉包主要是爲了設計私有的方法和變量。閉包的優勢是能夠避免全局變量的污染,缺點是閉包會常駐內存,會增大內存使用量,使用不當很容易形成內存泄露。在js中,函數即閉包,只有函數纔會產生做用域的概念

閉包有三個特性:

1.函數嵌套函數

2.函數內部能夠引用外部的參數和變量

3.參數和變量不會被垃圾回收機制回收

具體請看:詳解js閉包

請你談談Cookie的弊端

cookie雖然在持久保存客戶端數據提供了方便,分擔了服務器存儲的負擔,但仍是有不少侷限性的。

第一:每一個特定的域名下最多生成20個cookie

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

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

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

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

 

 

缺點:

 

 

瀏覽器本地存儲

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

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

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

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

web storage和cookie的區別

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

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

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

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

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

cookie 和session 的區別:

 

 

display:nonevisibility:hidden的區別?

 

 

CSS中link 和@import的區別是?

 

 

position:absolutefloat屬性的異同

  • 共同點:對內聯元素設置floatabsolute屬性,可讓元素脫離文檔流,而且能夠設置其寬高。
  • 不一樣點:float仍會佔據位置,absolute會覆蓋文檔流中的其餘元素。

介紹一下box-sizing屬性?

box-sizing屬性主要用來控制元素的盒模型的解析模式。默認值是content-box

  • content-box:讓元素維持W3C的標準盒模型。元素的寬度/高度由border + padding + content的寬度/高度決定,設置width/height屬性指的是content部分的寬/高
  • border-box:讓元素維持IE傳統盒模型(IE6如下版本和IE6~7的怪異模式)。設置width/height屬性指的是border + padding + content

標準瀏覽器下,按照W3C規範對盒模型解析,一旦修改了元素的邊框或內距,就會影響元素的盒子尺寸,就不得不從新計算元素的盒子尺寸,從而影響整個頁面的佈局。

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

 

優先級爲:

!important > id > class > tag

important 比 內聯優先級高,但內聯比 id 要高

CSS3新增僞類舉例:

 

 

CSS3有哪些新特性?

 

CSS3中新增了一種盒模型計算方式:box-sizing。盒模型默認的值是content-box, 新增的值是padding-boxborder-box,幾種盒模型計算元素寬高的區別以下:

content-box(默認)

佈局所佔寬度Width:

佈局所佔高度Height:

 

padding-box

佈局所佔寬度Width:

佈局所佔高度Height:

 

border-box

佈局所佔寬度Width:

佈局所佔高度Height:

 

對BFC規範的理解?

 

 

說說你對語義化的理解?

 

 

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

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

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

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

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

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

 

 

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

 

 

常見兼容性問題?

 

相關文章
相關標籤/搜索