個人2019春招(前端暑期實習)記錄

原文首發於個人博客,歡迎關注~前端

今年的春招(暑期實習)批已通過去大半了,相信很多同窗已經拿到了心儀的offer了~原本打算暑假有空再寫寫這段經歷,不過今天正好有空就記錄一下吧,但願能給正在或者從此要找前端實習、工做的同窗一點點啓發和建議。(因爲我妹子在北京讀書,因此實習的話我只想着申請北京的實習機會,這是本文的大前提)。vue

我本身是北郵研二的學生,「主修」前端。我本身的面試經歷很少,從1月份到如今總共只面了3家:頭條,騰訊·微信和螞蟻金服·支付寶,很幸運都拿到了offer。其實我以爲主要仍是內推對個人幫助特別大,沒有內推的話我估計也很難拿offer了。因此經驗第一條:能找內推儘可能經過內推來獲取面試資格。幫你內推的學長學姐通常會幫你查看(甚至修改)簡歷,有的能夠直接部門直推給leader,等於省去了HR篩簡歷的步驟,因此能找到內推就儘可能走內推而不是單純走網申吧。node

頭條

1月份的時候有個頭條的學長經過郵件聯繫到我,對個人作的PicGo很感興趣。跟我要了很是簡陋的簡歷,就把我內推了。webpack

不事後來面試郵件發來後我才知道給個人推的職位是iOS研發工程師。他們組是移動端的組,要招前端,可是可能沒有前端名額,就用iOS的職位給我內推了。而後我也就稀裏糊塗的去面試了。說實話畢竟是第一次面試,而且當時周邊的同窗也都沒有開始找實習,在僅有的幾天時間裏我準備的特別不充分。git

頭條總共面了我三面,都是視頻面。其中一面二面是連着的(一面一結束,立刻二面面試官來面我)。因爲這個組的性質比較特殊,來面個人面試官都不是寫前端的,所以問的網絡、計算機相關的問題會更多點。我過後(3月份面完微信和螞蟻以後)才以爲當時1月份面頭條的時候簡直回答得一塌糊塗。github

不過感受本身作的很正確的一件事就是面試完立刻把問題記下來了。從中也看出三家公司的側重點不一樣。web

頭條一面

頭條一面是個年輕的小哥,是作移動端的。先問了個人項目,由於都是前端的他也沒太瞭解,就開始問問題了:面試

  • UTF-8 UTF-16 和 Unicode 什麼關係 【當時不會 | 編碼規則和字符集】
  • TCP三次握手能夠理解,爲何須要四次揮手 【四次揮手是2+2】
  • 常見的HTTP狀態碼 【相信大家都會】
  • GET\POST請求區別 【常規問題】
  • HTTP報文分爲幾部分,分別說了啥,頭部尤爲重要 【當時說的不全 | 3個部分,以及請求和響應報文的區別】
  • HTTPS與TLS或者SSL有了解麼,加密是對稱加密仍是非對稱加密 【當時不是特別瞭解 | 兩者都有】
  • JS內存管理機制 【標記-清除】
  • 數組和鏈表區別和應用場景 【查找-操做】
  • 動態數組如何實現,查找和插入哪一個代價大【當時不會】
  • Electron的原理,簡單描述 【Node.js+NativeApi+Chromium】
  • Vue的原理,簡單描述 【Object.defineProperty + Dep + Watcher】
  • 平時怎麼學習新知識,從什麼渠道 【博客、掘金、GitHub、StackOverflow等】
  • 開發項目中遇到最困難、最有挑戰的事 【PicGo的插件系統】
  • 算法題1,求數組裏最大和的子數組 【思路說了,沒寫出來】

一面算法題雖然思路說對了,可是沒寫出來的時候我以爲本身已經涼了。結果竟然面試官說「你等一下,我去叫二面面試官」。算法

頭條二面

和一面就隔了3分鐘。二面是交叉面,是另一個部門的面試官來面的。這個面試官年齡一看就比一面面試官大。簡單自我介紹以後,他就開始問我問題了:vue-cli

  • 若是我是一個Leader,想要把APP裏某個頁面的首次開屏渲染時間下降,如何協調前端、服務端、客戶端同窗。【我說了緩存相關的,不過面試官說不夠】
  • 從輸入一個URL到最終用戶看到界面,經歷那些步驟【常規題】
  • 對HTTP/2有沒有了解,以及QUIC協議【都瞭解過,稍微說了一下個人認知】
  • HTTP緩存,304狀態碼如何而來【常規題】
  • 算法題2,單鏈表是否交叉,如何算重疊個數【說了一下思路,可是不是最優解】

算法題2如今看來真的超級簡單。當時我真的沒刷過題,平時對算法訓練也不多,因此說的思路能過可是不是最優解。面試官說「行吧」(當時以爲涼了哈哈)。

頭條三面

三面和二面隔了大概幾天吧。其實面完二面以爲仍是很懸,結果仍是收到HR的三面約時間電話。三面面試官是部門leader了。這個面試相對來講最輕鬆,基本沒有問什麼複雜的問題:

  • 談項目 【簡歷上的,主要是PicGo】
  • Electron原理 【一面說過了】
  • markdown渲染原理 【正則匹配】
  • 對前端框架的想法 【從開發效率到後期維護還有工程化角度說了本身的認知】
  • 有什麼想問的 【問了之後要作啥】

因爲卡着1月底快過年了,因此HR那邊在年前給了我口頭offer,年後回來就給我發了正式的offer。

做爲人生中第一份offer,仍是挺激動的。不過不是 前端開發 的職位讓我內心一直有點不舒服。我想去的實際上是專業的前端團隊,以及以後入職後作的東西也不是本身特別喜歡的,因此我在想着年後回學校再找找有沒有本身更喜歡的實習崗位。固然頭條這個崗位也很棒了!

經驗總結二:算法、數據結構和計算機、網絡基礎知識很重要,哪怕是前端研發工程師,也是一名工程師。 因此我寒假回去後就開始針對本身薄弱的算法和數據結構部分開始了惡補。

騰訊·微信

騰訊今年春招(暑期實習)開始的時間特別早,從2月底就開始能網申、內推了。尤爲3月份一整個月是提早批,而且4月1號以前沒走完流程的同窗,都要必須參加4月份的筆試。因此理論上是越早內推越好,越到後面簡歷越多並且萬一4月前流程沒走完,就得參加筆試了。

原本我想着先面幾家小一點的公司攢攢經驗再去投騰訊和螞蟻金服的,畢竟這兩家門檻仍是至關高的。本來打算投北京微信的前端崗,可是問了上一屆的一個學長說北京的微信不招前端,因而個人重心就放在螞蟻金服的北京實習了。不過有件事情的發生打破了我本來的規劃。

我有個在微信工做的學長,據說了個人狀況以後幫我從微信HR那邊問到北京微信今年招前端的狀況,可是HC不多。我一聽,呀,好機會。趕忙修改了簡歷發給了學長。內推後沒兩天我就收到了北京微信的現場面試邀請,內心仍是很忐忑的,畢竟那但是微信啊。並且也是個人第一次現場面試。

微信一面

到現場後,有個年齡跟我相仿的學長找到了我,說「我是你的一面面試官」。微信的現場面試沒有我想象中那麼拘謹(兩我的一間小屋子那種),是在開闊的大廳裏,有不少小圓桌,光線也很好。總之面試體驗仍是很好的。同時我還看到了不少其餘來面試的人。

一面面試官說他也是北郵畢業的,一會兒就感受放鬆了很多。接下去就基本是他拿着個人簡歷開始問問題了。

  1. 問實習作了啥 【研究生導師的公司】
  2. PicGo作了啥 【簡述了一下誕生的過程和它的做用】
  3. Electron是啥,爲何選擇用Electron 【用的人多】
  4. MVVM與Vue的理解 【數據驅動】
  5. vue的雙向綁定的原理 【Object.defineProperty + Dep + Watcher】
  6. vue的生命週期以及作了啥,用來幹嗎的 【beforeCreate、created、mounted等】
  7. 講講Virtual Dom 【稍微說了一下理解】
  8. 寫過render函數麼,跟template有啥區別 【寫過,說了一下區別】
  9. vue的服務端渲染和客戶端渲染區別是啥,服務端渲染做用是啥 【SEO友好,首屏渲染速度等】
  10. 講講this指針和箭頭函數 【常規題】
  11. const和let與var的區別 【常規題】
  12. 說說webpack、rollup的tree shanking 【說了tree shanking是啥以及如何實現的】
  13. webpack的loader和plugin區別是啥 【loader處理某一類文件而plugin能夠作「任何」事】
  14. promise的finally如何實現 【說了一下個人想法,可是後來想一想有點不對】
  15. 瀏覽器和Node端的事件循環的區別 【說了一下個人印象,與setTimeout有關】

一面的問題基本都答上來了,面試官也以爲很滿意,就讓我等會,叫來了二面面試官,跟我說是專門搞算法的。(內心一涼)

微信二面

面試官跟我說他是北師畢業的,跟個人學校(北郵)很近(哈哈)。而後說,「咱們來到簡單的算法題吧,不須要你寫,只須要你說說思路」

  1. 算法題:m*n的矩陣,只有0、1,找出最大的只包含1的矩形面積。【說了最蠢的解法...面試官一直引導我也沒想出怎麼實現更優解】
  2. PicGo作了啥,爲啥star這麼多 【講了一下做用】

算法題又是沒作出來(雖說了最蠢的解法)內心又是一涼,感受gg。結果面試官說「小夥子思惟還挺靈活」(有麼!)而後讓我等會,叫來了三面面試官。

微信三面

三面是個女leader,她對我說「前面的面試官對你的評價很高啊」。因而開始問個人我的經歷和項目相關。最後問了我何時能來?我一聽奇怪,我不是投的暑期實習麼?而後她說最近有個項目急着要上線,因此缺人,就額外要了一個前端的HC。我說我實驗室暑假前並不放人...因此須要再考慮一下。而且這個時候我聽聞他們組實際是作AI的,而前端若是我去了也只有兩我的。到這時我感受有點不對勁,不過leader說以後還有一個廣州的電面要我準備一下。

微信四面

沒過兩天就是4面,也是我第一次電話面試。四面就純粹圍繞着我作的項目PicGo開始說了。問的比較注重的部分是我對於PicGo的思考。從開發者和使用者和產品的角度去說明。好比如何維護、如何打磨產品,遇到的問題如何克服,與用戶的意見不一樣時如何應對等等。我感受更考量我對PicGo的認知和將來的規劃,究竟是一個用心作的產品還僅僅只是一個star收集者。

四面面完,沒兩天三面的leader就打電話過來問我啥時候能去實習。然而在四面面完的這幾天裏,我就決定了不去了。首先實驗室6月底前放不了人;第二個跟我預期的有所出入,我覺得是微信的前端團隊招實習生(但不是),由於我其實想在前端這塊能繼續作深刻一些,因此就仍是把這個offer給拒了。當時想法是若是北京微信這邊沒有喜歡的崗位,那也沒事,好好準備一下螞蟻金服的面試就好。

回宿舍我跟舍友一說我把微信的offer拒了,他們只丟過來一句「暴殄天物」。捨得捨得,有舍纔有得,後面會再說。

螞蟻金服·支付寶

在面微信的面試階段前,有個支付寶的北郵師兄經過微信聯繫上我。他說關注個人GitHub很久了,想給我內推到支付寶的前端團隊那邊。我天然是開心地答應了。不過我當時想着先完善簡歷+先把微信面完。否則一會兒準備兩個大廠的面試,壓力大不說,萬一時間撞上了反而更尷尬。在拒了微信後我把簡歷發給了師兄,開始了支付寶那邊的內推。

支付寶這邊技術面總共三面+HR一面。全程電話面試。

支付寶一面

內推沒多久,一面面試官就經過微信聯繫我,跟我約好了面試時間(次日晚上7點半)並說「我這一面很輕鬆的」。在面試以前我有據說螞蟻金服的面試是比較難的,雖然師兄說很簡單但也是作好了被掛的準備。

7點半準時電話響起。面試官說他也是北郵畢業的,讓我稍稍有所放鬆。而後接下來的問題就讓我冷汗直冒。

  1. 介紹一下作的項目 【實驗室項目+我的項目】
  2. 前端工程化的理解 【流程+規範+自動化等】
  3. 對Webpack作了哪些配置來提速 【不少,具體能夠參考我這篇文章
  4. 一段代碼輸入babel,把結果再輸入babel,結果同樣麼 【我說應該不同,可是沒說出爲何】
  5. 配置過babel哪些屬性 【presets,plugins,env等】
  6. PicGo的插件如何發佈、安裝,如何確保插件安全性 【經過npm發佈,安全性沒有考慮很徹底,而後跟面試官聊了安全方面的考量】
  7. Electron如何實現跨進程通訊。還有哪些其餘跨進程通訊的例子 【ipcMain和ipcRenderer,跨進程通訊的好比socket等,我瞭解的很少】
  8. Electron打包體積、編譯速度相關如何考量,怎麼優化或者怎麼作的 【我是經過CI打包,沒經過本身的機器。因此沒有特別考慮這方面的。不過不須要用babel轉譯能節省一些時間】
  9. 爲何選TypeScript來開發,說說對TS的理解 【靜態類型、語法檢查等】
  10. TypeScript的interface編譯後會佔用空間麼,enum呢?(運行時和開發時不同)【前者答出來了,後者不肯定】
  11. 說說什麼是服務端渲染以及Vue的服務端渲染如何實現 【直出HTML,經過render函數將VirtualDom渲染模板】
  12. 若是Vue2沒有實現VirtualDOM,能夠作到服務端渲染嗎 【能夠】
  13. Vue的diff算法如何實現 【說了一下以前本身看過的實現】
  14. 【算法題】求兩個序列裏的最長公共子序列 【稀裏糊塗說了一通,好像沒錯,後來想一想其實不對】
  15. 簡單說說Vue的響應式原理 【Object.defineProperty + Dep + Watcher】
  16. 你有什麼要問個人嗎 【主要作什麼?答:螞蟻森林,螞蟻莊園等】

一面的難度應該是面的這三個大廠以來最難的。面試過程當中我仍是比較緊張的,不過一開始確實緊張,後面說開了就好多了。面試官面完以後說等二面聯繫我吧。二面面試官是他們部門的leader。

支付寶二面

一面面完的次日面試官就加我了,直接約了當天晚上7點半的電面。(等於昨天一面今天二面...)事前我從內推個人師兄那裏瞭解到二面面試官是很厲害的一我的,因此難度應該會比一面面試官高。聽到這個消息不覺嚥了一下口水,難受。

7點半準時電話響起。二面面試官的聲音和語氣給個人感受是一開始比較低沉的,感受比較嚴肅。而後後面的問題果真「沒讓我失望」地難。

  1. 學前端的經歷? 【15年開始自學,簡單說了一下】
  2. 對計算機的體系結構的認知 【懵了,不知道說啥】
  3. 有沒有經歷過jQuery時代 【有】
  4. Webpack優化是怎麼作的 【跟一面說的差很少】
  5. 上述的優化是基於什麼方向去作的 【從cache、減小文件搜索路徑、多進程優化等作的】
  6. 上述的優化有沒有量化出問題(好比看看每塊耗時多久等等)再針對性地作優化 【用了profile查看了開發階段的編譯耗時,作了一個簡單的插件作了開發階段的速度提高,可是原理我也沒說地太清楚】
  7. vue-hot-reload原理是啥 【我只打上來websocket+jsonp作的更新,可是實際上更復雜】
  8. 在vue項目裏若是我更新了一個js腳本可是頁面不更新,我要怎麼讓vue-hot-reload去更新 【真不會】
  9. 在vue項目裏若是我更新了一個js,可是不想讓頁面從新刷新,而只是更新我js的執行部分,我要怎麼讓vue-hot-reload去更新【真不會】
  10. vue的template是如何轉換成render functions的 【說了一下正則匹配,AST,可是不知道是如何有機串起來的】
  11. 接上一問,光是正則匹配是沒法解決全部問題的,還須要啥,而後怎麼作,要哪些階段?(AST)【說了大概,可是不知道是如何有機串起來的】
  12. AST相關知識掌握程度是多少,去哪裏瞭解的 【很少,相關博客,跑了一些DEMO】
  13. 寫Electron的時候遇到了哪些問題(解決的或者沒解決的都說說)【系統級別的右鍵菜單實現、插件系統等】
  14. base64怎麼編碼的 【常規題】
  15. 從輸入一個地址到瀏覽器展示網頁的過程 【常規題】
  16. DNS查詢用TCP來作能夠麼 【能夠,可是慢】
  17. HTTPS握手加密過程 【常規題,此次會了,面頭條的時候還不全會】
  18. setTimeout和Promise的異步的區別,在瀏覽器和Node下的區別 【事件循環的區別,我說了具體的例子】
  19. 如何用Jest作的Koa和Vue的測試 【對Koa作了api的測試,對Vue作了界面的單元測試】
  20. CSS和JS哪一個更熟悉?【JS】
  21. 接上問,CSS的transform有哪些屬性 【rotate,translate等】
  22. 接上問如何實現一個div既平移又變色?transform的矩陣有了解過麼 【沒答出transform能夠帶多個屬性,知道矩陣,沒寫過】
  23. Vue的響應式原理,以及若是一個變量不在頁面上出現過(或者使用過),響應式系統是怎麼應對的 【render Watcher沒有get到這個變量就不會收集它的依賴】
  24. 父子組件如何分開收集依賴,或者說父子組件如何確保父組件只收集本身的依賴,子組件只收集本身的依賴 【父子組件有本身的生命週期】
  25. 在Watcher內再new一個Watcher後,如何保證依賴收集不會出錯 【同一時刻只有一個Watcher在工做】
  26. 問一下算法和數據結構掌握程度 → 說一下快排吧 【說了一下快排原理】
  27. 你上面跟前端無關的知識都是從哪裏獲取的 【實驗室項目、同窗、本身搗鼓、博客等】
  28. 你有什麼要問個人嗎 【這個組杭州和北京的部門作的東西同樣麼,作什麼】

面完感受很涼,問題的深度是真的深。以前的面試不多有徹底答不上來的,而此次二面對 vue-hot-reload 的問題就基本沒有答上來。面試官最後給個人反饋大概仍是不錯的,因此我就在忐忑中等待三面的通知。

支付寶三面

過了幾天,三面面試官經過電話跟我約了時間,聽聲音仍是很和藹的。不過,問題仍是依然頗有難度啊!問題很少,總共問了三個問題,可是第一問就讓我很難受:

  1. 【算法+前端】給定必定數目的粒子,每一個粒子有4個屬性【位置座標,半徑,速度,加速度】。求問在以下數量下,用什麼方式繪製這些運動粒子,用什麼數據結構來存儲。
    1. 20個 【DOM,Canvas】
    2. 500個 【DOM,Canvas】
    3. 20000個 → 200w個 【Canvas,可是不夠,由於沒有必要把200w個點都渲染出來,只須要渲染可視區的。因此問題的關鍵是如何找到只在可視區出現的圓,這是一道數據結構+算法題。】
  2. 接上一題,若是是500個用DOM來繪製的粒子,請問使用Vue或者React的VirtualDom技術來實現,對比用原生操做DOM(假設極致優化)來實現,哪一種方案的性能更好。【我說了原生操做,並給出VirtualDom不適合這個例子的理由】
  3. 給定一個APP內的營銷頁面,用戶可能在離線狀態下打開APP。若是營銷頁面的圖片已通過期了,應該要被撤下,不然會引發歧義。請問用什麼辦法可以撤下。若是不能用JS,若是用戶修改了客戶端時間呢?【問題難度一步步加深,先問常規離線模式實現,而後開始不讓用JS,而且客戶端時間不許確怎麼作。沒答全。】

這個面試總共只有45分鐘不到,面試官說不能太長不然影響個人評價。我就說我第一題答得不夠好。面試官說「不是不夠好兄弟,是很很差!你第二題答得很不錯,第三題有所誤差,可是你第一題答地太差了」

哈哈,當時聽完以爲應該是涼了吧~而後面試官最後說了一句,「等以後HR會聯繫你」。噫,因此仍是有戲?

經驗總結三:只知其然不知其因此然是不行的,要對原理了解更深才能更好地解決問題。

不過人生老是有所波瀾。

微信·小程序

在我面支付寶結束先後,微信那邊的HR小姐姐聯繫到我問我爲何把北京的崗位拒了。我說了以前我考慮的理由(主要是團隊不符合預期啊啥的)。原本覺得跟微信的緣分就這樣了。而後HR小姐姐不死心,幫我聯繫了廣州微信小程序的前端部門,問我去不去那邊實習。我跟妹子商量了一下,暑期實習去廣州兩個月也能接受。因而就答應了。不太小程序那邊還須要加面 。小程序這個部門作的是小程序開發者工具的,我以爲很合個人胃口,正好我也比較喜歡寫工具類。

一波三折,在等待支付寶HR給我電話的這段時間裏,我在兩天內就拿到了微信小程序的offer。

微信·小程序一面

三月最後一週的週一下午,我記得很清楚。3點開始一面。面試官給了我一個連接,讓我一小時內作完題而後他再跟我電話聊。

一個小時總共兩道題:

第一題

實現一個 HardMan:
HardMan("jack") 輸出:
I am jack

HardMan("jack").rest(10).learn("computer") 輸出
I am jack
//等待10秒
Start learning after 10 seconds
Learning computer

HardMan("jack").restFirst(5).learn("chinese") 輸出
//等待5秒
Start learning after 5 seconds
I am jack
Learning chinese
複製代碼

不難,主要是鏈式調用要處理好this以及用一個setTimeout作異步調用任務隊列。我沒有用ES6的Class實現,用了常規的funciton實現以下:

const HardMan = function (name) {
  this.queueList = [() => console.log(`I am ${name}`)]
  this.learn = function (subject) {
    this.queueList.push(() => console.log(`Learning ${subject}`))
    return this
  }
  this.handleTime = function (time) {
    return () => new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log(`Start learning after ${time} second`)
        resolve()
      }, time * 1000)
    })
  }
  this.rest = function (time) {
    this.queueList.push(this.handleTime(time))
    return this
  }
  this.restFirst = function (time) {
    this.queueList.unshift(this.handleTime(time))
    return this
  }
  setTimeout(async () => {
    for (let todo of this.queueList) {
      await todo()
    }
  }, 0)
  return this
}
複製代碼

第二題

微信小程序團隊一共有 n 名成員,決定出去秋遊,在海邊遇到出租摩托艇的傑克馬,馬先生手上有 m 輛待出租的摩托艇,價格分別是 b1 、b2 ... bm; 因爲習慣了微信支付,團隊中每一個人身上的現金都有限,分別是 a1 a2 ... an,對了,一塊兒出門的老闆還帶有 S 元的團隊經費,這個經費是每一個人均可以使用的

那麼考慮如下兩個場景

場景1 團隊成員都頗有愛,都願意借錢給其餘同事,那麼這時候團隊最多能租到多少摩托艇

function max( Array n, Array m, S) {
  return num;
}
複製代碼

個人答案:

// 能借錢說明能夠把錢彙總起來從而算出能接多少摩托艇
function max(n, m, S) {
  let sum = n.reduce((a, b) => a + b, 0) + S
  m = m.sort((a,b) => a - b)
  let num = 0
  m.forEach(item => {
    sum -= item
    if (sum >= 0) {
      num++
    }
  })
  return num
}
複製代碼

場景2 團隊成員都十分小氣,是不肯意借錢給別人的,那麼請考慮如下兩個問題

//問題一 老闆是否能想到一個策略,使得全部人都能租到摩托艇?
function isAll(Array n, Array m, S){
  return bool;
}
複製代碼

個人答案:

// 將摩托艇的費用和我的費用排序使得錢最少的人租最便宜的車,一一對應
// 若是錢不夠再向老闆借錢
// 直到老闆的錢S被借完爲止
function isAll (n, m, S) {
  if (m.length < n.length) { // 摩托艇不夠
    return false
  }
  m = m.sort((a, b) => a - b)
  n = n.sort((a, b) => a - b)
  let length = n.length
  for (let i = 0; i < length; i++) {
    let diff = n[i] - m[i]
    if (diff < 0) {
      S += diff
      if (S < 0) {
        return false
      }
    }
  }
  return true
}
複製代碼
//問題二 請問給出一個策略
// - 使得整個團隊租到最多的摩托艇
// - 在租到最多摩托艇的狀況下,總體的支出儘可能的少
function max( Array n, Array m, S) {
// 採用動態規劃解,
return {
  num,// 多少摩托艇
  cost // 整體資金支出
}
複製代碼

由於時間關係我沒有寫完。因此跟就把大概寫了,這是道揹包問題,後面跟面試官說了一下思路。

// 一個揹包問題,不過我沒寫出來
// 以dp[i][j]表明第i我的要不要買第j輛車
// 有兩種狀況
// 1. 第i我的沒租車,那麼意味着第i - 1我的可能租這輛車
// 2. 第i我的租了車,那麼意味着是在i - 1我的租了j - 1輛車的狀況下租了j這輛車
// 統計最高的S不爲負數的J即爲買了最多的車。
// 當J相同的狀況下比較S的大小,S越大說明越省錢
// 優化思路:1. 當S小於0的時候就不必繼續算了 2. 一開始兩個數組依然像第二題同樣排序
複製代碼

這兩個筆試題作完,面試官電話就過來了,簡單問了一些問題:

  1. 對着筆試題的一些提問,好比第一題的this指針問題,第二題的思路問題 【一遍過】
  2. HTTPS創建鏈接過程 【常規題】
  3. 前端緩存的認知 【常規題,緩存的類型,不一樣緩存的做用等等】
  4. 前端安全的認知 【XSS,CSRF等】
  5. 有什麼想問的嗎 【爲啥小程序開發者工具用NW.js而不是Electron】

面試官問了大概半小時,就說以後二面的leader會聯繫我。因爲筆試題都作出來,因此感受仍是比較良好的。只是不知道二面來得這麼快。

微信·小程序二面

二面面試官隔了大概半小時就打電話來了,主要就看着個人PicGo這個項目在問,多是由於技術棧(Electron)和小程序開發者工具(NW.js)比較接近吧。

  1. 爲何選擇Electron而不是用網頁實現PicGo 【由於須要作配置、插件化、須要用到Node.js的API等】
  2. 介紹一下PicGo
  3. PicGo如何作的更新策略,如何實現靜默更新,如何實現代碼級別熱更新,如何在讀寫文件權限不夠的狀況下熱更新 【更新策略其實很簡單,後面面試官問的更新策略是我未實現的,可是跟他一塊兒談了一下思路】
  4. 寫PicGo遇到的最大的問題 【插件系統】
  5. 插件系統如何實現 【讀配置、加載、生命週期函數等等】
  6. 寫PicGo遇到過安全相關的問題麼,如何處理 【插件的安全相關】
  7. 寫PicGo遇到過性能相關的問題麼 【有,相冊頁圖片多會卡頓,說了如何處理等】
  8. 有什麼想問的嗎 【沒啥了】

面試官的語氣很是和藹,跟我探討的時候也是基本以商量的語氣。末了還誇了一下這個項目作得仍是挺完整的。(其實還有一個很重要的「測試」部分沒寫。。。)考察的重點問題已經不是功能問題,並且相似安全、更新策略等這些平時可能寫東西的時候不會太注意的問題。因此若是隻是一個玩具項目,可能確實談不上來。還好以前不少坑本身踩過,因此跟面試官聊起來也比較愉快。

經驗總結四:一個好的(開源)項目很是加分。好的意思不是star多,而是你對它的思考、實踐多。 經驗總結五:若是你有一個作得很好的項目,必定要讓面試官看到,並引導他問你的項目來把你熟悉的東西說出來。

次日收到HR電話聯繫說已經經過面試了,第三天就發了Offer。

因爲小程序這個組作的東西是開發者工具,很合個人胃口,因而我就接了這個Offer,而此時我還沒接到支付寶的HR電話。微信的這個「搶人」速度是真的快。

最後

支付寶HR電話在後面很久纔打來。此時我已經接了小程序的offer了,因而暑期就沒辦法去支付寶實習了。我說了一下我暑假可能無法去實習,可是秋招還要回北京秋招。因此問可否保留秋招終面資格(跟去年同樣)。支付寶的HR給個人反饋就是不必定,很差說。我想一想反正若是不保留資格,到時候回北京再面就是了。

因而前兩天終於發來的offer,也只能拒掉了。同時我也只能跟頭條的HR說了一下狀況,真的很很差意思,秋招還有機會。

個人春招(暑期實習)之旅也就這樣結束。其實我大可接受支付寶的offer實習而後直接轉正,不過我想着既然有一個更喜歡的機會去嘗試一下又未嘗不可呢。其實從第一次拒絕微信的offer到後面又接了小程序的offer,我以爲都是由於我想作本身喜歡作的事吧。

最後經驗總結六:Do what you love, love what you do.

但願這份經歷也能給你帶來幫助。

附錄

個人GitHub,個人博客

我本身的主要開源項目

以及PicGo-Group的項目。

我參與的開源項目

等等。

相關文章
相關標籤/搜索