1. 程式人生 > >前端開發工程師最常問的問題

前端開發工程師最常問的問題

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

前端界新的行業標準, 框架, 庫不斷在更新和新增,正如赫門在2015深JS大會上《前端服務化之路》主題演講中說的一句話:“每18至24個月,前端都會難一倍”,這些變化使前端的能力更加豐富、創造的應用也會更加完美,所以前端程式設計師們,繼續學習吧。

在網上發現此題目很多的分支,但都是直接拷貝貼上,連答案和格式都沒去審查修改,實在無語。我也收到許多微博私信的鼓勵和更正題目資訊,我這麼粗心大意的人也覺得應該更新一下題目和答案,希望能幫助到更多的前端開發者。

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

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

  2. 題目型別: 技術視野、專案細節、理論知識,演算法,開放性題,工作案例。

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

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

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

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

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

JavaScript:
    資料型別、面向物件、繼承、閉包、外掛、作用域、跨域、原型鏈、模組化、自定義事件、記憶體洩漏、事件機制、非同步裝載回撥、模板引擎、前端MVC、路由、Nodejs、JSON、ajax等。

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

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

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

    2、DOM操作  ——如何新增、移除、移動、複製、建立和查詢節點等。

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

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

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

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

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

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

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

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

原文和答案在我Github上:

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

備註:

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

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

格式不斷修改更新中。

HTML

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

  • 行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?

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

  • link和@import的區別是?

  • CSS選擇符有哪些?哪些屬性可以繼承?優先順序演算法如何計算? CSS3新增偽類有那些?

  • 如何居中div?如何居中一個浮動元素?

  • 瀏覽器的核心分別是什麼?

  • html5有哪些新特性、移除了那些元素?如何處理HTML5新標籤的瀏覽器相容問題?如何區分 HTML 和 HTML5?

  • HTML語義化的理解?

  • (寫)描述一段語義的html程式碼吧。

  • HTML5的離線儲存?

  • 瀏覽器是怎麼對HTML5的離線儲存資源進行管理和載入的呢?

  • 請描述一下 cookies,sessionStorage 和 localStorage 的區別?

  • iframe有那些缺點?

  • Label的作用是什麼?是怎麼用的?(加 for)

  • HTML5的form如何關閉自動完成功能?給不想要提示的input是設定autocomplete=off即可

  • 如何實現瀏覽器內多個標籤頁之間的通訊? (阿里)

  • webSocket如何相容低瀏覽器?(阿里)

  • 頁面可見性(Page Visibility)API 可以有哪些用途?

CSS

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

  • CSS3有哪些新特性(包含哪些模組)?

  • 請解釋一下CSS3的Flexbox(彈性盒佈局模型),已經適用場景?

  • 用純 CSS 建立一個三角形

  • 一個滿屏 品 字佈局 如何設計?

  • 經常遇到的瀏覽器的相容性有哪些?原因,解決方法是什麼,常用hack的技巧 ?

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

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

  • CSS裡的visibility屬性有個collapse屬性值是幹嘛用的?在不同瀏覽器下以後什麼區別?

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

  • 對BFC規範的理解?

  • css定義的權重?

  • 解釋下浮動和它的工作原理?清除浮動的技巧

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

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

  • CSS優化、提高效能的方法有哪些?

  • 瀏覽器是怎樣解析CSS選擇器的?

  • 在網頁中的應該使用奇數還是偶數的字型?為什麼呢?

  • margin和padding分別適合什麼場景使用?

  • 元素豎向的百分比設定是相對於容器的寬度嗎?

  • 全屏滾動的原理是什麼?用到了CSS的那些屬性?

  • 什麼是響應式設計?為什麼要做響應式設計?響應式設計的基本原理是什麼?如何相容低版本的 IE?

  • 視差滾動效果,如何給每頁做動畫效果?(返回之後還要再次出現,只出現一次分別怎麼做?)

  • ::before 和 :after中雙冒號和單冒號 有什麼區別?解釋一下這2個偽元素。

  • 如何修改chrome記住密碼後自動填充表單的黃色背景 ?

  • 你對line-height是如何理解的?

  • 設定元素浮動後,該元素的display值是多少?(自動變成display:block)

  • 怎麼讓Chrome支援小於12px 的文字?

  • 讓頁面裡的字型變清晰,變細用CSS怎麼做?(-webkit-font-smoothing: antialiased;)

  • font-style屬性 可以讓它賦值為“oblique” oblique是什麼意思?

  • position:fixed;在android下無效怎麼處理?

  • 如果需要手動寫動畫,你認為最小時間間隔是多久,為什麼?(阿里)

  • display:inline-block 什麼時候會顯示間隙?(攜程)

  • overflow: scroll時不能平滑滾動的問題怎麼處理?

  • 用原生JavaScript的實現過什麼功能嗎?

  • 介紹JavaScript的基本資料型別。

  • 說幾條寫JavaScript的基本規範?

  • JavaScript原型(prototype)? 每個JS物件都有原型屬性嗎?

  • JavaScript有幾種型別值?(堆:原始值和 棧:引用值),你能畫一下他們的記憶體圖嗎?

  • Javascript如何實現繼承?

  • 如何建立一個物件? (畫出此物件的記憶體圖)

  • 談談This物件的理解。

  • eval是做什麼的?

  • 什麼是window物件? 什麼是document物件?

  • null,undefined的區別?

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

  • ["1", "2", "3"].map(parseInt) 答案是多少?

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

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

  • "use strict";是什麼意思 ? 使用它的有什麼好處或壞處?

  • 如何判斷一個物件是否屬於某個類?

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

  • Javascript中,有一個函式,執行時物件查詢時,永遠不會去查詢原型,這個函式是?

  • 對JSON的瞭解?

  • [].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) }) 能解釋一下這段程式碼的意思嗎?

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

  • ajax是什麼?

  • 同步和非同步的區別?

  • 如何解決跨域問題?

  • 模組化開發怎麼做?

  • requireJS 的核心原理是什麼?(如何動態載入的?如何避免多次載入的?如何 快取的?)

  • 知道ECMAScript 6裡怎麼寫class麼?

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

  • 非同步載入的方式有哪些?

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

  • JavaScript中的作用域與變數宣告提升?

  • 如何編寫高效能的Javascript?

  • 那些操作會造成記憶體洩漏?

  • JQuery的原始碼看過嗎?能不能簡單說一下它的實現原理?

  • jQuery.fn的init 方法返回的this指的是什麼物件?為什麼要返回this?

  • jquery中如何將陣列轉化為json字串,然後再轉化回來?

  • jQuery 的屬性拷貝(extend)的實現原理是什麼,如何實現深拷貝?

  • jquery.extend 與 jquery.fn.extend的區別?

  • jQuery 的佇列是如何實現的?佇列可以用在哪些地方?

  • 談一下Jquery中的bind(),live(),delegate(),on()的區別?

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

  • jQuery 是通過哪個方法和 Sizzle 選擇器結合的?(jQuery.fn.find()進入Sizzle)

  • 針對 jQuery效能的優化方法?

  • Jquery與jQuery UI有啥區別?

  • jQuery和Zepto的區別?各自的使用場景?

  • Zepto的點透問題如何解決?

  • jQueryUI如何自定義元件?

  • 寫一個無重新整理的網站,並且能在瀏覽器前進、後退時正確響應怎麼實現?

  • 如何判斷當前指令碼執行在瀏覽器還是node環境中?(阿里)

  • 移動端最小觸控區域是多大?

  • jQuery 的 slideUp動畫 ,如果目標元素是被外部事件驅動, 當滑鼠快速地連續觸發外部元素事件, 動畫會滯後的反覆執行,該如何處理呢?

  • 把 Script 標籤 放在頁面的最底部的body封閉之前 和封閉之後有什麼區別?瀏覽器會如何解析它們?

  • 移動端的點選事件的有延遲,時間是多久,為什麼會有? 怎麼解決這個延時?(click 有 300ms 延遲,為了實現safari的雙擊事件的設計,瀏覽器要知道你是不是要雙擊操作。)

  • 知道各種JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)麼? 能講出他們各自的優點和缺點麼?

  • Underscore 對哪些 JS 原生物件進行了擴充套件以及提供了哪些好用的函式方法?

  • Node.js的適用場景?

  • (如果會用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering麼?

  • 解釋一下 Backbone 的 MVC 實現方式?

  • 什麼是“前端路由”?什麼時候適合使用“前端路由”? “前端路由”有哪些優點和缺點?

  • 知道什麼是webkit麼? 知道怎麼用瀏覽器的各種工具來除錯和debug程式碼麼?

  • 如何測試前端程式碼麼? 知道BDD, TDD, Unit Test麼? 知道怎麼測試你的前端工程麼(mocha, sinon, jasmin, qUnit..)?

  • 前端templating(Mustache, underscore, handlebars)是幹嘛的, 怎麼用?

  • 簡述一下 Handlebars 的基本用法?

  • 簡述一下 Handlerbars 的對模板的基本處理流程, 如何編譯的?如何快取的?

其他問題

  • 原公司工作流程是怎麼樣的,如何與其他人協作的?

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

  • 設計模式 知道什麼是singleton, factory, strategy, decrator麼?

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

  • 頁面重構怎麼操作?

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

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

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

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

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

  • 你有用過哪些前端效能優化的方法?

  • http狀態碼有那些?分別代表是什麼意思?

  • 一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?(流程說的越詳細越好)

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

  • 你用的得心應手用的熟練地編輯器&開發環境是什麼樣子?

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

  • 你怎麼看待Web App 、hybrid App、Native App?

  • 你移動端前端開發的理解?(和 Web 前端開發的主要區別是什麼?)

  • 對加班的看法?

  • 平時如何管理你的專案?

  • 每個模組的程式碼結構都應該比較簡單,且每個模組之間的關係也應該非常清晰,隨著功能和迭代次數越來越多,你會如何去保持這個狀態的?

  • Git知道branch, diff, merge麼?

  • 如何設計突發大規模併發架構?

  • 當團隊人手不足,把功能程式碼寫完已經需要加班的情況下,你會做前端程式碼的測試嗎?

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

  • 知道什麼是SEO並且怎麼優化麼? 知道各種meta data的含義麼?

  • 移動端(Android IOS)怎麼做好使用者體驗?

  • 你在現在的團隊處於什麼樣的角色,起到了什麼明顯的作用?

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

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

  • 你有自己的技術部落格嗎,常去那些技術部落格?

  • 對前端安全有什麼看法?

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

有趣的問題

  • .A、B兩人分別在兩座島上。B生病了,A有B所需要的藥。C有一艘小船和一個可以上鎖的箱子。C願意在A和B之間運東西,但東西只能放在箱子裡。只要箱子沒被上鎖,C都會偷走箱子裡的東西,不管箱子裡有什麼。如果A和B各自有一把鎖和只能開自己那把鎖的鑰匙,A應該如何把東西安全遞交給B?

    答案:A把藥放進箱子,用自己的鎖把箱子鎖上。B拿到箱子後,再在箱子上加一把自己的鎖。 箱子運回A後,A取下自己的鎖。箱子再運到B手中時,B取下自己的鎖,獲得藥物。