1. 程式人生 > >【年終總結】微信前端社招有感

【年終總結】微信前端社招有感

時間飛快,轉眼間8102還差一個月就over了,順了順好幾天沒理的鬍渣兒,好像已經老了不少。

不,我還很年輕!雖然年終還沒到,但好像也差不多了。

幾經輾轉,年底前終於拿到了微信的offer,可以說是今年一大幸事了。

是一個結束,結束本命年的坎坷;是一個開始,開始新的征程。

這篇雜文就簡單記錄一下微信前端社招的經歷,以及回顧這兩年半做過的東西。

 

 

一、過七關

微信社招,老早就聽說難度極大,十幾輪面試的情況都有。

所以急不得,大概今年下半年開始,本菜菜就著手準備了,主要是擴充知識面以及加深對相關知識的理解與運用(暴露了平時有點懶。。。)

說實話,這半年收穫頗多,熬夜也最多,應該有十來次為了理清某些東西,奮戰到半夜兩三點,若是失敗了就過幾天再戰...

 

可能不同的崗位性質不同,要求也不同,對我而言,整體上對業務解決能力要求很高,演算法方面則沒有太高要求

每輪都問到了職業規劃,為什麼離開目前的環境

我總共經歷了七輪(4輪技術、兩輪GM、一輪HR),輪次可穿插並不是按順序的。面試體驗都非常棒~

當時覺得可能面不到最後,沒有刻意去記錄面試問的東西,所以現在也忘得差不多了,也沒必要刻意去刷面試題,就算刷到了,不久之後也會忘的。

 

1、技術電面(1h)

這輪算是探實力吧,確認有沒有前端基礎和好的專案經歷。

首先以在公司承擔的角色作為開端,問了平常做過的一些專案,介紹其中一個,就從裡頭挖掘業務的問題和解決辦法,同時抽取一些前端技術題。

沒辦法,專案說起來不夠複雜呀,似乎面試官並不滿意,自己就趁機把話題引向了其他有特色的專案來突圍。

抽了一些部落格上記錄的知識點來問,期間竟然找了我四年前的文章(問了各種編碼,以及BOM頭優缺點適用性)和某道演算法題 -_- 

HTTP和HTTPS的握手過程,是否瞭解HTTP2的特點,以及怎麼理解它的多路複用

還講了對前端安全和效能的理解,移動端的認識等

總之第一輪感覺還好,勉勉強強,話比較多,時間不慢的。

 

2、技術現場(1h)

這輪感覺跟第一輪差不多,只是比較正式些,來到了廣州塔旁邊的T.I.T

除了栽在了iPhoneX劉海屏的相關問題和移動端適配是否需要支援高清屏的“爭論”外,基本穩住了氣場。

深知自己沒有可以拿出手的很牛逼的專案,為了體現自己還是會一些東東的,就只能穿插著講出幾個專案了。

講了前端優化的實踐(為什麼優化,怎麼優化,怎麼評估,還能怎麼優化)

前端錯誤收集(怎麼記錄,怎麼區分是不是第三方外掛的問題,怎麼上報,怎麼分析)

問了PC端和移動端的轉換,ES6常用的東西,陣列方法大全等

 

3、技術現場(1h)

本輪是和前一輪銜接在一起的,這種方式挺好的,可以節約候選人來回奔波時間。

當時感覺是總監級別的,因為氣場有點強大,短褲拖鞋很隨性,判斷得出來反應必須非常快才能留下好印象,後來才知道是組長

問的東西,前端方面相對少一點了,偏向於整體性

問了目前團隊現狀,在團隊前端沉澱,技術預研上做了什麼,為什麼這麼做,有沒有起到什麼作用。

列舉幾條前端程式碼檢查規則,為什麼這麼制定

有沒有做介面的統一規範,返回碼之類的規定,怎麼和後端協商好這些規則,怎麼讓新人很好地用好這些

為什麼要做小程式預研,它不是很簡單麼

MVVW是什麼,有什麼優缺點

怎麼實現記住登入功能(很強的整體性)

怎麼實現統一登入,或者授權登入需要考慮什麼(更強的整體性)

 

4、HR現場(35min)

直接就來到了hr面,很快吧......流程可以隨意插進來

一不小心提前1h到了現場,前臺那小夥子也不知怎的,直接就聯絡hr了,說實話我本不想打擾的

不過hr馬上就下樓來接待了,進入稍許嘈雜的咖啡廳慢等,服務質量還闊以,在這裡是要點個讚的

本輪面試主要考察了團隊感受,過往的專案經歷,技術學習能力,薪酬期望

期間面試官也很直白的說,她要知道有沒有解決複雜問題的能力

直接從大學階段問起了,從在校時期做的最好專案,到工作時期做的最好專案,

聽起來似乎還是沒對胃口,就只有拿出自己為解決問題不辭辛勞很有決心的不堪歷史來說了 -_- 

問了平時解決問題的方式,有沒有從團隊中學到了什麼,跟誰學到的,團隊中角色,覺得團隊有什麼問題

 

5、GM現場(30min)

本輪是直接連著HR面的,基本沒問技術,側重考量業務理解能力以及是否適合部門

看到面試官戴著一個佳明跑表,想必也是跑馬人士哈哈哈,相對來說還是蠻輕鬆的,把之前的專案又說了一遍

如果要做一個數據分析系統,在前端方面可以做什麼東西(涉及了需求理解、功能拆分、技術實現)

問了自己做過什麼業務,期望什麼業務方向

介紹了職級體系,部門的業務特點

 

6、GM電面(15min)

本輪面試可以說是最慘的了,感覺面試官並不滿意自己做的專案,草草就收場了,也就誕生了第七輪技術面。

團隊的成員分佈,各角色職責和定位,怎麼進行版本迭代,一個系統的開發與維護週期是怎樣的,專案延期的時候怎麼做的

因為做的主要是內部系統(面向公司內部的需求),被問到為什麼不嘗試部門間轉崗,為什麼兩年多了還一直在做內部系統

介紹公司其他部門團隊的業務等

 

7、技術現場(1h)

本輪面試屬於技術交叉面,即由其他部門的人來面,主要還是因為前幾輪表現不佳,讓面試官們猶猶豫豫的。

這小哥一直樂呵呵的,看起來很容易談得來,也確實很容易談得來。後面HR說他是少有的T4級前端,大大牛呀...真是隨和

面到後面才知道,他一直想挖出我拆分問題的能力,如何對大的問題進行分解,逐個擊破,同時思維要發散,也許還有更簡便的方法。

一個難題,比如我提到了曾經想過整一個適合部門的CI/CD方案並實現,不過遇到了蠻多難題就沒有做下去了

這裡就缺了拆分問題模型的能力,不應想著難度太大做不了就做不了,而應該分析好從小的做起,一點一點地新增,慢慢堅持。

其實是自己作死挖了坑自己跳進去了..

說了經常寫技術部落格和整一些Github專案是一個非常好的習慣,挑了效能和安全方面的專案實踐來問,

為什麼用requestAnimationFrame來代替setTimeout

首屏太慢的問題除了SSR這種方法還有沒有其他更簡便的方法(在前端方面直接幹)

前端規範的落地,碰到的問題和解決過程

過往業務能力與技術能力的實踐

有沒有看過一些原始碼,整理的webpack專案有什麼難點,怎麼進行優化的

怎麼除錯,sourcemap是什麼東東

兩顆樹比對一般怎麼做,React中虛擬DOM是什麼,它在樹對比方面做了什麼優化,新版本React有什麼效能上的變化

 

從開始到結束,進行了差不多一個月,進度好像還是蠻快的,

總之,就目前這個部門的社招面試而言,我感覺側重考察的點是 是否具有解決複雜業務的能力

當然,學習能力,技術專研,技術廣度在兩三年經驗這個階段是非常重要的。

 

二、出師不利

其實我在這前兩週,還面了微信公眾平臺那個部門,一面電面就跪了,面完感覺可掛可不掛的樣子

主要問題出在:

用了很久的JQ,卻沒認真地看過原始碼,被問到如何像JQ那樣實現動畫向左再向右不同的速度,回答得七零八亂

問了JQ中選擇器的識別解析順序是怎樣的,為什麼從右到左,我竟然說成了從左到右效能應該會更高。。。可能是大腦空白了吧

問了在React中事件處理回撥裡面,連續setState N次,會出發幾次render,理解錯誤,以為他說的是特殊的那種自定義事件繫結,回答了這個事件不會受到事務處理的週期影響,所以是N次。我還有骨氣地爭論了起來。。。

問了平時有沒有意識去看一些專案中用到的框架外掛原始碼,我竟然表達出了一種並不想了解其內部實現的論調 -_-

專案中的某種解決方案太暴力了,還有更優雅的方案沒有用到,聯想到所做專案複雜度和技術追求應該不會很高

 

也不知當時是怎麼了,面完就呆坐在那回想,不敢相信自己會那麼回答

應該就是很久沒被面試了吧,慌了神,也沒有總結好自己所做的專案,分析出專案中的重要部分,技術積累還是不足。

不服呀,隨之就利用了接下來的一週時間,把JQ原始碼完整地看了一遍,我等菜菜只看懂了八九十這樣子(也算是第一次完整地看原始碼)

然鵝,公眾平臺的告吹經歷,直接導致了下一個運營平臺的不合適(因為是同一個大團隊負責的),可以說很慘烈了

還好後面有個機遇

 

 

三、這兩年半

算起來畢業差不多兩年半了,畢業那會定下來的職業規劃,前端規劃,現在看來肯定是沒實現多少的了。回想起來,還真沒有什麼可說的

前一年半大概過得很瀟灑,大部分週末都會帶著小相機外出拍來拍去的,逛了廣佛附近蠻多所謂的景點(四五十個應該有了),

近一年意識到再這麼下去會不會廢了,就減少了週末外出的次數,想著看看書搞搞個人專案什麼的,

然鵝那是不可能的,在家會不知不覺玩起了手機,還熬夜玩手機...

 

部門負責的是公司內部的系統,內部系統,即使用者群體為內部員工

常人看來多為管理後臺,外加很多奇奇怪怪的許可權

許可權多那是沒錯,但管理後臺就真沒幾個了,內部系統也可以有各種各樣的系統

就係統來說,算下來應該新開發了十來個新系統了,專案參與度都非常高,各有特色,也有蠻多有意思的技術點

對業務的理解能力應該有了一些提升,至少不會趨於侷限,能經常從整體的邏輯關聯上考慮問題了

其中大概有三個系統,大大鍛鍊了前端整體架構方面的能力(這裡指的是需求整體分解,功能模組劃分及通訊,技術實現規劃,人員分工排期)

也從最初的對產品畢恭畢敬到現在的產品沙比-_- 需求調整真是非常快

整了一些移動端活動頁,不過也僅是活動頁了,若是說移動端的系統,我還是沒有太多經驗的,所以後面就跟隨技術的步伐,整了個移動端的適配佈局,以備不時之需。

 

移動端的除錯,部門內一直沒有一個可用的方案,一碰上問題,根本不知道怎麼解決。後面就整理了一個比較完整的除錯方案,用得還算方便

資原始檔快取的問題一直存在,很多時候大家會忘記加上時間戳(或不知道要加,或忘了加)

為了改善這個問題,把塵封已久的Node.js拿出來玩了玩,整了一個本地監聽檔案改變則更改相關引用資源時間戳的小工具,在其他老專案中也一直沿用著

在requirejs專案中的去快取配置是比較暴力的,設定urlArgs直接配置所有資源的時間戳,後來想著能不能結合Grunt和Gulp來自定義資源的時間戳,正好也可以搞起前端構建工具,然鵝都失敗了,檔案依賴實在不好解決。把目光投向webpack,也是想著先結合一下,差不多到成功的時候發現,一個關鍵的路徑依賴問題實在搞不下去了,時間關係只有放棄(當時這塊已經研究了一週多了,不能再浪費時間)。就放棄了對requirejs專案進行這種時間戳優化

從而也誕生了另外一個方案:使用webpack和es6(或者再加上React)作為技術棧。webpack這個東西,其實配置是蠻複雜的,好像也沒有一個比較完整的構建配置例子和說明。React和Vue提供了開箱即用的腳手架,但當時覺得還是自己整一個好一點,就花了非常多精力去除錯配置項,印象中最麻煩的應該就是熱更新替換、jquery相關引用、編譯效能、模組提取權衡、資源路徑處理這幾塊,不過最終還是搞了起來搞出成績,績效拿到了唯一的一個S。多的時候會同時開十幾個專案的編譯程序編譯,隨之整了一個同步讀取可用埠的npm包,防止熱更新埠衝突。為了便於維護,也對開發和生產環境做了區分。

後端已經完善了一套程式碼規範,而前端竟然參考的還是後端的PHP規範,也只有JS有這種規範。沒有規矩不成方圓,就在某個季度初期,決定把前端規範搞一搞。遂參考了大大公司們的規範,結合專案中的使用情況,整了一套適合部門的規則,看著算是比較完整的。然鵝,人是不可信的,還是應該有工具來限制好這個規範的實施,又搞起了前端程式碼檢查工具,經歷了選工具、選規則集、各編輯器配置規則集、webpack配置規則檢查四個痛苦的過程,本來還想弄一下SVN的hooks來做提交前檢查的,只記得遇到了蠻多問題就沒有繼續往下了。不過,前端規範的落地,目前來說並不是非常理想,落地這塊還是蠻有難度的,還得考慮後端突然也改前端的程式碼。

渣渣電腦越來越卡,專案編譯得越來越慢, 在webpack4趨於穩定的時候,覺得應該升級升級以提升效率,果不其然,升級後速度提升了近7倍。結合日常開發的那堆專案,心想應該可以讓配置更為簡單,便對配置項再度抽離,核心檔案抹平不同專案之間檔案路徑的不同,對外暴露業務關鍵配置部分,績效繼續拿了個A

前端安全這塊也是一個很大的知識點,自己最初也是懵懵懂懂的,後來也是想著要徹底理解它,以在部門內進行分享為目標去研究它。在專案中不斷地測試後,最後便整理出了之前那篇文章,因眼界不足還有很多可以改善的,得等以後慢慢去整了。

前端效能方面,完整地看了Chrome DevTools和相關官方出品的文件,早些時候也過了過那本《Webkit技術內幕》。目前進行了四個比較有意義的優化實踐,兩個移動端活動頁的卡頓優化(主要是安卓手機呀為什麼經常卡..),一個頁面載入效能優化,一個頁面執行時效能優化。目前正在嘗試做JS執行優化的實踐

前端錯誤記錄,打點監控方面,也沒有做過太多的實踐,這個和前端測試一樣,都算是沒啥經驗了。目前正在開展這塊的調研

原始碼解析方面,完整看了JQ原始碼,看了React原始碼實現的主要部分,理解了webpack編譯生成的檔案規則

看書方面,看了兩本小說,十幾本技術相關的

個人專案方面,就寫了四五個小專案

 

帶了兩個新人,第一個是個好苗子可惜後面就撤了

另外一個就差一些了,沒啥基礎,校招後端轉過來的(也不能怪他,就怪老大騙他進來做前端)

面了十幾個人,有不一樣的感受,還是很感謝能有這種麵人的經歷的

團隊管理方面,說真的,我們前端老大真是失職呀,團隊基本沒什麼成長,沒什麼規劃,也經常請假,我都替他憂心。找個好老大很重要

所以平時就承擔了一些本該前端負責人才做的工作,也瞭解到並實踐了一些管理者的日常

然鵝好像沒啥興趣,看起來我還是比較偏向做技術的...

 

最後回頭看看,技術提升的曲線的是有些放緩了,可能我不算是那種Geek吧,有時會懶得寫程式碼懶得做技術,有時又很能投入進去。

應該多回顧一下過於做過的東西,有沒有價值,有沒有提升,自己有沒有懈怠。多看看外面的世界是怎樣的。

新的平臺,帶來新的機遇和挑戰,就加油吧 ^-^