雖然如今不少大公司的校招都已經接近尾聲了我纔拿到滿意的一個offer,但仍是稍微分享一下我以爲前端校招的一些內容。php
基本上的大公司對於前端校招同窗的要求都不只僅侷限於前端領域,由於對於通常的候選人來講都是側重潛力的考察。而小一點的公司對於候選人的技術能力以及項目經歷不會有過多的要求,更多的是但願可以以比較低廉的價格簽下一個願意作切圖之類工做的同窗。我的以爲對於同窗將來幾年的發展不是很好。css
流程
不論是電話面試仍是現場面試,基本的流程是:自我介紹,基礎部分,項目經歷,拓展部分(一般都是以面試者本身回答的內容爲發散點),面試者詢問。html
自我介紹
這部分應該有不少同窗以爲都不用準備,可是事實上面試官第一個問題若是回答的沒有條理不只面試官的印象會很差,並且對本身接下來的狀態也會有很大的影響。因此面試者最好本身寫好自我介紹的草稿,設計到的內容包括但不限於爲何學前端?拿過什麼樣的獎項之類的?,雖然簡歷中有寫。前端
接着面試官可能會問:vue
- 如何學前端的?
- 你認爲的前端都要作什麼樣的工做?
- 你理解的前端工程師是什麼?
- 你認爲前端工程師對於用戶和公司有哪些做用?
- 你最近遇到過什麼技術挑戰?你是如何解決的?
- 項目中遇到的問題是如何解決的?
- 平時都是怎麼學習的?
- 實習了多久,在哪實習,實習的工做是什麼?
- 實習過程當中能不能完成公司給你的工做?工做量如何?
- ...
好了,前戲差很少了,如今開始劃一下基礎知識的重點。java
知識點彙總
HTML
- HTML5新特性,語義化
- 瀏覽器的標準模式和怪異模式
- xhtml和html的區別
- 使用data-的好處
- meta標籤
- canvas
- HTML廢棄的標籤
- IE6 bug,和一些定位寫法
- css js放置位置和緣由
- 什麼是漸進式渲染
- html模板語言
- meta viewport原理
CSS
- 盒模型,box-sizing
- CSS3新特性,僞類,僞元素,錨僞類
- CSS實現隱藏頁面的方式
- 如何實現水平居中和垂直居中。
- 說說position,display
- 請解釋*{box-sizing:border-box;}的做用,並說明使用它的好處
- 浮動元素引發的問題和解決辦法?絕對定位和相對定位,元素浮動後的display值
- link和@import引入css的區別
- 解釋一下css3的flexbox,以及適用場景
- inline和inline-block的區別
- 哪些是塊級元素那些是行級元素,各有什麼特色
- grid佈局
- table佈局的做用
- 實現兩欄佈局有哪些方法?
- css dpi
- 你知道attribute和property的區別麼
- css佈局問題?css實現三列布局怎麼作?若是中間是自適應又怎麼作?
- 流式佈局如何實現,響應式佈局如何實現
- 移動端佈局方案
- 實現三欄佈局(聖盃佈局,雙飛翼佈局,flex佈局)
- 清除浮動的原理
- overflow:hidden有什麼缺點?
- padding百分比是相對於父級寬度仍是自身的寬度
- css3動畫,transition和animation的區別,animation的屬性,加速度,重力的模擬實現
- CSS 3 如何實現旋轉圖片(transform: rotate)
- sass less
- 對移動端開發瞭解多少?(響應式設計、Zepto;@media、viewport、JavaScript 正則表達式判斷平臺。)
- 什麼是bfc,如何建立bfc?解決什麼問題?
- CSS中的長度單位(px,pt,rem,em,ex,vw,vh,vh,vmin,vmax)
- CSS 選擇器的優先級是怎樣的?
- 雪碧圖
- svg
- 媒體查詢的原理是什麼?
- CSS 的加載是異步的嗎?表如今什麼地方?
- 常遇到的瀏覽器兼容性問題有哪些?經常使用的hack的技巧
- 外邊距合併
- 解釋一下「::before」和「:after」中的雙冒號和單冒號的區別
JS
- js的基本類型有哪些?引用類型有哪些?null和undefined的區別。
- 如何判斷一個變量是Array類型?如何判斷一個變量是Number類型?(都不止一種)
- Object是引用類型嘛?引用類型和基本類型有什麼區別?哪一個是存在堆哪個是存在棧上面的?
- JS常見的dom操做api
- 解釋一下事件冒泡和事件捕獲
- 事件委託(手寫例子),事件冒泡和捕獲,如何阻止冒泡?如何組織默認事件?
- 對閉包的理解?何時構成閉包?閉包的實現方法?閉包的優缺點?
- this有哪些使用場景?跟C,Java中的this有什麼區別?如何改變this的值?
- call,apply,bind
- 顯示原型和隱式原型,手繪原型鏈,原型鏈是什麼?爲何要有原型鏈
- 建立對象的多種方式
- 實現繼承的多種方式和優缺點
- new 一個對象具體作了什麼
- 手寫Ajax,XMLHttpRequest
- 變量提高
- 舉例說明一個匿名函數的典型用例
- 指出JS的宿主對象和原生對象的區別,爲何擴展JS內置對象不是好的作法?有哪些內置對象和內置函數?
- attribute和property的區別
- document load和document DOMContentLoaded兩個事件的區別
- === 和 == , [] === [], undefined === undefined,[] == [], undefined == undefined
- typeof可以獲得哪些值
- 什麼是「use strict」,好處和壞處
- 函數的做用域是什麼?js 的做用域有幾種?
- JS如何實現重載和多態
- 經常使用的數組api,字符串api
- 原生事件綁定(跨瀏覽器),dom0和dom2的區別?
- 給定一個元素獲取它相對於視圖窗口的座標
- 如何實現圖片滾動懶加載
- js 的字符串類型有哪些方法? 正則表達式的函數怎麼使用?
- 深拷貝
- 編寫一個通用的事件監聽函數
- web端cookie的設置和獲取
- setTimeout和promise的執行順序
- JavaScript 的事件流模型都有什麼?
- navigator對象,location和history
- js的垃圾回收機制
- 內存泄漏的緣由和場景
- DOM事件的綁定的幾種方式
- DOM事件中target和currentTarget的區別
- typeof 和 instanceof 區別,instanceof原理
- js動畫和css3動畫比較
- JavaScript 倒計時(setTimeout)
- js處理異常
- js的設計模式知道那些
- 輪播圖的實現,以及輪播圖組件開發,輪播10000張圖片過程
- websocket的工做原理和機制。
- 手指點擊能夠觸控的屏幕時,是什麼事件?
- 什麼是函數柯里化?以及說一下JS的API有哪些應用到了函數柯里化的實現?(函數柯里化一些瞭解,以及在函數式編程的應用,最後說了一下JS中bind函數和數組的reduce方法用到了函數柯里化。)
- JS代碼調試
ES6
- 談一談 promise
- 全部的 ES6 特性你都知道嗎?若是遇到一個東西不知道是 ES6 仍是 ES5, 你該怎麼區分它
- es6的繼承和es5的繼承有什麼區別
- promise封裝ajax
- let const的優勢
- es6 generator 是什麼,async/await 實現原理
- ES6和node的commonjs模塊化規範區別
- 箭頭函數,以及它的this
計算機網絡
- HTTP協議頭含有哪些重要的部分,HTTP狀態碼
- 網絡url輸入到輸出怎麼作?
- 性能優化爲何要減小 HTTP 訪問次數?
- Http請求的過程與原理
- https(對是https)有幾回握手和揮手?https的原理。
- http有幾回揮手和握手?TLS的中文名?TLS在哪一網絡層?
- TCP鏈接的特色,TCP鏈接如何保證安全可靠的?
- 爲何TCP鏈接須要三次握手,兩次不能夠嗎,爲何
- 爲何tcp要三次握手四次揮手?
- tcp的三次握手和四次揮手畫圖(當場畫寫ack 和 seq的值)?
- tcp與udp的區別
- get和post的區別?什麼狀況下用到?
- http2 與http1 的區別?
- websocket
- 什麼是tcp流,什麼是http流
- babel是如何將es6代碼編譯成es5的
- http2的持久鏈接和管線化
- 域名解析時是tcp仍是udp
- 域名發散和域名收斂
- Post一個file的時候file放在哪的?
- HTTP Response的Header裏面都有些啥?
瀏覽器相關
- 跨域,爲何JS會對跨域作出限制
- 前端安全:xss,csrf...
- 瀏覽器怎麼加載頁面的?script腳本阻塞有什麼解決方法?defer和async的區別?
- 瀏覽器強緩存和協商緩存
- 瀏覽器的全局變量有哪些
- 瀏覽器同一時間可以從一個域名下載多少資源
- 按需加載,不一樣頁面的元素判斷標準
- web存儲、cookies、localstroge等的使用和區別
- 瀏覽器的內核
- 如何實現緩存機制?(從200緩存,到cache到etag再到)
- 說一下200和304的理解和區別
- 什麼是預加載、懶加載
- 一個 XMLHttpRequest 實例有多少種狀態?
- dns解析原理,輸入網址後如何查找服務器
- 服務器如何知道你?
- 瀏覽器渲染過程
- ie的某些兼容性問題
- session
- 拖拽實現
- 拆解url的各部分
工程化
- 對webpack,gulp,grunt等有沒有了解?對比。
- webpack的入口文件怎麼配置,多個入口怎麼分割。
- webpack的loader和plugins的區別
- gulp的具體使用。
- 前端工程化的理解、如何本身實現一個文件打包,好比一個JS文件裏同時又ES5 和ES6寫的代碼,如何編譯兼容他們
模塊化
- 對AMD,CMD,CommonJS有沒有了解?
- 爲何要模塊化?不用的時候和用RequireJs的時候代碼大概怎麼寫?
- 說說有哪些模塊化的庫,有了解過模塊化的發展的歷史嗎?
- 分別說說同步和異步模塊化的應用場景,說下AMD異步模塊化實現的原理?
- 如何將項目裏面的全部的require的模塊語法換成import的ES6的語法?
- 使用模塊化加載時,模塊加載的順序是怎樣的,若是不知道,根據已有的知識,你以爲順序應該是怎麼樣的?
框架
- 使用過哪些框架?
- zepto 和 jquery 是什麼關係,有什麼聯繫麼?
- jquery源碼如何實現選擇器的,爲何$取得的對象要設計成數組的形式,這樣設計的目的是什麼
- jquery如何綁定事件,有幾種類型和區別
- 什麼是MVVM,MVC,MVP
- Vue和Angular的雙向數據綁定原理
- Vue,Angular組件間通訊以及路由原理
- react和vue的生命週期
- react和vue的虛擬dom以及diff算法
- vue的observer,watcher,compile
- react和angular分別用在什麼樣的業務嗎?性能方面和MVC層面上的區別
- jQuery對象和JS的Element有什麼區別
- jQuery對象是怎麼實現的
- jQuery除了它封裝了一些方法外,還有什麼值得咱們去學習和使用的?
- jQuery的$(‘xxx’)作了什麼事情
- 介紹一下bootstrap的柵格系統是如何實現的
Nodejs
- 對nodejs有沒有了解
- Express 和 koa 有什麼關係,有什麼區別?
- nodejs適合作什麼樣的業務?
- nodejs與php,java有什麼區別
- Nodejs中的Stream和Buffer有什麼區別?
- node的異步問題是如何解決的?
- node是如何實現高併發的?
- 說一下 Nodejs 的 event loop 的原理
數據結構
- 基本數據結構:(數組、隊列、鏈表、堆、二叉樹、哈希表等等)
- 8種排序算法,原理,以及適用場景和複雜度
- 說出越多越好的費波拉切數列的實現方法?
性能優化
- cdn的用法是什麼?何時用到?
- 瀏覽器的頁面優化?
- 如何優化 DOM 操做的性能
- 單頁面應用有什麼SEO方案?
- 單頁面應用首屏顯示比較慢,緣由是什麼?有什麼解決方案?
其餘
- 正則表達式
- 前端渲染和後端渲染的優缺點
- 數據庫的四大特性,什麼是原子性,表的關係
- 你以爲前端體系應該是怎樣的?
- 一個靜態資源要上線,裏面有各類資源依賴,你如何平穩上線
- 若是要你去實現一個前端模板引擎,你會怎麼作
- 知道流媒體查詢嗎?
- SEO
- mysql 和 mongoDB 有什麼區別?
- restful的method解釋
- 數據庫知識、操做系統知識
- click在ios上有300ms延遲,緣由及如何解決
- 移動端的適配,rem+媒體查詢/meta頭設置
- 移動端的手勢和事件;
- unicode,utf8,gbk編碼的瞭解,亂碼的解決
三面、四面常問的開放性問題
- 你都看過什麼書?最近在看什麼書?
- 用過什麼框架?有沒有看過什麼框架的代碼?
- 有沒有學過設計模式?
- 說一說觀察者模式吧!能不能寫出來?
- 你最大的優勢是什麼?那你最大的缺點呢?
- 你大學期間作過最瘋狂的事情是什麼?
- 你除了寫博客還有什麼輸出?
- 如今你的領導給你了一份工做,要求你一個星期完成,但你看了需求之後估計須要3周才能完成,你該怎麼辦?
- 平時關注的前端技術
- 如何規劃本身的職業生涯
- 項目過程當中,有遇到什麼問題嗎?怎麼解決的?
- 最近在研究哪方面的東西?
- 請介紹一項你最熱愛、最擅長的專業領域,而且介紹的學習規劃。
- 請介紹你參與的印象最深入的一個項目,爲何?而且介紹你在項目中的角色和發揮的做用。
HR面
- 你爲何要學習前端?
- 你平時的是怎麼學習前端的?有什麼輸出?
- 你以爲本身最好的項目是什麼?
- 身邊比較佩服的人有什麼值得你學習的?你爲何沒有跟他們同樣?
- 同事的什麼問題會讓你接受不了
- 壓力最大的事情是什麼?
- 和同窗作過的最好的項目?
- 身邊的朋友一般對你的評價是什麼
- 喜歡什麼樣的工做氛圍
- 如何看待加班
- 有沒有對象
- 意向城市
- 其餘的offer
- 爲何要錄取你?
- 大學裏花費時間最多的三件事情
- 週末都會幹什麼?
- 將來職業規劃
建議
面試的時候不要表現出本身想創業。敲黑板。node
歷來沒有看過源碼的話,建議從jQuery,zepto這之類的源碼入手,後期能夠了解Vue,React常見的功能的源碼思路和實現。mysql
項目經驗描述的時候不用太太太詳細,揀重點的講。(由於我就一直說一直說,最後面試官評價插不上話評價減分。)react
最後
我接近兩個月的校招裏,這裏的不少知識點都是從別人的博客、面經一篇一篇的摳下來的,這是前人給後人鋪好的路。前端的知識點其實說多也很少,只是太雜,因此我沒有整理的特別詳細。我之因此以這樣的形式分享而不是以面經的形式,主要是有須要的同窗們可以「拿去即用」,也是整理一下我原來的筆記。jquery
呀,身邊的人都好強,繼續學習。[抱拳]