年中佛系求職記錄

  我從事的是前端崗位,四月中旬時投過一波,很多都是找朋友或老同事內推,但都沒響應,連面試機會都沒有,只得作罷。

  一直到五月底開始,陸陸續續開始有人來找我投簡歷,我在 boss 直聘和拉勾上公開了部分工作和項目資訊後,找我的人也變多了。

  我投了幾家大廠或上規模的公司,都需要好幾輪,基本都是電話或影片面試,只去了兩個現場。面的內容可以分為兩大塊:技術和項目,這些年一直專註於前端基礎知識的積累(前端躬行記系列),而忽視了項目的沉澱以及團隊的建設。並且由於求職的崗位都是資深或高級前端,因此相對的要求也比較高(除了技術要紮實之外,還需要時刻關注著前沿技術,並且還得是個業務專家,能為公司作出額外的貢獻),使得這麼多次面試都不太理想。不過,從這幾次的面試中,得到的收穫也不少,既然認清了當前形勢,就得適當的調整一下今後的工作重點。

  目前來看求職的時候公司會看年齡、畢業院校和大廠經驗,年輕名校有大廠經驗的人機會會多一點。3 ~ 5 年工作經驗的人特別吃香,非常建議早做職業規劃,在畢業後開始幾年先沉澱一下,然後去大廠歷練歷練,對以後的職業發展會有很大幫助。

  自己為了能更好的應對面試,也整理了一套面試資料,希望對大家會有所幫助。

一、技術

1)基礎要紮實

  對於基礎知識,得脫口而口,信手捏來。這次面的內容涉及 CSS 的比較少,JavaScript 和網路問的比較多,性能優化是必問的,還有時髦的 ES6 、React (我平時的項目都是用React寫的)也是出現的比較多,數據結構和簡單的演算法也需要好好準備準備。

  除了常規的問答之外,還需要手寫程式碼。上機測試或者現場筆試,非常建議大家平時純手寫,不要藉助 IDE 的自動提示。目前來看,很多公司都會出個幾道筆試題,試試求職者的編程能力。題目的話都不會很難,有空的話可以去刷刷牛客網力扣,保持手感。簡單的演算法可以練練,像快速排序、遞歸等,數據結構中的鏈表、二叉樹平時都可以複習一下,只靠面試前的突擊很容易忘記。我這次演算法沒有準備的很好,遇到一道很簡單的背包問題,沒有答出來,可惜了。

2)視野要寬闊

  不要局限於自己眼前的一畝三分地,在平時就要有意識的拓寬自己的技術視野。例如現在非常流行小程式,那麼你是否對小程式的原理有所了解。還比如很多公司都在實現同構,那麼你是否自己操作過。還有微前端地目的是否有過了解,市面上給出的方案是否做過對比。時刻關注前沿技術,緊跟時代潮流,這也算是前端的一個特色吧。前端技術日新月異,沒過多少天,就會冒出新思想新技術。

3)理解要深度

  不要只停留在表層,適當地去深究一下你所看到的技術。例如你說跨域用的方案是CORS,那麼它的跨域原理是怎麼樣的?如果要傳遞Cookie,那麼前後端要如何配置?什麼情況下,會發出兩次請求?等等。當拋出一個技術點時,可以深挖到很多知識點。平時開發中,多問自己幾個為什麼?或許就能注意到自己的盲點。面試官會根據你的簡歷,找一個技術點去慢慢的滲透,看你理解到什麼程度。有次面試還被問到,你最擅長的技能點是什麼?平時真的可以往某個點做些深入研究。

4)團隊的建設

  除了完成自己手頭工作之外,你為團隊還帶來了哪些貢獻或變化?例如為新人提供技術思路,封裝通用組件為成員使用,又或者制定自動化工作流改善工作效率等。多為團隊著想,就能發現很多問題,試著解決這些問題,提升自己的同時也為團隊帶來便利。

5)思路要多樣

  面試中會遇到許多場景題,然後讓你給出解決方案,大部分都是你沒遇到過的,而你的回答當然是方案越多越好。這時候就得用自己過往的經驗以及大膽的創新來給出技術思路。例如如何在一個域名中登錄,而在另一個域名中直接是登錄狀態。再比如當重寫XMLHttpRequest後,如果遇到第三方庫也重寫了它,碰到問題該如何排查?

  其實平時上班的時候多向自己問幾個為什麼,時間長了,自己的思路也能更加開闊。還有就是平時項目中遇到的難點,自己也需要有意識的記錄下來,試著多搞出些方案來。

二、項目

  在考察項目時,經常會問你遇到的比較困難的項目是什麼?

  我自認為項目中的難點就是解決從未遇到過的問題。但說著說著自己會感覺好像也沒那麼難,就是有點煩。大部分人所做的業務都不會很難,那麼就自己給自己加點難度。例如我平時會做廣告落地頁,就是個表單填線索,加個圖片滑動,商品介紹,商業影片等部分。很普通很平凡,但是如果做成一個可拖拽的可視化編輯器,那麼就會很有搞頭,不僅能大大提升工作效率(甚至可以讓非技術人員自行搭建頁面),並且涉及到的技術點會很多,將碰到許許多多、形形色色的各類問題。這個時候就可以和面試官侃侃而談了。要做成這種程度,需要大把時間的沉澱,非一朝一夕可成,所以建議大家早做打算。

  再比如我在簡歷中提到自己設計過一個性能監控系統,有次面試正好碰到一個做過多年監控系統的面試官。由於我這系統還未正式上線,很多點還未考慮到,並且還僅僅是個雛形,很不完善,面試官問到的許多問題我也答不上來,即使回答了,也感覺給出的解釋非常的蒼白無力。例如通過你這系統解決過哪些業務瓶頸?你的系統架構是怎麼樣的?一個月後你預估資料庫的存儲量將是多少?你在選擇的伺服器配置是怎麼樣的?非常建議大家平時在公司推動一些本職工作以外的項目,當然這些項目對業務是有益的,其實就是為自己增值,在上線後記錄遇到的問題以及帶來的貢獻。

三、面試題目

1)企鵝杏仁

第一輪 電話面試

  在開始的時候,問了點項目問題,讓我挑幾個有挑戰的說。剩下的就都是在問題基礎,下面只列出了想到的幾個問題。

  (1)網路:描述TCP三次握手,四次揮手,HTTP2.0的優勢,HTTP協議的特點。

  (2)數據結構:鏈表和數組的區別,棧和隊列的特點。

  (3)簡單演算法:在兩個數組中找到相同的元素,在數字數組中找出最大值。

第二輪 技術面試

  下午三點的面試,提早到了,整層樓都是該公司的,不過工位有點小。

  先做一份筆試試卷,四道題目,三十分鐘。其實四道題目可以在一張紙里列印,不過用了兩張紙,第一張紙翻過來還有一道題目,被我漏掉了。

  題目做好後在一個會議室里等了四十分鐘,才等到一個前端小姐姐。主要問了些比較基礎的問題,集中在:

  (1)白屏處理、懶載入的實現等性能問題。

  (2)Hooks的使用等React語法問題。

  (3)Webpack使用了哪些載入器等工程化問題。

  (4)CDN的原理等網路問題。

  (5)KOA有哪些中間件等Node.js問題。

  面好後等了十幾分鐘,技術leader來面我,他問:

  (1)在實現一個微信聊天功能的時候會用到哪些技術。

  (2)你對目前前端現狀的看法。

  (3)你未來兩年的職業規劃是怎樣的。

  (4)小程式在微信中是如何執行的。

  (5)如何通過微信公眾號獲取用戶資訊。

  (6)JavaScript的快取有哪些(cookie、LocalStorage等)。

  (7)如何做到在兩個域名中保持登錄狀態,例如在淘寶登錄的帳號,當從淘寶頁面進入天貓時不需要重新登錄。

  (8)你與其他人相比,有哪些優勢。

  (9)對微前端的理解。

  (10)兩個數字變數,不使用第三個臨時變數,交換兩者的值。

  (11)你最近在讀什麼書?

  (12)Charles能夠解讀HTTPS的原理是什麼?

  再次面完後,HR與我交流,詢問了我的期望薪資、居住地、籍貫等問題,最後說如果該輪通過,會在3-5個工作日內安排CTO影片面試。

2)京東

第一輪 電話面試

  項目和基礎相輔相成,問的問題比較全面。

  說說你最近的項目,深入討論如何封裝的組件。在簡歷中提到了自己設計的一個UI庫和插件,就被問到如何使用,擴展,原理等。

  基礎題包括JavaScript、網路和CSS,下面只列出了想到的幾個問題。

  (1)JavaScript:閉包,Event Loop。

  (2)網路:輸入URL發生的過程。

  (3)CSS:兩欄布局,上下居中。

3)華為

  周六下午四點鐘左右,華為HR讓我投個簡歷,和我簡單介紹了一下華為的4輪面試流程。

第一輪 在線做題

  在牛客網上生成的一個考試地址,有三道題,兩道一星,一道兩星。他們給了一個練習地址,既能熟悉考試環境,也能練練感覺。

  在準備的這兩天,自己意識到平時得盡量手寫方法名稱,不要過於依賴自動提示。並且有空的時候就去刷刷難度在中等偏下的編程題,保持手感。

第二輪 技術影片面試

  有兩個面試官,第一個是當前面試部門的面試官,以項目為主,基礎概念問的不多。

  (1)在內部做過哪些技術分享。

  (2)你覺得組件封裝有哪些注意點。

  (3)你遇到的比較困難的項目是什麼?

  (4)你平時會做哪些性能優化?

  (5)請敘述一下React的生命周期。

  (6)雙向綁定的原理。

  (7)diffing演算法比對過程。

  (8)有沒有搞過前端架構?初始化項目的那種。

  (9)最後一道編程題

  第二個是跨部門的面試官,同樣以項目為主,基礎概念比較少,有幾個是給你一個場景,讓你來分析,還有一些是比較底層的電腦知識。

  (1)介紹一下你的項目經歷

  (2)Chrome瀏覽器打開了幾個進程。

  (3)瀏覽器性能優化,如果瀏覽器佔了300M記憶體,該如何優化。

  (4)package.json中有哪些常用欄位?package.lock.json有什麼作用?

  (5)你有了解過Nginx嗎?

  (6)最後一道編程題。

4)喜馬拉雅

第一輪 影片面試

  使用了騰訊會議,下午兩點的面試,天氣很陰沉,隨時要下陣雨的節奏,但是直到面試結束都沒下大雨。影片面試的範圍比較廣泛,有基礎也有實際項目。

  (1)用過哪些CSS動畫,CSS的定位有哪些?

  (2)是否用過React Hooks?函數式編程的理解。

  (3)在瀏覽器輸入URL後發生的過程。強快取和協商快取。前端狀態碼301和302。HTTPs為何是安全的?

  (4)設計模式實現發布訂閱。

  (5)你的職業規劃是怎麼樣的。

  (6)用Node.js做過些什麼?

  (7)什麼情況下會驅使你去看書?

  (8)你做過哪些比較有困難的項目?

  (9)你的開發經歷跨度很大,為什麼現在選擇前端?

  (10)session和cookie的區別。

  (11)談談你對XSS和CSRF的理解。

  (12)事件委託的原理。

第二輪 現場面試

  面試安排在下午,當天是雷暴預警,喜馬拉雅的總部還是蠻大的,有兩棟樓,樓的外層裝修也很喜馬拉雅。面試官會從簡歷中挑出一個技術點,有深度有廣度的提問,很容易問到自己的技術盲點。

  (1)JSBridge原理。iOS和Android對JSbridge的處理有哪些不同,為什麼使用iframe實現?

  (2)CORS原理。跨域的時候帶cookie是怎麼配置的。有時候跨域請求會發送兩次,為什麼?

  (3)你對哪個技術點比較擅長。

  (4)同構的原理是怎麼樣的。為什麼可以做到服務端和客戶端只用一套程式碼就可以了。

  (5)SSR有什麼特點?

  (6)你最近在看什麼書?

  (7)SVG有哪些特點?和Canvas比有什麼區別。

  (8)webpack的載入器和插件有什麼本質區別?

  (9)Promise的原理是怎麼樣的?

  (10)請寫一個正則,讀取URL中的參數。

  (11)你平時是怎麼做性能優化的?

  (12)宏任務和微任務有哪些?瀏覽器對它們的處理有何不同?

  (13)如何上傳大圖。

  (14)如何在Canvas中畫一張第三方域名的圖片。

  (15)服務端如何將分片的文件組合成一個完整的文件。

  (16)React為什麼要推廣Hooks?

  (17)請用兩種方式實現前端的路由。

5)餓了么

第一輪 技術基礎

  當天面完喜馬拉雅,餓了么的人找到了我。投過簡歷後,過了一個小時就打我電話安排面試,正好當天沒啥安排,就直接開面了。問的內容還是比較偏基礎的,包括一些CSS的解決方案。

  (1)rem是如何計算的。

  (2)iframe之間是如何通訊的。

  (3)有一個彈層,如何禁止下層頁面的滾動?

  (4)如何實現雙向綁定。

  (5)對ES6的代理有了解嗎?

  (6)白屏的依據是什麼?如何優化?

  (7)解釋一下Event Loop。宏任務和微任務。

  (8)webpack的運行過程是怎麼樣的。

第二輪 技術項目

  交談了30分鐘左右,主要圍繞著實際項目展開。

  (1)說說你的工作經歷。

  (2)你最近在了解什麼新技術?有沒有考慮應用到團隊中?

  (3)你平時會不會關注自己的業務?有沒有想過拓展公司業務?

  (4)你們跨域是怎麼做的?有沒有用網關實現?

  (5)你最近有沒有遇到比較困難的事情?

  (6)你做了這麼多年前端,有沒有對這個行業提供一些產出?

  (7)在團隊中,你有沒有制訂過標準?或者有什麼貢獻?

  (8)你們的程式碼是如何發布的?具體發布原理有了解過嗎?

技術負責人

  (1)你為什麼選擇前端?

  (2)你為什麼做了5年後端後才選擇前端?

  (3)你們團隊幾個人?你為團隊做過哪些貢獻?

  (4)你最拿的出手的項目是什麼?

  (5)如果你還在這家公司呆著,你接下來會做什麼?

  (6)你期望要加入的團隊是怎麼樣的?

  (7)你做的性能監控系統與業界的相比,有什麼特點或優勢?

  (8)你有什麼優勢?

  (9)你簡歷中完成了100多個項目,這個數字很醒目,你想說明什麼?

第三輪 跨部門

  跨部門遇到的面試官是專門搞監控系統的,他在看了我的簡歷後,著重對簡歷上的性能監控系統開展了提問,下面只列出了幾個。

  (1)你做過的比較困難的項目有哪些?

  (2)你的性能監控系統的架構是怎麼樣的?

  (3)你目前負責哪些業務?

  (4)你有沒有計算過一個月後,你的MongoDB的存儲量是多少?

  (5)在重寫XMLHttpRequest後,如果遇到第三方庫也重寫了它,碰到問題該如何排查?

  (6)如何通過你的性能系統,來找出業務瓶頸?

  (7)是否考慮過監控多端,例如瀏覽器、小程式、客戶端等。