1. 程式人生 > >2017騰訊暑期實習生從筆試到面試總結(附帶華為、阿里面試經歷)

2017騰訊暑期實習生從筆試到面試總結(附帶華為、阿里面試經歷)

背景說明

個人情況
本人是武漢大學計算機學院2014級的本科生一枚,在寫這篇總結的時候我是大三。本來我們班是規定了有固定的實習的,但是自己還是想向國內頂尖的網際網路公司衝擊一下,所以抱著試一試的想法參加了幾個公司(騰訊、阿里、華為)的暑期實習生招聘。在騰訊應聘的職位是後臺開發實習生,阿里和華為應聘的是Java開發實習生。

本文目的
這裡想記錄一下幾個公司的暑期實習生招聘的流程以及一些常問的問題,一來是自己總結一下經驗為以後可能的面試做準備,二來是想給以後的學弟學妹們一個參考,在準備面試的和筆試的時候能夠做到有的放矢。

結果
在2017.4.16是面完了騰訊的HR面,目前還在等結果(不知道是不是進了備胎池,一週沒有訊息了OTZ),微信顯示的是“你已完成所有的面試環節、請保持手機暢通”。
在4.14面完了華為的面試,今天剛剛接到華為的簡訊通知說進入了簽約池,叫我填一個什麼調查問卷。
阿里的內推比較早(大概三月份開始的),後面接過一個面試電話然後顯示已回絕,但是貌似4.26有自主投遞的筆試,過了筆試之後還可以有面試機會。
———華麗的更新線————


今天(4.24)收到騰訊發過來的郵件啦,開始準備暑期的實習咯

首先簡單介紹一下華為和阿里的情況

(如果只想看騰訊的就直接跳過這一節吧)

華為:

    華為在武漢的是實習生招聘面試是在華為武漢研究院(一個三環外老遠老遠的地方),前期需要自己在華為校招的官網上填寫自己的簡歷,然後一段時間後(大概兩週)會收到筆試的通知。

    華為的筆試是三道程式設計題 ,總分600分,分值貌似分別是100、200、300,時間是總共兩個小時。個人覺得題目難度不算是很大,但是想全部做對好像也不是那麼容易。筆試完成大概一週內就收到了叫我去面試的通知。(不過有的同學沒有做筆試也收到了面試通知,估計是部門內推就可以免除筆試)個人感覺華為的筆試貌似沒有刷人,因為我的同學只要填了簡歷都獲得了面試資格。

    筆試過後就是面試環節了,地點前面說了是在很遠的一個地方,從我們學校搭公交過去大概要兩個多小時。華為的面試總共只有兩輪,第一輪是技術面,第二輪好像就是HR面試了,然後時間是在同一天裡(可能考慮到那地方真的太偏遠)我大概花了30多分鐘就完成了兩輪面試。
    技術面試的時候問的主要是專案中的一些問題,主要問題有:
    -你印象最深的一個專案是哪一個,介紹給我聽一下
    -hashmap的結構能不能畫出來給我看看
    -平時有沒有使用過Linux,一般用Linux幹啥,常用命令有哪些
    -平時用過哪些資料庫
    -有沒有使用過雲伺服器(我說我用的騰訊雲....)
    -有沒有什麼想要問他的

    反正個人感覺技術面還是比較簡單的,如果自己做過專案而且真的比較熟悉自己的專案的話問題應該不大。而且感覺技術面好像沒怎麼問技術細節問題(相比於騰訊和阿里)。

    接下來的是HR面試,剛面完技術面還沒坐下來就通知我去HR面試。HR面試的個人感覺主要是做些背景調查。主要問題如下:
    -你最新的一個專案介紹給我聽一下
    -你的成績怎麼樣,在年級排名,你們這個班是特色班嗎
    -你是哪裡人,高中在哪個學校,高中成績怎麼樣(不知道為啥要問高中....)
    -家裡有沒有人在華為工作
    -你認為你個人的最大優點是什麼

其他的問題記得就不是很清楚了,反正總體感覺華為的面試還是比較簡單的,涉及到技術層面的問題不多,更多的是叫我談專案相關的東西。而騰訊和阿里的技術面就會涉及到很多技術問題了,下面會一一介紹。

阿里:

    阿里的內推和麵試時最早的,大概3月份就開始了。然後阿里的內推也是最多的,然而我還是跪了(無奈.jpg)

    阿里也需要在阿里的校招網站上進行註冊和簡歷填寫以及崗位的申報。然後過了一段時間後會收到一個郵件叫我完成綜合素質評測和程式設計測試。這個綜合素質評測考的東西真的是啥都有:閱讀理解、邏輯推理、管理協調什麼亂七八糟的都有,總的來說就是一個IQ和EQ以及領導溝通能力的綜合測試,時間大概是一個小時。然後還有一個程式設計測試,30分鐘一道題(我花了25分鐘才大概看懂題意,最後就隨便寫了幾行程式碼就提交了......)。不過官方說程式設計測試僅供參考,不影響結果。

    然後大概過了一週左右的時間突然有個杭州的電話打過來,我還以為是我在淘寶買了啥東西,接了電話才知道是面試(猝不及防)。由於沒有怎麼準備,所以回答的很不理想,上午接的電話下午官網狀態就顯示為已回絕了。主要問的問題有:
-介紹一下你專案裡用的這個Dubbo框架。(這個是我實習的時候的一個專案,事前沒咋準備,也不是很瞭解,所以只能說我不知道。。。)
    -解釋一下Hashmap如何實現的
    -你之前做過的專案裡有什麼缺陷,如何解決
    -如果給你足夠的資源和技術如何優化你之前的專案
    -快速排序如何實現

由於阿里這個面試過去的時間太長了,已經記不太清了,但是通過這次面試我總結出了一些經驗,這也為我之後的面試起到了很大的幫助。

  • 簡歷上的東西自己一定要非常清楚,自己做過的專案在面試之前一定要過一遍,你的負責的部分、有哪些創新點、還有那些問題。這些都是需要複習一遍的。
  • 一些基礎的演算法和資料結構要知道,比如快速排序的思想、連結串列結構、hash原理、等等,這些很有可能會被面試官問到。

騰訊

終於說到騰訊了,騰訊的招聘給我的感覺就是豪。貌似騰訊包下了一整個酒店(光谷凱越酒店)來面試,而且好像每年都是那個酒店,據說那個酒店還是五星級的。

還是先從簡歷投遞說起吧。騰訊的實習生招聘是從我們年級的群裡得知的。時間大概是三月中旬,當時有一個學長內推,我給學長的郵箱發了簡歷,然後也在騰訊的官網填寫了自己個人的簡歷和各種情況,但是一直等到四月4號都沒有人打電話給我面試。(這通常是簡歷在內推階段被刷了,我們班有兩個大神在3月份就接到電話面試然後順利拿到了offer)

內推階段被刷的我只有老老實實的做筆試題,騰訊的筆試題好像是兩個小時。在正式的筆試題之前還有一個模擬考,供大家熟悉考試題型和環境的。騰訊的考試題分為選擇題、簡答和程式設計題兩個大類。選擇題的範圍比較廣,數量好像是30個,而且好像有時間限制要在一小時內做完。內容包括有c++、Java、資料結構、網路、Linux、計算題還有一些記得不是很清了。反正感覺是有很多不會做的,但是個人感覺做這種筆試題有時候不能真的去硬算,有時候可以使用推理和排出的方法來做,否則感覺基本不可能在有限的時間內算完。然後是四個大題,兩個是簡答題,兩個程式設計題。一個是有關磁碟空間計算的問題,我好像沒有做出來,瞎寫的。然後第二題是一個簡單的演算法題,我直接寫出程式碼放在上面了。第三題是一個排序平衡二叉樹的問題,但是當時好像把題看錯了,然後沒有寫出來。最後一個題好像是一個格式化輸出字串的問題。比較有把握的就是2、4兩個題,1、3題就隨便寫了幾句話然後就交卷了。

不過雖然感覺筆試做的不是很好,但是在一週後還是拿到了面試的通知。(好像筆試不會怎麼刷人,我認識的大部分的同學好像做了筆試就都拿到了面試機會)。面試分為三輪,一二輪是技術面,最後一輪是HR面試。騰訊的面試是在華科旁邊的一個酒店裡,比較人性化的是每個地方都會有工作人員指引,還有工作人員幫忙按好電梯的樓層,給人感覺很貼心。到了酒店之後是在大廳用微信掃描二維碼簽到,然後是在休息區等待。到自己的時候會有簡訊和微信訊息提醒。上去面試的時候才發現原來是每一個面試官有一個房間,就是他們住的那房間,然後不同的人在不同的房間裡進行面試,給人感覺就是騰訊好有錢。

一面的面試官是一個男士,個人感覺像個領導,因為穿的挺正式,不過一般應該是技術人員。首先是叫我做了一下自我介紹,然後就問我一個C++的多型如何實現。因為平時用的都是Java,對C++不是很瞭解,所以就隨便說了什麼多繼承什麼的,然後告訴面試官我對C++不是很瞭解,平時主要用的是Java。然後面試官就開始問我Linux有關的問題:Linux程序和執行緒的區別、Linux程序間通訊的方式、Linux的檔案系統、Linux程序的建立以及建立後父程序和子程序之間分別會發生什麼。問完了Linux他又問了我Java相關的問題:讓我介紹了一下Java的垃圾回收機制;在紙上寫一個Server通訊的示例程式,我寫的時候還專門寫了一個處理執行緒類,然後還加了一個終止程式執行的條件標誌(我感覺面試官可能會比較看重你考慮問題是不是全面);然後還問了我Java中hashmap的實現(好像這個問題出現的頻率很高)。接著問的是網路方面的問題:TCP的三次握手和四次揮手畫出圖示並講解,說出Http的包頭裡的四個屬性,說出http有哪些方法,post和get有什麼區別(反正這個問題我回答跪了,看到面試官畫了個×)。上面那些問題問完差不多就過了20多分鐘了,然後面試官叫我10分鐘內在紙上寫一個算階乘的程式。我第一反應就是肯定普通的資料型別會溢位,然後我就問面試官輸入的資料有沒有範圍限制,他說沒有。我當時就想肯定不能直接用int 或long,肯定是string來輸出結果,然後愣了大概一分鐘如何去計算。後來我突然想到以前自己寫的一個大數相加的程式,然後我就想把所有的階乘轉換成加法的迴圈具體可參考以下程式碼。(已經過測試應該是沒有問題的)

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

string  addString(string sa,string sb)//實現大數相加
{

    vector<int> a;
    vector<int> b;
    int small=min(sa.length(),sb.length());  //獲取最短長度

    //將字串裡的每一位都儲存到vector陣列中
    for(int i=0;i<sa.length();i++)
    {
        a.push_back(sa[i]-'0');
    }
    for(int i=0;i<sb.length();i++)
    {
        b.push_back(sb[i]-'0');
    }
    //將a,b兩個陣列逆序,也就是讓個位都在0,最高位都在最後
    reverse(a.begin(),a.end());
    reverse(b.begin(), b.end());   

    vector<int> result;//儲存結果的集合每一個數表示一位
    int jinwei=0;//進位初始為0
    int i = 0;
    for( i=0;i<small; i++)  //從個位開始依次處理,直到一個數組處理完成,注意進位的問題
    {
        int tem=jinwei+a[i]+b[i];
        if(tem>=10)
        {
            result.push_back(tem%10);
            jinwei=1;
        }
        else{
            result.push_back(tem);
            jinwei=0;
        }
    }

    if(i<a.size())//判斷還有沒有剩下高位沒有處理,同樣要注意進位問題
    {
        while(i<a.size())
        {
            result.push_back((a[i]+jinwei)%10);
            jinwei=(a[i]+jinwei)/10;
            i++;
        }
    }else if(i<b.size())
    {
        while(i<b.size())
        {
            result.push_back((b[i]+jinwei)%10);
            jinwei=(b[i]+jinwei)/10;
            i++;
        }
    }
    if(jinwei==1)//最後判斷還有沒有進位
        result.push_back(1);

    reverse(result.begin(),result.end());//將result陣列逆序,將高位放到前面低位放到後面
    string  rt="";
    //將陣列中的資料變成字串返回
    for(int i=0;i<result.size();i++)
    {
        string tem=to_string(result[i]);
        rt+=tem;
    }

    return rt;

}


string function1(string in)
{
    if (in == "")
        return "";
    if (in == "0" || in == "1")
        return "1";

    long long end = atoi(in.c_str());
    string sum = "1";
    for (long long i = 2; i <= end; i++)//控制乘法的迴圈次數 例如3!=1*2*3,因為sum初始為1,所以需要計算兩次乘法
    {
        //3!=1*2*3=(1+1)*3=(1+1)+(1+1)+(1+1)=6
        string tem=sum;
        for (long long j = 1; j < i; j++) //加法迴圈實現乘法 例如2*3=2+2+2
        {
            sum = addString(sum, tem);
        }
    }
    return sum;
}

int main()
{
    string in;
    cin >> in;
    cout<<function1(in);
    system("pause");
}

然後十分鐘過去了,我大概把addString那個函式寫了一大半,然後把紙給面試官看,然後還大致解釋了一下我的思路。後來發現這個題其實有更加高效的做法,使用vector來儲存資料,然後模擬手工計算的方式來做大數相乘。具體的程式碼可以借鑑大數相乘演算法例項。然後到此一面就結束了,個人感覺回答出了大概70%的問題吧,但是不怎麼抱太大的希望。

讓我沒想到的是兩天後我居然接到了二面的通知。二面是一個比較胖的面試官,網上說一般都是部門的leader,不過我覺得他反而更加的隨和像一執行緒序員哈哈哈。上來他就給我一張紙叫我寫一個雙向連結串列刪除一個節點的程式碼。講道理在紙上寫程式碼體驗真的差,而且我總覺得這麼簡單的題可能會有什麼坑…..想了一分鐘貌似也想不出什麼坑然後就吧唧吧唧的寫完了給面試官看,面試官叫我解釋一下我的程式碼,然後問我還有沒有什麼補充,通常這就是說程式碼裡有bug或者沒有考慮到的情況。果然我只注意了刪除的節點是頭結點的情況而沒有考慮到刪除的節點是尾結點的情況。加了一個判斷條件後又向面試官解釋了一下。然後他就給我看一道C語言的變數的空間分配的問題是有關union裡有好幾個int、double、char型別的資料,然後問sizeof(union)是多少。講真這個問題我大一學過然後早就忘了,然後我又重複了一遍我對c和c++不是很熟悉,平常寫的都是Java。面試官居然說騰訊的後臺都是c++寫的,沒有Java崗。我想這下應該是GG了。不夠好在他說沒有關係,然後又叫我畫了一下TCP三次握手的圖示以及可能出現的Timewait的位置和設定這個的原因,當時我還卡了一下,好在仔細分析了一下正確的回答上來了。接著他問了一個最簡單的動態規劃問題:“每次只能上一級或者兩級臺階,上到n級有多少種方法?”解答看這裡
然後就叫我介紹一下自己印象最深刻的一個專案。我如實介紹了一下,然後他問了一些和專案相關的問題,最後他還給我的專案中沒解決的問題提供了一些意見。然後最後他說我可能需要未來一段時間學習一下C++,然後還要考慮一下自己未來的技術方向的問題。這下我又感覺好像還有點戲。然後到此二面就結束了。總體感覺二面的面試官非常的和藹可親,叫我的名字的時候還沒有帶姓,就給人一種很親切的感覺。

很快當天晚上我就接到了簡訊通知我第二面去HR面,真的是感覺很幸運。HR面試就基本沒有涉及到什麼技術問題了。主要問了我一些其他方面的情況:你覺得你有哪些優點、哪些缺點、你從你的專案中學到了什麼、有沒有什麼例子能夠證明你剛剛說的那些個人特性。巴拉巴拉說了一大堆,然後還和我介紹了騰訊的文化和價值觀,然後還給我提出了一些建議和麵試方面應該注意的問題。總體的感覺也是比較輕鬆愉快的,最後他還起身送我離開了面試的房間,讓我比較感動。哦他還問了我有沒有拿到其他公司的實習offer,我不知道這個問題怎樣回答算比較好,但是我還是如實的回答了我參加了華為的面試。

到此騰訊的面試就完成了,總體給我的感覺是比較人性化和比較輕鬆的。面試官感覺也都是比較和藹親切的,一些小的細節真的能夠感動人。

最後放上自己的一些感悟和總結吧:

  1. 面試的時候儘量保持放鬆的心態,稍微顯示出一點自信最好。最好不要自黑啊、貶低自己啊或者遇到一個問題想都不想說我不會。遇到不會的問題也要盡力去用自己已有的知識去思考解決,實在不會的可以如實和麵試官說我沒有學過、我記得不是很清楚。同時也不要過於放縱或者跟面試官開玩笑什麼的,我室友就是跟面試官開玩笑然後就掛掉了,畢竟我們是在面試不是在茶餘飯後的聊天。
  2. 面試的時候最後如果面試官問你有沒有什麼想要了解的,如果自己實在沒有問題想問,可以叫面試官給自己之前的面試提一下意見和建議,這樣也有利於自己的提升;或者叫面試官指導一下自己之前沒有問答上來的某個問題,這樣能夠體現出自己比較好學;或者可以問問面試官自己應聘的職位除了技術能力之外有沒有什麼其他方面的要求,這樣可以體現出自己對該職位比較感興趣並有意願為之努力。
  3. 就我感覺一般面試官叫我在紙上寫程式碼的題大多不是很難,但是可能會有坑。例如大數階乘的溢位、雙向連結串列的首尾節點的特殊處理等。感覺面試官主要考察你的程式碼和演算法能力之外還在考察你考慮問題是不是足夠周到,在面對真實地開發環境時程式碼的魯棒性是不是足夠強。
  4. 對於應聘開發崗位的同學(特別是Java開發)在準備面試和筆試的時候,Linux的基本原理、資料結構、網路裡的TCP和UDP、hashmap、Java的垃圾回收、Java的記憶體模型、Java的多執行緒安全問題、http的相關知識幾乎是必考的,所以大家要認真著重複習。
  5. 還有就是面對面試官儘量要誠實,因為一旦你說謊被識破了那鐵定使沒戲了,所以對於不知道的問題還是不要不懂裝懂的好。
  6. 最後就是保持一顆平常心,能夠過面試就為接下來的繼續努力,不能夠過也要坦然接受。然後繼續嘗試其他的機會,畢竟世界上不是隻有一條路,機會總是留給有準備的人的。

好久沒有手打那麼多字了,這片面經就到此為止吧,可能還有一些不完善的,等我想起來再補充。希望能夠給後面的同學帶來一些幫助~