1. 程式人生 > >2019最新前端面試寶典

2019最新前端面試寶典

開發十年,就只剩下這套架構體系了! >>>   

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

##HTML&CSS:

對Web標準的理解、瀏覽器核心差異、相容性、hack、CSS基本功:佈局、盒子模型、選擇器優先順序及使用、HTML5、CSS3、移動端適應

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> 標籤之前。告知瀏覽器的解析器,用什麼文件型別 規範來解析這個文件。 //在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力 (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 h5 h6 p 等 //在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力 (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 .bb{
2    background-color:#f1ee18; /*所有識別*/
3   .background-color:#00deff\9;  /*IE6、7、8識別*/
5   +background-color:#a200ff;  /*IE6、7識別*/
6   _background-color:#1e0bd1; /*IE6識別*/
7   }

1.IE下,可以使用獲取常規屬性的方法來獲取自定義屬性, 也可以使用getAttribute()獲取自定義屬性; Firefox下,只能使用getAttribute()獲取自定義屬性. 解決方法:統一通過getAttribute()獲取自定義屬性.

2.IE下,event物件有x,y屬性,但是沒有pageX,pageY屬性; Firefox下,event物件有pageX,pageY屬性,但是沒有x,y屬性. 解決方法:(條件註釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數。

3.Chrome 中文介面下預設會將小於 12px 的文字強制按照 12px 顯示, 可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.

4.超連結訪問過後hover樣式就不出現了 被點選訪問過的超連結樣式不在具有hover和active了, 解決方法是改變CSS屬性的排列順序: L-V-H-A : a:link { } ,a:visited { } ,a:hover { } ,a:active { } ; HTML5有哪些新特性、移除了那些元素?如何處理html5新標籤的瀏覽器相容問題?如何區分 HTML 和 Html5?

1.HTML5 現在已經不是 SGML 的子集,主要是關於影象,位置,儲存,多工等功能的增加。

2.繪畫 canvas

用於媒介回放的 video 和 audio 元素 本地離線儲存 localStorage 長期儲存資料,瀏覽器關閉後資料不丟失; sessionStorage 的資料在瀏覽器關閉後自動刪除. 語意化更好的內容元素,比如 article、footer、header、nav、section 表單控制元件,calendar、date、time、email、url、search 新的技術webworker, websocket, Geolocation

3.移除的元素

純表現的元素:basefont,big,center,font, s,strike,tt,u; 對可用性產生負面影響的元素:frame,frameset,noframes;

支援HTML5新標籤:

IE8/IE7/IE6支援通過document.createElement方法產生的標籤, 可以利用這一特性讓這些瀏覽器支援HTML5新標籤, 瀏覽器支援新標籤後,還需要新增標籤預設的樣式: 當然最好的方式是直接使用成熟的框架、使用最多的是html5shiv框架

<!--[if lt IE 9]> <script type="text/javascript" src="js/html5shiv.js"></script> <![endif]-->

如何區分: DOCTYPE宣告新增的結構元素\功能元素 語義化的理解? 1.用正確的標籤做正確的事情! 2.html語義化就是讓頁面的內容結構化,便於對瀏覽器、搜尋引擎解析; 3.在沒有樣式CCS情況下也以一種文件格式顯示,並且是容易閱讀的。 4.搜尋引擎的爬蟲依賴於標記來確定上下文和各個關鍵字的權重,利於 SEO。 5.使閱讀原始碼的人對網站更容易將網站分塊,便於閱讀維護理解。 HTML5的離線儲存? localStorage 長期儲存資料,瀏覽器關閉後資料不丟失; sessionStorage 資料在瀏覽器關閉後自動刪除。 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屬性

div{
    width:200px;
    margin:0 auto;
 } 

居中一個浮動元素 確定容器的寬高 寬500 高 300 的層 ,設定層的外邊距 //在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力

.div
 { 
  width:500px ;
  height:300px;  //高度可以不設
  margin:-150px  0 0 -250px;
  position:relative;相對定位
  background-color:pink; //方便看效果
  left:50%;
  top:50%;
}

列出display的值,說明他們的作用。列出position的值, relative和absolute定位原點是? display的值 block 象塊型別元素一樣顯示。 none 預設值。象行內元素型別一樣顯示。 inline-block 象行內元素一樣顯示,但其內容象塊型別元素一樣顯示。 list-item 象塊型別元素一樣顯示,並新增樣式列表標記。 2.position的值 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;} (不建議) 淘寶的樣式初始化:

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; } 

css定義的權重

以下是權重的規則:標籤的權重為1,class的權重為10,id的權重為100,以下例子是演示各種定義的權重值:

/*權重為1*/
div{}
/*權重為10*/
.class1{}
/*權重為100*/
#id1{}
/*權重為100+1=101*/
#id1 div{}
/*權重為10+1=11*/
.class1 div{}
/*權重為10+10+1=21*/
.class1 .class2 div{}  

//在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力 如果權重相同,則最後定義的樣式會起作用,但是應該避免這種情況出現 解釋下浮動和它的工作原理?清除浮動的技巧 (1)父級div定義height。 (2)結尾處加空div標籤clear:both。 (3)父級div定義偽類:after和zoom。 (4)父級div定義overflow:hidden。 (5)父級div定義overflow:auto。 (6)父級div也浮動,需要定義寬度。 (7)父級div定義display:table。 (8)結尾處加br標籤clear:both。

JavaScript

eval是做什麼的? 它的功能是把對應的字串解析成JS程式碼並執行; 應該避免使用eval,不安全,非常耗效能(2次,一次解析成js語句,一次執行)。 由JSON字串轉換為JSON物件的時候可以用eval,var obj =eval('('+ str +')')。 null,undefined 的區別? null是一個表示"無"的物件,轉為數值時為0;undefined是一個表示"無"的原始值,轉為數值時為NaN。 undefined: (1)變數被聲明瞭,但沒有賦值時,就等於undefined。 (2) 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。 (3)物件沒有賦值的屬性,該屬性的值為undefined。 (4)函式沒有返回值時,預設返回undefined。 null: (1) 作為函式的引數,表示該函式的引數不是物件。 (2) 作為物件原型鏈的終點。 寫一個通用的事件偵聽器函式。

 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();
             };
         }
     },//在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力
     // 視能力分別使用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)

如何建立一個物件?

function Person(name, age) {
   this.name = name;
   this.age = age;
   this.sing  = function() { 
    alert(this.name);
         } 
   }//在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力

談談This物件的理解

this是js的一個關鍵字,隨著函式使用場合不同,this的值會發生變化。 但是有一個總原則,那就是this指的是呼叫函式的那個物件。 this一般情況下:是全域性物件Global。 作為方法呼叫,那麼this就是指這個物件 事件是?IE與火狐的事件機制有什麼區別? 如何阻止冒泡? 1.我們在網頁中的某個操作(有的操作對應多個事件)。例如:當我們點選一個按鈕就會產生一個事件。是可以被 JavaScript 偵測到的行為。 事件處理機制:IE是事件冒泡、火狐是 事件捕獲; ev.stopPropagation();

什麼是閉包(closure),為什麼要用它?

執行say667()後,say667()內部變數會存在,而閉包內部函式的內部變數不會存在.使得Javascript的垃圾回收機制GC不會收回say667()所佔用的資源,因為say667()的內部函式的執行需要依賴say667()中的變數。這是對閉包作用的非常直白的描述.

  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 

new操作符具體幹了什麼呢? 1、建立一個空物件,並且 this 變數引用該物件,同時還繼承了該函式的原型。 2、屬性和方法被加入到 this 引用的物件中。 3、新建立的物件由 this 所引用,並且最後隱式的返回 this 。 Javascript中,有一個函式,執行物件查詢時,永遠不會去查詢原型,這個函式是? hasOwnProperty

對JSON 的瞭解?

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。 它是基於JavaScript的一個子集。資料格式簡單, 易於讀寫, 佔用頻寬小 {"age":"12", "name":"back"}

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

defer和async、動態建立DOM方式(用得最多)、按需非同步載入js

ajax 是什麼?

同步和非同步的區別? 如何解決跨域問題? jsonp、 iframe、window.name、window.postMessage、伺服器上設定代理頁面 模組化怎麼做? 立即執行函式,不暴露私有成員

var module1 = (function(){
         var _count = 0;
    var m1 = function(){
      //...
    };//在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力
    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 物件的引用。

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的擴充套件:

$.fn.stringifyArray = function(array)
 {
      return JSON.stringify(array)
  }

  $.fn.parseArray = function(array)
 {
      return JSON.parse(array)
  }

然後呼叫: $("").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++) {} 那些操作會造成記憶體洩漏? //在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力 記憶體洩漏指任何物件在您不再擁有或需要它之後仍然存在。 垃圾回收器定期掃描物件,並計算引用了每個物件的其他物件的數量。如果一個物件的引用數量為 0(沒有其他物件引用過該物件),或對該物件的惟一引用是迴圈的,那麼該物件的記憶體即可回收。 setTimeout 的第一個引數使用字串而非函式的話,會引發記憶體洩漏。 閉包、控制檯日誌、迴圈(在兩個物件彼此引用且彼此保留時,就會產生一個迴圈)

JQuery一個物件可以同時繫結多個事件,這是如何實現的?

其他問題 你遇到過比較難的技術問題是?你是如何解決的? 常使用的庫有哪些?常用的前端開發工具?開發過什麼應用或元件? 頁面重構怎麼操作? 列舉IE 與其他瀏覽器不一樣的特性? 99%的網站都需要被重構是那本書上寫的? 什麼叫優雅降級和漸進增強? WEB應用從伺服器主動推送Data到客戶端有那些方式?

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

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

你有哪些效能優化的方法? (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,相容、寫出優美的程式碼格式; 針對伺服器的優化、擁抱最新前端技術。 //在此我向大家推薦一個前端全棧開發交流圈:619586920 突破技術瓶頸,提升思維能力

加班的看法? 加班就像借錢,原則應當是------救急不救窮 平時如何管理你的專案? 先期團隊必須確定好全域性樣式(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前端技術(未來的發展方向)? 前端團隊如何工作的(實現一個產品的流程)? 公司的薪資結構是什麼樣子的?

結語

感謝您的觀看,如有不足之處,