查文庫>試題> js工程師面試題及答案

js工程師面試題及答案

js工程師面試題及答案

  網際網路行業的技術崗位java工程師,是很多的工作夢想,然而卻在面試這一關無法達到要求,下面小編帶來了js工程師面試題及答案,供大家參考。

  HTML+CSS

  1.對WEB標準以及W3C的理解與認識標籤閉合、標籤小寫、不亂巢狀、提高搜尋機器人搜尋機率、使用外 鏈css和js指令碼、結構行為表現的分離、檔案下載與頁面速度更快、內容能被更多的使用者所訪問、內容能被更廣泛的裝置所訪問、更少的程式碼和元件,容易維 護、改版方便,不需要變動頁面內容、提供列印版本而不需要複製內容、提高網站易用性;

  2.xhtml和html有什麼區別

  HTML是一種基本的WEB網頁設計語言,XHTML是一個基於XML的置標語言最主要的不同:

  XHTML 元素必須被正確地巢狀。

  XHTML 元素必須被關閉。標籤名必須用小寫字母。

  XHTML 文件必須擁有根元素。

  3.Doctype? 嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義? 用於宣告文件使用那種規範(html/Xhtml)一般為 嚴格 過度 基於框架的html文件加入XMl宣告可觸發,解析方式更改為IE5.5 擁有IE5.5的bug

  4.行內元素有哪些?塊級元素有哪些?CSS的盒模型?塊級元素:div p h1 h2 h3 h4 form ul行內元素: a b br i span input select  Css盒模型:內容,border ,margin,padding

  5.CSS引入的方式有哪些? link和@import的區別是?內聯 內嵌 外鏈 匯入區別 :同時載入前者無相容性,後者CSS2.1以下瀏覽器不支援 Link 支援使用javascript改變樣式,後者不可。

  6.CSS選擇符有哪些?哪些屬性可以繼承?優先順序演算法如何計算?內聯和important哪個優先順序高?標籤選擇符 類選擇符 id選擇符繼承不如指定 Id>class>標籤選擇後者優先順序高

  7.前端頁面有哪三層構成,分別是什麼?作用是什麼?結構層 Html 表示層 CSS 行為層 js

  8.css的基本語句構成是?選擇器{屬性1:值1;屬性2:值2;……}

  9.你做的頁面在哪些流覽器測試過?這些瀏覽器的核心分別是什麼?

  Ie(Ie核心) 火狐(Gecko) 谷歌(webkit) opear(Presto)

  10.寫出幾種IE6 BUG的解決方法

  1.雙邊距BUG float引起的 使用display

  2.3畫素問題 使用float引起的 使用dislpay:inline -3px

  3.超連結hover 點選後失效 使用正確的書寫順序 link visited hover active

  4.Ie z-index問題 給父級新增position:relative

  5.Png 透明 使用js程式碼 改

  6.Min-height 最小高度 !Important 解決’

  7.select 在ie6下遮蓋 使用iframe巢狀

  8.為什麼沒有辦法定義1px左右的寬度容器(IE6預設的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)

  11.標籤上title與alt屬性的區別是什麼?

  Alt 當圖片不顯示是 用文字代表。

  Title 為該屬性提供資訊

  12.描述css reset的作用和用途。

  Reset重置瀏覽器的css預設屬性 瀏覽器的品種不同,樣式不同,然後重置,讓他們統一

  13.解釋css sprites,如何使用。

  Css 精靈 把一堆小的圖片整合到一張大的圖片上,減輕伺服器對圖片的請求數量

  14.瀏覽器標準模式和怪異模式之間的區別是什麼?盒子模型 渲染模式的不同使用 window.top.document.compatMode 可顯示為什麼模式

  15.你如何對網站的檔案和資源進行最佳化?期待的解決方案包括:檔案合併檔案最小化/檔案壓縮使用CDN託管快取的使用

  16.什麼是語義化的HTML?直觀的認識標籤 對於搜尋引擎的抓取有好處

  17.清除浮動的幾種方式,各自的優缺點

  1.使用空標籤清除浮動 clear:both(理論上能清楚任何標籤,,,增加無意義的標籤)

  2.使用overflow:auto(空標籤元素清除浮動而不得不增加無意程式碼的弊端,,使用zoom:1用於相容IE)

  3.是用afert偽元素清除浮動(用於非IE瀏覽器)

  Javascript

  1.javascript的typeof返回哪些資料型別

  Object number function boolean underfind

  2.例舉3種強制型別轉換和2種隱式型別轉換?強制(parseInt,parseFloat,number)隱式(== – ===)

  3.split() join() 的區別前者是切割成陣列的形式,後者是將陣列轉換成字串

  4.陣列方法pop() push() unshift() shift()

  Push()尾部新增 pop()尾部刪除

  Unshift()頭部新增 shift()頭部刪除

  5.事件繫結和普通事件有什麼區別

  6.IE和DOM事件流的區別

  1.執行順序不一樣、

  2.引數不一樣

  3.事件加不加on

  4.this指向問題

  7.IE和標準下有哪些相容性的'寫法

  Var ev = ev || window.event

  document.documentElement.clientWidth || document.body.clientWidth

  Var target = ev.srcElement||ev.target

  8.ajax請求的時候get 和post方式的區別一個在url後面 一個放在虛擬載體裡面有大小限制安全問題應用不同 一個是論壇等只需要請求的,一個是類似修改密碼的

  9.call和apply的區別

  Object.call(this,obj1,obj2,obj3)

  Object.apply(this,arguments)

  10.ajax請求時,如何解釋json資料使用eval parse 鑑於安全性考慮 使用parse更靠譜

  11.b繼承a的方法

  12.寫一個獲取非行間樣式的函式

  function getStyle(obj,attr,value)

  {

  if(!value)

  {

  if(obj.currentStyle)

  {

  return obj.currentStyle(attr)

  }

  else

  {

  obj.getComputedStyle(attr,false)

  }

  }

  else

  {

  obj.style[attr]=value

  }

  }

  13.事件委託是什麼讓利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行!

  http://www.webasily.com/?p=78 例子可見此連結

  14.閉包是什麼,有什麼特性,對頁面有什麼影響閉包就是能夠讀取其他函式內部變數的函式。

  http://blog.csdn.net/gaoshanwudi/article/details/7355794 此連結可檢視(問這個問題的不是一個公司)

  15.如何阻止事件冒泡和預設事件

  canceBubble return false

  16.新增 刪除 替換 插入到某個接點的方法

  obj.appendChidl()

  obj.innersetBefore

  obj.replaceChild

  obj.removeChild

  17.解釋jsonp的原理,以及為什麼不是真正的ajax動態建立script標籤,回撥函式

  Ajax是頁面無重新整理請求資料操作

  18.javascript的本地物件,內建物件和宿主物件本地物件為array obj regexp等可以new例項化內建物件為gload Math 等不可以例項化的宿主為瀏覽器自帶的document,window 等

  19.document load 和document ready的區別

  Document.onload 是在結構和樣式載入完才執行js

  Document.ready原生種沒有這個方法,jquery中有 $().ready(function)

  20.”==”和“===”的不同前者會自動轉換型別後者不會

  21.javascript的同源策略一段指令碼只能讀取來自於同一來源的視窗和文件的屬性,這裡的同一來源指的是主機名、協議和埠號的組合

  22.編寫一個數組去重的方法

  function oSort(arr)

  {

  var result ={};

  var newArr=[];

  for(var i=0;i

  {

  if(!result[arr])

  {

  newArr.push(arr)

  result[arr]=1

  }

  }

  return newArr

  }

  重申一下,上述這些知識點都應該是你應該“想都不用想”的東西。我一開始問的所有問題都是想摸清你對所有這些領域知識的掌握程度。雖然上面列出的這些知識點並沒有面面俱到,但我覺得你至少應該掌握這些,才有可能跟我坐到一間辦公室裡來。

  少量提問

  我非常贊同面試者問的問題越少越好。反覆問應聘者各種問題既不公平,也很無聊。我在任何一次面試中,通常只問三個大問題,但每個問題又會涉及我所能想到的多個方面。回答每個大問題一般要經過幾個步驟,這樣我就可以在每個步驟中穿插著問一些小問題。比如說:

  現在有一個正顯示著Yahoo!股票價格的頁面。頁面上有一個按鈕,你可以單擊它來重新整理價格,但不會重新載入頁面。請你描述一下實現這個功能的過程,假設伺服器會負責準備好正確的股票價格資料。

  這個問題牽扯到一組我想要考察的基本知識點:DOM結構、DOM操作、事件處理、XHR和JSON。如果我要求你對換一種處理股票價格的方式,或者讓你在頁面中顯示其他資訊,就可以把更多的知識點包括進來。對於經驗比較豐富應聘者,我也可以自如地擴充套件要考察的知識範圍,最簡單像JOSN與XML的區別、安全問題、容量問題,等等。

  我還希望應聘者給出的任何解決方案中都不要使用庫。我想看到最原生態的程式碼,你就當頁面中沒有包含任何庫。你說你對哪個庫瞭解多少多少,但我不能把關於庫的知識作為評判能力的因素,因為庫是會隨時間變化的。我需要的是真正理解庫背後的機制,特別是能夠徒手寫出一個自己的庫的人。

  解決問題

  做為一名前端工程師,最值得高興的事莫過於解決同一個問題會有很多種不同的方法,而你要做的就是找出最合適的方法來。我在提問的時候,經常會在應聘者解釋完一種方法後問他們還有沒有第二種方法。此時我會跟他們說,假設你的這個方法由於種種原因被否決了,那麼你還能不能給出另一種方法。這樣做可以達到兩個目的。

  首先,可以測試出他們是否在毫無意義地複述書本中的東西。不能不承認,某些人確實有過目不忘的天賦,聽他們在那裡滔滔不絕地講,你會覺得他們什麼都明白。可是,只要一跟這些人談到怎麼查詢方案無效的原因,以及能否拿出一個新方案來,他們往往就傻眼了。這時候,如果我聽到“我不明白這個方案為什麼不夠好”之類的反問,心裡立刻就明白我的問題已經超出了他們的能力範圍,而他們只是想拿自己死記硬背的結論來矇混過關。

  其次,可以測試出他們已經掌握的(還是那句話,“想都不用想”)瀏覽器技術知識。如果他們對瀏覽器平臺的核心知識有較好的理解,想出解決同一問題的不同方案根本沒有那麼難。

  對一名前端工程師來說,這絕對是最重要的能力。前端工程師在工作中遇到本該如此卻並未如此的難題(說你啦,IE6),應該說是一件很平常的事。一個方案無效就無計可施的人,做不了前端工程師。

  考核應聘者解決問題能力的另一層原因,與我的個人喜好有關。在搞清楚應聘者知道什麼不知道什麼之後,我就會想著問一個他們知識領域之外的問題。這樣做的目的,就是想看看他們怎樣運用已有的知識解決新問題。在解決問題的每一步,我也準備了一些提示,以防有人會卡殼打艮(在我面前15分鐘一言不發,對我評價這個人毫無幫助)。我真正感興趣的,是他們能夠從上一步前進到下一步。我希望看到一個人就在我眼前學到新知識。

  注意:所有問題都與瀏覽器技術相關。我不相信出幾道抽象的邏輯題,就能夠考出某人解決Web技術問題的能力。在我看來,這無異於讓素描大師畫肖像(或者讓劉翔跟博爾特同場競技),沒有意義,也得不到任何有價值的資訊。

  有激情

  要成為一名優秀的前端工程師,最重要的莫過於對自己做的事要有激情。我們技能都不是從學校中或者從研討會上學來的,因此前端工程師必須具備自學能力。瀏覽器技術的變化可謂日新月異,所以也只有不斷提升自己的技能才做得到與時俱進。我雖然不能強迫誰必須多看部落格、不斷學習,但想應聘前端工程師的人恐怕還是必須這麼做的。

  你怎麼知道誰對這種工作有沒有激情?實際上非常簡單。我只問一個簡單的問題:“目前你對什麼Web技術最感興趣?”這個問題永遠不會過期,而且也幾乎不可能出錯……除非你答不上來。就眼下來說,我希望你對這個問題給出的技術中包括WebSocket、HTML、WebGL、客戶端資料庫,等等。只有對Web開發充滿激情的人,才會堅持不懈地學習新知識、掌握新技能;這些人才是我真正想要的。當然,我會讓他們詳細解釋自己提到的技術,以保證他們不是隨口說了幾個時髦的新詞彙。

  最後一點

  計算機科學或者Web設計方面的知識當然也有用,但那都是基本知識之外的東西。只要基本知識在那兒了,一切就都有了基礎,想擴充知識面也不難。可是,如果等到正式上班以後,還得從頭學習基本技能,那種難度是不可同日而語的。另外,高階前端工程師與一般工程師相比,肯定需要掌握更多的技能。而面試幾乎沒有經驗大學畢業生,同樣也會有一套完全不同的程式。我在這篇文章裡列出來的都是一些最基本的東西。

  對於那些還沒有多少面試經驗的人,我總是喜歡告訴他們,面試完了只要問自己一個問題就行:你想以後跟這個人在一起共事嗎?如果不管為什麼,回答是不,那就是不。

  面試前端工程師對我來說是一件非常有意思的事,因為面試過程很大程度上也是自我提升的過程。無論大公司還是小公司,之所以在如何招聘到真正有能力的前端工程師方面會遇到同樣的問題,就是因為負責招聘的那些人不知道自己公司需要什麼樣的人,結果問問題時也問不到點子上。經過這幾年在行業裡的摸索,我總結出了自己的一套很有效的面試前端工程的方法。

  有的應聘者說我不好對付,但留給他們這樣的印象也並非我所願。我覺得之所以他們說我不好對付,主要是因為我問他們問題時問得太細了。以前我曾專門寫過一些東西,告訴應聘者怎麼才能透過我的面試(Surviving an interview with me)以及優秀的前面工程師應該具備什麼樣的素質(What makes a good front end engineer?),而我的面試可以說完全是按照那兩篇文章的標準進行的。我不會問一些特別偏門的問題,也不認為出幾道邏輯題就能考出人的真實水平。我唯一的想法就是確定你能否勝任我們要招的這個職位。為此,我需要簡單地考察如下幾個方面。

  基本知識

  我們生活在網際網路時代,你想知道的任何事情幾乎都能在15分鐘內找到相關資訊。可是,能找到資訊並不等於你會使用它。我認為所有前端工程師至少都應該掌握某些基本的知識,才能有效地完成自己的工作。如果一遇到問題,就停下工作上網四處搜尋解決方案,怎麼可能保證按期完成工作呢?聽聽,還有誰在說“我不知道,但我可以上網搜到。”請這些同學把手舉起來,讓大家認識一下(immediately raises a flag for me.)。下面我列出一些基本的知識點,這些都是我認為一名前端工程師(無論工作年頭長短)在沒有任何外來幫助的情況應該知道的。

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

  DOM操作——怎樣新增、移除、移動、複製、建立和查詢節點。

  事件——怎樣使用事件以及IE和DOM事件模型之間存在哪些主要差別。

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

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

  盒模型——外邊距、內邊距和邊框之間的關係,IE 8以下版本的瀏覽器中的盒模型有什麼不同。

  塊級元素與行內元素——怎麼用CSS控制它們、它們怎樣影響周圍的元素以及你覺得應該如何定義它們的樣式。

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

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

  JSON——它是什麼、為什麼應該使用它、到底該怎麼使用它,說出實現細節來。

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

  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  —— 作用、用途、設計結構。