2018前端校招總結

yiliang發表於2017-10-20

雖然現在很多大公司的校招都已經接近尾聲了我才拿到滿意的一個offer,但還是稍微分享一下我覺得前端校招的一些內容。

基本上的大公司對於前端校招同學的要求都不僅僅侷限於前端領域,因為對於一般的候選人來說都是側重潛力的考察。而小一點的公司對於候選人的技術能力以及專案經歷不會有過多的要求,更多的是希望能夠以比較低廉的價格簽下一個願意做切圖之類工作的同學。個人覺得對於同學未來幾年的發展不是很好。

流程

不管是電話面試還是現場面試,基本的流程是:自我介紹基礎部分專案經歷擴充部分(通常都是以面試者自己回答的內容為發散點)面試者詢問

自我介紹

這部分應該有很多同學覺得都不用準備,但是事實上面試官第一個問題如果回答的沒有條理不僅面試官的印象會不好,而且對自己接下來的狀態也會有很大的影響。所以面試者最好自己寫好自我介紹的草稿,設計到的內容包括但不限於為什麼學前端?拿過什麼樣的獎項之類的?,雖然簡歷中有寫。

接著面試官可能會問:

  • 如何學前端的?
  • 你認為的前端都要做什麼樣的工作?
  • 你理解的前端工程師是什麼?
  • 你認為前端工程師對於使用者和公司有哪些作用?
  • 你最近遇到過什麼技術挑戰?你是如何解決的?
  • 專案中遇到的問題是如何解決的?
  • 平時都是怎麼學習的?
  • 實習了多久,在哪實習,實習的工作是什麼?
  • 實習過程中能不能完成公司給你的工作?工作量如何?
  • ...

好了,前戲差不多了,現在開始劃一下基礎知識的重點。

知識點彙總

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
  • 為什麼要錄取你?
  • 大學裡花費時間最多的三件事情
  • 週末都會幹什麼?
  • 未來職業規劃

建議

  1. 面試的時候不要表現出自己想創業。敲黑板。

  2. 從來沒有看過原始碼的話,建議從jQuery,zepto這之類的原始碼入手,後期可以瞭解Vue,React常見的功能的原始碼思路和實現。

  3. 專案經驗描述的時候不用太太太詳細,揀重點的講。(因為我就一直說一直說,最後面試官評價插不上話評價減分。)

最後

我接近兩個月的校招裡,這裡的很多知識點都是從別人的部落格、面經一篇一篇的摳下來的,這是前人給後人鋪好的路。前端的知識點其實說多也不多,只是太雜,所以我沒有整理的特別詳細。我之所以以這樣的形式分享而不是以面經的形式,主要是有需要的同學們能夠“拿去即用”,也是整理一下我原來的筆記。

呀,身邊的人都好強,繼續學習。[抱拳]

相關文章