2 年前端 7~9 月面試經曆總結,全套教學資料

vue深入學習 2021-09-19 10:56:15 阅读数:793

年前 前端 全套

TCP 和 UDP 區別

HTTP 常見狀態碼

鑒權

輸入 URL 到頁面展示 雖然是一個老生常談的問題,但是我認為這個問題基本涵蓋了整個前端的所有基礎知識點,可以回答得非常豐富。建議大家看我的這篇總結:瀏覽器輸入 URL 的全過程[4] ,裏面分為了網絡篇、解析算法篇、渲染過程篇三個步驟,比較好的講述了整個過程到底經曆了什麼。

由這個問題可以帶出 緩存、DNS 解析、TCP 連接、HTTP 請求、重排重繪 等等非常多的子問題,如果你掌控的好,甚至可以控制整個面試過程,非常有利於給面試官留下比較好的印象。

跨域 也是另一個非常高頻的問題,通常會問你跨域的原因以及解决方案,網上很多答案,這裏不做解釋。

HTTP 各版本的區別 通常並不會幹巴巴的讓你回答,在我遇到的所有情况下,通常都是在我答到緩存的時候,面試官會讓我停下來解釋緩存,這時候回答到一部分 HTTP 各版本中的區別;另外,一部分會在我回答性能優化的時候,答到 HTTP2 的時候會回答。

HTTPS 的問題也是比較簡單,問的也通常比較直接,一般會讓你直接說原理,然後再讓你總結一遍握手過程。偶爾會讓你對比一下 HTTP 之間的優缺點。

至於其他問題,可以到倉庫裏面找答案,也可以網上自己查,都是非常基礎的問題。

[](

)安全


原本這個問題應該羅列在前後端通信中的,但是這個問題實在是太高頻了,幾乎每一次面試都有問到,所以我單獨羅列出來。

具體的回答可以參考一下我整理的這篇文章:前端安全[5] 。

通常在回答安全問題的時候,需要回答以下幾點:

有哪些安全問題?

解决的辦法。

XSS 和 CSRF 是一定要回答上的,剩下的你知道多少答多少,但是別瞎說。一旦你亂說,很容易就會讓人覺得你是在背書,沒有自己的理解(雖然確實是在背書)。

[](

)工程化


這方面通常會從一個項目上入手來說,一般會問一下問題:

  • 頁面性能優化 【超高頻】

  • webpack 性能優化

頁面性能優化 可以聊的東西其實挺多的,比如通常會從網絡、加載這兩個角度出發來解决性能問題。網絡角度上有可以聊到前面提到的緩存、CDN、HTTP2以及圖片格式上面的優化。從加載上來說的話,又可以聊到 webpack 的打包拆包、tree-shaking、懶加載和异步加載、多線程。除了這兩個角度以外,還可以從用戶體驗的角度上來進行優化,比如說骨架屏、動畫、虛擬滾動等。

除了這種常規的角度來說,現在我們開發一個 Web 應用通常都會使用框架,每一款框架一般都會有一些配套的性能優化的手段,比如 React 裏面的 shouldComponentUpdate、PureComponent、memo 等優化 diff 算法的手段也需要回答。框架的優化問題通常會在你答完性能優化的問題之後跟著問你。

具體可以看下這兩篇:

性能優化[6]

React 性能優化[7]

至於 webpack,以我目前的面試經曆,問的相對比較少,可以有選擇的去關心關注。

[](

)框架


框架對於目前現代的 Web 應用開發來說,基本就是必備技能。面試的時候,面試官通常會根據你自己簡曆上寫的技術棧來問,對於大小廠而言,問的方式可能也略有不同。對於小廠來說,如果你恰好技術棧和他們相一致,那麼他們問的基本和大廠差不多;如果不相符,那就完全看面試官是否了解你當前的技術棧,了解的話大概會問一些,否則基本不問。對於大廠來說,那基本上是不可能不問的。

由於我的技術棧是 React + Angular,所以我的所有面試經曆基本都沒有被問到過 Vue 相關的問題(用 Vue 的同學不好意思了)。目前我被問到過的問題主要有:

  • Angular 變更檢查的原理以及如何進行優化

  • React 的 diff 算法工作過程

  • Angular、React 的事件機制

  • React 中的 setState 是同步還是异步

  • React、Angular 的區別(如果你用過 Vue,問的問題會換成 Vue)

  • React 中各種組件複用的優劣勢(mixin、render props、hoc、hook)

  • React 的 Fiber 架構

  • 老版本的 React 的某些生命周期被廢弃的理由

  • React 性能優化

    以上的問題都很大概率會被問到。

[](

)TypeScript


2020年,ts 基本是一個前端從業者必須掌握的一項技能,一旦你簡曆上寫了有 ts 的開發經驗,那麼面試基本上都會問一兩道有關 ts 的題目。

ts 的一些普通知識在這裏不進行贅述,這裏挑選一些我在面試中遇到的題目。

另外,對於大小廠而言,他們對 ts 的掌握程度要求是不一樣的,對於小廠而言,他們希望來面試的人能够熟練使用 ts 進行業務開發,所以 ts 的概念的熟練程度對他們來說最重要。而對於大廠而言,他們可能更加希望來面試的人能利用 ts 開發一些 ts 的周邊工具,所以比較少會直接問 ts 的一些概念,一般都會讓你手寫一個 ts 的工具函數。

目前我面過的所有小廠,基本都會問 ts 中 type 和 interface 的區別 ,也基本只問這一個問題。除此之外,偶爾還會問到 ts 中如何實現一個函數的重載 ,基本上也是從使用角度出發,考驗一個面試人的 ts 的熟練程度。

大廠裏面,有兩題我是印象比較深刻的:

實現一個 ts 的工具函數 GetOnlyFnProps ,提取泛型類型 T 中字段類型是函數的工具函數,其中 T 屬於一個對象。

type GetOnlyFnKeys = {

[Key in keyof T]: T[K] extends Function ? K : never

}

type GetOnlyFnProps = {

[K in GetOnlyFnKeys]: T[K]

}

實現一個 ts 的工具函數 UnGenericPromise ,提取 Promise 中的泛型類型

type UnGenericPromise<T extends Promise> = T extends Promise ? U : never

[](

)項目經曆

===============================================================

項目經曆千人千面,我的項目經曆對於大多數人來說都不太有參考價值。

但是整個面試過程,對於整個項目的講述其實是可以抽取出來,組合成一套公式來敘述:

  • 項目的背景是什麼;

  • 當前項目的目的是什麼;

  • 在開發過程中,你的角色是什麼;

  • 在開發過程中有遇到過什麼樣的難題;

  • 遇到這些問題,你都是如何進行解决的;

  • 項目完成之後,取得了哪些成果;

這套公式基本上可以完整地講清楚你參與的項目的整個過程,也有利於面試官去發掘你項目中的閃光點,便於面試官在你的敘述中找到可以深挖去問你的問題。

同時,在你准備寫上簡曆的項目中,你最好自己能够自己過一遍上面的流程,這樣有利於你找到你可能還沒有掌握的知識,進行查缺補漏。

[](

)算法

=============================================================

我相信大多數人對於大廠面試的恐懼感主要來自於對算法的恐懼,因為在網上流傳出來的各種面試題都包含了很多在 leetcode 中難度為 mid 以上的算法題。我本身也是一樣,尤其是在我面字節跳動的時候,整個面試過程我都非常緊張,覺得字節的算法題會很難,很可能做不出來。但做完之後,其實也還好,難度基本控制在 leetcode mid 以下的級別,甚至我面的好幾家大廠過程中都沒有涉及算法。但是,我覺得作為一個程序員,算法水平一定程度上代錶著你程序設計的好壞,所以提高自己的算法水平對於開發出高水平 Web 應用是有非常好的幫助的。

我在准備算法的時候,最開始比較盲目的刷 leetcode 的題目,整個過程我覺得進步非常緩慢,很多題目刷了一次兩次,第三次再看還是不知道該怎麼做。後來我放弃了這種沒有目的性的刷題,我開始在網上找一些前端算法中比較常見的題目,我發現了這篇文章:前端算法渣的救贖之路[8] ,裏面概括了一些前端面試中常見的題目,還給出了一些算法題型的經典解法,在整個學習過程中,對我的算法提昇非常大,同時我也整理出了自己的一些 算法經驗[9] 。同時對於基礎不是很紮實的人來說,我非常推薦極客大學 9.9 的算法基礎訓練營,我在看完整個訓練營 4 節課後,對基礎有了一定的鞏固。

做算法的時候我自己有一個竅門:遇到一個問題,先嘗試用最暴力的方法進行解决,然後分析出暴力方法會有什麼樣的問題,然後再去解决遇到的問題。這個方法對於大部分我遇到的算法問題來說,基本上都可以解决問題。

[](

)各大廠面試特點

==================================================================

因為今年的特殊原因,所以基本所有公司都會采用遠程面試的方式來進行面試。

在我整個面試過程中,其實各大廠的面試風格也是略有不同的,下面我一一細說。

[](

)CVTE


據我了解,CVTE 是會有很多輪 hr 面,基本上可以說是每一輪技術面試之後都會有一輪 hr 面來評估你。我當時一面的技術面已經過了,但是一面 hr 面沒過,hr 面問的問題也比較尖銳,不過技術面難度還好,基本按照我上面的模版一套組合拳下來也能答出個七七八八。

CVTE 的一面沒有涉及到算法題,後續的面試我就不是很清楚了。

[](

)中信信用卡中心


一面是前端面的,二面是後端面的,所以只有一面問了前端的知識問題,二面就是單純打電話聊天,主要是聊了一些開發流程上面的問題,過程非常快非常輕松,全程只有一題算法題,也出現在我上面整理的算法題庫裏面。

[](

)百度


百度的技術面總共有4輪,基礎面(同級別員工)+基礎面(級別應該比你要一點)+leader面(整個研發部門的技術負責人)+boss面(整個研發部門的總負責人)

百度一面是需要你當場完成一套筆試題,難度的話也一般,基本上面的知識點你都過一遍問題不大,也有一題算法題,是百度的原創題目,但是題型是一樣的,問題也不大。前兩面都是前端開發面的,沒啥難度,涉及到的知識點不局限於前端吧,還包括網絡以及開發模式等等問題。

leader面還挺有意思的,當時他們强烈要求我到現場去參與面試,leader 是一個很年輕的小夥,因為不是專職前端,所以問的問題涉及到了整個計算機的所有知識點:數據結構、算法(原創題,一個很簡單的遞歸)、操作系統,以及問你除了 js 以外還掌握什麼語言等等,整個過程非常輕松,也非常愉快,大家都有說有笑。

boss 面氣氛就比較嚴肅了,也可能是因為那個會議室空調有點冷的原因。基本上整個面試都是在讓我吹水,講自己的項目經曆,以及解决的辦法,答題模版也基本可以按照上面的來說,最後也通過了。

[](

)富途證券

最後

文章到這裏就結束了,如果覺得對你有幫助可以點個贊哦

 CodeChina開源項目:【大廠前端面試題解析+核心總結學習筆記+真實項目實戰+最新講解視頻】

2 年前端 7~9 月面試經曆總結,全套教學資料_程序員

版权声明:本文为[vue深入學習]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210919105614474f.html