來吧!一文寫清前端面試難點及考點


如果你現在准備開始找前端工作的話那么面試是一個很重要的環節。接下里我會具體講一下我是怎么准備面試的。滿滿的干貨,建議精讀!

搭配這兩篇文章看面試效果更好哦
留住前端面試官目光簡歷到底是怎樣?4個方面把你簡歷問題一一突破
285頁解析百度、阿里、騰訊前端面試題,通關秘籍請收好!

怎么准備前端面試

面試總結下來以下四點:一基礎,二項目,三簡歷,四心態

基礎

首先是基礎,那么到底是什么樣的基礎呢?小伙伴們可以參考以下總結的幾個要點

對於圖做些講解說明,有個大致的學習方向

1.html:
知道 html 的語義化標簽,html5 新特性以及一些標簽的作用。

2.css:
建議去過一遍《css 權威指南》,布局、定位、盒子模型是重點。

3.js:
這一塊內容比較多。如果你 js 學的不怎么好,那么就要加把勁了。把基礎、算法、數據結構這塊搞懂,多去LeetCode上刷題。

相關的應用如:防抖和節流、xmlhttprequest,js 動畫這塊。建議把《JavaScript 高級程序設計》精讀一遍。

4.網絡:
網絡這塊我主要就是把《圖解 http》看了一遍。如果心有余力的同學可以去看一下《深入淺出 https》,這塊內容比較復雜,涉及到密碼學,網絡安全攻防這塊。

關於網絡安全也是重點,特別是 xss,csrf,以及 sql 注入這塊都是需要去深入理解的,知道他們的原理,攻擊作用以及如何防御。

5.框架:
首先你要對 vue 的使用非常熟練,這個就體現在你平時做項目的過程中了。一些基本的 api、mixin、插槽、組件傳值、生命周期這些都是基礎了,同時你也可以了解 vue3.0 的一些新特性:基於代理機制的觀察者模式去監聽屬性等等。

最重要的是:你得要去看看源碼,知道 vue 的一些底層實現原理,這在面試過程中是非常加分的,主要的可以去看看mvvm 實現的源碼、vue 實現響應式監聽的源碼以及vue-router 和 vuex 的源碼。

6.性能優化:
這方面也是一個重頭戲,我面試過的這幾個公司里沒有一個不考一下性能優化這塊的。

關於性能優化的話,主要就是這么幾點:瀏覽器緩存,這是你必須要答到的!如果讓你談前端優化,緩存都不說,說明你項目經驗不夠,其他的什么預加載和懶加載,webworker 線程這些都可以了解一下。

7.工程化:
主要是考 webpack 這塊,plugin 和 babel 的使用,解決了什么問題。

簡歷

自己的簡歷要寫的豐富一點,特別是對項目的描述。要寫清楚自己擔任的職位,項目的源碼地址,如果是上線的項目可以寫上線上地址,還有項目使用的技術棧、主要功能以及技術難點都要寫清楚,這樣面試官可以通過你的項目經歷做一個初步的評估。所以項目經歷越豐富越好,但是也不要什么項目都往簡歷上寫。還是像我說的那樣,寫有實際應用價值的項目。

還有最最最最重要的一點:千萬不要在簡歷上坑自己!在寫自己的技能項時,了解,熟悉,熟練,精通要分的清。自己不會的技能項或者是只是聽過這個東西有過一點點的了解,那就不要寫到自己的簡歷上了。切記!

心態

保持一個良好的心態也是面試成功的一個關鍵,不能太過於緊張,當然像我這種第一次面試的肯定會很緊張,不過隨着面試的次數增多,面試的深度逐漸加深,我也漸漸的沒有第一次面試時那么緊張了。但是適當的緊張還是要有的,這可以讓你保持一定的清醒,大腦時刻運轉。

如果你在面試過程中因為一道面試題沒有接觸到答不上來,你可以先向面試官求助,讓面試官給你一點提示。面試不像考試,考試你做得出來就做,做不出來那就沒辦法了,面試不同,在你沒有頭緒的情況下,你可以請求面試官給點提示,提供一點思路。如果還是答不上來,那么你就不要再糾結這個,選擇虛心的像面試官請教。面試官會非常願意給你解答這個問題。但假如你死磕這道題,面試官無疑覺得你在硬撐着浪費時間,會給面試官留下不好的印象,所以千萬不要這樣做,學會有答必應,無答則問。

刷面試高頻題

1、JavaScript

  • 講講js數據類型?基本和引用的區別?symbol和bigint講一講應用場景?
  • 判斷數據類型的方法?instanceof原理?判斷空對象? typeof null?typeof NaN?
  • var/let/const 區別?暫時性死區?塊級作用域?const a = {}; a.x = 1 能不能修改?
  • 說說你對函數式編程的理解?函數柯里化的理解?平時的使用場景?
  • 防抖、節流的含義,使用場景?手寫一下?
  • call、apply、bind區別?bind實現?bind之后還能修改this指向嗎?為什么?
  • 閉包概念,最主要的還是問閉包的場景?
  • 用es5實現es6類的繼承?各種繼承問的挺多的
  • 深拷貝與淺拷貝?常用方法?手寫一個深拷貝函數?
  • 說說你知道的JavaScript設計模式?觀察者和發布訂閱的區別?手寫一個發布訂閱?我真的寫了
  • 說說對你對JavaScript異步編程的理解?
  • ES Module與 CommonJS 模塊的差異?兩者互相加載的方式?一般會扯到AMD
  • Promise.all、race、allSettled 概念、手寫?很多手寫題都會用到,比如用promise實現請求並發個數限制?

Css

  • 水平垂直居中?兼容性?不知道寬高情況下?
  • BFC概念?作用?常用場景?
  • Flex?注意flex:1的含義,一般會給你個場景題
  • 盒模型概念,如何切換盒模型?
  • 實現1px邊框?1px線條?
  • 偽類和偽元素區別?使用場景?

Http &瀏覽器

  • 瀏覽器緩存?http緩存? 主要要講一講強緩存、協商緩存、preload、prefetch、Service Worker等,304的含義?協商緩存e-tag是怎么生成的?Last-Modified是基於什么生成的?兩者對比一下?優先級哪個高?
  • 什么是跨域?什么情況下會跨域?瀏覽器根據什么字段判斷是否允許跨域?跨域的解決方案有哪些?options請求了解過嗎?說說CORS中的簡單請求和復雜請求?form表單提交會跨域嗎?
  • 講一講瀏覽器事件循環Event Loop?node 事件循環描述一下?
  • http2有哪些新特性?http2還有哪些缺陷?http3的一些了解?
  • 從輸入 URL 到頁面加載完成的過程,一般要很詳細的描述:包括DNS查詢,緩存查詢,3次握手,4次揮手,瀏覽器渲染進程等,面試官會從里面再挑幾個問題深入問,比如為什么是3次握手4次揮手?渲染進程中的GUI渲染線程、JS引擎線程、事件觸發線程等等?可能會問到進程線程的區別?瀏覽器為什么是多進程?js為什么是單線程?怎么支持多線程?等等
  • https加密原理?主要是講對稱加密和非對此加密結合使用的一個過程。什么是中間人攻擊?和http區別?

Vue

  • 生命周期?那個生命周期可以獲取到真實DOM?修改data里面的數據,會觸發什么生命周期?
  • 組件data為什么是一個函數?
  • vue 組件通信?一般說了vuex,就會問vuex用法?action和mutations區別?實現原理等?
  • vue 導航守衛,分全局和組件的,一般用於權限控制,這個就可能扯到項目中的一些鑒權問題。
  • $nextTick 作用?實現原理?微任務向宏任務的降級處理,經常被問到說出幾種宏任務,微任務。
  • vue響應式原理?基本都會問
  • vue scoped屬性作用?實現原理?
  • vue router有幾種模式?實現方式?
  • key的作用?沒有key的情況,vue會怎么做?會引出diff的問題
  • vue diff過程,和react diff區別?
  • vue 2.x defineProperty缺陷?業務代碼里面怎么處理?$set原理?vue是怎么重寫數組方法的?考察你是不是真的看過源碼
  • vue 3.0 proxy優缺點?怎么處理vue3不支持IE?
  • computed 和 watch 的區別和運用的場景?除了基本的,看你能不能說出三種watcher的區別

React

  • 生命周期詳細描述一下?官方為什么改變?
  • 說說你對虛擬DOM的理解?直接全量更新和diff哪個快(這個問題要分情況)?
  • 什么是HOC?React里面用過哪些?可能讓你實現一個add(1)(2)(3)的函數
  • Fiber干了什么事情?requestIdleCallback了解多少?
  • react性能優化?
  • hooks出現的意義?類組件和函數組件之間的區別是什么?
  • 為什么不要在循環、條件語句或者嵌套函數中調用hooks?記住官網的一句話,Not Magic, just Arrays
  • setState 同步還是異步?比較常問,問的可能也比較深入
  • 如何避免組件的重新渲染?memo/useMemo、PureComponent?useMemo和useCallback區別?

其他

webpack基本也是必問,得系統學習一下

  • webpack 構建流程?打包原理?
  • 項目中做的一些優化?
  • loader和plugin的區別?有沒有寫過?常用哪些loader和plugin
  • webpack熱跟新原理?
  • tree-shaking?對於 CommonJS,tree shaking怎么辦?
  • webpack loader的執行順序?從左到右?從上到下?
    其他
  • 項目做過的一些性能優化,基本必問
  • 長列表渲染怎么優化?
  • 各種懶加載的實現原理?路由?圖片?
  • Typescript 中的 interface 和 type 到底有什么區別

其他的一些東西,主要還是看你簡歷上寫了什么,或者你的回答有什么面試官感興趣的詞。盡量突出自己的優勢,發揮好就行,結果對自己的檢驗,不是對自己的否定,加油💪🏻

我把面試題及附帶答案整理在一起,形成一份前端面試題筆記,准備好面試,也要熟悉面試題。點擊這里即可獲取。

小結

作為技術人,最重要的就是自己的技術能力,很多人在剛畢業的時候一腔熱血,每天打雞血一般通宵工作也不嫌累,但是后來被社會毒打的次數多了,很容易就疲倦了,可能有的人喊着喊着就放棄了,開始安於現狀,這是很危險的事情,技術這條路不進則退,只有持續學習才能在技術這條路上越走越遠

而另外一方面,客觀的困難確實又是存在的,比如工作量太大沒時間,前端技術發展太快學不完等,這就需要你找到一條可持續發展的道路,比如每周仔細研讀一篇高質量技術文章,或者定期地進行總結,不要給自己太大的壓力,但又必須要保持學習和進步

無論你選擇的方法是什么,最終最重要的還是要落到實處,收藏了一大堆優秀文章的鏈接放在收藏夾吃灰是沒用的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM