- 相關(guān)推薦
騰訊互娛面試流程
15號晚上7點(diǎn)多,正在炒菜做飯,騰訊忽然打電話(huà)來(lái)問(wèn)我對他們的Linux C++的職位是否感興趣,我表達了我感興趣之后,就開(kāi)始了一段簡(jiǎn)短的電話(huà)面試,電話(huà)面試主要內容:C++和TCP socket通信的一些基礎知識。之后就問(wèn)我一道算法題:10億個(gè)整數,隨機生成,可重復,求最大的前1萬(wàn)個(gè)。當時(shí)我一下子就蒙了,沒(méi)反應過(guò)來(lái),何況我還正在燒著(zhù)菜呢,所以我就沒(méi)細想,說(shuō)了一個(gè)連我都鄙視我的思路:我說(shuō)導入數據庫,然后用select語(yǔ)句選出最大的前1萬(wàn)個(gè)?赡芪业拇鸢高B面試官都無(wú)語(yǔ)了,所以他就沒(méi)再往下問(wèn)了,不過(guò)他還是通知我明天16號早上去騰訊大廈筆試,由于我明天沒(méi)空,就推遲到了17號早上10點(diǎn)。至此,整個(gè)電話(huà)面試就結束了。過(guò)后,我想了想,10億個(gè)整數選前1萬(wàn)個(gè)大數,其實(shí)可以用:分治法+hash+多路歸并排序來(lái)做,比如說(shuō),先把10億個(gè)整數對1000取模,存儲到1000個(gè)文件中,然后對每一個(gè)文件進(jìn)行內部排序(比如快速排序,從大到小排序),然后再對這1000個(gè)文件進(jìn)行多路歸并,取出前1萬(wàn)個(gè)最大的數即可。
17號早上,懷著(zhù)忐忑不安的心情,終于來(lái)到了騰訊大廈,在前臺說(shuō)明情況后,領(lǐng)了一個(gè)臨時(shí)訪(fǎng)問(wèn)牌,一個(gè)看起來(lái)30多歲的中年人(暫且稱(chēng)為面試官A)接待了我,給我一份筆試題,時(shí)間為1小時(shí)。5道程序輸出寫(xiě)結果或者程序找錯,5道編程題。這5道編程題大概為:
1、將一個(gè)4字節的整數的二進(jìn)制表示中的001替換為011,輸出替換后的整數。
2、將一個(gè)數組右移幾位,比如數組為1 2 3 4,右移一位即為4 1 2 3。
3、輸入一個(gè)表示十六進(jìn)制的字符串,轉換為十進(jìn)制的整數輸出。
4、單鏈表反轉。
5、一個(gè)8*8的方格子,A點(diǎn)在左下角,B點(diǎn)在右上角,求A點(diǎn)到B點(diǎn)的最短路徑有多少條。
第1題,我理解錯題意了,順便鄙視一下自己,我當時(shí)的想法是這樣的:整數有正有負,不能拿該整數直接右移,所以我用了一個(gè)unsigned int mode = 7進(jìn)行左移,是直接拿整數與mode相與,得到的結果與001比較,相同就替換,不同就把mode左移3位再與整數相與。面試官A直接指出我的思路有問(wèn)題,相等替換后mode左移3位,不相等應該將mode左移1位,而不是左移3位,只有相等才把mode左移3位。這里順便說(shuō)一下,筆試完之后,面試官A是拿著(zhù)你的筆試題一題一題的問(wèn)你,根據你的題目結果要你說(shuō)出你的計算過(guò)程的。答案:將一個(gè)4字節整數的二進(jìn)制表示中的001替換為011
第2題,由于這道題我之前做過(guò),思路就是:先把左邊反轉,再把右邊反轉,最后把整個(gè)數組反轉就可以得到結果。但是悲劇的是,面試官A要我用數學(xué)證明我這種方法的正確性,o(□)o,最后我只能說(shuō):我之前做過(guò)這道題。如果當時(shí),我能套用線(xiàn)性代數中矩陣的轉置的思想來(lái)說(shuō)明這道題,那么這道題的證明可能說(shuō)得過(guò)去。所以說(shuō),要對你寫(xiě)的代碼負責,要知其然,更要知其所以然。類(lèi)似題目:左旋轉字符串
第3題,進(jìn)制轉換,簡(jiǎn)單,不過(guò)要分別考慮大小寫(xiě)字母。
第4題,簡(jiǎn)單,就不說(shuō)了。答案在我的另一篇博文:?jiǎn)捂湵砟嬷?
第5題,我也是想錯了方向,由于沒(méi)有時(shí)間了,代碼我沒(méi)寫(xiě),我只寫(xiě)了個(gè)思路:即從A點(diǎn)開(kāi)始用廣度優(yōu)先搜索,第一個(gè)到達B點(diǎn)的肯定是最短路徑,記下此時(shí)A點(diǎn)到B點(diǎn)的步數,然后統計從A到B點(diǎn)等于這個(gè)步數的個(gè)數。其實(shí),廣度優(yōu)先搜索只能求出最短路徑,但不能求出所有的最短路徑個(gè)數,要想求出所有最短路徑的個(gè)數,要用回溯法(后面我會(huì )給出代碼)。想想當時(shí)面試的時(shí)候還振振有詞的向面試官A講解我的思路,也不知道面試官A是怎么想的,也不指出我的錯誤,怕是怕我難堪吧。
面試官A面完之后已經(jīng)是12點(diǎn)多了,這是又來(lái)了一個(gè)27、8歲的大哥(暫且稱(chēng)為面試官B)來(lái)面試我,一上來(lái)就給我一道編程題,實(shí)現大數相加,給出代碼。我又刷刷的寫(xiě)了20多分鐘,認為沒(méi)問(wèn)題了,就拿給面試官B看,看了一小會(huì ),就指出我的代碼錯在什么地方了,(哎,畢竟是手寫(xiě)代碼,錯誤肯定很多),要我改正,一步一步的引導我將我的代碼改正,非常和藹的一位大哥哥,也是和我聊的最久的,聊到了下午2點(diǎn)多,差不多兩個(gè)鐘頭,期間主要問(wèn)的問(wèn)題各種各樣都有:
1、技術(shù)相關(guān):map的實(shí)現機制是怎么樣的啊;模板類(lèi)的偏特化;動(dòng)態(tài)加載dll和靜態(tài)加載dll的區別;線(xiàn)程和進(jìn)程的區別;TCP的四次揮手協(xié)議;給定兩個(gè)數組a和b,求所有在a數組中不在b數組的元素;快速排序的平均時(shí)間復雜度是多少,證明它的平均時(shí)間復雜度等。這些問(wèn)題我都一一說(shuō)出了我的答案,主要是我看過(guò)一點(diǎn)
2、其他:3點(diǎn)一刻,求此時(shí)時(shí)針和分針夾角的度數;對騰訊這個(gè)公司怎么看;為什么離職;個(gè)人規劃等。
面試官B面完之后,叫我先出去吃午飯,下午回來(lái)還有一次面試。吃飯歸來(lái)之后,又來(lái)了一位也是27、8歲的大哥(暫且稱(chēng)為面試官C),給我幾道邏輯題,要我20分鐘寫(xiě)出答案,在我和他講解我的邏輯題之后,他問(wèn)了幾個(gè)我不熟悉的或者已經(jīng)記不清答案的問(wèn)題:一個(gè)進(jìn)程由哪些方面構成,我記得
總結:
1、沒(méi)有大公司面試經(jīng)驗,并且由于事先也完全沒(méi)有做準備,好像趕鴨子上架
2、基礎一定要扎實(shí),C++,數據結構和算法,操作系統,網(wǎng)絡(luò )編程要熟悉。
3、對自己寫(xiě)的代碼負責
4、騰訊的員工非常友好
近期目標:
1、看數據結構和算法
2、熟悉C++編程規范。
3、多看別人寫(xiě)的優(yōu)秀源碼,爭取自己寫(xiě)的代碼簡(jiǎn)潔易懂
最后:
給出筆試的最后一道編程題的題目和我寫(xiě)的答案,如果有任何問(wèn)題,請指正。
題目:給定一個(gè)8*8的方格子,如下圖所示,求A點(diǎn)到B點(diǎn)的最短路徑有多少條?用算法實(shí)現。
答:從圖中可以看出,A點(diǎn)到B點(diǎn)的最短路徑為16,即A點(diǎn)橫走8小格,縱走8小格才能最快到達B點(diǎn),這是排列組合的問(wèn)題,即從最短路徑16中選取8個(gè)橫走的小格子(或者從最短路徑16中選取8個(gè)縱走的小格子)。所以從A點(diǎn)到B點(diǎn)的最短路徑條數,直接可以算出來(lái),即為:
代碼如下:
size_t g_num = 0; //統計A點(diǎn)到B點(diǎn)的最短路徑條數
void shortestPathNumber(char grid[9][9], int row, int col, int &step)
{
if (row < 0 || row > 8 || col < 0 || col > 8 || grid[row][col] == '*' || step > 16)
{
return;
}
if (row == 0 && col == 8)
{
if (step == 16) //已到達B點(diǎn),且等于最短路徑16,就累加
{
g_num++;
}
}
else
{
grid[row][col] = '*'; //標記該點(diǎn)已訪(fǎng)問(wèn)
step++;
shortestPathNumber(grid, row, col + 1, step);
shortestPathNumber(grid, row + 1, col, step);
shortestPathNumber(grid, row, col - 1, step);
shortestPathNumber(grid, row - 1, col, step);
grid[row][col] = '.'; //回溯
step--;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char grid[9][9] = {0};
int step = 0;
shortestPathNumber(grid, 8, 0, step); //從A點(diǎn)開(kāi)始搜索
cout<<"A點(diǎn)到B點(diǎn)的最短路徑條數為: "<<g_num<<endl;< p="">
return 0;
}
【騰訊互娛面試流程】相關(guān)文章:
騰訊互娛外聘員工的待遇,福利,發(fā)展怎么樣?容易轉正嗎?07-13
騰訊校招技術(shù)類(lèi)崗位面試流程是怎樣的?07-13
騰訊筆試題以及騰訊面試07-13
新浪百度騰訊等互聯(lián)網(wǎng)公司面試流程是怎樣的?07-12
騰訊HR崗面試,流程仍在審批是什么意思?07-13
我的騰訊面試經(jīng)歷07-11
騰訊面試幾道題目07-13
面試流程07-11
求職面試:陌生者互“提攜”07-11