1. 程式人生 > >【實習面試】阿里&騰訊offer的點點滴滴(內附乾貨)2016

【實習面試】阿里&騰訊offer的點點滴滴(內附乾貨)2016

前言

4月8號下午6點,突然接到騰訊hr的電話,本來已經不抱希望的我一臉懵逼,差點連自我介紹都不會說了。

之所以不抱希望,是因為距離上次面試已經9天了,然而正式的實習生面試將近(4月10號),想著如果8號(週五)再無訊息,也便不用再等了。於是那些天又把《劍指offer》和一些複習資料刷了一遍,然後就開始放棄複習了。

前前後後,近1個月的面試戰線,其實總共就面了阿里和騰訊兩家。 
(網易網際網路筆試被拒。。。)

最後兩家都順利提前拿到了實習offer:一個順風順水,一個一波三折。

現在回頭看,兩者都得來不易,想想是有多麼幸運,才讓我碰上一次又一次的機會。

一個月來,飽受煎熬,但也收穫很多。在此記錄兩三心得,並在後半部分給出自己備戰面試的乾貨,希望能夠對正在找工作或者即將找工作的你們有幫助。

準備

打一場有準備的戰

前兩天,有同學問,你為了這次的面試準備了多久?

——從有明確的計劃開始,大約是4個月。

最近發現很多同學去面試都是臨陣磨槍——有好結果的當然不多。

常言道:“知己知彼,百戰不殆。”

然而真正踐行的人並不多,因為這並不是一件易事——要定下方向、做好規劃並執行下去。

對於我來說,定方向、做規劃並不是一天兩天的事,而是經歷了一系列的迷茫。

迷茫的時期

其實大學以來並不止一次迷茫,雖然迷茫起來很痛苦,但是痛苦說明你正在尋求進步。

大二下學期之前,績點還過得去,穩居中上游。後來慢慢意識到,自己除了會用C/C++寫點演算法題之外,做不了很多其他事情,沒有做個真正意義上的開發專案,甚至連自己以後有哪些方向可以做都不知道——當時還傻傻的分不清啥是前端啥是後臺。

偶然的機會,班裡一個同學邀請我一起去創一個技術類的俱樂部社團,當時因為有機會跟著老師做專案,於是“有所圖”地答應了。

於是開始為了專案學習資料庫、java web、html、js等等,每天課餘時間都在實驗室看書學新知識。

後來雖然是跟著研究生師兄打打雜,寫一些非核心程式碼,但是至少明白瞭如何去搭建一個網站,而且前端後端都有所接觸,之前的疑惑解了不少。

然而專案最後只做了一個比較粗糙的demo出來——跟公司談妥之後才會開始正式、規範地把專案做起來。後來因為個人興趣,沒有繼續做下去——

通過對java web的接觸,我對java並沒有很大的好感,並且對windows下IDE環境各種緩慢感到十分絕望。而前端頁面的開發,做了一些,並不感冒。

於是我慢慢堅定了後面的路:

  1. 深入學習C++,瞭解其他語言,但是不三心二意。
  2. 學一學linux,把linux作為自己的開發環境。
  3. 應該不會選擇前端方向。

後來,又因為一個比賽的原因,接觸了python,很喜歡它的輕巧簡潔,於是大二結束的那個暑假學習了python和它的一個web框架(django),希望以後將它作為輔助語言。

路開始清晰了一些,但是方向仍然很多,不知道如何入手。

2015年9月到11月,課內按部就班,課外則使用django搭建了一個個人部落格(後來還很無聊的去阿里雲買了臺伺服器,註冊了域名),啃下了《鳥哥的linux私房菜》兩本大塊頭書。期間開始寫部落格——大部分是從書上摘錄下來的讀書筆記。

2015年11月26號,我想這一天是我計劃的開始。那天在微信群裡偶然看到騰訊後臺開發的補錄資訊:

騰訊後臺開發崗位要求: 
熟悉Unix/Linux作業系統,熟悉shell指令碼或python,及後臺服務程式開發除錯; 
精通C++,熟悉面向物件開發方法,對設計模式有一定了解; 
熟悉TCP/IP協議相關知識,熟悉網路程式設計,熟悉HTTP等網路應用協議,熟悉多執行緒多程序開發; 
熟悉MYSQL資料庫,熟悉其他NoSQL儲存; 
對OpenCV和影象演算法有相關開發經驗優先。 
對Hadoop有了解者優先。

其中大部分符合我的興趣,於是當天晚上寫下博文:

從博文的發表日期可以看到,第二天我就開始了漫長的入門修煉之路,開始了有針對性的學習,打定了騰訊的C++後臺開發崗的主意。

當時的書桌,每一本都是大塊頭:

這裡寫圖片描述

要選擇讀哪些書,怎麼去讀,著實不容易,為此我查了好些時間。

後來的日子可想而知——每天除了睡覺的時間在宿舍,不是在教室就是在圖書館,那麼多大塊頭的書,啃下了不容易,看到後面,前面也大概忘了,所以當然也要有選擇性地來學習了,相應的實踐也要有,這是後話。

初次面試的打擊與收穫

2015年12月下旬,啃了也接近一個月的書了,在微信上看到utips的招聘資訊,於是投了簡歷,希望去體驗一把面試,也看看有沒有機會先去創業公司學習兩三個月。

面試被虐的很慘,即便如此,作為直系師兄的面試官,給我帶來了很多的思考。

原文如下:

前陣子看到utips團隊在招新,最近看了很多書,可是苦於不知道如何投入實踐,沒有實踐看完之後很快就忘了,也不能有深入的理解。於是投了簡歷,希望能有機會去實踐一下(招聘分為兼職和全職,全職包括實習生和正職),投的是兼職崗,因為還有一些課程(而且盤算著明年春招去試一試騰訊等大公司的實習生招聘)。

很快投了簡歷一兩天就接到面試的通知。

突然有點慌了,演算法/資料結構/作業系統/計算機網路,雖然之前都學的還行,但是這學期沒怎麼接觸,大多數概念都是模模糊糊的,而應聘的linux後臺開發,對於linux仍然處於入門階段,所以可以預想到面試應該會很慘了。

面試我的是團隊創始人之一的周師兄。果然被虐慘了,好幾個問題都答不上來,甚至被說“還是不問了,怕問了等下你又答不上來……”。

看得出師兄對我這直系師弟很照顧,所以其實即使被批評的比較慘,還是很感激師兄。

“已經大三了,你這個發展速度有點慢了,按這個發展速度走下去,怕你明年找不到工作。”

說實話,打擊挺大的,雖然說不至於找不到工作,但是我自己也清楚,自己離目標還差很遠。大一大二拿了兩年的獎學金,績點不是特別高,但是也挺不錯,現在才發現課內的完全只是基礎,對於工作是遠遠不夠的。

一直以來,自認為自己在身邊的人中,算是中上水平,目前有一個發展方向(身邊的同學,保研,考研的挺多的,就業的走技術路線估計不多,而且其實挺多人現在還沒有自己的發展方向),想想要是我找不到工作,那這些人不是更慘?

不過還是自己的視野太侷限了,單單省內,中大的軟院,移動資訊工程,華工的計科,廣工的計科,其實都是滿滿的競爭力。可能自己的眼光只看到了自己身邊,沒有看的更遠。更何況,在這個行業的競爭中,總要往前進,中考淘汰一批,高考淘汰一批,到了就業找工作,又是大洗牌,在哪一個階段一個不小心就有可能被淘汰了。

自己一直以來不是很崇尚精英主義嗎,怎麼過著過著自己也在追求優秀的過程中走向平庸嗎?

所以我的關注點需要轉變,更多的去關注那些優秀的人在做什麼,而不是去關注那些整天碌碌無為的人在做什麼以此來麻痺自己覺得自己已經很努力了。

最近會經常逛別人的部落格,真的很佩服他們,勤勤懇懇耕耘。何時自己才能漸入這種境界?

這學期幾近一半的時間呆在了圖書館,其他很多事情都開始遮蔽,力求專注。最近又開始浮躁,始終做不到“沉潛,緩圖”。急切想要看到成果,也急切想要得到別人的認可。心情也時常失落,半年以來,少不了很多期待,只是仔細想一想,好像所有期待都落空了,各方面,諸事不順。

面試那天晚上,跟著計科的同學們在專業群裡大大吐槽了一頓,即使於事無補,願今後的師弟師妹們少走彎路。

說回來,師兄很nice,雖然面試很不理想,他還是表示願意拉我一把,並把我推薦給後臺開發部的老大,至於那邊願不願意帶我,就得看那邊意思了。

臨近年末,這也許是今年的最後一個期待吧。雖然知道,創業公司很辛苦,但是如果有機會,還是願意逼自己一把,不逼自己,想明年進BAT,就想都不要想了。

願好。

面試雖然很不理想,但是鑑於我課內比較優秀的成績,那邊表示願意讓我去實習,帶一帶我。不過後來由於實習方向、實習時間(考慮到影響備戰騰訊招聘的進度),我最終沒有過去。

此刻拿到了阿里巴巴和騰訊的offer,回想起那一天師兄的話,感慨萬千。

寒假不停車

寒假之前,報名了“世界超級計算機大賽”,寒假之後處於校隊選拔階段。那個時候已經是1月份了,眼看3,4月份在即,自己仍然沒有一個可以寫上簡歷的專案,而且該比賽如果入選將花費大量的時間,於是在經歷了一段掙扎之後,放棄了繼續參加該比賽。

本來寒假計劃留在學校直到美賽結束,後來計劃有變,於是提前了幾天回到家,之後便經歷了4天痛苦的美賽生活。

美賽結束之後,開始謀劃寫一個能寫上簡歷的專案,整個寒假的大部分時間花了在 專案 + 《C++primer》+ 《演算法導論》上面。學習的大部分動力都來自於寫部落格——總結的樂趣、自己寫的東西被閱讀的樂趣。

SNG-QQ音樂:一敗糊塗

回到學校也已經是2月中旬了,得知3月份騰訊開始內推,心裡開始焦慮。

幾本大塊頭的經典書籍啃下來了,專案也有了,接下來要做的事情有兩件:

  1. 做一份好的簡歷;
  2. 把書讀薄——提取關鍵的知識點,精煉出屬於自己的“面試寶典”。

關於第二點,十分關鍵,在此暫不作為重點,後面將在“乾貨篇”中詳述。

3月份,開始有同學通過內推開始進行騰訊的面試了。

雖然師兄叫我不用著急,等準備充分了再找他,但是看到別人在面試了,我還是坐不住,讓師兄幫忙內推,簡歷給了QQ音樂。

3月3號早上發的簡歷,師兄說面試官下午會打電話,於是那天下午一直在宿舍守著電話——然而一整個下午都是寂靜的。

那天晚上仍然在等,因為有一個同學是晚上8點多接到的面試電話。晚上8點50分的時候,我以為不用再等了,準備開始安心做自己的事情,電話卻響起來了,一看是深圳的固話,十分!緊張!

整個面試就20多分鐘,第一次面試完全沒經驗,跟面試官聊不來,中間N多次冷場,最後以失敗告終——面試官叫我再準備準備,等準備好了再通過內推的師兄聯絡他——也就是這一次面試掛了。

辛辛苦苦準備了那麼久,第一次出征敗得一塌糊塗。

但是現在回頭看,也就是這一次失敗的面試,讓我思考和學會了很多——

  1. 同一個問題可以有不同的答法(語言組織方式、回答的詳略程度、側重點),如何才能給出讓面試官滿意的答案呢?

  2. 面試跟筆試最大的不同是,不同面試官有不同的喜好,問的問題不一樣,而且遇上健談的面試官和遇上不健談的面試官差別也非常大,那麼如何才能解決這個棘手的問題呢?

  3. 面試雖然變幻莫測,但是有一些問題提前準備好套路,總有能派上用場的時候,那麼都有哪些套路呢?

當然,這些問題是我回過頭來總結的,當時並沒有像那麼多,但是確實是從這幾個方面去做了改進。具體的乾貨,後面再詳述。

SNG-騰訊雲:辛苦的通關戰

經歷了第一次失敗,我花了一個星期的時間來反思,並進一步改進、準備——期間大幅度修改了簡歷、對面試的常見知識點進行了精煉和全面的再次複習、提前準備好一些臺詞(其實提前準備的作用就是讓自己面試的時候更加自信,不因為緊張而出現“這個我明明會的,但是面試的時候就是緊張得想不起來了”的情況)。

3月11號,再次麻煩師兄把簡歷推薦給了騰訊雲金融組的組長。

一面 基礎知識

11號當天下午就進行了面試,有了上一次的教訓,這一次行雲流水,面了40多分鐘,幾乎所有問題都對答如流。放下電話那一刻,我心裡100%的自信這一次一定能通過。事實也是如此,一面面試官評價很高,組長準備安排第二次面試,但是我的簡歷當時被微信鎖定了,需要等到那邊解鎖才能進行下一步面試(面試前還徵詢了我的意願,因為我工作志願地點選擇的是廣州,怕我不願意去深圳)。

二面 崗位匹配度&邏輯、產品思維

3月15號第二次面試,跟我想象中的完全不一樣。一開始問了跟雲服務有關的內容(幸好我面試前專門去騰訊雲和阿里雲的網站看了一下,也瞭解了金融雲相關的東西)。 
後面我就開始懵逼了——現在要設計一個40億使用者的電商系統,該系統向用戶投放廣告,對同一使用者,同一類廣告只能推送一次,請問這個系統要怎麼設計,需要注意哪些點? 
……然後是一大波 技術+產品 的問題,全過程處於懵逼狀態(網上的面經、同學都說二面是一面的深入版!但是我這一次的面試內容完全是沒有接觸過沒有預料到的!) 
後來想了一想,覺得這一次面試,前半部分主要考察你跟應聘的部門、崗位合不合適,後半部分其實很多問題都是開放性的,主要看你的邏輯思維以及產品思維(騰訊的技術人員是要有產品思維的!)

雖然二面全程懵逼地答過去了,但是我堅信這一次不會被刷掉!(也不知道哪來的自信哈哈)

三面 視訊面試 專案&程式碼

果然,3月16號晚上就收到了騰訊雲的簡訊,預約18號下午進行視訊面試。

視訊面試傳說中要寫程式碼,而且是手寫程式碼,於是那兩天把《劍指offer》來來回回刷了兩邊,把快速排序,堆排序,vector,string以及各種常考的庫函式實現都來來回回寫和看。

不過最後再次出乎意料——只給了一道演算法題,列印三角螺旋陣列(常見的螺旋陣列的變形),限時20分鐘。

列印螺旋陣列其實在《劍指offer》裡有,但是我並沒有仔細去看那道題。一開始比較緊張,思路沒開啟,過了5,6分鐘之後,終於有了思路,時間比較緊,最後程式碼沒寫完(後來發現自己的程式碼實現複雜了,劍指offer上面的程式碼也就20多行),時間結束後跟面試官講了思路,然後就結束了。

一次不知道對與錯的決定

三面之後,心裡十分忐忑,三面的表現不算很差,但也不是很好(題目思路出來了,但是程式碼實現沒表現好,而且前幾分鐘關於專案的回答不是很好)。

3月22號晚上,收到騰訊雲的簡訊通知:

恭喜你通過了騰訊雲校招實習生提前面試並獲得報備資格,後續請留意騰訊校招實習生面試流程並準時參加。

一開始十分興奮——面試通過了!

通過了3輪技術面試,後面就只剩下hr面試了,可以說最艱難的時期過去了,於是第二天很愉快地準備hr面試的內容。

然而看了看簡訊,越來越覺得不對勁——報備、留意校招實習生面試流程並準時參加。

看起來好像意思是仍然要參加4月份正式的實習生招聘面試?

於是問了hr,得到的回覆:

內推面試有三種結果:提前錄用,報備和釋放,我屬於報備,需要參加4月份校招的筆試面試,然後如果4月份招聘通過,就會定向到騰訊雲實習。

又是大寫的懵逼了……第一次聽到面試通過了但是沒法提前錄用。

後面經歷了複雜的心理過程以及跟面試官的周旋——結果是放棄了報備資格。

之後心灰意冷,只寄希望於4月份的正式實習生招聘了(意願事業群填的是微信,感覺壓力很大)。

阿里巴巴:順風順水的背後

上面騰訊的面試已經經歷了一波兩折,期間每天都在等待面試結果和準備下一次面試中焦慮地度過。

相對來說,阿里巴巴的面試顯示十分順利。

事實上,這次的順利是建立在前面的經驗教訓和充足的準備之上的。

阿里巴巴總體的面試體驗非常好——每次面試的前一天hr都會打電話過來預約,而且面試官都特別nice。

在面試之前,還有一些小插曲:

  1. 當初學院的師兄幫忙內推的時候說推的是阿里巴巴國際事業部,崗位只有java,沒有c++的。但是看到阿里巴巴招聘資訊上寫著“也許你不會java,但是你熟悉C++…”於是我就傻傻投了java崗的簡歷。後來10多天沒有訊息,班裡好幾個同學都已經一面了(聽到有人也是一樣不懂java投了java崗,結果面試的時候根本hold不住,想想自己還是很幸運的),於是自己跑去阿里巴巴招聘網站上自己網申了,填了C++研發工程師。沒想到第二天就收到了師兄的內推邀請連結,點進去,發現崗位也是C++研發工程師,而不是java崗的!

  2. 完善簡歷資訊的時候,最後有幾道開放問答題,其中一個詢問了感興趣的事業部,由於在廣州讀書,實習方便一點,而廣州只有UC,於是就寫了UC(神馬搜尋和九遊)以及共享業務事業部(杭州)。後來面試的時候才發現神馬搜尋團隊在杭州和北京!

一面 基礎知識

3月16號早上進行了阿里巴巴的一面,有了前面的經驗,一面依舊行雲流水,總共面了35分鐘,涉及面非常廣,考到的大資料題、演算法題都在之前接觸過(演算法題出自《劍指offer》)。

面完心裡覺得鐵定能通過。

二面 邏輯思維&再次懵逼

3月23號下午進行第二次面試,套路竟然跟上次騰訊雲的極其相似。 
一開始問了專案,然後就開始設圈套了: 
你在廣州讀書對吧? 
廣州珠江那邊有很多橋吧? 
橋有多長啊? 
橋上限速多少啊? 
廣州塞不塞車? 
…… 
假定廣州有足夠多的車,且假定你說的橋長,限速是正確的,這座橋一天能通過多少輛車…… 
這座橋一天最多能通過多少輛車呢?(也就是不考慮高峰期) 
長的橋一天內通過的車多,還是短的橋通過的車多? 
建這座橋要考慮哪些因素? 
…… 
反正同樣是一臉懵逼地答完了,期間各種跟面試官打太極(論說話藝術的重要性啊) 
這一輪總共面了1個多小時!!

面完之後,跟騰訊雲的一樣,雖然是一臉懵逼地答完了,但是不知道哪來的自信,覺得不會被刷掉。

三面 交叉面試 程式設計

3月24號晚上6點,收到杭州的固話,但是當時在外面吃飯,沒有聽到。因為不是之前的號碼,所以我猜測是傳說中的“部門交叉面試”,或者是hr面試。

因為沒有接電話,所以第二天開始等那邊再次打電話過來,然而第二天和第三天都沒有電話。

第四天是週六,下午4點多的時候收到北京來的電話,結果真的是部門交叉面試,預約了5點半面試。

5點半,面試官一上來給了3道程式設計題,3選2的話給30分鐘,全做的話給40分鐘。 
1. 連結串列翻轉——經典的題目,秒掉無壓力; 
2. 編輯距離——演算法課學過,動態規劃,不過寫出正確的程式碼還是需要一定時間; 
3. 左旋or右旋陣列——要求至少給出兩種做法,在《劍指offer》上看到其中一種做法。

最後權衡了下,覺得選擇前兩道,而且第三道有部分思路,如果後面問到的話可以好好表現一下。

掛了電話之後開始敲程式碼,敲完發到他指定的郵箱,然後繼續電話,解釋思路和程式碼——溝通真的很重要,如果把自己寫的程式碼解釋給別人聽。

解釋完前面兩道,果然面試官問了第三道思路,於是我講了思路。 
然後面試官說有另一種思路,但是該思路需要做進一步的約束改進才能正確——讓我想出改進的方法。 
後來沒想出來,但是把自己思考的過程一邊講給他聽了。 
面試官很nice,看我沒想出來,把答案給我說了,但是又挖了一個坑——讓我證明演算法的正確性。 
之後又是無窮無盡的證明,所幸面試官很好,一直引導著我去思考。 
全程程式碼+解釋面了近兩個小時,雖然沒有完全證明出來,但是面試官表示已經很晚了,同時在這麼短的時間內可以做到這樣已經很不錯了——衝著這句話,我就知道這一面的通關卡我拿定了。

總的來說,這一次的表現很好——得益於之前演算法題的準備已經演算法課的學習。說實話,如果之前完全沒有接觸到這些題目,30分鐘內寫出正確的演算法是很有挑戰性的。

4面 hr面

3月29號下午,正在上課,接到杭州的固話,很高興地跑了出去。

在此之前,看了知乎上阿里巴巴hr的各種負面訊息,十分擔心。而實際上,hr面還是挺愉快的,諸如實習城市的選擇,為什麼不讀研,對前面面試的總結,跟誰比較好……

其中有一個問題很神奇:

你覺得你舍友會用哪3個詞來形容你?

我回答了:規律,活力,高效,並一一給出了理由。

事後我問了舍友,他回答了兩個:活躍,高效。

hr是男的,很友善,最後我問了他杭州的衣食住行,他很詳細地跟我介紹了一番。

最後他說面試結果會在4月中旬出來——天吶,又是漫長的等待!

阿里巴巴offer

說好的4月中旬給結果,然而當天晚上我就收到了錄取的簡訊和郵件,官網上的狀態也變成了“待跟進offer”!

後來跟hr和部門主管都通過了電話,至此終於拿到了第一個實習offer。

整個過程總的來說很順利,沒有面騰訊時的焦慮和緊張,可能是對騰訊的面試比較看重,而對阿里則是抱著試一試的心態,於是反而不會那麼煎熬。而且面阿里的時候,已經有了面騰訊的經驗,一切都準備的特別充分,雖然自己準備了很多內容在面騰訊的時候沒有派上用場,但是在面阿里的時候用上了。

MIG-應用寶:意外的收穫

騰訊的內推是在25號就結束了,所以當29號下午5點半收到MIG-應用寶的電話時我是十分意外的——原來我放棄騰訊雲的報備資格,簡歷被釋放後,簡歷被MIG的hr看上了,於是安排了面試。

一面 輕鬆取勝

這一次面試非常輕鬆,大體內容跟之前的差不多,這一次是我的第四次基礎知識面試了!大概簡單面了不到20分鐘就結束了,而且面試官當即表示我的表現很不錯,他這裡已經通過了,讓我等待下一次面試。

二面 驚險過關

第二天早上,我上了一節課,覺得很無聊,於是跑到圖書館複習,準備第二次面試,沒想到11點就收到了第二次面試的電話。 
這一次基本都是圍繞著專案來問的,由於我在簡歷上附上了github原始碼,所以面試官一邊看著我的程式碼。

這一次的感覺是,基礎的我都答上來了,但是深入一點的沒有答上來(不懂就是不懂,直接跟面試官表示沒接觸過)。

總共面了20分鐘左右,最後為了探一探情況,我委婉地問面試官“假如我能通過面試並去到你們部門實習,您覺得我在哪方面需要進一步提升?”

然後面試官巴拉巴拉:“我看你自己看了挺多(跟這個崗位)相關的經典書籍,知識面也挺廣,挺多東西都有所瞭解……” 
(簡歷書寫的重要性——把自己看得書學的知識展現在簡歷上)

聽到這裡,我就放心多了!

可見,騰訊還是更加註重基礎的~當然如果能夠深入就更好了。

hr面 失望後的驚喜

二面是3月30號進行的,因為之前騰訊雲和阿里都有一面是寫程式碼的,所以一直苦苦等待三面的通知,然而一天天過去,一點訊息都沒有。

4月3號騰訊實習生招聘筆試,4月10號開始面試。所以也就是9號之前沒有訊息的話,應該就沒有下文了。

所以我都已經做好了心裡準備——正式招聘時再去嘗試一次,失敗了就去杭州阿里實習。

4月8號,週五,下午6點,正打算跟舍友去外面吃飯,突然接到騰訊總部的電話——緊張、興奮。

hr的聲音很好聽,聊的話題也很輕鬆,聊完之後,她說下週會給我發正式offer——她說前面兩次面試的面試官對我的評價都挺高的,而且他們部門4月份不來廣州面試了,所以我接下來就不用再面試了!

一切來得都很意外。

掛了電話之後,我對著陽臺外面大吼了幾聲,終於還是提前拿到騰訊的offer了!

後來想一想,如果當初沒有放棄騰訊雲的報備資格,也許現在也拿到offer了吧。

乾貨

前面寫了那麼多,其實更多的是心路歷程,感覺寫再多都寫不完。

現在還是來點實實在在的乾貨吧!

關於準備

  1. 明確應聘的崗位和方向——至少要確定自己應聘什麼語言的崗位,前端還是後臺。
  2. 找一家心儀的公司,看一看這家公司對該崗位的要求,同時參考其他公司類似崗位的要求。
  3. 針對崗位要求,分清技能要求的側重點,然後有針對性地去學習(我覺得最基本的是把該方向的經典書籍啃下來)。
  4. 做一個拿得出手的專案(真的,一個就夠了,應屆生的專案經歷不在多,而在於體現你在該方向上的學習)

以我自己為例,確定了C++後臺開發崗,然後找了騰訊的崗位要求:

熟悉Unix/Linux作業系統,熟悉shell指令碼或python,及後臺服務程式開發除錯; 
精通C++,熟悉面向物件開發方法,對設計模式有一定了解; 
熟悉TCP/IP協議相關知識,熟悉網路程式設計,熟悉HTTP等網路應用協議,熟悉多執行緒多程序開發; 
熟悉MYSQL資料庫,熟悉其他NoSQL儲存; 
對OpenCV和影象演算法有相關開發經驗優先。 
對Hadoop有了解者優先。

側重點: 
熟悉 Unix/Linux作業系統,C++,TCP/IP協議相關知識,網路程式設計,多程序開發,資料庫; 
瞭解 shell指令碼或python,設計模式,多執行緒開發,Hadoop。

各個方面的學習書單:

Linux入門:《鳥哥的linux私房菜—基礎篇》(必讀),《鳥哥的linux私房菜—伺服器架設篇》(選讀)

Linux環境程式設計:《UNIX環境高階程式設計》、《Unix/Linux程式設計實踐教程》 
(第一本簡稱apue,十分經典,但是內容也特別多,適合做工具書,裡面的內容可以選擇性地閱讀;第二本的知識點安排跟apue挺吻合的,並且有大量實踐教程,雖然書中有挺多錯漏,但是仍然推薦作為配合apue一起學習的書籍。也就是說,我建議這兩本書同步看)

C++:《C++ primer》(能夠靜心讀下來不容易)、《Effective C++》(很有用的一些條款,針對面試可以選讀)

TCP/IP協議和網路程式設計:《tcp/ip協議詳解》(必讀)、《unix網路程式設計卷1》(必讀),《unix網路程式設計卷2》(主要講程序間通訊,可選讀)

演算法與資料結構:《演算法導論》(從大一開始陸陸續續看,那時覺得很難,現在回過頭來再看,驚歎萬分,有醍醐灌頂的感覺)、《STL原始碼剖析》(絕對值得一看,前半部分必看,後半部分選讀)

指令碼:《python基礎教程》

設計模式:《大話設計模式》,程傑 著(適合入門),《Design Patterns: Elements of Reusable Object-Oriented Software》(設計模式),作者: Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(經典書籍,但是比較難懂)

資料庫:資料庫原理要懂,之後可以瞭解mysql,memcached,redis等等。

刷題:《劍指offer》、leetcode(網站)

以上列出的書,大多是經典的書,口碑一流,但是“厚重”使得學起來有一定困難,所以一定要配合實踐,並且根據自己的情況選擇性閱讀。

專案:跟應聘崗位有關,在精不在多。

另外,最寶貴的資源:原始碼 和 部落格。

閱讀優秀的原始碼能夠學到很多東西,而閱讀原始碼、書籍時可能會遇到困難,這個時候去看看相關部落格會有很大幫助,當然,如果能夠自己也寫一寫部落格那就更好了。

我的學習方法是:

一邊看書,一邊寫部落格——這是一個把書讀薄的過程,在後面的複習中,我就以自己部落格的知識為主來複習了,然後原書作為參考。

一邊看書,一邊打程式碼——沒有程式碼,大多數情況下看了就忘的。

關於簡歷

簡歷的重要性不言而喻,其作用有二:

  1. 給hr看,用於評級;
  2. 給面試官看,協助自己獲得面試的主動權。

首先我們來看看第一點:

阿里和騰訊都會對簡歷進行評級的。

阿里:往年有A+,A,B+三檔,而今年要求A類及以上實習生。

騰訊:TST內推基本要S級和A+級才有面試機會,少數A級和B級的也會有機會。

以下是網傳的騰訊簡歷評價標準,僅供參考:

這裡寫圖片描述

可以看到,要評到S級是比較困難的,而評到A+級,特別注意到一點:技術社群和個人技術blog。

這一個很重要,如果你能把自己做的東西放到github上面,在專案經驗中附上專案原始碼,絕對是加分項,這是一個很好的展現機會:簡歷能放的東西有限,當你附上自己的github時,潛在的面試官就有可能會看到你其他的作品。而且優質的程式碼是檢驗一個程式設計師很好的標準,如果你能在github上提交優質的程式碼,而剛好被面試官看到了,那麼拿offer也就不難了——也許你不擅長面試交談,但是你有程式碼!

然後是個人技術blog,雖然不保證所有面試官都有興趣去點開來看,但是至少又是另外一個平臺,通過部落格,你可以向面試官展現自己所學的所有知識,並且體現了你的分享精神。

以上是關於評級的,下面說一說第二點:

技術面試無疑是重頭戲,而技術面試官一般都是做技術的,因此你的專業技能是他們的關注重點。在面試之前,如果面試官對你一無所知,那麼他通常會問許多範圍特別廣的知識:linux,資料庫,C++,網路,作業系統……這樣子是很危險的,一方面,一個人的知識面不可能那麼全面,因此極有可能會遇到自己不擅長的領域,從而導致面試失利,另一方面,遇上這種情況,面試的主動權就完全在面試官手裡了,你只能被動地去回答。

因此,簡歷上的展現就顯得十分重要:你的簡歷就是面試官的地圖,如果簡歷上十分空泛雜亂,那麼面試官只好大範圍地試探,如果簡歷上很具體,有針對性,那麼面試官只需要按著簡歷上的內容,並結合部門的崗位要求來提問——因此寫上簡歷的內容你必!須!熟!悉!

下面我就拋磚引玉,以我準備簡歷的過程為例來談一談:

  1. 找一份簡歷的模板,簡潔就好:

這裡寫圖片描述 
這裡寫圖片描述

  1. 在這份簡歷上進行修改:

可以看到,該簡歷模板上的內容有: 
基本資訊,教育經歷,實習經歷,專案經歷,個人技能,擔任職務,自我評價。

對於技術崗的,擔任職務這一項基本可以去掉——只有在擔任XXX主席之類的才【考慮】寫(前提是簡歷的空間夠寫)

幾個要點:

  1. 不寫對應聘該崗位沒有太大幫助的內容(比如應聘後臺開發,你寫熟悉前端的東西就顯得多餘了)

  2. 力求簡潔明瞭,簡歷不要超過一頁!!

  3. 明確應聘崗位!

  4. 用數字or成果說話: 
    能夠擺出自己寫過的C++專案,列出自己看過的經典書籍,比干巴巴寫上“熟悉C++程式設計”之類的好過100倍; 
    能夠擺出自己專案的效能測壓資料,比寫“專案的效能很高”之類的強過100倍; 
    能夠砸出自己的績點,排名,拿過的獎學金,比寫“我的成績優異”之類的好過1000倍!

我根據個人的特點,最後的簡歷格式如下:

這裡寫圖片描述

我所說的特點是什麼呢?

  1. 平時經常寫部落格,於是把自己的部落格擺在顯眼的位置,附上超連結;
  2. 顏值還ok(請允許我臭美一下),附上帥氣的簡歷照,顯示自己的自信;
  3. 科班出身,且績點排名還算不錯;
  4. 沒有實習經歷,因此刪去,把重點放在專案經歷,並增加一個學習經歷,避開自己的弱點,展現自己的優點;專案經歷要調理很清晰->簡述,主要工作(分點列出更加清晰),專案成果(需要有數字支撐),專案原始碼(讓面試官看到你的程式碼能力,並證明程式碼是你自己寫的!)
  5. 獲獎情況只寫獎學金(附上排名顯示含金量)和跟專業有關的比賽(千萬不要寫參加什麼攝影大賽啊,歌唱比賽啊,運動會獎項啊等等……只會浪費簡歷的空間)
  6. 個人技能中,一開始是按照模板的格式來寫的,後來發現太佔用空間,而且前面說過:個人技能你想怎麼吹都行,但是空口無憑,所以我的建議是如我那樣用兩行就展現就好,然後用實際的東西來說明,比如我說“熟悉C/C++程式設計”->我的專案是用C++寫的,我在學習經歷中提到我閱讀了《STL原始碼剖析》(當然也可以提一下自己閱讀了《C++ primer》);我說“熟悉TCP/IP和網路程式設計”->我的專案內容跟網路程式設計有很大關係,而且我在學習經歷中提到我閱讀了相關書籍和原始碼。
  7. 最後糾結了很久,增加了“小作品”一欄。因為在學校沒有做過大專案,只能通過一些小的作品來向面試官傳達:我很喜歡動手寫東西,並且有能力寫程式碼。而且我選的兩個作品,也是有意圖的:我的作業系統學的不錯,我會用python搭網站(呼應了上面“瞭解python,html,mysql”,並且會指令碼語言python是一個加分項)。

這樣子寫簡歷的優點上面已經提到挺多了。

在這裡強調一下學習經歷:我下面列出了具體的一些知識點,於是面試就很容易掌控了,寫上去的每一個點,我都需要非常熟悉,而面試官一般會按照簡歷上的內容來問(以確定你真的掌握了),這樣子範圍為“整個宇宙”的面試題,就被你簡歷縮小到自己熟悉的範圍之內了。

總之,簡歷要做到:一切都是為面試該崗位服務,寫上去的內容要跟崗位要求相關(當然也有例外,如果是不相關的,你也要有自己的目的,比如展現自己的學習能力等等),寫上去的內容要熟悉(別想著忽悠面試官,會不會一問就知道了,寫“精通”之類的,往往會引火燒身)。

簡歷上有的東西是改變不了的,比如成績,學校,獎項,但是專案經歷和學習經歷是需要好好打磨的,寫的好的話,事半功倍。關於這方面的內容,網上有很多教程(STAR寫法)。

因此寫完簡歷最好多找一些師兄師姐幫忙給出修改的建議,然後多修改。

關於面試

前面做了那麼多準備,都是為了面試。在討論面試之前,先提一下筆試:

內推一般是可以免筆試的(會在一面中考察)。

如果沒有內推,那麼一定要好好準備筆試!

雖然我通過內推拿到了阿里和騰訊的offer,但是網易筆試就被刷了!而身邊也有很多同學一樣面臨筆試被刷的危險。

師兄也跟我說,他的一個大牛舍友,阿里筆試被刷,後來去了微軟亞洲研究院。。。

所以筆試不容輕視。

下面再說說面試的心得:

我覺得並不像網上說的那樣有那麼多的技巧,我認為只有三個需要注意的點:

1.經典的問題提前打好腹稿:比如程序和執行緒的區別,C++虛擬函式的實現,TCP三次握手,快速排序,你還有什麼問題要問我的…… 
提前打好腹稿是為了面試時不那麼緊張,因為一緊張常常會答得毫無邏輯,而且不全面。而且這些出現概率接近80%的題目,你不提前準備,那就等著被虐吧。

2.爭取面試中的主動權,力求主導整場面試——回答要深入,主動展現自己: 
這一點我深有體會,第一次面試QQ音樂,面試官問了vector的實現,於是我回答: vector是動態分配連續空間的線性陣列,當空間不夠時擴充為2倍之類的。。。當時其實我是學習過了vector底層的空間介面卡的,但是我沒有往深裡答,而是簡單的回答了表面的東西,以為面試官會深入追問下去。但是!沒有!後面很多問題都是這樣,我不主動深入說,面試官也不深入問,於是白白失去了展示自己的機會。

後面的面試,我吸取了教訓,舉幾個例子。

說一說select和epoll的區別:

之前的話,我只會回答select的3個缺點和epoll的3個優點——但是這遠遠是不夠的,並不能給面試官留下深刻地印象。

於是我開始醒目了:

我從select和epoll的運作原理來解釋他們的區別吧……然後巴拉巴拉講了select資料核心空間和使用者空間的拷貝,講了其套接字的遍歷導致的效率問題……巴拉巴拉講了epoll的紅黑樹,雙向連結串列,回撥機制。我相信如果你能從他們的運作原理來解釋兩者的區別,而不是乾巴巴地給出背住的結論,一定會讓面試官刮目相看。

另一個經典的例子:

說一說TCP的三次握手吧!

之前覺得,不就是三次握手嗎,沒有啥好講的,於是幾句話帶過,後來師兄說,如果你說你熟悉TCP/IP,那麼TCP三次握手和四次揮手的狀態轉換圖要能熟練的畫出來!

於是面試中遇到這個問題,我會從哪一方發起主動連線,傳送了什麼型別的包,傳送完畢後進入什麼狀態等等來詳細解答。

也正是因為這一點,每次面試完基礎知識面,我都有95%的把握能通過面試。

以上說的是回答自己熟悉的內容,如果遇上不熟悉的內容,應該如何應對:

“不好意思,這方面我沒有接觸過(或者接觸的不多)。”

是的,遇到不懂的知識,勇敢地承認自己不會,千萬不要不懂裝懂!

進一步的,可以引導面試