http://markyun.github.io/2015/Front-end-Developer-Questions/
本文收集總結了一些優質的前端面試題,初學者閱后也要用心鑽研其中的原理,重要知識需要系統學習,透徹學習,形成自己的知識鏈。萬不可投機取巧,只求面試過關是錯誤的!
前端界新的行業標准, 框架, 庫不斷在更新和新增,正如赫門在2015深JS大會上《前端服務化之路》主題演講中說的一句話:“每18至24個月,前端都會難一倍”,這些變化使前端的能力更加豐富、創造的應用也會更加完美,所以前端程序員們,繼續學習吧。
在網上發現此題目很多的分支,但都是直接拷貝粘貼,連答案和格式都沒去審查修改,實在無語。我也收到許多微博私信的鼓勵和更正題目信息,我這么粗心大意的人也覺得應該更新一下題目和答案,希望能幫助到更多的前端開發者。
http://markyun.github.io/2015/Front-end-Developer-Questions/
面試有幾點需注意:(來源程劭非老師 github:@wintercn)
-
面試題目: 根據你的等級和職位變化,入門級到專家級:廣度↑、深度↑。
-
題目類型: 技術視野、項目細節、理論知識,算法,開放性題,工作案例。
-
細節追問: 可以確保問到你開始不懂或面試官開始不懂為止,這樣可以大大延展題目的區分度和深度,知道你的實際能力。因為這種關聯知識是長時期的學習,絕對不是臨時記得住的。
-
回答問題再棒,面試官(可能是你面試職位的直接領導),會考慮我要不要這個人做我的同事?所以態度很重要。(感覺更像是相親)
-
資深的工程師能把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 —— 作用、用途、設計結構。
更新時間: 2015/7/24
原文和答案在我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的基本規范?
-
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取下自己的鎖,獲得葯物。
原文地址:http://markyun.github.io/2015/Front-end-Developer-Questions/