1. 程式人生 > >HTML5常見面試題及答案(二)

HTML5常見面試題及答案(二)

1、HTML5的新特性

   (1) 繪畫canvas

   (2) 用於媒介回放的video和audio元素

   (3) 本地離線儲存localStorage長期儲存資料,瀏覽器關閉後資料不丟失

   (4) sessionStorage的資料在瀏覽器關閉後自動刪除

   (5) 語義化更好的內容元素,比如article,footer,header,nav,section

   (6) 表單控制元件,calendar,date,time,email,url等

   (7) 新的技術webworker,websockt,Geolocation

   (8) 移出的元素

        a.純表現的元素:basefont,big,center,font等

        b.產生負面影響的元素:frame frameset等

   (9) ie8 7 6 支援通過document.createElemet 方法產生新的標籤,可以利用這 一特性讓這些瀏覽器支援html5新標籤

2、語義化的理解

    *HTML語義化就是讓頁面的內容結構化,便於對瀏覽器、搜尋引擎解析;

    *在沒有樣式CSS情況下也以一種文件格式顯示,並且是容易閱讀的;

    *搜尋引擎的爬蟲依賴於標記來確定上下文和各個關鍵字的權重,利於SEO。

    *使閱讀原始碼的人對網站更容易將網站分塊,便於閱讀維護理解。

3、jQueryjQuery UI有啥區別?

  (1)

jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件繫結等等。

  (2)jQuery UI則是在jQuery的基礎上,利用jQuery的擴充套件性,設計的外掛。提供了一些常用的介面元素,諸如對話方塊、拖動行為、改變大小行為等等。

4、垃圾回收機制(GC)

    我們一般說的垃圾回收是針對記憶體而言的。記憶體在計算機中是很寶貴的一種資源,任何程式的執行都離不開它。由於記憶體可以被程式操控,為了防止記憶體被程式濫用,對記憶體空間進行管理是十分必要的。說到記憶體管理,自然離不開JS中的垃圾回收機制,有兩種策略來實現垃圾回收:【標記清除 和 引用計數;】

    函式執行的時候,瀏覽器自動開闢一塊記憶體 把瀏覽器內部的各種變數,存放在此記憶體中執行結束後,用不到的變數,把它自動回收

5、閉包

    由於函式內部定義變數作用域問題,如果外部想用這個內部函式建立的一個變數;那就需要在這個函式內部在建立一個函式,建立的這個函式相當於一個橋樑把內部外部函式的變數丟擲,這樣就解決了不能訪問這個變數的問題,那這個內部函式就稱為閉包。

閉包的特性:

    a.函式內再巢狀函式

    b.內部函式可以引用外層的引數和變數

    c.引數和變數不會被垃圾回收機制回收

概括的說,閉包就是能夠讀取其他函式內部變數的函式,在本質上,它是將函式內部和函式外部連線起來的一座橋樑。

6、快取版本更新

原理:修改資源的地址名,對瀏覽器來說,就是一個全新的請求

傳統方式:在【靜態資源】後面加版本號

script(src="indexPage.js?V=20160227")

    優點:可以解決快取造成的問題,能及時更新快取,讓使用者訪問最新的內容

    缺點:在中型,大型專案中,版本號一般是統一加的一個變數,當只是一個小的修改時候,比如說只有一個js指令碼發生了變化,這時候所有資源的版本號都更新,造成資源     流量浪費,使用者體驗不好

解決方式:按需變化

增量式釋出: 依賴文字的內容  內容變了,加密的串就變化

   優點:提交資源伺服器時候,只會把新的檔案提交上去,沒有變化的檔案依然是老的資源,也就是隻增加了修改的檔案

   缺點:檔案提交之後,更新的那個檔案,可能存在多個版本,造成伺服器的空間浪費, 需要定時清理不用的資源      

   原理:利用md5加密技術

 (把需要生成md5串的資源讀取過來,利用md5對內容進行加密編譯,生成相應的加密串,這個加密串是唯一的,如果資源的內容沒有變化,再次進行md5處理,生成的加密串不變化)

7、Typeof的作用

    一、對於數字型別的運算元而言, typeof 返回的值是 number。比如說:typeof(1),返回的值就是number。

         上面是舉的常規數字,對於非常規的數字型別而言,其結果返回的也是number。比如typeof(NaN),NaN在JavaScript中代表的是特殊非數字值,雖然它本身是一個數字型別。JavaScript中,特殊的數字型別還有幾種:Infinity 表示無窮大特殊值

    二、對於字串型別, typeof 返回的值是 string。比如typeof("123")返回的值是string。

    三、對於布林型別, typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。

    四、對於物件、陣列、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。

    五、 對於函式型別,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。

   六、如 果運算數是沒有定義的(比如說不存在的變數、函式或者undefined),將返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined

8、常見的狀態碼分別表示什麼

  1**(資訊類):接受到請求並且繼續處理
  2**(響應成功):表示動作被成功接受,理解和接受
      200 -表示請求被成功完成,請求的資源傳送回客戶端
      202 -接受和處理,但處理未完成  
      203 -返回資訊不確定或不完整
      204 -請求收到,但返回資訊為空
  3**(重定向):為了完成指定的動作,必須接受進一步處理
      300 -請求的資源可在多處得到
      301 -本頁面被永久性轉移到另一個URL

      304 -自從上次請求後,請求的網頁未修改過,伺服器返回此響應時,不會返回網頁內容,代表上次的文件已經被快取了,還可以繼續使用 
      305 -請求的資源必須從伺服器指定的地址得到
  4**(客戶端錯誤類)
      400 -客戶端請求語法錯誤,不能被伺服器所理解
      403 -禁止訪問,伺服器收到請求,但是拒絕提供服務
      404 -伺服器無法取得所請求的網頁,請求資源不存在。

9、JavaScript非同步載入方案

建立script,插入到DOM中,載入完畢後callBack,程式碼如下:

function loadScript(url, callback){
   var script = document.createElement("script")
   script.type = "text/javascript";
   if (script.readyState){ //IE
      script.onreadystatechange = function(){
         if (script.readyState == "loaded" || script.readyState == "complete"){
            script.onreadystatechange = null;
            callback();
         }
      };
   } else { //Others: Firefox, Safari, Chrome, and Opera
      script.onload = function(){
          callback();
      };
   }
   script.src = url;
   document.body.appendChild(script);
}

10、JavaScript中實現類似PHPprint_r函式
function print_r(theObj) {
    var retStr = '';
    if (typeof theObj == 'object') {
        retStr += '<div style="font-family:Tahoma; font-size:7pt;">';
        for (var p in theObj) {
            if (typeof theObj[p] == 'object') {
                retStr += '<div><b>['+p+'] => ' + typeof(theObj) + '</b></div>';
                retStr += '<div style="padding-left:25px;">' + print_r(theObj[p]) + '</div>';
            } else {
                retStr += '<div>['+p+'] => <b>' + theObj[p] + '</b></div>';
            }
        }
        retStr += '</div>';
    }
    return retStr;
}