原文首發於個人博客,歡迎關注~前端
今年的春招(暑期實習)批已通過去大半了,相信很多同窗已經拿到了心儀的offer了~原本打算暑假有空再寫寫這段經歷,不過今天正好有空就記錄一下吧,但願能給正在或者從此要找前端實習、工做的同窗一點點啓發和建議。(因爲我妹子在北京讀書,因此實習的話我只想着申請北京的實習機會,這是本文的大前提)。vue
我本身是北郵研二的學生,「主修」前端。我本身的面試經歷很少,從1月份到如今總共只面了3家:頭條,騰訊·微信和螞蟻金服·支付寶,很幸運都拿到了offer。其實我以爲主要仍是內推對個人幫助特別大,沒有內推的話我估計也很難拿offer了。因此經驗第一條:能找內推儘可能經過內推來獲取面試資格。幫你內推的學長學姐通常會幫你查看(甚至修改)簡歷,有的能夠直接部門直推給leader,等於省去了HR篩簡歷的步驟,因此能找到內推就儘可能走內推而不是單純走網申吧。node
1月份的時候有個頭條的學長經過郵件聯繫到我,對個人作的PicGo很感興趣。跟我要了很是簡陋的簡歷,就把我內推了。webpack
不事後來面試郵件發來後我才知道給個人推的職位是iOS研發工程師
。他們組是移動端的組,要招前端,可是可能沒有前端名額,就用iOS
的職位給我內推了。而後我也就稀裏糊塗的去面試了。說實話畢竟是第一次面試,而且當時周邊的同窗也都沒有開始找實習,在僅有的幾天時間裏我準備的特別不充分。git
頭條總共面了我三面,都是視頻面。其中一面二面是連着的(一面一結束,立刻二面面試官來面我)。因爲這個組的性質比較特殊,來面個人面試官都不是寫前端的,所以問的網絡、計算機相關的問題會更多點。我過後(3月份面完微信和螞蟻以後)才以爲當時1月份面頭條的時候簡直回答得一塌糊塗。github
不過感受本身作的很正確的一件事就是面試完立刻把問題記下來了。從中也看出三家公司的側重點不一樣。web
頭條一面是個年輕的小哥,是作移動端的。先問了個人項目,由於都是前端的他也沒太瞭解,就開始問問題了:面試
一面算法題雖然思路說對了,可是沒寫出來的時候我以爲本身已經涼了。結果竟然面試官說「你等一下,我去叫二面面試官」。算法
和一面就隔了3分鐘。二面是交叉面,是另一個部門的面試官來面的。這個面試官年齡一看就比一面面試官大。簡單自我介紹以後,他就開始問我問題了:vue-cli
算法題2如今看來真的超級簡單。當時我真的沒刷過題,平時對算法訓練也不多,因此說的思路能過可是不是最優解。面試官說「行吧」(當時以爲涼了哈哈)。
三面和二面隔了大概幾天吧。其實面完二面以爲仍是很懸,結果仍是收到HR的三面約時間電話。三面面試官是部門leader了。這個面試相對來講最輕鬆,基本沒有問什麼複雜的問題:
因爲卡着1月底快過年了,因此HR那邊在年前給了我口頭offer,年後回來就給我發了正式的offer。
做爲人生中第一份offer,仍是挺激動的。不過不是 前端開發
的職位讓我內心一直有點不舒服。我想去的實際上是專業的前端團隊,以及以後入職後作的東西也不是本身特別喜歡的,因此我在想着年後回學校再找找有沒有本身更喜歡的實習崗位。固然頭條這個崗位也很棒了!
經驗總結二:算法、數據結構和計算機、網絡基礎知識很重要,哪怕是前端研發工程師,也是一名工程師。 因此我寒假回去後就開始針對本身薄弱的算法和數據結構部分開始了惡補。
騰訊今年春招(暑期實習)開始的時間特別早,從2月底就開始能網申、內推了。尤爲3月份一整個月是提早批,而且4月1號以前沒走完流程的同窗,都要必須參加4月份的筆試。因此理論上是越早內推越好,越到後面簡歷越多並且萬一4月前流程沒走完,就得參加筆試了。
原本我想着先面幾家小一點的公司攢攢經驗再去投騰訊和螞蟻金服的,畢竟這兩家門檻仍是至關高的。本來打算投北京微信的前端崗,可是問了上一屆的一個學長說北京的微信不招前端,因而個人重心就放在螞蟻金服的北京實習了。不過有件事情的發生打破了我本來的規劃。
我有個在微信工做的學長,據說了個人狀況以後幫我從微信HR那邊問到北京微信今年招前端的狀況,可是HC不多。我一聽,呀,好機會。趕忙修改了簡歷發給了學長。內推後沒兩天我就收到了北京微信的現場面試邀請,內心仍是很忐忑的,畢竟那但是微信啊。並且也是個人第一次現場面試。
到現場後,有個年齡跟我相仿的學長找到了我,說「我是你的一面面試官」。微信的現場面試沒有我想象中那麼拘謹(兩我的一間小屋子那種),是在開闊的大廳裏,有不少小圓桌,光線也很好。總之面試體驗仍是很好的。同時我還看到了不少其餘來面試的人。
一面面試官說他也是北郵畢業的,一會兒就感受放鬆了很多。接下去就基本是他拿着個人簡歷開始問問題了。
一面的問題基本都答上來了,面試官也以爲很滿意,就讓我等會,叫來了二面面試官,跟我說是專門搞算法的。(內心一涼)
面試官跟我說他是北師畢業的,跟個人學校(北郵)很近(哈哈)。而後說,「咱們來到簡單的算法題吧,不須要你寫,只須要你說說思路」
算法題又是沒作出來(雖說了最蠢的解法)內心又是一涼,感受gg。結果面試官說「小夥子思惟還挺靈活」(有麼!)而後讓我等會,叫來了三面面試官。
三面是個女leader,她對我說「前面的面試官對你的評價很高啊」。因而開始問個人我的經歷和項目相關。最後問了我何時能來?我一聽奇怪,我不是投的暑期實習麼?而後她說最近有個項目急着要上線,因此缺人,就額外要了一個前端的HC。我說我實驗室暑假前並不放人...因此須要再考慮一下。而且這個時候我聽聞他們組實際是作AI的,而前端若是我去了也只有兩我的。到這時我感受有點不對勁,不過leader說以後還有一個廣州的電面要我準備一下。
沒過兩天就是4面,也是我第一次電話面試。四面就純粹圍繞着我作的項目PicGo開始說了。問的比較注重的部分是我對於PicGo的思考。從開發者和使用者和產品的角度去說明。好比如何維護、如何打磨產品,遇到的問題如何克服,與用戶的意見不一樣時如何應對等等。我感受更考量我對PicGo的認知和將來的規劃,究竟是一個用心作的產品還僅僅只是一個star收集者。
四面面完,沒兩天三面的leader就打電話過來問我啥時候能去實習。然而在四面面完的這幾天裏,我就決定了不去了。首先實驗室6月底前放不了人;第二個跟我預期的有所出入,我覺得是微信的前端團隊招實習生(但不是),由於我其實想在前端這塊能繼續作深刻一些,因此就仍是把這個offer給拒了。當時想法是若是北京微信這邊沒有喜歡的崗位,那也沒事,好好準備一下螞蟻金服的面試就好。
回宿舍我跟舍友一說我把微信的offer拒了,他們只丟過來一句「暴殄天物」。捨得捨得,有舍纔有得,後面會再說。
在面微信的面試階段前,有個支付寶的北郵師兄經過微信聯繫上我。他說關注個人GitHub很久了,想給我內推到支付寶的前端團隊那邊。我天然是開心地答應了。不過我當時想着先完善簡歷+先把微信面完。否則一會兒準備兩個大廠的面試,壓力大不說,萬一時間撞上了反而更尷尬。在拒了微信後我把簡歷發給了師兄,開始了支付寶那邊的內推。
支付寶這邊技術面總共三面+HR一面。全程電話面試。
內推沒多久,一面面試官就經過微信聯繫我,跟我約好了面試時間(次日晚上7點半)並說「我這一面很輕鬆的」。在面試以前我有據說螞蟻金服的面試是比較難的,雖然師兄說很簡單但也是作好了被掛的準備。
7點半準時電話響起。面試官說他也是北郵畢業的,讓我稍稍有所放鬆。而後接下來的問題就讓我冷汗直冒。
一面的難度應該是面的這三個大廠以來最難的。面試過程當中我仍是比較緊張的,不過一開始確實緊張,後面說開了就好多了。面試官面完以後說等二面聯繫我吧。二面面試官是他們部門的leader。
一面面完的次日面試官就加我了,直接約了當天晚上7點半的電面。(等於昨天一面今天二面...)事前我從內推個人師兄那裏瞭解到二面面試官是很厲害的一我的,因此難度應該會比一面面試官高。聽到這個消息不覺嚥了一下口水,難受。
7點半準時電話響起。二面面試官的聲音和語氣給個人感受是一開始比較低沉的,感受比較嚴肅。而後後面的問題果真「沒讓我失望」地難。
面完感受很涼,問題的深度是真的深。以前的面試不多有徹底答不上來的,而此次二面對 vue-hot-reload
的問題就基本沒有答上來。面試官最後給個人反饋大概仍是不錯的,因此我就在忐忑中等待三面的通知。
過了幾天,三面面試官經過電話跟我約了時間,聽聲音仍是很和藹的。不過,問題仍是依然頗有難度啊!問題很少,總共問了三個問題,可是第一問就讓我很難受:
這個面試總共只有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. 一開始兩個數組依然像第二題同樣排序
複製代碼
這兩個筆試題作完,面試官電話就過來了,簡單問了一些問題:
面試官問了大概半小時,就說以後二面的leader會聯繫我。因爲筆試題都作出來,因此感受仍是比較良好的。只是不知道二面來得這麼快。
二面面試官隔了大概半小時就打電話來了,主要就看着個人PicGo這個項目在問,多是由於技術棧(Electron)和小程序開發者工具(NW.js)比較接近吧。
面試官的語氣很是和藹,跟我探討的時候也是基本以商量的語氣。末了還誇了一下這個項目作得仍是挺完整的。(其實還有一個很重要的「測試」部分沒寫。。。)考察的重點問題已經不是功能問題,並且相似安全、更新策略等這些平時可能寫東西的時候不會太注意的問題。因此若是隻是一個玩具項目,可能確實談不上來。還好以前不少坑本身踩過,因此跟面試官聊起來也比較愉快。
經驗總結四:一個好的(開源)項目很是加分。好的意思不是star多,而是你對它的思考、實踐多。 經驗總結五:若是你有一個作得很好的項目,必定要讓面試官看到,並引導他問你的項目來把你熟悉的東西說出來。
次日收到HR電話聯繫說已經經過面試了,第三天就發了Offer。
因爲小程序這個組作的東西是開發者工具,很合個人胃口,因而我就接了這個Offer,而此時我還沒接到支付寶的HR電話。微信的這個「搶人」速度是真的快。
支付寶HR電話在後面很久纔打來。此時我已經接了小程序的offer了,因而暑期就沒辦法去支付寶實習了。我說了一下我暑假可能無法去實習,可是秋招還要回北京秋招。因此問可否保留秋招終面資格(跟去年同樣)。支付寶的HR給個人反饋就是不必定,很差說。我想一想反正若是不保留資格,到時候回北京再面就是了。
因而前兩天終於發來的offer,也只能拒掉了。同時我也只能跟頭條的HR說了一下狀況,真的很很差意思,秋招還有機會。
個人春招(暑期實習)之旅也就這樣結束。其實我大可接受支付寶的offer實習而後直接轉正,不過我想着既然有一個更喜歡的機會去嘗試一下又未嘗不可呢。其實從第一次拒絕微信的offer到後面又接了小程序的offer,我以爲都是由於我想作本身喜歡作的事吧。
最後經驗總結六:Do what you love, love what you do.
但願這份經歷也能給你帶來幫助。
我本身的主要開源項目
以及PicGo-Group的項目。
我參與的開源項目
:
命令支持】等等。