1. 程式人生 > >2018 春招總結 & 面經分享 (阿里/騰訊/網易/今日頭條/微軟)

2018 春招總結 & 面經分享 (阿里/騰訊/網易/今日頭條/微軟)

2018 春招總結 & 面經分享 (阿里/騰訊/網易/今日頭條/微軟)

本文篇幅較長,排版較爛,非戰鬥人員請儘快撤離。

總算是可以對2018-春招-暑期實習專場來一個完美收官了。
最終有幸收到了今日頭條(後端研發),網易杭州研究院(C++開發)和騰訊(IEG 後臺開發)的offer,當然還是選擇投入嚮往已久的鵝廠的懷抱啦。
從三月初開始陸續投出簡歷,到收到一個接一個的提前批面試,等待的焦慮和複習加刷題的疲憊霸佔了整個三月,情緒的起伏比美股的振幅還大。每天都是等著電話,盯著各種內推群,刷牛客網討論區。
當然這長達兩個月的戰線於我個人的提升可以說是巨大的。從人生的第一面面阿里的緊張到結巴,到最後完全可以和麵試官坐著侃侃而談;期間一直堅持刷leetcode和《劍指offer》,對自己演算法思維的鞏固幫助也相當大;同時也在翻看回顧一些經典的書籍和部落格,用手寫記錄並結合OneNote的方法整理所學,很多瑣碎的知識點和模糊的技術細節,也在慢慢的填補和串聯中愈發完整清晰;最後在內推群也認識了各路大佬,有很好的技術氛圍(當然還有大佬們的互相鼓勵),都給了我非常正面的影響。
依我雞湯王的個性,一定要把這神奇的三/四月做一個詳細總結,還有把整理好的面經一併分享出來。

方方面面的總結

  • 因為這次暑期實習就是衝著各網際網路大廠去的,所以只能說說各大廠的情況。首先競爭真的是非常非常激烈,我進的內推群有大把的985/211本碩,而且今年有很多留學生回國找實習,我見過的就有港大,UCLA,UIUC,佐治亞理工這類海外名校的學生回來和我們搶飯碗(應該有一部分是受川普政策的影響)。大部分人的面試過程都不算順利,鮮有offer收割機,深刻感受了一把什麼叫千軍萬馬過獨木橋。從面試的反饋來看:阿里是今年最難的,hc相對來說較少,內推開始的最早,投的人當然也是爆炸多,大部分人都跪在了一二面,流程的間隔也是非常長,我甚至見過中科大CS碩士內推演算法崗,簡歷就被刷的(後來的訊息大概是演算法飽和,只社招不校招),還有全部技術面通過後被HR刷的,最後拿到offer的普遍經歷了四到五輪的技術面+交叉面,總而言之阿里今年是真的蠻難的,只有幾個擴張的部門招人較多。騰訊號稱有3000hc,提前批很熱鬧,不少人拿了offer,正式批就更加熱鬧了,線路面試臨近終止前還有不少部門在撈人,掛掉的也可能被撈起來,今年應該是騰訊的大年吧。其他廠的hc分佈因公司而異,京東擴招,滴滴坑位少,頭條野蠻生長中,面試難度高但是hc一直用不完,百度的流程和頭條差不多,平均難度應該不及頭條,還有很多獨角獸也蠻值得一試的,Face++/商湯什麼的就不用說了……從筆試/面試也很能體現一個公司的水平和風格,大廠的筆試題都很有難度和靈活度,面試官也普遍耐心專業,流程很規範很有效率。
  • 在強大的搜尋引擎面前,學習資源隨手可得,帶來的結果就是優秀本科生的平均水平不斷提高,導致大廠的門檻也是水漲船高,再也不是頂個高文憑就能拿好offer的時代了,一切都得靠實力說話。關於面試,借用別人總結的一句話就是:“別人不知道的,你要知道;別人知道的,你要懂得更多,更深入。”對於本科生來說,需要展現的就是紮實無比的基礎(包括但不限於:熟練運用一到兩門程式語言+作業系統+網路+資料庫+演算法與資料結構,啃的越透越好),豐富的專案經歷(科研專案/團隊專案/個人專案/競賽經歷)和對技術的熱情(對新技術的追求,比如分散式/機器學習/語言新特性等等等等),對於研究生,那自然是碩士階段的研究成果和良好的工程水平(我本科,所以沒有更多的評判的資格)。總結來說就是既要有深度,又要有廣度
    ,做一個T字型人才。身邊也見過很多口口聲聲說要學技術,卻不肯花時間又不願意跳出舒適區的人。昨天在微博上看到一句話:“學習的苦是要主動去吃的,生活的苦是你躺著都會來的”,如果在二十幾歲的時候就想著安逸,大概是對“年輕”這兩個字最大的不敬吧,與諸君共勉。
  • 還想說一下機會真的是靠自己爭取的,我交流過好些人,有因為害怕自己能力不夠,只投了寥寥幾家公司;或者後知後覺的,4月才開始瘋狂投簡歷的(很多大廠都已經截止網申了);還有明明拿到了面試資格卻放飛自我沒有好好準備的…天知道他們的上限在哪,憑實力錯過了很多機遇。還有,即使被有些公司拒了,也還是有復活機會的,這時候就需要多關注一些論壇和內推群的資訊了,有些部門可能很缺人,尤其是那些新組建或者是業務飛速擴張的部門,大概率會有部門直推的機會,OK的簡歷可以直接送到部門leader或者GM面前,跳過正常的校招流程,即使之前內推失敗都可以二戰。網際網路時代,資訊就是資源,這些都是可以把握的資源。
  • 最後是心態!!!除非你強到令人髮指,offer送上門的那種,那麼一波接一波的筆試,一輪接一輪的面試,一個接一個的面試結果的簡訊通知,都可能讓你心態爆炸。面試官的風格也可能不合你心意,讓你不能很好的發揮最後match不到自己心儀的公司。尤其是需要趕現場面試的時候,往往要起一大早趕地鐵,坐高鐵,再趕地鐵,面試結束又要匆匆趕回另一個城市,真的讓人身心疲憊。現場面試的時候,你的身邊也可能是各種上交復旦浙大華科等名校的學生(這個真的不要慫,再好的學校也有菜雞,再普通的學校也有大佬,學校好壞只能代表高考的成敗,進了大學如何發展靠的真的完完全全是自己,平臺的劣勢可以靠努力無限彌補)。所以一定要調整好心態,太累了就放空一個晚上,或者用你獨有的減壓方式。如果要戶外跑注意防風,我已經流了5天的鼻涕了:(

以下是完整的面經分享。

面經分享

阿里內推一面 國際技術事業部 搜尋引擎組:(35min 通過)

問專案 10min 難點在哪,如何優化,benchmark效能怎樣
Linux常用命令知道哪些
GDB除錯的命令曉得伐
STL常用容器有哪些,舉例說說用法和使用場景
過載/重寫/重定義的區別
TCP/IP三次握手,為什麼三次不是兩次或四次
socket函式呼叫過程,分TCP和UDP講
棧和堆的區別
繼承和多型(編譯期多型和執行期多型)
new和malloc區別
new的過載
new能否從棧中申請記憶體(通過placement new傳入棧指標起始地址)
執行緒和程序區別
一個程序下多執行緒能否支援多核
講講熟悉的幾個設計模式
兩道演算法題:
- 連結串列中倒數第K個節點
- 陣列中第K大個數

以上演算法的時間複雜度
平常愛看哪些書

一面是個語氣溫柔的小哥哥,二面掛了之後我也給他發過郵件,很快就回復了並且給了我鼓勵,給我留下了很好的印象。

阿里二面 視訊面:(90min 掛)

自我介紹,主要是大學裡技術方面的相關經歷
B樹和B+樹的區別
B+樹插入和刪除的過程
C++怎麼建立程序(用到哪些函式呼叫)
怎麼獲得執行緒id(STL裡的std::threadpthread
怎麼辨別當前程序是父程序不是子程序(通過getpid()判斷)

以下是螢幕共享手寫程式碼/寫Linux命令:
Linux命令系列:
- 怎麼編譯.cc檔案
- 怎麼編譯生成動態連結庫
- 怎麼只編譯輸出obj檔案
- 怎麼檢視當前系統的資源狀況
- 怎麼檢視當前磁碟狀況

Linux命令這塊,死的很慘。

以下螢幕共享開IDE寫程式碼:

  • 用兩種不同方法寫執行緒安全的sum函式,現場編譯通過得到正確執行結果
  • 100萬數字,快速找到top k

然後繼續提問
C++虛擬函式/多型實現機制
override和重寫的區別
介紹一下三種智慧指標(shared_ptr/unique_ptr/weak_ptr)
shared_ptr底層實現原理(主要是control block裡面的東西)
瞭解哪些c++11特性
static變數與extern變數的區別
類內static變數何時建立,何時被銷燬
展示兩段自認為寫得不錯的程式碼(緊張的開啟我的各種工程翻了兩段,面試官不是很滿意的樣子)
平常怎麼除錯,怎麼解決問題
有沒有把自己的技術心得寫成論文
有沒有寫過純模組性質的類庫
面了哪些公司,反饋如何
如果通過轉正願意留下嗎
未來的學習計劃
Q & A

二面面了我一個半小時,以為很有希望了,然後第三天查到被回絕,當頭棒喝,難過一天。問了一下內推的學長,說面了我這麼久還把我掛了,大概是面試官比較糾結,想救我一下,沒救回來 :( ,Linux命令答得很不好,二面完之後就開始重新堅持用Ubuntu,然後把我以前買來沒看的Linux相關的書重新拿出來啃了。

騰訊提前批一面 IEG 藍鯨 分散式儲存組:(30min 通過)

簡單問專案
B樹如何索引
資料庫的分表分庫瞭解嗎
講講資料庫事務的ACID
Python垃圾回收機制講一下

*args 和 **kwargs區別和本質講一下
Python多執行緒的侷限性
Linux相關的一些小問題 (我說不算很熟 沒問啥)
epoll比select/poll優勢,為什麼快(從底層實現角度講)
分散式CAP原理
一致性雜湊性質 + 一致性雜湊演算法
TCP UDP區別
redis(直接說了解,但是不會)

最後就是激情Q & A,面試官又是一個溫柔小哥哥,巨溫柔,聲音巨好聽,我不會的東西他當場給我講解,還說看了我的github,對我作了肯定,感動!

騰訊二/三面 IEG 藍鯨 分散式儲存組:(二面35min 過 / 三面50min 掛)

二三面問的都比較玄學,二面是一個很友善,有點小皮的面試官,全程“好滴好滴好滴”,三面是一個高冷的女大佬(驚)。兩輪都沒有問一些常見的基礎題和技術內幕,二面主要是以一些開放題為主,三面主要是聊人生為主,所以就合起來寫了。
我是物聯網專業,所以問了一個場景題:

  • 遠端跟蹤定位一個物品的具體過程,用到的裝置和所有協議。

講講關於分散式儲存,瞭解的一切
k-v資料庫有哪些應用場景,對比一下優劣(我簡歷上有一個k-v資料庫的專案)
專案裡面怎麼做效能優化,如何設計快取
做專案的思路和步驟
除了簡歷上的,平時還有哪些專案
近期內有何專案方面的打算
聊校內經歷,學習成績如何,為什麼想到要進實驗室,怎麼進的實驗室,在校愛看哪些書(女大佬甚至還和我聊了三體,以及裡面的角色….)
聊簡歷上的東西(專案經歷,交流經歷)
短期的學習規劃/未來的職業規劃/offer選擇/工作城市選擇/實習時間
三面後來和女大佬聊開了,感覺就要開啟談笑風生模式了,然後又提醒自己這是面試..面試..強行把自己拉了回來
(三面扯了超級多,包括長期的職業規劃,對一份offer的評判標準,怎麼看待一個公司是否有前景,如果技術遇到瓶頸怎麼辦,如果Leader和你有分歧怎麼辦,甚至還討論了中年危機……還有很多延伸出去的關於企業文化,技術與管理等等的討論,完全隨機應變無法準備…)
三面總監面涵蓋很多HR面的內容。
其中的一半在一些測試你離職率,多維考察你性格的問題上,其實是有答題技巧的,這個需要不斷地面試去體會,其他方面的擴充套件就看你肚子裡有多少墨水了吧,還有能不能把握住聊天的氛圍和節奏。節奏!!!節奏很重要!!!

二面完面試官就主動加了我微信,直說很看好我,當時就飄了,開心的不行。當天下午就接到了三面,結果三面掛了,呵呵呵呵呵呵呵…情緒大滑坡。不過事後想了想,確實在很多點上,自己的回答不盡如人意,還是學生思維太重了吧,掛的應該…應該…

今日頭條部門直推 一面 廣告展示核心部門 (60min 掛)

懟專案半小時
問基礎十分鐘,題型都很常見,但是答得一般
最後半小時做演算法:K best,沒做出來!!!後來一查是ACM競賽的原題,卒!!

看了網上的解法,二分確實非常非常巧妙,再給我10個小時我也做不出來…
不開心,不寫了!!

至此,是提前批的戰況,全部翻車了,還好結果不怎麼影響正式批,接下來開始轉運。

今日頭條正式批 一面(30min 過):

一頓自我介紹
介紹完畢面無表情的冷血女面試官直接一句:“那我們開始做題吧!”

  • n個整數的無序陣列,找到每個元素後面比它大的第一個數,要求時間複雜度為O(N)

在面試官提醒下寫出來了,用棧+棧底指標
然後開始問專案…blablabla
知道Linux有哪些IO模型嗎?5種模型叭叭叭都說一遍
說一下非同步程式設計中的事件迴圈
作業系統為什麼要分核心態和使用者態
為什麼要有page cache,作業系統怎麼設計的page cache

一面完畢,喝口水的功夫就有HR打電話來告知面試通過,讓我停留在頁面不要動,緊接著就是下一輪面試。

二面 (40min 過):

讓我介紹專案 然後各種問,問的比較細
STL裡resize和reserve的區別
網頁手寫程式碼:

  • 擼一個std::lower_bound,不斷優化,直到最壞複雜度也為O(logN)

聽我繼續吹專案
C++11新特性用過哪些
怎麼實現執行緒池
執行緒池裡用到哪些C++的新特性
怎麼喚醒,排程執行緒
什麼是LRU快取
怎麼設計的LRU快取,詳細說說

三面(30min 過):

一個看起來就很厲害的中年男子閃亮登場
聽我吹專案,主要是(kv資料庫)
介紹一遍B樹,越詳細越好
資料庫中的WAL技術是個什麼玩意
網頁手寫程式碼:

  • 實現一個二叉樹的持久化方案,可以虛擬碼,必須用指標

主要是序列化和反序列化的過程
(卡在指標的持久化儲存,然後他不是很滿意,說我應該做得出,只能把我的另一種不用指標的方案給他講,才算勉強過)

  • 實現二叉樹的層序遍歷

  • 再按層換行輸出一遍

Over

頭條的面試是三輪連續的,面完一輪馬上會有HR電話打來通知結果,效率非常高,這三輪面試從下午五點一直持續到晚上七點半,可以說是酣暢淋漓了。

騰訊 IEG 上海現場一面 (30min 過)

騰訊是真滴有錢啊,包了個五星級大酒店,大廳是等候區,面試官在房間裡等您。本來安排的我14:00的面試,13:30就叫到我了,正準備午睡幾分鐘…

拉家常,然後簡單問問簡歷上的經歷
懟專案細節,核實簡歷真實性
關於專案效能優化的開放性問題:主要就是優化,優化,往死裡優化。拋場景,然後給優化對策(這裡花了大概15分鐘,面試官看起來對效能要求很高,我也拼命轉腦子,中途不滿意的點他會吧唧嘴,聽得我巨慌。最後看起來他是比較滿意的,說了一句“很好”,我才放心…)
new/malloc的區別
解構函式的作用
堆和棧的區別
C++17裡invoke替代方案實現(從設計模式角度)
std::bind的使用場景
std::future是幹嘛用的
lambda的實質(從編譯器層面說)
給了一段小程式碼,大致如下:

class A;
​​void func(){
​    char buffer[1024];
​    A* ptr=new A;
​    A* ptr2=new (buffer) A;
​}

以上兩個指標之間的區別
以及:第一個指標離開作用域前要delete,那第二個指標是否必須delete?
Q & A

一面面試官長得有點像《寒戰》裡的梁家輝,差點出戲。但是看起來巨專業,一些“擬合”“維度”這樣的詞從他嘴裡說出來的時候,非常sexy。

因為我學校在江蘇,當天晚上還得趕回學校,Q & A環節的時候和麵試官說明了一下,結果剛下樓就收到了面試官電話,說一面過了,總監正好在上海總部,讓我現在過去接著面,可以說是很Nice了。
然後就風塵僕僕的趕往了上海騰訊大廈,不遠,只有一站地鐵。

二面 總監面 (45min 過)

繼續問簡歷上的一些經歷
懟專案細節
瞭解哪些kv資料庫
講講專案的難點,參考了哪些資料,具體做了哪些優化
看過哪些c++方面的書
然後問了<

class A;
​A a;
​a = a + 100;

如何實現類A支援以上操作。
先答了過載operator +號運算子,然後判斷(a+100)是一個右值,這裡我不確定,所以補充了還要過載一個右值版本的賦值運算子。
然後接著問,過載運算子應該是全域性函式還是類內成員函式,兩者有什麼區別,或者分別有什麼優劣。
最近在看哪些書
未來的發展方向和規劃
Q & A

總監大大看起來相當年輕,自帶一種大佬的氣場,問的問題嘛也很專業同時很有針對性,最後還滿臉慈祥的和我說:“ CSAPP是本好書,建議你回去把沒看的章節好好再看看。”騰訊兩輪的面試官都給我一種技術深度廣度兼備的感覺,所以即使我有些問題答得一般,還是給了我很好的面試體驗。

網易網際網路 現場一面 (35min 過)

自我介紹
從頭到尾講一下簡歷上的兩個專案
摳專案的實現細節
用過哪些影象處理方法(交流經歷裡有寫到)
C++11有哪些新特性(一緊張,智慧指標都漏說了)
什麼是左值/右值
介紹一下std::futurestd::promise
執行緒池裡的執行緒如何排程
TCP狀態機(11個狀態間的轉換)
TCP三次握手和四處揮手
講講流量視窗和擁塞控制
redis列表底層是如何實現的
瞭解哪些新技術
分散式方面,瞭解哪些東西
然後就給他先扯了一遍Raft演算法,看面試官聽的挺滿意,趁熱打鐵接著再扯一遍一致性雜湊
Q & A

現場二面 (30min 過)

手寫最小堆的插入
開始懟專案,氣氛很不友好,第一次有不想面下去的感覺。面試官一臉“就這樣?”,我也一臉“就這樣!”,在尷尬的氣氛中結束。
二面完很難受,想直接揹包走了,還是等了一會兒上前臺一問,竟然還給我進了HR面,和HR小姐姐隨意聊人生,然後直奔豬場食堂。

網易是最意外的,二面真的感覺自己全面崩盤,應該是一面答得好救了我自己吧,最後還是給我發了offer。嗯,豬場食堂體驗不錯。

微軟蘇州(Office 365) 三輪 每輪45min 應該是跪在第三面

本來就沒抱什麼大希望,所以以體驗為主,但是微軟爸爸真的是滿分。早上籤到之後在大廳等,會有HR小姐姐把你帶上樓,然後大概六七個人一組,在一個conference room等候(後來才知道一屋子就我一個本科生,4個都是上交的研究生…瑟瑟發抖),桌子上會有豐富的零食和新鮮水果。然後陸續有面試官小哥哥來接你,到指定的interview room進行面試,形式主要就是白板/白紙coding,不會有偏題怪題,題型就是leetcode上的E/M難度的題,期間最主要的是思路的展現還有與面試官的互動,面試官會不斷提示解法以及更優的解法,定下方案之後就是寫程式碼,爭取一遍bug free,最重要的還是和麵試官的互動!!儘量不要冷場!!

一面

很年輕的小哥哥,先讓我在白板上模擬了一下B樹的插入刪除,然後開始做題。

  • ① 求一個亂序陣列的逆序對(兩個數,它們的index大小和value大小相反就是逆序對)

懵逼了一會兒,面試官提示用邊分治邊歸併的思想,然後和他討論了比較久,他也提示了我蠻多的,最後大概是時間問題沒讓我完整寫,就講了一遍思路。

  • ② 字串中每個單詞順序的翻轉

比較簡單,秒過。然讓我寫一些測試用例,同時改進程式碼的魯棒性,修復小bug。

二面

同樣年輕的小哥哥,而且一臉樂呵。先尬聊一會兒,然後還是老規矩開始做題。

  • ① 字串處理,一個Unix風格的路徑,可能會包含edge case,比如”usr/bin/./../xxx”,處理之後返回”usr/bin/xxx”

edge case主要是可能有多個斜槓什麼的。思考之後,用棧模擬一下尋找路徑的過程,很快就寫完了,看了一遍程式碼沒問題,下一題。

  • ② 跳躍問題,一個數組,每個數字代表當前所能跳躍的最遠步數,求能否到達最後一個元素。

leetcode原題,準備用dp做,但是面試官提示了一下更好的解法,然後想了一下其實只要找在數組裡找0就行了,時間複雜度O(n),空間O(1)的,程式碼也是一遍沒問題。面試官看時間還沒到,給我加了一題,盛水問題,同樣是leetcode原題,解了一半他說時間差不多了他滿意了就樂呵呵的送我回conference room繼續等了。

三面

三面是大佬,一個嚴肅的中年男子,看到我簡歷上參加過一個新國大的關於人臉識別的交流專案,問了我一些模式識別,概率論的問題….可惜我忘得差不多了,很難受,要麼不會,要麼只會個皮毛。
然後做了一道演算法,二維矩陣,左到右,上到下都是升序,找目標元素的位置,題目比較簡單。大佬比較嚴肅所以整個過程也沒有積極溝通,面完就知道應該是GG了。

雖然最後掛了,但是體驗真的是非常棒,和國內的網際網路公司體驗大不相同。到了飯點有小姐姐帶去吃午飯,午飯也是很有份量,吃完還有一個簡單的參觀,看了大佬們的工位,內部的健身房,Xbox遊戲廳什麼的,然後HR小姐姐告知我3面表現的不太好,就開心的回去了,但是真的很滿足,體驗100分!信仰蓄滿!

完結