前言
年后我就開始準備面試了狈网,包括兩方面:
- 基本的數(shù)據結構和算法宙搬。從去年11月份開始,我開始有計劃性地寫 leetcode 算法題拓哺,前前后后有刷100多道題目(還有 lintcode 以及刷微博知乎遇到的題目)勇垛,算是比較慢的了(解題記錄 和 Repo)。
- 完善個人簡歷上提到的項目士鸥,把想到的坑都補完(比如提到了MySQL闲孤,就把MySQL 相關的面試題準備下)。
關于投遞渠道
毫無疑問烤礁,內推是最靠譜的讼积。除此之外,v2ex 求職版塊的資源非常非常好脚仔,可能比內推效率更高勤众。一般大公司的技術團隊,都會單獨發(fā)布招人信息鲤脏,等于是直接走內推渠道们颜。個人感覺吕朵,按照靠譜程度排名是這樣子的:內推 > v2ex > 官網 > 拉勾等第三方求職網站
面試經歷(開始時間排序)
由于碩士階段學的是非常底層的計算機基礎方面的知識,在選擇投遞崗位上窥突,我沒有特別偏好(但不想做太底層)努溃。所以主要投遞兩個崗位:后端開發(fā)工程師(自己更擅長)和前端開發(fā)工程師(很早有涉及,在2016年開始關注和了解 React 以及 node.js)阻问∶┨常考慮到自己的前端項目經歷不夠豐富,我花很多時間在復習前端方面的知識则拷,以至于后來面試后端崗位的時候贡蓖,大部分靠之前積累的知識。
1. 螞蟻金服支付寶前端工程師(社招煌茬、V2EX)
整整用了將近一個月的時間斥铺,一共五面,包括最后HR面試(阿里的HR權利比較大)坛善,一面應該是以后工作的同事面我的晾蜘,計劃是4道leetcode medium 難度的題目(后來實際給我出了3道題目,加一個簡單的問答題)眠屎。一開始我根本沒看懂題目剔交,題目是讓你寫一個數(shù)據結構來存儲給定的 JSON 格式數(shù)據,我花了很久聯(lián)想到之前做過的一題 copy linkedList with random pointer改衩,于是按照那個思路來寫岖常,終于寫出來了。第二題類似第一題葫督,有點 copy double linkedList 的感覺竭鞍,但是每個 node 會有head, next, previous pointer,需要逐一解決橄镜,比較像 reverse linkedlist偎快。第三題是一道DFS + 回溯的題目,如果一開始沒想到這種解法洽胶,短時間里很難解出來晒夹。一面是我在IDE上寫好了代碼之后,粘貼給面試官看姊氓,我自己寫的時候非常緊張丐怯,還好面試官沒有給我太大壓力,中途我雖然寫題目他膳,但是中間一直在和面試官討論思路响逢。一面一共花了1個半小時绒窑。
二面是直屬 leader 面試棕孙,三面是部門 leader,都面了我大概37分鐘,主要內容是描述自己的個人項目經歷蟀俊,以及前端項目經歷钦铺,我二面差點以為掛了,因為面試官問到了我對 react redux 的理解肢预,尤其是問我 redux 里面的 store, action, reducer矛洞,如果不需要 action 會怎么樣,我按照自己的理解回答了很多烫映,但是最后面試官說我理解有誤沼本,整個人心都涼了。還好最后給通過了锭沟。
四面是交叉面試抽兆,別的部門的面試官來面我,總的來說族淮,沒有很為難我辫红,主要聊的是自己為什么選擇前端方向和過往項目經歷。
阿里的面試流程非常長祝辣,幾乎是兩周3輪面試贴妻。
2. 小紅書后端開發(fā)工程師(社招、拉勾)4面拿到offer
小紅書的面試雖然是提前一個禮拜安排的(我特意要求HR在下周安排面試蝙斜,這樣我可以在上海用幾天時間把預約好的公司面試完畢)名惩,但卻是最意想不到的,因為整整面試了4個小時(下午3點到7點)孕荠,由于之前搜到的面經幾乎沒有绢片,也只能硬著頭皮上了。
小紅書的公司在復興SOHO二樓岛琼,辦公室高大上,我被帶進了一個會議室之后槐瑞,就開始了漫長的車輪戰(zhàn)熙涤。
一共3個面試官,前兩個是后端開發(fā)的工程師困檩,第三個是電商部門的leader祠挫,每個人面試我的過程是一樣的:
- 一道 leetcode easy 難度的白板算法題,(類似 leetcode happy number悼沿,split function implementation等舔,rotate sorted array )
- 個人項目經歷
- 兩道系統(tǒng)設計題目以及相關的 follow up
其中系統(tǒng)設計題目很有壓力,自己的項目當中很少遇到實際業(yè)務導向的題目糟趾,印象中的題目有:
- Restful API 設計
- 數(shù)據庫 sharding 分片是什么慌植,MySQL怎么做擴容
- 對電商系統(tǒng)有多少了解甚牲?庫存系統(tǒng)數(shù)據庫設計包括哪些,盡可能詳細的描述從用戶請求發(fā)出到系統(tǒng)后臺處理的全部過程
- 訂單下單30分鐘內可以取消蝶柿,數(shù)據庫和業(yè)務邏輯該如何設計(涉及到鎖)
- 哈希的原理丈钙,為什么hash的查找和加入都是O(1)
- 訂餐系統(tǒng)設計數(shù)據庫設計(要求同一時刻進餐的桌數(shù)不能超過總桌數(shù),同時需要考慮多人預定不能沖突)
第三輪面試是壓力最大的交汤,面試官總能一針見血的問到你的薄弱處雏赦,比如問到我訂餐系統(tǒng)數(shù)據庫的時候,我絞盡腦汁想了三種方案芙扎,才最后讓我通過星岗。最后HR面試之前,已經確定拿到了offer戒洼,所以終于舒口氣了伍茄。
總的來說,小紅書的面試是最艱難的施逾,雖然算法難度簡單敷矫,但是系統(tǒng)設計題目由于沒有準備的很充分,加上缺少業(yè)務經驗汉额,我?guī)缀跏窍氲搅怂心芟氲降姆椒▉斫獯稹?/p>
3. Bilibili Python/PHP 開發(fā)工程師(內推) 二面掛
B站的面試安排在小紅書面試的第二天上午十點半 on site曹仗,到了公司先讓我從 python 和 php 兩套試卷里選一套寫,題目主要考的語言熟練度和一些基本常識蠕搜,我選的是 php 試題(然而我 php 已經大半年沒碰了)怎茫,寫到20分鐘左右,一面的兩個面試官過來面我妓灌,沒有算法題轨蛤,全是系統(tǒng)設計或者和語言相關的題目,印象中的題目有:
- injection dependency 是什么虫埂?
- 瀏覽器 跨域是什么祥山,如何跨域以及如何防止跨域?
- php isset() 和 empty() 的區(qū)別
- php的autoload有了解么掉伏?
- paxos 原理 (我有提到研究生上課看過很多分布式系統(tǒng)論文缝呕,比如 paxos,然后就被問了斧散,那還是一年前看的供常,已經忘記的差不多了,所以千萬不要給自己挖坑鸡捐,最后我只好說自己印象不太深)
二面應該是部門 leader 面試栈暇,難度明顯提升,印象中的題目有: - node.js 的事件循環(huán)機制和異步模型
- unix select 和 epoll 的區(qū)別
- unix 中如何產生子進程箍镜,父進程和子進程的區(qū)別是什么
- MySQL 索引策略源祈,為什么 B+ 樹當中key是遞增的
- redis 消息隊列實現(xiàn)(我在描述簡歷的時候煎源,有提到消息隊列,結果面試官就一直問我redis消息隊列的實現(xiàn)方式還有數(shù)據類型新博,又是給自己挖坑,悲劇了)
- 為什么有 nginx 做負載均衡了脚草,還需要 pm2 來管理 node 進程
b 站面試一共用了1小時40分鐘赫悄,由于給自己挖了太多坑,但是又都沒有填好馏慨。面試官最后讓我回去等通知埂淮,我覺得應該是悲劇了。
4. 杭州有贊前端開發(fā)工程師(校招写隶、官網)二面掛
一面是遠程視頻面試倔撞,兩道在線編程題目,其中第二題是寫一個 JavaScript 事件模型慕趴。其他問題包括不限于:
- CSS 盒子模型
- JS 繼承
- CSS 文檔流(塊元素和內聯(lián)元素)
- UDP 和 TCP 的區(qū)別
- 為什么 TCP 會有第三次握手痪蝇,第三次去掉可以么
二面是晚上9點半接到的電話面試,突然接到電話冕房,電話聊完了躏啰,我才發(fā)現(xiàn)這是二面。整個電話面試基本上圍繞了一個問題來說:你怎么看待前端工程師處理切圖這種瑣碎工作的耙册?我回答的顯然沒有得到對方的滿意给僵。20分鐘面試就結束了。我當時最好的做法應該是和面試官安排第二天再面試才對详拙。當晚9點之前已經花了1個半小時做完了美團前端工程師校招的筆試題帝际,腦袋有點混沌的感覺。
5. Strikingly node.js 工程師(社招饶辙、V2EX)一面掛
Strikingly 是位于上海的一家創(chuàng)業(yè)公司蹲诀,主要面向海外用戶提供建站方案,早年拿了YC的投資弃揽,一直有關注侧甫,技術團隊在國內的前端領域比較有名。
然而我一面就掛了蹋宦,面試我的是公司的CTO 郭達峰披粟,沒有算法題,問的是 node.js 相關的知識點冷冗,還是準備得不夠守屉,問到我 shrinkwrap, micro 和 macro task 沒有回答出來蒿辙。skype面完之后拇泛,留給了2道 JavaScript 編程題滨巴,一個是寫帶有定時器的函數(shù)(函數(shù)調用依次間隔1s, 1.5s, 2.25s),第二個是寫一個類似Vue的雙向綁定庫俺叭。有寫出來恭取,但是寫的不夠好。
6. 搜狐研究院Web開發(fā)工程師(校招熄守、內推)二面等通知
HR先打電話安排了一面電話面試蜈垮,整體感覺比較輕松,由于之前的面試經歷裕照,問答題問到的問題都有準備過攒发,算法題是一道簡單的二分法題目。面試官感覺不錯晋南,在等二面通知惠猿。
7. 其他
主要投遞上海和杭州的公司。北京的公司也投遞過负间,但是社招的在簡歷環(huán)節(jié)就被篩掉了偶妖。其實三月末到四月份才春招的高峰,比如美團的校招和網易的校招補招政溃。
結語
錯過去年九月份的校招真的是非常遺憾餐屎,因為很多大公司在今年的春招面向的是2018年的大三或者研二的學生。只有少數(shù)公司還有去年秋招補招的名額玩祟。** 所以就只能好好盡全力去準備了腹缩,等機會來了,至少不能因為自己沒準備好而錯過空扎。** 還有就是不能一直悶著頭做準備藏鹊,感覺差不多的時候就可以出手了,機會有時候會比狀態(tài)更重要转锈。
算法和數(shù)據結構方面盘寡,必須要有一定的積累和練習(我覺得可以另開一個話題聊刷題心得了)。而且往往臨場的環(huán)境是很難預料的撮慨,我在技術筆試或者 on site 面試的前一晚竿痰,都會手寫代碼,把一些重要的基本題型再重新捋一遍思路砌溺。就算法題而言影涉,leetcode easy 和 medium 難度的題目以及可以應付絕大多數(shù)的面試了。
另外规伐,我覺得需要注意到下面幾點蟹倾,都是血淚的教訓:
- 只要接到面試電話,不管在不在外面,都給自己一點時間調整下狀態(tài)(比如安排一個小時候之后)鲜棠。如果是比較重要的筆試肌厨,或者算法面試,一定要和面試官安排晚幾天面試豁陆。一般面試官不會拒絕柑爸。
- 如果是現(xiàn)場面試,一定要提前半小時到現(xiàn)場盒音,尤其是早高峰時間硼莽。
- 遇到不會寫的題目酌心,先嘗試冷靜正林,然后聯(lián)系過往知識跪帝,比如數(shù)據結構的題目璧函,一般來說離不開常見的數(shù)據類型顽照。還有哈恰,先別急著寫圾另,把暴力破解或者最簡單的解法和思路和面試官說偎血,一般面試官只要認可你的思路诸衔,就一定會問:有沒有時間復雜度更低的算法。這等于告訴你了你颇玷,你的思路是沒問題的笨农。就算最后沒有寫出最優(yōu)解,你也至少能把暴力破解的答案寫出來帖渠。
- 系統(tǒng)設計的題目也一樣谒亦,把所有可能的答案和思路先說出來,看面試官的反應空郊,只要不差太多份招,都能夠答到點上。
- BAT大廠的簡歷狞甚,早點投遞锁摔,因為面試流程較長;創(chuàng)業(yè)公司的簡歷哼审,盡早投遞谐腰,因為相對更缺人。
- 盡量選一些簡單的公司面試來攢點面試經歷涩盾,等面到難一點公司心態(tài)上不會太緊張十气。我3月份的第一個面試就是支付寶,寫算法題的時候春霍,緊張到不行桦踊。
- 我自己感覺選擇上午10點半面試,狀態(tài)最好终畅。