前端面試寶典

前言

  本文總結了一些優質的前端面試題(多數源於網絡),初學者閱後也要用心鑽研其中的原理,重要知識需要系統學習,透徹學習,形成自己的知識鏈。萬不可投機取巧,只求面試過關是錯誤的!

面試有幾點需注意:(來源程劭非老師 github:@wintercn)

  1. 面試題目: 根據你的等級和職位變化,入門級到專家級:範圍↑、深度↑、方向↑。

  2. 題目類型: 技術視野、項目細節、理論知識題,算法題,開放性題,案例題。

  3. 進行追問: 可以確保問到你開始不懂或面試官開始不懂爲止,這樣可以大大延展題目的區分度和深度,知道你的實際能力。因爲這種關聯知識是長時期的學習,絕對不是臨時記得住的

  4. 回答問題再棒,面試官(可能是你的直接領導面試),會考慮我要不要這個人做我的同事?所以態度很重要。(感覺更像是相親)

  5. 資深的工程師能把 absolute 和 relative 弄混,這樣的人不要也罷,因爲團隊需要的你這個人具有可以依靠的才能(靠譜)。

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

HTML&CSS:Web標準的理解、瀏覽器內核差異兼容性hackCSS基本功佈局盒子模型選擇器優先級及使用、HTML5CSS3移動端適應 

JavaScript:  
    數據類型、面向對象、繼承、閉包、插件、作用域、跨域、原型鏈、模塊化、自定義事件、內存泄漏、事件機制、異步裝載回調、模板引擎、Nodejs、JSON、ajax等。

其他:
   HTTP、安全、正則、優化、重構、響應式、移動端、團隊協作、可維護、SEO、UED、架構、職業生涯 

作爲一名前端工程師,無論工作年頭長短都應該必須掌握的知識點

此條由 王子墨 發表在 前端隨筆

    1、DOM結構 —— 兩個節點之間可能存在哪些關係以及如何在節點之間任意移動。

    2、DOM操作  ——如何添加、移除、移動、複製、創建和查找節點等。

    3、事件    —— 如何使用事件,以及IE和標準DOM事件模型之間存在的差別。

    4、XMLHttpRequest —— 這是什麼、怎樣完整地執行一次GET請求、怎樣檢測錯誤。

    5、嚴格模式與混雜模式 —— 如何觸發這兩種模式,區分它們有何意義。

    6、盒模型 —— 外邊距、內邊距和邊框之間的關係,及IE8以下版本的瀏覽器中的盒模型

    7、塊級元素與行內元素 —— 怎麼用CSS控制它們、以及如何合理的使用它們

    8、浮動元素——怎麼使用它們、它們有什麼問題以及怎麼解決這些問題。

    9、HTML與XHTML——二者有什麼區別,你覺得應該使用哪一個並說出理由。

    10、JSON  —— 作用、用途、設計結構。

備註:

根據自己需要選擇性閱讀,面試題是對理論知識的總結,讓自己學會應該如何表達。

資料答案不夠正確和全面,歡迎補充答案、題目;最好是現在網上沒有的。

格式不斷修改更新中。

HTML

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

    (1)、<!DOCTYPE> 聲明位於文檔中的最前面,處於 <html> 標籤之前。告知瀏覽器的解析器,
          用什麼文檔類型 規範來解析這個文檔。 
    
    (2)、嚴格模式的排版和 JS 運作模式是  以該瀏覽器支持的最高標準運行。
    
    (3)、在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點無法工作。
    
    (4)、DOCTYPE不存在或格式不正確會導致文檔以混雜模式呈現。
    
  • 行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?

    (1)CSS規範規定,每個元素都有display屬性,確定該元素的類型,每個元素都有默認的display值,
      比如div默認display屬性值爲“block”,成爲“塊級”元素;
      span默認display屬性值爲“inline”,是“行內”元素。  
    
    (2)行內元素有:a b span img input select strong(強調的語氣) 
     塊級元素有:div ul ol li dl dt dd h1 h2 h3 h4…p  
    
    (3)知名的空元素: 
    <br> <hr> <img> <input> <link> <meta> 
    鮮爲人知的是: 
    <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
    
  • link 和@import 的區別是?

    (1)link屬於XHTML標籤,而@import是CSS提供的;
    
    (2)頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;
    
    (3)import只在IE5以上才能識別,而link是XHTML標籤,無兼容問題;
    
    (4)link方式的樣式的權重 高於@import的權重. 
    
  • 瀏覽器的內核分別是什麼?

     * IE瀏覽器的內核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera內核原爲Presto,現爲Blink;
    
  • 常見兼容性問題?

    * png24位的圖片在iE6瀏覽器上出現背景,解決方案是做成PNG8.
    
    * 瀏覽器默認的margin和padding不同。解決方案是加一個全局的*{margin:0;padding:0;}來統一。
    
    * IE6雙邊距bug:塊屬性標籤float後,又有橫行的margin情況下,在ie6顯示margin比設置的大。 
    
      浮動ie產生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;} 
    
     這種情況之下IE會產生20px的距離,解決方案是在float的標籤樣式控制中加入 ——_display:inline;將其轉化爲行內屬性。(_這個符號只有ie6會識別)
    
      漸進識別的方式,從總體中逐漸排除局部。 
    
      首先,巧妙的使用“\9”這一標記,將IE遊覽器從所有情況中分離出來。 
      接着,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經獨立識別。
    
      css
    1
    2
    3
    4
    5
    6
    .bb{
        background-color:#f1ee18;/*所有識別*/
       .background-color:#00deff\9;/*IE6、7、8識別*/
       +background-color:#a200ff;/*IE6、7識別*/
       _background-color:#1e0bd1;/*IE6識別*/
       }
    * IE下,可以使用獲取常規屬性的方法來獲取自定義屬性, 也可以使用getAttribute()獲取自定義屬性; Firefox下,只能使用getAttribute()獲取自定義屬性. 解決方法:統一通過getAttribute()獲取自定義屬性. * IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性; Firefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性. * 解決方法:(條件註釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數。 * Chrome 中文界面下默認會將小於 12px 的文本強制按照 12px 顯示, 可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決. 超鏈接訪問過後hover樣式就不出現了 被點擊訪問過的超鏈接樣式不在具有hover和active瞭解決方法是改變CSS屬性的排列順序: L-V-H-A : a:link {} a:visited {} a:hover {} a:active {} 
  • html5有哪些新特性、移除了那些元素?如何處理HTML5新標籤的瀏覽器兼容問題?如何區分 HTML 和 HTML5?

    * HTML5 現在已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增加。
    
    * 繪畫 canvas  
      用於媒介回放的 video 和 audio 元素 
      本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉後數據不丟失;
      sessionStorage 的數據在瀏覽器關閉後自動刪除
    
      語意化更好的內容元素,比如 article、footer、header、nav、section 
      表單控件,calendar、date、time、email、url、search  
      新的技術webworker, websockt, Geolocation
    
    * 移除的元素
    
    純表現的元素:basefont,big,center,font, s,strike,tt,u;
    
    對可用性產生負面影響的元素:frame,frameset,noframes;
    
    支持HTML5新標籤:
    
    * IE8/IE7/IE6支持通過document.createElement方法產生的標籤,
      可以利用這一特性讓這些瀏覽器支持HTML5新標籤,
    
      瀏覽器支持新標籤後,還需要添加標籤默認的樣式:
    
    * 當然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
       <!--[if lt IE 9]> 
       <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script> 
       <![endif]--> 
    如何區分: DOCTYPE聲明\新增的結構元素\功能元素
    
  • 語義化的理解?

    用正確的標籤做正確的事情!
    html語義化就是讓頁面的內容結構化,便於對瀏覽器、搜索引擎解析;
    在沒有樣式CCS情況下也以一種文檔格式顯示,並且是容易閱讀的。
    搜索引擎的爬蟲依賴於標記來確定上下文和各個關鍵字的權重,利於 SEO。
    使閱讀源代碼的人對網站更容易將網站分塊,便於閱讀維護理解。
    
  • HTML5的離線儲存?

    localStorage    長期存儲數據,瀏覽器關閉後數據不丟失;
    sessionStorage  數據在瀏覽器關閉後自動刪除。
    
  • (寫)描述一段語義的html代碼吧。

    (HTML5中新增加的很多標籤(如:<article>、<nav>、<header>和<footer>等)
     就是基於語義化設計原則)  
        < div id="header"> 
        < h1>標題< /h1> 
        < h2>專注Web前端技術< /h2> 
        < /div>
    
  • iframe有那些缺點?

    *iframe會阻塞主頁面的Onload事件;
    
    *iframe和主頁面共享連接池,而瀏覽器對相同域的連接有限制,所以會影響頁面的並行加載。
    使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript
    動態給iframe添加src屬性值,這樣可以可以繞開以上兩個問題。
    
  • 請描述一下 cookies,sessionStorage 和 localStorage 的區別?

    cookie在瀏覽器和服務器間來回傳遞。 sessionStorage和localStorage不會
    sessionStorage和localStorage的存儲空間更大;
    sessionStorage和localStorage有更多豐富易用的接口;
    sessionStorage和localStorage各自獨立的存儲空間;
    

CSS

  • 介紹一下CSS的盒子模型?

    (1)有兩種, IE 盒子模型、標準 W3C 盒子模型;IE的content部分包含了 border 和 pading;
    
    (2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border).
    
  • CSS 選擇符有哪些?哪些屬性可以繼承?優先級算法如何計算? CSS3新增僞類有那些?

    *   1.id選擇器( # myid)
        2.類選擇器(.myclassname)
        3.標籤選擇器(div, h1, p)
        4.相鄰選擇器(h1 + p)
        5.子選擇器(ul < li)
        6.後代選擇器(li a)
        7.通配符選擇器( * )
        8.屬性選擇器(a[rel = "external"])
        9.僞類選擇器(a: hover, li: nth - child)
    
    *   可繼承的樣式: font-size font-family color, UL LI DL DD DT;
    
    *   不可繼承的樣式:border padding margin width height ;
    
    *   優先級就近原則,同權重情況下樣式定義最近者爲準;
    
    *   載入樣式以最後載入的定位爲準;
    

    優先級爲:

       !important >  id > class > tag  
    
       important 比 內聯優先級高
    

    CSS3新增僞類舉例:

    p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素。
    p:last-of-type  選擇屬於其父元素的最後 <p> 元素的每個 <p> 元素。
    p:only-of-type  選擇屬於其父元素唯一的 <p> 元素的每個 <p> 元素。
    p:only-child    選擇屬於其父元素的唯一子元素的每個 <p> 元素。
    p:nth-child(2)  選擇屬於其父元素的第二個子元素的每個 <p> 元素。
    :enabled  :disabled 控制表單控件的禁用狀態。
    :checked        單選框或複選框被選中。
    
  • 如何居中div?如何居中一個浮動元素?

    • 給div設置一個寬度,然後添加margin:0 auto屬性

      1
      2
      3
      4
      div{
          width:200px;
          margin:0 auto;
       

        

    • 居中一個浮動元素

        確定容器的寬高 寬500 高 300 的層
        設置層的外邊距
      1
      2
      3
      4
      5
      6
      7
      8
      .div {
        Width:500px ;height:300px;//高度可以不設
        Margin:-150px 0 0 -250px;
        position:relative;相對定位
        background-color:pink;//方便看效果
        left:50%;
        top:50%;
      }

        

  • 列出display的值,說明他們的作用。position的值, relative和absolute定位原點是?

      1.   
      block 象塊類型元素一樣顯示。
      none 缺省值。象行內元素類型一樣顯示。
      inline-block 象行內元素一樣顯示,但其內容象塊類型元素一樣顯示。
      list-item 象塊類型元素一樣顯示,並添加樣式列表標記。
    
      2. 
      *absolute 
            生成絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。 
    
      *fixed (老IE不支持)
            生成絕對定位的元素,相對於瀏覽器窗口進行定位。 
    
      *relative 
            生成相對定位的元素,相對於其正常位置進行定位。 
    
      * static  默認值。沒有定位,元素出現在正常的流中
      *(忽略 top, bottom, left, right z-index 聲明)。
    
      * inherit 規定從父元素繼承 position 屬性的值。
    
  • CSS3有哪些新特性?

      CSS3實現圓角(border-radius:8px),陰影(box-shadow:10px),
      對文字加特效(text-shadow、),線性漸變(gradient),旋轉(transform)
      transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋轉,縮放,定位,傾斜
      增加了更多的CSS選擇器  多背景 rgba 
    
  • 一個滿屏 品 字佈局 如何設計?

  • 經常遇到的CSS的兼容性有哪些?原因,解決方法是什麼?

  • 爲什麼要初始化CSS樣式。

    - 因爲瀏覽器的兼容問題,不同瀏覽器對有些標籤的默認值是不同的,如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異。
    
    - 當然,初始化樣式會對SEO有一定的影響,但魚和熊掌不可兼得,但力求影響最小的情況下初始化。
    
    *最簡單的初始化方法就是: * {padding: 0; margin: 0;} (不建議)
    
    淘寶的樣式初始化:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0;padding:0; }
    body, button, input, select, textarea { font:12px/1.5tahoma,arial, \5b8b\4f53; }
    h1, h2, h3, h4, h5, h6{font-size:100%; }
    address, cite, dfn, em, var { font-style:normal; }
    code, kbd, pre, samp { font-family:couriernew,courier,monospace; }
    small{font-size:12px; }
    ul, ol { list-style:none; }
    a { text-decoration:none; }
    a:hover { text-decoration:underline; }
    sup { vertical-align:text-top; }
    sub{vertical-align:text-bottom; }
    legend { color:#000; }
    fieldset, img { border:0; }
    button, input, select, textarea { font-size:100%; }
    table { border-collapse:collapse;border-spacing:0; }

      

  • absolute的containing block計算方式跟正常流有什麼不同?

  • position跟display、margin collapse、overflow、float這些特性相互疊加後會怎麼樣?

  • 對BFC規範的理解?

    (W3C CSS 2.1 規範中的一個概念,它決定了元素如何對其內容進行定位,以及與其他元素的關 系和相互作用。)
    
  • css定義的權重

    以下是權重的規則:標籤的權重爲1,class的權重爲10,id的權重爲100,以下例子是演示各種定義的權重值:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /*權重爲1*/
    div{
    }
    /*權重爲10*/
    .class1{
    }
    /*權重爲100*/
    #id1{
    }
    /*權重爲100+1=101*/
    #id1 div{
    }
    /*權重爲10+1=11*/
    .class1 div{
    }
    /*權重爲10+10+1=21*/
    .class1 .class2 div{
    }

      

    如果權重相同,則最後定義的樣式會起作用,但是應該避免這種情況出現 
  • 解釋下浮動和它的工作原理?清除浮動的技巧

  • 用過媒體查詢,針對移動端的佈局嗎?

  • 使用 CSS 預處理器嗎?喜歡那個?

    SASS 
    

JavaScript

  • JavaScript原型,原型鏈 ? 有什麼特點?

  • eval是做什麼的?

    它的功能是把對應的字符串解析成JS代碼並運行;
    應該避免使用eval,不安全,非常耗性能(2次,一次解析成js語句,一次執行)。
    
  • null,undefined 的區別?

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    // event(事件)工具集,來源:github.com/markyun
     markyun.Event = {
         // 頁面加載完成後
         readyEvent : function(fn) {
             if (fn==null) {
                 fn=document;
             }
             var oldonload = window.onload;
             if (typeof window.onload != 'function') {
                 window.onload = fn;
             } else {
                 window.onload = function() {
                     oldonload();
                     fn();
                 };
             }
         },
         // 視能力分別使用dom0||dom2||IE方式 來綁定事件
         // 參數: 操作的元素,事件名稱 ,事件處理程序
         addEvent : function(element, type, handler) {
             if (element.addEventListener) {
                 //事件類型、需要執行的函數、是否捕捉
                 element.addEventListener(type, handler, false);
             } else if (element.attachEvent) {
                 element.attachEvent('on' + type, function() {
                     handler.call(element);
                 });
             } else {
                 element['on' + type] = handler;
             }
         },
         // 移除事件
         removeEvent : function(element, type, handler) {
             if (element.removeEnentListener) {
                 element.removeEnentListener(type, handler, false);
             } else if (element.datachEvent) {
                 element.detachEvent('on' + type, handler);
             } else {
                 element['on' + type] = null;
             }
         },
         // 阻止事件 (主要是事件冒泡,因爲IE不支持事件捕獲)
         stopPropagation : function(ev) {
             if (ev.stopPropagation) {
                 ev.stopPropagation();
             } else {
                 ev.cancelBubble = true;
             }
         },
         // 取消事件的默認行爲
         preventDefault : function(event) {
             if (event.preventDefault) {
                 event.preventDefault();
             } else {
                 event.returnValue = false;
             }
         },
         // 獲取事件目標
         getTarget : function(event) {
             return event.target || event.srcElement;
         },
         // 獲取event對象的引用,取到事件的所有信息,確保隨時能使用event;
         getEvent : function(e) {
             var ev = e || window.event;
             if (!ev) {
                 var c = this.getEvent.caller;
                 while (c) {
                     ev = c.arguments[0];
                     if (ev && Event == ev.constructor) {
                         break;
                     }
                     c = c.caller;
                 }
             }
             return ev;
         }
     };

      

  • Node.js的適用場景?

    高併發、聊天、實時消息推送
    
  • 介紹js的基本數據類型。

    number,string,boolean,object,undefined
    
  • Javascript如何實現繼承?

    通過原型和構造器
    
  • ["1", "2", "3"].map(parseInt) 答案是多少?

     [1, NaN, NaN] 因爲 parseInt 需要兩個參數 (val, radix) 但 map 傳了 3 個 (element, index, array)
    
  • 如何創建一個對象? (畫出此對象的內存圖)

    1
    2
    3
    4
    5
    function Person(name, age) {
       this.name = name;
       this.age = age;
       this.sing = function() { alert(this.name) }
     }

      

  • 談談This對象的理解。

    this是js的一個關鍵字,隨着函數使用場合不同,this的值會發生變化。
    
    但是有一個總原則,那就是this指的是調用函數的那個對象。
    
    this一般情況下:是全局對象Global。 作爲方法調用,那麼this就是指這個對象 
    
  • 事件是?IE與火狐的事件機制有什麼區別? 如何阻止冒泡?

     1. 我們在網頁中的某個操作(有的操作對應多個事件)。例如:當我們點擊一個按鈕就會產生一個事件。是可以被 JavaScript 偵測到的行爲。  
     2. 事件處理機制:IE是事件冒泡、火狐是 事件捕獲;
     3. ev.stopPropagation();
    
  • 什麼是閉包(closure),爲什麼要用它?

    執行say667()後,say667()閉包內部變量會存在,而閉包內部函數的內部變量不會存在.使得Javascript的垃圾回收機制GC不會收回say667()所佔用的資源,因爲say667()的內部函數的執行需要依賴say667()中的變量。這是對閉包作用的非常直白的描述.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      function say667() {
        // Local variable that ends up within closure
        var num = 666;
        var sayAlert = function() { alert(num); }
        num++;
        return sayAlert;
    }
     
     var sayAlert = say667();
     sayAlert()//執行結果應該彈出的667 

      

  • "use strict";是什麼意思 ? 使用它的好處和壞處分別是什麼?

  • 如何判斷一個對象是否屬於某個類?

      使用instanceof (待完善)
    
       if(a instanceof Person){
           alert('yes');
       }
    
  • new操作符具體幹了什麼呢?

         1、創建一個空對象,並且 this 變量引用該對象,同時還繼承了該函數的原型。
         2、屬性和方法被加入到 this 引用的對象中。
         3、新創建的對象由 this 所引用,並且最後隱式的返回 this 。
    
    var obj  = {};
    obj.__proto__ = Base.prototype;
    Base.call(obj); 
    
  • Javascript中,有一個函數,執行時對象查找時,永遠不會去查找原型,這個函數是?

    hasOwnProperty
    
  • JSON 的瞭解?

    JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。
    它是基於JavaScript的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小
    {'age':'12', 'name':'back'}
    
  • js延遲加載的方式有哪些?

    defer和async、動態創建DOM方式(用得最多)、按需異步載入js
    
  • ajax 是什麼?

  • 同步和異步的區別?

  • 如何解決跨域問題?

    jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面
    
  • 模塊化怎麼做?

    立即執行函數,不暴露私有成員

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var module1 = (function(){
        var _count = 0;
        var m1 = function(){
          //...
        };
        var m2 = function(){
          //...
        };
        return {
          m1 : m1,
          m2 : m2
        };
      })();

      

  • AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規範區別?

  • 異步加載的方式有哪些?

      (1) defer,只支持IE
    
      (2) async:
    
      (3) 創建script,插入到DOM中,加載完畢後callBack
    
  • documen.write和 innerHTML的區別

document.write只能重繪整個頁面

innerHTML可以重繪頁面的一部分

  • .call() 和 .apply() 的區別?

      例子中用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果爲:alert(4); 
    
      注意:js 中的函數其實是對象,函數名是對 Function 對象的引用。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function add(a,b)
    {
        alert(a+b);
    }
     
    function sub(a,b)
    {
        alert(a-b);
    }
     
    add.call(sub,3,1); 

      

  • Jquery與jQuery UI 有啥區別?

    *jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。
    
    *jQuery UI則是在jQuery的基礎上,利用jQuery的擴展性,設計的插件。
     提供了一些常用的界面元素,諸如對話框、拖動行爲、改變大小行爲等等
    
  • JQuery的源碼看過嗎?能不能簡單說一下它的實現原理?

  • jquery 中如何將數組轉化爲json字符串,然後再轉化回來?

jQuery中沒有提供這個功能,所以你需要先編寫兩個jQuery的擴展:

1
2
3
4
5
6
7
$.fn.stringifyArray = function(array) {
      return JSON.stringify(array)
  }
 
  $.fn.parseArray = function(array) {
      return JSON.parse(array)
  }

  

然後調用:
1
$("").stringifyArray(array)

  

  • 針對 jQuery 的優化方法?

    *基於Class的選擇性的性能相對於Id選擇器開銷很大,因爲需遍歷所有DOM元素。
    
    *頻繁操作的DOM,先緩存起來再操作。用Jquery的鏈式調用更好。   
     比如:var str=$("a").attr("href");
    
    *for (var i = size; i < arr.length; i++) {}
     for 循環每一次循環都查找了數組 (arr) 的.length 屬性,在開始循環的時候設置一個變量來存儲這個數字,可以讓循環跑得更快: 
     for (var i = size, length = arr.length; i < length; i++) {}
    
  • JavaScript中的作用域與變量聲明提升?

  • 如何編寫高性能的Javascript?

  • 那些操作會造成內存泄漏?

    內存泄漏指任何對象在您不再擁有或需要它之後仍然存在。
    垃圾回收器定期掃描對象,並計算引用了每個對象的其他對象的數量。如果一個對象的引用數量爲 0(沒有其他對象引用過該對象),或對該對象的惟一引用是循環的,那麼該對象的內存即可回收。
    
    setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄漏。
    閉包、控制檯日誌、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)
    
  • JQuery一個對象可以同時綁定多個事件,這是如何實現的?

其他問題

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

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

  • 頁面重構怎麼操作?

  • 列舉IE 與其他瀏覽器不一樣的特性?

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

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

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

  • 對Node的優點和缺點提出了自己的看法?

    *(優點)因爲Node是基於事件驅動和無阻塞的,所以非常適合處理併發請求,
      因此構建在Node上的代理服務器相比其他技術實現(如Ruby)的服務器表現要好得多。
      此外,與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,
      因此客戶端和服務器端都用同一種語言編寫,這是非常美妙的事情。
    
    *(缺點)Node是一個相對新的開源項目,所以不太穩定,它總是一直在變,
      而且缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子。
    
  • 你有哪些性能優化的方法?

     (看雅虎14條性能優化原則)。
    
      (1) 減少http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN託管,data緩存 ,圖片服務器。
    
      (2) 前端模板 JS+數據,減少由於HTML標籤導致的帶寬浪費,前端用變量保存AJAX請求結果,每次操作本地變量,不用請求,減少請求次數
    
      (3) 用innerHTML代替DOM操作,減少DOM操作次數,優化javascript性能。
    
      (4) 當需要設置的樣式很多時設置className而不是直接操作style。
    
      (5) 少用全局變量、緩存DOM節點查找的結果。減少IO讀取操作。
    
      (6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。
    
      (7) 圖片預加載,將樣式表放在頂部,將腳本放在底部  加上時間戳。
    
      (8) 避免在頁面的主體佈局中使用table,table要等其中的內容完全下載之後纔會顯示出來,顯示比div+css佈局慢。
    
  • http狀態碼有那些?分別代表是什麼意思?

    100-199 用於指定客戶端應相應的某些動作。 
    200-299 用於表示請求成功。 
    300-399 用於已經移動的文件並且常被包含在定位頭信息中指定新的地址信息。 
    400-499 用於指出客戶端的錯誤。400    1、語義有誤,當前請求無法被服務器理解。401   當前請求需要用戶驗證 403  服務器已經理解請求,但是拒絕執行它。
    500-599 用於支持服務器錯誤。 503 – 服務不可用
    
  • 一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什麼?(流程說的越詳細越好)

        查找瀏覽器緩存 
        DNS解析、查找該域名對應的IP地址、重定向(301)、發出第二個GET請求
        進行HTTP協議會話
        客戶端發送報頭(請求報頭)
        服務器回饋報頭(響應報頭)
        html文檔開始下載
        文檔樹建立,根據標記請求所需指定MIME類型的文件
        文件顯示
        [
        瀏覽器這邊做的工作大致分爲以下幾步:
    
        加載:根據請求的URL進行域名解析,向服務器發起請求,接收文件(HTML、JS、CSS、圖象等)。
    
        解析:對加載到的資源(HTML、JS、CSS等)進行語法解析,建議相應的內部數據結構(比如HTML的DOM樹,JS的(對象)屬性表,CSS的樣式規則等等)
        }
    
  • 除了前端以外還了解什麼其它技術麼?你最最厲害的技能是什麼?

  • 你常用的開發工具是什麼,爲什麼?

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

         前端是最貼近用戶的程序員,比後端、數據庫、產品經理、運營、安全都近。
        1、實現界面交互
        2、提升用戶體驗
        3、有了Node.js,前端可以實現服務端的一些事情
    
    前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好,
    
     參與項目,快速高質量完成實現效果圖,精確到1px;
    
     與團隊成員,UI設計,產品經理的溝通;
    
     做好的頁面結構,頁面重構和用戶體驗;
    
     處理hack,兼容、寫出優美的代碼格式;
    
     針對服務器的優化、擁抱最新前端技術。
    
  • 加班的看法?

    加班就像借錢,原則應當是------救急不救窮
    
  • 平時如何管理你的項目?

            先期團隊必須確定好全局樣式(globe.css),編碼模式(utf-8) 等
    
            編寫習慣必須一致(例如都是採用繼承式的寫法,單樣式都寫成一行);
    
            標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方);
    
            頁面進行標註(例如 頁面 模塊 開始和結束);
    
            CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css)
    
            JS 分文件夾存放 命民以該JS 功能爲準英文翻譯;
    
            圖片採用整合的 images.png png8 格式文件使用 儘量整合在一起使用方便將來的管理
    
  • 如何設計突發大規模併發架構?

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

        Node.js、Mongodb、npm、MVVM、MEAN、three.js
    
  • 移動端(Android IOS)怎麼做好用戶體驗?

        清晰的視覺縱線、信息的分組、極致的減法、
        利用選擇代替輸入、標籤及文字的排布方式、
        依靠明文確認密碼、合理的鍵盤利用、
    
  • 你在現在的團隊處於什麼樣的角色,起到了什麼明顯的作用?

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

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

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

  • 如何管理前端團隊?

  • 最近在學什麼?能談談你未來3,5年給自己的規劃嗎?

  • 想問公司的問題?

        問公司問題:
        目前關注哪些最新的Web前端技術(未來的發展方向)?
        前端團隊如何工作的(實現一個產品的流程)?
        公司的薪資結構是什麼樣子的?

優質網站推薦

  1. 前端週刊: http://www.feweekly.com/issues
  2. 夢想天空:http://www.cnblogs.com/lhb25/ 

  3. 極客頭條: http://geek.csdn.net/

  4. Startup News:http://news.dbanotes.net/

  5. Hacker News: https://news.ycombinator.com/news

  6. InfoQ: http://www.infoq.com/

  7. w3cplus: http://www.w3cplus.com/

  8. Stack Overflow: http://stackoverflow.com/

  9. Atp: http://atp-posts.b0.upaiyun.com/posts/

 文章來源:http://blog.csdn.net/piaoxuetianya1/article/details/38338055

發佈了20 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章