天天看點

2014年最新前端開發面試題(面霸題庫)HTML、CSS部分JavaScript部分其他部分

原文位址為: 2014年最新前端開發面試題(面霸題庫)

歡迎加入Javascript前端技術,群号為:85088298  本人部落格已經遷移至jruif.github.io

The last time that refresh: 2014/3/11 13:47:07

本文總結了一些常見前端面試(多數源于網絡),希望閱後也要用心鑽研其中的原理,重要知識需要系統學習,透徹學習,形成自己的知識鍊。

萬不可投機取巧。隻求當時過關,非長久之計也!

面試有幾點需要注意:(來源程劭非老師 Github:@wintercn | Weibo:寒冬winter)

  1. 面試題目: 根據你的等級和職位變化,入門級到專家級:範圍↑、深度↑、方向↑。
  2. 題目類型: 技術視野、項目細節、理論知識型題,算法題,開放性題,案例題。
  3. 進行追問: 可以確定問到你開始不懂或者面試官開始不懂為止,這樣可以大大延展題目的區分度和深度,知道你的實際能力。因為這種關聯知識是長時期的學習,絕對不是臨時記得住。
  4. 回答問題再棒,面試官(一般是你的直接上司面試),會考慮我要不要這個人做我的同僚?是以态度很重要。(感覺像是相親一樣)
  5. 資深的工程師能把absolute和relative弄混,這樣的人不要也罷,因為團隊需要的你這個人具有可以依靠的才能(靠譜)。

另外:

資料剛剛收集,覆寫面比較廣,包括了web端、移動端的知識點,根據你自己的需要選擇性閱讀即可。

再次提一下: 看 或 背 面試題不像學校考試,死記硬背是沒什麼用的,看面試題是對理論知識的總結讓自己表達的時候知道怎麼說。

答案有些不夠正确和全面,問題問的不夠好,歡迎補充你所知道的答案、技巧、題目;最好是現在網上找不到的。

格式不斷修改更新中。

HTML、CSS部分

要點:對Web标準的了解、浏覽器差異、CSS基本功:布局、盒子模型、選擇器優先級及使用、HTML5、CSS3、移動端開發 技術等

1.Doctype作用? 嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義?

(1)、<!DOCTYPE> 聲明位于文檔中的最前面,處于 <html> 标簽之前。告知浏覽器的解析器,用什麼文檔類型 規範來解析這個文檔。 

 (2)、嚴格模式的排版和 JS 運作模式是 以該浏覽器支援的最高标準運作。

 (3)、在混雜模式中,頁面以寬松的向後相容的方式顯示。模拟老式浏覽器的行為以防止站點無法工作。

 (4)、DOCTYPE不存在或格式不正确會導緻文檔以混雜模式呈現。
           

2.行内元素有哪些?塊級元素有哪些? 空(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>
           

3.CSS的盒子模型?

(1)兩種, IE 盒子模型、标準 W3C 盒子模型;IE 的content部分包含了 border 和 pading;

(2)盒模型: 内容(content)、填充(padding)、邊界(margin)、 邊框(border).
           

4.link 和@import 的差別是?

(1)、link屬于XHTML标簽,而@import是CSS提供的;

 (2)、頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;

 (3)、import隻在IE5以上才能識别,而link是XHTML标簽,無相容問題;

 (4)、link方式的樣式的權重 高于@import的權重.
           

5.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,單選框或複選框被選中。
           

6.如何居中div,如何居中一個浮動元素?

  • 給div設定一個寬度,然後添加margin:0 auto屬性
    div{
     width:200px;
     margin:0 auto;
     } 
               
  • 居中一個浮動元素
    确定容器的寬高 寬500 高 300 的層
     設定層的外邊距
    
     .div { 
     Width:500px ; height:300px;//高度可以不設
     Margin: -150px 0 0 -250px;
     position:relative;相對定位
     background-color:pink;//友善看效果
     left:50%;
     top:50%;
     } 
               

7.浏覽器的核心分别是什麼?經常遇到的浏覽器的相容性有哪些?原因,解決方法是什麼,常用hack的技巧 ?

* IE浏覽器的核心Trident、 Mozilla的Gecko、google的WebKit、Opera核心Presto;

 * 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
 .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 {}
           

8.html5\CSS3有哪些新特性、移除了那些元素?如何處理HTML5新标簽的浏覽器相容問題?如何區分 HTML 和 HTML5?

  • HTML5 現在已經不是 SGML 的子集,主要是關于圖像,位置,存儲,地理定位等功能的增加。
    * 繪畫 canvas 元素
    
     用于媒介回放的 video 和 audio 元素
    
     本地離線存儲 localStorage 長期存儲資料,浏覽器關閉後資料不丢失;
     sessionStorage 的資料在浏覽器關閉後自動删除
    
     語意化更好的内容元素,比如 article、footer、header、nav、section
    
     表單控件,calendar、date、time、email、url、search
    
     CSS3實作圓角,陰影,對文字加特效,增加了更多的CSS選擇器 多背景 rgba
    
     新的技術webworker, websockt, Geolocation
               
  • 移除的元素
    純表現的元素:basefont,big,center,font, s,strike,tt,u;
    
    對可用性産生負面影響的元素:frame,frameset,noframes;
    
    * 是IE8/IE7/IE6支援通過document.createElement方法産生的标簽,
     可以利用這一特性讓這些浏覽器支援HTML5新标簽,
    
     浏覽器支援新标簽後,還需要添加标簽預設的樣式:
    
    * 當然最好的方式是直接使用成熟的架構、使用最多的是html5shim架構
     <!--[if lt IE 9]> 
     <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script> 
     <![endif]--> 
               

9.你怎麼來實作頁面設計圖,你認為前端應該如何高品質完成工作? 一個滿屏 品 字布局 如何設計?

* 首先劃分成頭部、body、腳部;。。。。。 

* 
 實作效果圖是最基本的工作,精确到2px;

 與設計師,産品經理的溝通和項目的參與

 做好的頁面結構,頁面重構和使用者體驗

 處理hack,相容、寫出優美的代碼格式

 針對伺服器的優化、擁抱 HTML5。
           

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

* 使用率較高的架構有jQuery、YUI、Prototype、Dojo、Ext.js、Mootools等。尤其是jQuery,超過91%。

 輕量級架構有Modernizr、underscore.js、backbone.js、Raphael.js等。
 (了解這些架構的功能、性能、設計原理)

 * Sublime Text 、Eclipse、Notepad、Firebug、HttpWatch、Yslow。

 * 城市選擇插件,汽車型号選擇插件、幻燈片插件。彈出層。(寫過開源程式,加載器,js引擎更好)
           
  1. JavaScript原型,原型鍊 ? 有什麼特點?
    * 原型對象也是普通的對象,是對象一個自帶隐式的 __proto__ 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不為null的話,我們就稱之為原型鍊。
    * 原型鍊是由一些用來繼承和共享屬性的對象組成的(有限的)對象鍊。
    
    * JavaScript的資料對象有那些屬性值?
    
      writable:這個屬性的值是否可以改。
    
      configurable:這個屬性的配置是否可以删除,修改。
    
      enumerable:這個屬性是否能在for…in循環中周遊出來或在Object.keys中列舉出來。
    
      value:屬性值。
    
    * 當我們需要一個屬性的時,Javascript引擎會先看目前對象中是否有這個屬性, 如果沒有的話,就會查找他的Prototype對象是否有這個屬性。
    
     function clone(proto) {
    
      function Dummy() { }
    
      Dummy.prototype = proto;
    
      Dummy.prototype.constructor = Dummy;
    
      return new Dummy(); //等價于Object.create(Person);
    
     } 
    
     function object(old) {
         function F() {};
         F.prototype = old;
         return new F();
     }
     var newObj = object(oldObject);
               

12.列出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 屬性的值。
           

13.頁面重構怎麼操作?

編寫 CSS、讓頁面結構更合理化,提升使用者體驗,實作良好的頁面效果和提升性能。
           

14.語義化的了解?

html語義化就是讓頁面的内容結構化,便于對浏覽器、搜尋引擎解析;
在沒有樣式CCS情況下也以一種文檔格式顯示,并且是容易閱讀的。
搜尋引擎的爬蟲依賴于标記來确定上下文和各個關鍵字的權重,利于 SEO。
使閱讀源代碼的人對網站更容易将網站分塊,便于閱讀維護了解。
           

15.HTML5的離線儲存?

localStorage 長期存儲資料,浏覽器關閉後資料不丢失;
sessionStorage 資料在浏覽器關閉後自動删除。
           

16.為什麼要初始化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; } 
           

17.(寫)描述一段語義的html代碼吧。

(HTML5中新增加的很多标簽(如:<article>、<nav>、<header>和<footer>等)
 就是基于語義化設計原則) 

 < div id="header"> 
 < h1>标題< /h1> 
 < h2>專注Web前端技術< /h2> 
 < /div>
           
  • 語義 HTML 具有以下特性:
    文字包裹在元素中,用以反映内容。例如:
    段落包含在 <p> 元素中。
    順序表包含在<ol>元素中。
    從其他來源引用的大型文字塊包含在<blockquote>元素中。
    HTML 元素不能用作語義用途以外的其他目的。例如:
    <h1>包含标題,但并非用于放大文本。
    <blockquote>包含大段引述,但并非用于文本縮進。
    空白段落元素 ( <p></p> ) 并非用于跳行。
    文本并不直接包含任何樣式資訊。例如:
    不使用 <font> 或 <center> 等格式标記。
    類或 ID 中不引用顔色或位置。
               

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

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

20.對BFC規範的了解?(W3C CSS 2.1 規範中的一個概念,它決定了元素如何對其内容進行定位,以及與其他元素的關 系和互相作用。)

21.iframe有那些缺點?

*iframe會阻塞首頁面的Onload事件;

 *iframe和首頁面共享連接配接池,而浏覽器對相同域的連接配接有限制,是以會影響頁面的并行加載。
 使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript
 動态給iframe添加src屬性值,這樣可以可以繞開以上兩個問題。
           

22.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{
} 

如果權重相同,則最後定義的樣式會起作用,但是應該避免這種情況出現
           

23.eval是做什麼的?

它的功能是把對應的字元串解析成JS代碼并運作;
避免使用eval,不安全,非常耗性能(2次,一次解析成js語句,一次執行)。
           

23.寫一個通用的事件偵聽器函數

`// event(事件)工具集,來源:https://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;
 }
}; 
           

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

* 網站重構:應用web标準進行設計(第2版)
           

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

優雅降級:Web站點在所有新式浏覽器中都能正常工作,如果使用者使用的是老式浏覽器,則代碼會檢查以确認它們是否能正常工作。由于IE獨特的盒模型布局問題,針對不同版本的IE的hack實踐過優雅降級了,為那些無法支援功能的浏覽器增加候選方案,使之在舊式浏覽器上以某種形式降級體驗卻不至于完全失效.

漸進增強:從被所有浏覽器支援的基本功能開始,逐漸地添加那些隻有新式浏覽器才支援的功能,向頁面增加無害于基礎浏覽器的額外樣式和功能的。當浏覽器支援時,它們會自動地呈現出來并發揮作用。
           

26.Node.js的适用場景

高并發、聊天、實時消息推送
           

27.WEB應用從伺服器主動推送Data到用戶端有那些方式?

html5 websoket
 WebSocket通過Flash
 XHR長時間連接配接
 XHR Multipart Streaming
 不可見的Iframe
 <script>标簽的長時間連接配接(可跨域)
           

JavaScript部分

要點: 資料類型、面向對象、繼承、閉包、插件、作用域、跨域、原型鍊、子產品化、自定義事件、異步裝載回調、模闆引擎、Nodejs等。
           
js的幾種資料類型:number,string,boolean,object,undefined

js的常見内置對象類:Date,Array,Math、Number、Boolean、String、Array、RegExp、Function...
           
  • 通常可以做一些小練習來判斷TA的水準,js 雖然很靈活,但是具體的代碼和實作方式能展現出一個人的全局觀,随着代碼規模的增長,複雜度增加,如何合理劃分子產品實作功能和接口的能力比較重要。(下面例題)
    ["1", "2", "3"].map(parseInt)
    
    [typeof null, null instanceof Object]
    
    [ [3,2,1].reduce(Math.pow), [].reduce(Math.pow)] ]
    
     var val = 'smtg';
     console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');
               

1.建立一個對象

function Person(name, age) {
 this.name = name;
 this.age = age;
 this.sing = function() { alert(this.name) } 
 } 
           

2.談談This對象的了解。

this是js的一個關鍵字,随着函數使用場合不同,this的值會發生變化。

但是總有一個原則,那就是this指的是調用函數的那個對象。

this一般情況下:是全局對象Global。 作為方法調用,那麼this就是指這個對象
           

3.事件、IE與火狐的事件機制有什麼差別? 如何阻止冒泡?

1. 我們在網頁中的某個操作(有的操作對應多個事件)。例如:當我們點選一個按鈕就會産生一個事件。是可以被 JavaScript 偵測到的行為。 
 2. 事件處理機制:IE是事件冒泡、火狐是 事件捕獲;
 3. ev.stopPropagation();
           

4.什麼是閉包(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 
               

5.如何判斷一個對象是否屬于某個類?

使用instanceof (待完善)

if(a instanceof Person){
 alert('yes');
 }
           

6.new操作符具體幹了什麼呢?

1、建立一個空對象,并且 this 變量引用該對象,同時還繼承了該函數的原型。
 2、屬性和方法被加入到 this 引用的對象中。
 3、新建立的對象由 this 所引用,并且最後隐式的傳回 this 。

 var obj = {};
 obj.__proto__ = Base.prototype;
 Base.call(obj); 
           

7.JSON 的了解

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

8.js延遲加載的方式有哪些

  • defer和async、動态建立DOM方式(用得最多)、按需異步載入js

9.ajax 是什麼?ajax 的互動模型?同步和異步的差別?如何解決跨域問題?

  • 待完善
    1. 通過異步模式,提升了使用者體驗
    
     2. 優化了浏覽器和伺服器之間的傳輸,減少不必要的資料往返,減少了帶寬占用
    
     3. Ajax在用戶端運作,承擔了一部分本來由伺服器承擔的工作,減少了大使用者量下的伺服器負載。
    
     2. Ajax的最大的特點是什麼。
    
     Ajax可以實作動态不重新整理(局部重新整理)
     readyState屬性 狀态 有5個可取值: 0=未初始化 ,1=正在加載 2=以加載,3=互動中,4=完成
               
  • ajax的缺點
    1、ajax不支援浏覽器back按鈕。
    
     2、安全問題 AJAX暴露了與伺服器互動的細節。
    
     3、對搜尋引擎的支援比較弱。
    
     4、破壞了程式的異常機制。
    
     5、不容易調試。
               
  • 跨域: jsonp、 iframe、window.name、window.postMessage、伺服器上設定代理頁面

10.子產品化怎麼做?

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

var module1 = (function(){
    var _count = 0;
    var m1 = function(){
      //...
    };
    var m2 = function(){
      //...
    };
    return {
      m1 : m1,
      m2 : m2
    };
  })(); 
           

11.對Node的優點和缺點提出了自己的看法:

*(優點)因為Node是基于事件驅動和無阻塞的,是以非常适合處理并發請求,
 是以建構在Node上的代理伺服器相比其他技術實作(如Ruby)的伺服器表現要好得多。
 此外,與Node代理伺服器互動的用戶端代碼是由javascript語言編寫的,
 是以用戶端和伺服器端都用同一種語言編寫,這是非常美妙的事情。

 *(缺點)Node是一個相對新的開源項目,是以不太穩定,它總是一直在變,
 而且缺少足夠多的第三方庫支援。看起來,就像是Ruby/Rails當年的樣子。
           

12.異步加載的方式

(1) defer,隻支援IE

 (2) async:

 (3) 建立script,插入到DOM中,加載完畢後callBack

 documen.write和 innerHTML的差別

 document.write隻能重繪整個頁面

 innerHTML可以重繪頁面的一部分
           

13.告訴我答案是多少?

(function(x){
 delete x;
 alert(x);
})(1+5);

函數參數無法delete删除,delete隻能删除通過for in通路的屬性。
當然,删除失敗也不會報錯,是以代碼運作會彈出“1”。
           

14.JS中的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); 
           

15.Jquery與jQuery UI 有啥差別?

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

 *jQuery UI則是在jQuery的基礎上,利用jQuery的擴充性,設計的插件。
 提供了一些常用的界面元素,諸如對話框、拖動行為、改變大小行為等等
           

16.jquery 中如何将數組轉化為json字元串,然後再轉化回來?

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

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

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

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

17.JavaScript中的作用域與變量聲明提升?

其他部分

(HTTP、正則、優化、重構、響應式、移動端、團隊協作、SEO、UED、職業生涯)

*基于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++) {}
           
  • 前端開發的優化問題(看雅虎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 到頁面加載顯示完成,這個過程中都發生了什麼?(流程說的越詳細越好)

你所知道的頁面性能優化方法有那些?

除了前端以外還了解什麼其它技術麼?你最最厲害的技能是什麼?

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

18.談談你認為怎樣做能是項目做的更好?

19.你對前端界面工程師這個職位是怎麼樣了解的?它的前景會怎麼樣?

20.加班的看法

加班就像借錢,原則應當是------救急不救窮
           

21.平時如何管理你的項目,如何設計突發大規模并發架構?

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

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

标注樣式編寫人,各子產品都及時标注(标注關鍵樣式調用的地方);

頁面進行标注(例如 頁面 子產品 開始和結束);

CSS跟HTML 分檔案夾并行存放,命名都得統一(例如style.css)

JS 分檔案夾存放 命民以該JS 功能為準英文翻譯;

圖檔采用整合的 images.png png8 格式檔案使用 盡量整合在一起使用友善将來的管理
           
  1. 那些操作會造成記憶體洩漏?
    記憶體洩漏指任何對象在您不再擁有或需要它之後仍然存在。
    垃圾回收器定期掃描對象,并計算引用了每個對象的其他對象的數量。如果一個對象的引用數量為 0(沒有其他對象引用過該對象),或對該對象的惟一引用是循環的,那麼該對象的記憶體即可回收。
    
    setTimeout 的第一個參數使用字元串而非函數的話,會引發記憶體洩漏。
    閉包、控制台日志、循環(在兩個對象彼此引用且彼此保留時,就會産生一個循環)
               

23.你說你熱愛前端,那麼應該WEB行業的發展很關注吧? 說說最近最流行的一些東西吧?

Node.js、Mongodb、npmM、MVVM、MEAN
           

24.你有了解我們公司嗎?說說你的認識?

因為我想去阿裡,是以我針對阿裡的說
 最羨慕就是在雙十一購物節,350.19億元,每分鐘支付79萬筆。海量資料,居然無一漏單、無一故障。太厲害了。
           

25.移動端(比如:Android IOS)怎麼做好使用者體驗?

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

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

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

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

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

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

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

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

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

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

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


 他們也許不懂互動設計,但是沒人比他們懂互動設計的實作,和每一個細節。
 他們也許不懂視覺設計,但是沒人比他們懂視覺設計如何變為現實。
 他們也許不懂背景資料庫,但是他們其實才是資料的第一消費者。
 他們也許不是産品經理,但是産品的品質幾乎都是由他們來決定。


 什麼都略懂一點生活更美好! 

 愛機車、愛騎行、愛旅行、愛攝影、愛閱讀的理想青年,前端開發攻城師。

 我的微網誌:http://weibo.com/920802999                


轉載自:https://github.com/markyun/My-blog/tree/master/Front-end-Developer-Questions      

轉載請注明本文位址: 2014年最新前端開發面試題(面霸題庫)

繼續閱讀