人人,金山西山居,騰訊互娛,微信,網易遊戲offer及面經

我寫這篇文章一是爲了感謝這位同是華南理工但素未謀面的師兄,給我推薦這篇文章的炳爺,以及爲我解決難題的浩子,羊兄給的項目幫助,潔潔的理解,王兄提供的兩個月免費住宿,以及互娛的 BOSS ,leader ,金山的朱先生等人對我擇業的幫助,以及所有直接間接幫助過我的人。二是飲水思源,要把這份活水轉贈出去以幫助到更多的人。 


 

我用完之後是這個樣子,你們用完之後也會是這個樣子。 = =~ 


 

文筆不好,表述不清的地方還請見諒,記錄自己的找工作歷程,如果能爲有需要的人提供到一點幫助或啓發我就很心滿意足了,同樣攢攢 RP~ 嘿嘿 


------------------------------------------- 公司面試回憶 ---------------------------------------------------- 
(面試很大不確定性,這些僅是自己的相關面試經驗,不會涉及到具體面試題目的表述,公司考查的都是常見問題,這裏不涉及對具體問題的探討,只會說個大概謹供參考 ~  
一、騰訊互娛,後臺開發工程師 ( 實習 )------------------------------- 

 

1) 一面,當天人爆滿,十點半進到808房間(挺吉利的號碼~),面試官整個過程一直面帶微笑,一面在輕鬆的氛圍中度過~(40分鐘)主要問到: 

 

1. FTP 服務器怎麼實現(因爲自己有寫過),多線程磁盤讀寫效率(由於磁盤尋道隨機性增加而導致I/O效率呈線性下降),是否考慮到斷點續傳。爲什麼要用epoll,優缺點是什麼,epoll的兩種方式,各有什麼不同。 

 

2. TCP 爲什麼要三次握手。 

 

3. vector 的容量增長的題目,vector a; push_back八次對象,求總共調用多少次拷貝構造函數。另外問到vecter和set的底層實現。 

 

4. 空對象的大小,加虛析構函數又怎樣呢。 

 

5. 寫算法,求二叉樹中某個值爲5的結點到根的路徑。 

 

6. 看我寫過抓包軟件,問有沒嘗試分析一些軟件的數據包。 

 

7. 字符串倒轉。 

 

8. 排序有哪些,快排的思想。 


 

2) 二面總監面,態度也很友好,談話挺輕鬆的。(40分鐘) 

 

主要問到: 

 

1. 一上來看我簡歷上編譯器相關內容,問我基於什麼原因要寫,以爲現場寫彙編的節奏,結果是要寫strcpy(),大跌眼鏡~; 

 

2. FTP 服務器怎麼改進,果斷把上次一面面試官說的答上。提到如果進程崩潰,文件緩存區內容還無法寫到文件中怎麼辦,我回答用數據庫的回滾思想,做記錄。後面說可以用文件映射和共享內存等等。問用共享內存需要注意什麼東西 ,讓我回去想想。。 

 

3. 問網絡,問項目中爲什麼要考慮用TCP(文件傳輸難道用UDP?= =),不用TCP流量控制,傳文件還不爆掉阿。。問迅雷的協議是什麼,問優酷土豆這些視頻網站是用什麼協議傳輸視頻,答可能UDP組播。問 熟悉P2P不,叫我回去瞭解 。。 

 

4. 問語言,問面向對象繼承封裝多態,問動態多態的實現,STL容器,還是問到vector增長(這麼喜歡問這個)。 

 

5. 寫算法,升序鏈表的合併。( 現場手寫代碼能力要加強 ) 

 

6. 問連連看外掛,問基於什麼原因要寫。 

 

7. 問實習,談到說實習公司LINUX下用到mono來開發C# , 自己參與C++重寫。 


 

3) 三面HR。當知道hr面不怎麼刷人也就放下心來了。自己好好想了下,看了騰訊的基本信息。 

 

主要問到: 

 

1. 自我介紹 :扯遊戲和技術 

 

2.   平時學校生活怎麼安排 :起牀看網頁看小說學習吃飯健身跑步鍛鍊遊玩 

 

3. 說下騰訊的產品的看法:QQ消息丟失的問題,QQ密碼安全的問題 

 

4. 各種問,還問考研考了多少分,英語怎麼複習的,哪科考的最好 

 

5. 你 認爲自己做過最成功的事 :說遊戲打到好裝備= =~,考研,項目 

 

6. 介紹參加的敏感詞實踐,問以前有沒實習經歷 

 

7. 談自己研究生生活的得與失:得-知識能力積累提高 失-沒有搞什麼研究,或者自己不是想純搞研究的人吧 


 

糾結的十多天,期間有一批同學簽約了,自己這裏還毫無音訊,到5月1號,微信通知招聘結束,這下覺得可能要沒戲了,後來發現這是個系統錯誤,希望又來,果然5月2號下午四點半收到OFFER通知~ (記我難忘煎熬的騰訊實習面試經歷) 



 

二、人人,後臺開發工程師 ------------------------------- 

 

1) 一面,一上來寫個 aabbbccddff 化爲abcdef的去重算法,想複雜了 ,其實的話只要將後面的移到前面來就行了(我是不是太弱了。。。)。接着問騰訊實習作業,磁盤的效率問題,併發的取捨,實現的UDP可靠傳輸效果如何, 最後考了個0(1)時間求棧中最大元素的算法。這個沒想出來 ,其實考慮到棧的出棧入棧特點的話,很容易解決了。 


 

2) 二面,一上來又是算法,畫個不規則的多邊形,現在每條邊都需要一條等長的木頭,給定一塊足夠長的木頭,要以最小的體力值把這些邊長木頭出來(體力值等於木頭的長度),其實這就是個 哈夫曼算法 。提示很多次纔想到這裏,還好最後算法實現比較快。接着問了linux查看內存,查看磁盤容量剩餘,怎麼通過ls輸出目錄。 


 

3) 三面,問了key/value存儲,有什麼優缺點,什麼場景下用。問了一個分佈式key/value存儲要如何保證映射可靠,答通過中心代理來負責映射,那缺點又是什麼。接着問,如果不同的例程都要向某個key更新更大的value值,如何在不用信號量,同步鎖這些的情況下保證最終value是最大的(同步, set get 循環巧妙 ) 。後面問了個海量數據中找第k大數(1.其實可以直接採用桶劃分,即使是64位也最多三次遍歷就可以了。2.也可以採用位濾除,但磁盤操作太多 3.k堆濾除,但k如果太大會頻繁交換內存 4.分配到多機,多機同時外存排序,並有另外一臺機子作多路歸併) 


 

順利拿到了offer~可北京不太想去 



 

三、金山西山居,後臺開發工程師 ------------------------------ 

 

1) 一面,面試官是湖南老鄉,一上來問了各種c++問題,如new,delete,malloc,free的區別, new a[5] 再delete a的編譯器未定義行爲及深層原因探討 。接着問了個內存分配,說堆中有1G的內存,但內存還夠用,但爲什麼就分配內存錯誤了。問了C++類的構造順序。問了 TCP 的黏包 現象。一個是nagle算法,一個是應用層數據的包無邊界問題,這是無法解決的,因爲TCP管不到應用層的事,它只負責按字節流傳輸。問了火車運煤,拉燈的智力問題。。開玩笑帶過去了。。。 


 

2) 二面,是個做手遊3D的總監,一上來也是問編譯器,說不懂編譯原理,他就說你是怎麼去做的這個東西,我就說了一通,最後他說這樣先實踐再看理論也是不錯的,說他喜歡這種搞鑽研的人= =~。。。後面問到多線程需要注意的問題,問到FTP做的目的。 


 

3) 三面,見到CTO陳飛舟,居然不認識他。。。首先也是一上來問了個編譯器的問題,函數聲明和函數定義是如何區分的,編譯器怎麼判別出來。後面問到我做的騰訊實習這個作業,說到併發策略那塊(多CPU核開網絡中斷 是需要特殊網卡,特殊平臺及更高版本的linux支持)。問我有沒代碼積累,講他的代碼積累的習慣。問我以後想從事哪方面工作,跟我講他在各個不同產品部門間積累代碼,高效最優完成的結果。講到選擇,講到自己認同公司的價值觀。講到遊戲產業,爲什麼虛幻三用不起(美術的整體工業環境不行,同樣的效果圖,美術資源是暴雪美術的4倍)。講到雲風,講到雷軍和小米,看了下桌子上的小米3S工程機= =~。 


 

拿到金山offer~ 這個offer真是很難割捨,幾輪面試官都給人印象都很好,整個西山居環境也很是不錯,自助食堂餐廳,工作間旁各種遊戲機,在珠海拿着還不錯的待遇過的應該很舒服。。。 

 

在婉拒offer後,面試官還給了我一些在微信和網易遊戲間如何選擇的中肯意見,甚是感激。 



 

四、微信,後臺開發工程師 ------------------------------ 

 

1) 一面,一上來丟了6個算法題過來做,要四十分鐘的樣子搞定,單都是基礎算法,什麼鏈表,二叉樹之類的,其中的兩個字符串的最大公共子串沒有較好的解決辦法。問key/value緩存,它具體是如何實現的。瓶頸在哪,怎麼保證負載。後面問騰訊互娛後臺的負載均衡低耦合架構,這裏說的不是很好。問磁盤效率優化,如何做的優化,測磁盤數據怎麼測,通過什麼命令(top,iostat),iostat的參數如何去看,讀寫隊列,等待時間與服務時間的比例,空閒比例。編碼規範(命名規範,固定的括號樣式,函數註釋與關鍵註釋,異常說明,類的訪問控制規範)。問網絡編程應該注意的地方(TCP和UDP取捨),問UDP實現可靠傳輸是如何實現的。是否做過測試,拿scp來做爲對比的恰當性。問網絡方面的調試用到的命令,如tcpdump,lsof,netstat,問編譯器,如何實現的,是否考慮到中文編碼問題的解決。編譯器的實現流程。問查看一個進程的運行情況的命令,top,/proc/pid/,問如何統計出函數的使用頻率,用valgrind。==。壓力較大的一次面。。 


 

2) 二面總監面,自我介紹,之後問我做的最好的一個項目,說了編譯器,最後再叫我介紹個項目,說了UDP文件上傳服務,問了UDP可靠傳輸的具體內容,好奇爲什麼速度可以達到SCP的兩倍。問我本科爲什麼沒寫什麼東西,答的不好。問平時讀什麼技術書籍,自己說linux內核詳解,我說內存,介紹了一遍,最後問內存這塊有什麼用到項目中的嗎,其實是沒有,但可以說的更好一些的,如可以說對動態內存的理解,線程創建實際的開銷在內存方面是有多大。說了文件中的mmap,直接I/O。問三個優點,最大的缺點。。 


 

3) 三面hr面,自我介紹,以後自我介紹儘量要充實點,問了拿到幾個offer,問了以後的工作意向,是否願意留廣州,問自己覺得做的最出色的一個項目,爲什麼是最出色的,嗯,這點要多想想。 

順利拿到offer~ 



 

五、網易遊戲,遊戲研發工程師 ------------------------------ 

 

1) 筆試,這個要提下,總共三個小時的題量,而且題目都不簡單,前面30題的基礎題,每題一分,都不是好搞的。後面6個算法題,涉及數組靈活遍歷,算法非遞歸實現,BNF,鏈表,圖,布隆過濾器等。大多是寫了一小問,難~(其實後面想想還是自己 對知識的靈活運用能力不足吧 ) 


 

2) 一面,開始做的矩陣乘法測試題,反覆檢查發現就只是矩陣乘法,還是自己想多了。首先自我介紹。介紹C++,C++和C的區別,出了個c++多態的例子,考的還算比較活的,但順利做出來了。介紹TCP協議。問了epoll,epoll的特性,LT和ET的區別。問了進程的內存佈局,由於都有充足準備,答的都可以。出了BFS算法和擴展問題,出了線段樹的問題,最後是一個如何以最快時間找到與給定點最近的點算法,說了取整預處理思路,但數據存儲會有問題,如果問題域是無限的,又如何去設計這樣的數據結構來存儲。問了編譯器的實現。 


 

3) 二面,一上來就是四張撲克牌要算24點,當時爲毛想不出= =~,後面是給算法解決。桌面均勻放點算法,最後是要求一個點在扇形中如何隨機放的問題,說了按弧度和半徑來隨機的想法,但這樣會集中在扇形頂部,說了按頂部和底部的面積來分,這樣又不能處理連續的情況,而且也會出現同樣的問題,最後提到連續隨機密度函數的思路但沒能給出最終正解。給個隨機洗牌算法,如何證明洗牌是隨機的。也問了編譯器,叫我介紹一遍。最後問爲什麼沒有hr面了,他說需要的話可以給我安排。。我就很自覺的滾粗了~ 


 

順利收到offer 

------------------------------------------- 公司面試回憶 ---------------------------------------------------- 



這些便是我一路過來的面試歷程了,我不是技術牛人,能拿下這些 offer 主要是準備還算充足,今年就業形勢好,另外運氣還不錯,這裏談談自己是如何找工作及準備的。 

------------------------------------------- 找工作及準備 ---------------------------------------------------- 

 

首先確定目標,自己剛出去還是想從事技術工作,偏實幹,所以首選互聯網公司。 


 

如何準備的話,我的想法是不能爲了準備而準備,同時也可以當做一種學習來鞏固自己的整個技術框架體系(個人認爲,在學校還是很有必要把整個技術體系架好)。 


 

那麼我會分成算法,語言,系統三個部分來準備。 

 

算法: 
自己不搞 ACM ,自知也不是搞 ACM 的料,所以這塊還是比較虛的,那麼怎麼較好得消解這個短板呢? 

 

1. 我首先是把 weiss 的那本《數據結構與算法分析》 大概看了遍的,多動手,嘗試着解決後面的一些算法問題,問題不在多在精。 

 

2. 一定要多動手 ,訓練自己的手寫代碼能力,大可不必去鑽難的算法,基本算法搞定面試基本無憂。問問自己能把插入,選擇,冒泡,希爾,快排,堆排,歸併等排序正確高效地寫出來;能寫循環隊列實現;能對鏈表指針插入刪除等操作熟悉;二叉樹各種遍歷遞歸非遞歸實現,常見算法寫的出;優先隊列(堆)的實現能否寫的出;圖的基本算法, DFS,BFS ,最小生成樹,最短路徑;熟悉貪心,分治,動歸,回溯等算法設計方法及適用場景;深刻理解迭代跟遞歸的區別。 

 

3. 熟悉一些 常見的高級數據結構 ,如紅黑樹, B+ 樹,線段樹,跳錶,並查集等,不要求實現,原理、基本實現流程知道即可,如紅黑樹的是怎麼插入刪除結點的(你叫面試官現場給你寫個紅黑樹試試 = =~)。 

 

4. 查漏補缺 ,可以看《編程之美》來啓發自己的靈活運用能力,看 JULY 的博客 來看自己能否解決常見的一些算法面試題,什麼微軟 100 題之類的。 


 

語言: 

 

由於平常多用 C++ ,所以準備的也多是這塊的。 

 

1. STL 是否熟悉,當然最好是自己可以嘗試寫寫與 STL 兼容的容器,算法之類來增加理解,瞭解vector,list,set,map 的底層數據結構實現。 

 

2. C++ 語法機制 是否熟悉,我看的是《 C++ Pimer 》和《 c++ 對象模型》,對象模型畫的出嗎;多態是如何實現的;異常框架是否知曉;構造,析構,虛函數的關係; 

 

3. 適當瞭解 C++11 新特性 ,如 move 語義, auto 類型推斷, lambda 表達式等。 

 

4. 當然語言終歸是工具,是聯繫算法邏輯和系統的橋樑,還是需要在自己的項目中去總結怎麼用好 C++這把雙刃劍。 


 

另外後臺開發,腳本語言也是需要熟悉,如 SHELL ,常用命令要知道吧;基本的正則要會寫吧,這些對工作效率也有很大提高的。 


 

系統: 
這部分就比較雜了,個人比較喜歡對技術究根問底,所以彙編,編譯原理,系統內核實現,網絡原理實現都會有涉及。比如:一個程序如何編譯成彙編語言到鏈接成可執行文件,程序如何被裝載運行,操作系統做了些什麼,程序的內存佈局是怎樣的,棧是如何分配的,堆是如何擴張的,文件映射內存在哪,操作系統是如何實現的。虛擬內存到實際物理內存是如何轉換的,硬件負責什麼,操作系統負責什麼,操作系統怎麼管理內存又如何影響到實際程序的執行,文件是什麼等等。下面我會例舉幾個大點。 

 

1. 彙編,程序鏈接這些比較雜的(當然這些看個人興趣),我會看 《深入理解計算機系統》 ,這本書講的不錯, = =~ 我只是選着看了一點點。 

 

2. 系統內核這塊,我看的是那個女人拿個大盤子的  Linux 內核詳解》 ,主要看了內存,文件這幾塊,真正從代碼級來理解一個操作系統,也只是淺嘗則止,沒有進行深入研究。另外像 epoll 這種幾乎必問的可以考慮看看內核源碼,管道, FIFO ,文件映射,共享內存等是如何實現的。 

 

3. 系統調用接口, posix 編程環境這塊就是兩個大部頭,  UNIX 環境高級編程》和《 UNIX 網絡編程》,這些對我的實習及一些項目的編寫都幫助挺大,不是說要去記這些接口,只是要有個整體把握。 

 

4. 計算機網絡這塊看到就是  TCP/IP 詳解 - 協議》, 瞭解從鏈路層到應用層的協議,真正的理解 TCP的優缺點,爲何需要有 UDP 。 

 

5. 再就是對一些 系統架構上的東西 要有了解,如負載均衡有哪些策略,高性能服務器需要注意什麼,什麼是 C10K 問題, key/value 緩存,事物處理這些。 


 

我一直覺得不是爲了找工作而找工作,如果同時這又是種提高和積累,何樂而不爲呢? 

------------------------------------------- 找工作及準備 ---------------------------------------------------- 


 

總結下來就是: 明確目標 -> 選擇方法 -> 踏實準備 

 

 

好了,到這裏也差不多了,我的不一定適合後來者,如果能有一點借鑑意義,那就是我最大的安慰了。祝大家都找到滿意的工作 ~

 



(轉自牛客網)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章