面試題目會根據你的等級和職位變化,入門級到專家級:範圍↑、深度↑、方向↑; 類型: 技術視野、項目細節、理論知識型題,算法題,開放性題,案例題。javascript
進行追問,能夠確保問到你開始不懂或者面試官開始不懂爲止,這樣能夠大大延展題目的區分度和深度,知道你的實際能力。由於這種關聯知識是長時期的學習,絕對不是臨時記得住。css
回答問題再棒,面試官(通常是你頂頭上司面你),會考慮,我要不要這我的作個人同事? 因此態度很重要。html
資深的工程師能把absolute和relative弄混,這樣的人不要也罷,由於團隊須要的你這我的具備能夠依靠的才能(靠譜)。前端
另外:html5
資料剛剛收集,答案有些不夠正確和全面,歡迎補充你所知道的答案、技巧、題目;最好是如今網上找不到的。java
格式不太美觀,容我學一下markdown語法再來排版。jquery
Begin!web
HTML、CSS部分
要點:對Web標準的理解、瀏覽器差別、CSS基本功:佈局、盒子模型、選擇器優先級及使用、HTML五、CSS3技術等
-
Doctype做用? 嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義?面試
(1)、<!DOCTYPE> 聲明位於文檔中的最前面,處於 <html> 標籤以前。告知瀏覽器的解析器, 用什麼文檔類型 規範來解析這個文檔。 (2)、嚴格模式的排版和 JS 運做模式是 以該瀏覽器支持的最高標準運行。 (3)、在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。 (4)、DOCTYPE不存在或格式不正確會致使文檔以混雜模式呈現。
2.行內元素有哪些?塊級元素有哪些?ajax
(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.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 選擇符有哪些?哪些屬性能夠繼承?優先級算法如何計算? em和px有什麼關係?
* ID 和 Class; * Class 可繼承、 font-size font-family color, 列表 UL LI DL DD DT 可繼承; * 不可繼承 :border padding margin width height ; * 優先級就近原則,樣式定義最近者爲準; * 載入樣式以最後載入的定位爲準;
優先級爲:
!important > id > class > tag important 比 內聯優先級高 若是父元素定義字體大小12px,子元素定義1em,大小就是12px。
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: absolute; 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比設置的大。 解決方案是在float的標籤樣式控制中加入 display:inline;將其轉化爲行內屬性。 * 浮動ie產生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px; //這種狀況之下IE會產生20px的距離,這時須要設置display:inline; //使浮動忽略} * 漸進識別的方式,從整體中逐漸排除局部。 * 首先,巧妙的使用「\9」這一標記,將IE遊覽器從全部狀況中分離出來。 接着,再次使用「+」將IE8和IE七、IE6分離開來,這樣IE8已經獨立識別。 ```css .bb{ background-color:#f1ee18;/*全部識別*/ .background-color:#00deff\9; /*IE六、七、8識別*/ +background-color:#a200ff;/*IE六、7識別*/ _background-color:#1e0bd1;/*IE6識別*/ } ``` * IE下,可使用獲取常規屬性的方法來獲取自定義屬性, 也可使用getAttribute()獲取自定義屬性; Firefox下,只能使用getAttribute()獲取自定義屬性. 解決方法:統一經過getAttribute()獲取自定義屬性. * IE下,even對象有x,y屬性,可是沒有pageX,pageY屬性; Firefox下,event對象有pageX,pageY屬性,可是沒有x,y屬性. * (條件註釋)缺點是在IE瀏覽器下可能會增長額外的HTTP請求數。
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
-
移除的元素
純表現的元素: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、Ext.js、Mootools等。尤爲是jQuery,超過91%。 輕量級框架有Modernizr、underscore.js、backbone.js、Raphael.js等。 (理解這些框架的功能、性能、設計原理) * Sublime Text 、Eclipse、Notepad、Firebug、HttpWatch * 城市選擇插件,汽車型號選擇插件、幻燈片插件。彈出層。(寫過開源程序,加載器,js引擎更好)
11.什麼是面向對象,有什麼特色?
* 。。。。。待完善 * 抽象:抽象爲了簡化問題,簡單即美,相信我,人類很笨 * 繼承:爲了便於擴展或改寫原有的功能 Object.create()來實際繼承,(不會看6) demo:var Student = Object.create(Person); Person是父類 * 多態:爲了便於改寫原有的功能 * 封裝:組件化,便於理解、替換與複用,所以系統會更加靈活 *(後文提到封裝XXX時,就不具體說這些優勢了)
-
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的值 相對誰進行定位?
*可用值的說明
block 象塊類型元素同樣顯示。 none 缺省值。向行內元素類型同樣顯示。 inline-block 象行內元素同樣顯示,但其內容象塊類型元素同樣顯示。 list-item 象塊類型元素同樣顯示,並添加樣式列表標記。 * absolute 生成絕對定位的元素,相對於 static 定位之外的第一個父元素進行定位。 *fixed 生成絕對定位的元素,相對於瀏覽器窗口進行定位。 *relative 生成相對定位的元素,相對於其正常位置進行定位。 * static 默認值。沒有定位,元素出如今正常的流中 *(忽略 top, bottom, left, right z-index 聲明)。 inherit 規定應該從父元素繼承 position 屬性的值。
13.頁面重構怎麼操做?
14.語義化的理解? W3C標準的理解? 彈性佈局和響應式的理解?
15.HTML5的離線儲存?
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>等) 就是基於語義化設計原則)
-
語義 HTML 是一種使用正確的元素或標記製做的HTML
< 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是作什麼的?有什麼理解?
- 避免使用eval,eval很是耗性能。
23.寫一個通用的事件偵聽器函數
24.99%的網站都須要被重構是那本書上寫的?
- 網站重構:應用web標準進行設計(第2版)
25.什麼叫優雅降級和漸進加強?
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... js的兩個類型判斷方法:typeof、instanceof
- 一般能夠作一些小練習來判斷TA的水平,js 雖然很靈活,可是具體的代碼和實現方式能體現出一我的的全局觀,隨着代碼規模的增加,複雜度增長,如何合理劃分模塊實現功能和接口的能力比較重要。
1.建立一個對象
function Person(name, age) { this.name = name; this.age = age; this.sing = function() { ... } }
2.談談This對象的理解。
3.事件、IE與火狐的事件機制有什麼區別? (事件冒泡 和事件捕獲)如何阻止冒泡??
4.什麼是閉包,爲何要用?
- 待完善
- 執行閉包後,閉包內部變量會存在,而閉包內部函數的內部變量不會存在.
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
- Singleton;
var singleton = function () { var privateVariable; function privateFunction(x) { ...privateVariable... } return { firstMethod: function (a, b) { ...privateVariable... }, secondMethod: function (c) { ...privateFunction()... } }; }();
5.如何判斷一個對象是否屬於某個類?
-
使用instanceof、
if(a instanceof Person){ alert('yes'); }
6.new操做符具體幹了什麼呢?
var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);
7.JSON 的瞭解
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、HTML5window.postMessage、服務器上設置代理頁面
10.模塊化怎麼作?
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中的做用域與變量聲明提高?
其餘部分
(正則、優化、重構、響應式、移動端、團隊協做、SEO、UED、職業生涯)
*基於Class的選擇性的性能相對於Id選擇器開銷很大,由於需遍歷全部DOM元素。 *頻繁操做的DOM,先緩存起來再操做。用Jquery的鏈式調用更好。 好比:var str=$("a").attr("href");
-
前端開發的優化問題(看雅虎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佈局慢。
4.
11.談談你認爲怎樣作能是項目作的更好?
12.你對前端界面工程師這個職位是怎麼樣理解的?它的前景會怎麼樣?
13.加班的見解
加班就像借錢,原則應當是------救急不救窮
14.平時如何管理你的項目,如何設計突發大規模併發架構?
* 先期團隊必須肯定好全局樣式(globe.css),編碼模式(utf-8) 等 編寫習慣必須一致(例如都是採用繼承式的寫法,單樣式都寫成一行); 標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方); 頁面進行標註(例如 頁面 模塊 開始和結束); CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css) JS 分文件夾存放 命民以該JS 功能爲準英文翻譯; 圖片採用整合的 images.png png8 格式文件使用 儘可能整合在一塊兒使用方便未來的管理
15.你說你熱愛前端,那麼應該WEB行業的發展很關注吧? 說說最近最流行的一些東西吧?
16.你有了解咱們公司嗎?說說你的認識?
- 由於我想去阿里,因此我針對阿里的說 最羨慕就是在雙十一購物節,350.19億元,每分鐘支付79萬筆。海量數據,竟然無一漏單、無一故障。太厲害了。
做爲一名前端工程師,不管工做年頭長短都應該必須掌握的知識點有:
1、DOM結構 —— 兩個節點之間可能存在哪些關係以及如何在節點之間任意移動。 2、DOM操做 ——如何添加、移除、移動、複製、建立和查找節點等。 3、事件 —— 如何使用事件,以及IE和標準DOM事件模型之間存在的差異。 4、XMLHttpRequest —— 這是什麼、怎樣完整地執行一次GET請求、怎樣檢測錯誤。 5、嚴格模式與混雜模式 —— 如何觸發這兩種模式,區分它們有何意義。 6、盒模型 —— 外邊距、內邊距和邊框之間的關係,及IE8如下版本的瀏覽器中的盒模型 7、塊級元素與行內元素 —— 怎麼用CSS控制它們、以及如何合理的使用它們 8、浮動元素——怎麼使用它們、它們有什麼問題以及怎麼解決這些問題。 9、HTML與XHTML——兩者有什麼區別,你以爲應該使用哪個並說出理由。 10、JSON —— 做用、用途、設計結構。 他們也許不懂交互設計,可是沒人比他們懂交互設計的實現,和每個細節。 他們也許不懂視覺設計,可是沒人比他們懂視覺設計如何變爲現實。 他們也許不懂後臺數據庫,可是他們其實才是數據的第一消費者。 他們也許不是產品經理,可是產品的質量幾乎都是由他們來決定。 什麼都略懂一點生活更美好!
不斷完善中。