1. 程式人生 > >遊戲開發實習生的面試總結

遊戲開發實習生的面試總結

一:背景

大三,都面臨著找實習的問題,找實習可以說黃金時期就在3-4月,錯過這個點,實習公司質量下降,數量下降,樓主也加入了
今年的實習生大軍-_-,主要投遞的公司是國內知名的遊戲開發公司,例如騰訊網易等,經過不懈的努力,也有幸成功拿到了幾個
offer,拿到之後放鬆了一段時間,有必要總結總結然後進入繼續的自我提升中。樓主投遞崗位基本都是C++遊戲開發工程師或者
C++相關崗位,所以下面的內容基本是以C++為主。

二:面試問題總結

C++基礎:

(1)C++虛擬函式的實現機制,虛擬函式的原理
基本每次面試都會被問到,可以說是必需要透徹的理解掌握的知識點,學習資料推薦:C++中虛擬函式的實現機制
C++
C++虛擬函式的實現有一個基本清晰的理解,看書的話更花時間,但是更有一個思考
,沉澱的過程,推薦書籍:《C++ Primer Plus (第六版)》和《Effective C++》,還想繼深入理解的同學可以閱讀《深度探
C++物件模型》
(2)建構函式在有虛擬函式的繼承鏈中的呼叫過程,普通函式在有虛擬函式的繼承鏈中的呼叫過程
這個地方坑比較多,也比較複雜,需要考慮父類宣告為virtual 和父類不是virtual但是子類是virtual的情況,以及多重繼
承和繼承了多代後函式的呼叫過程,!!!注意這個地方筆試經常考,而且理解不透徹的話會花很長的時間而且做不對,需要自
己進行實驗
(3)模版,模版的顯式例項化和顯式具體化,模版的特化和全特化
這部分也需要有一定的掌握,畢竟模版還是挺重要的一部分,而這幾個概念又容易搞混,並且不同概念的實現又不一樣,
學習資料推薦:《C++ Primer Plus (第六版)》《Effective C++》相關章節,另,部落格:之前看的時候忘記收藏了,自己百度
相關關鍵字把-_-#
(4)指標和引用的區別
這裡也是常問的問題之一,不搞清楚區別在使用的時候就會走火入魔,這裡不展開介紹,推薦部落格:C++指標和引用的
區別和聯絡,這裡注意到連結中區別的第四點是有int*  const p而沒有 int & const p  的意思
(5)C++11的新特性,例如lambda表示式,右值引用等
自行百度關鍵字C++11新特性即可,有興趣的也可以去看看C++14和C++17等;
(6)巨集的展開
這個問題在面試中沒有碰到過,但是筆試過程中經常考到,需要注意的是,巨集的展開的時期是在預編譯時期,展開方式是
簡單的字串替換,或者是選擇
(7)記憶體釋放問題,淺複製和深複製,delete,delete[],delete後為什麼要把指標賦值為NULL
這個前面幾點在《Effective C++ 》中有詳細介紹,為什麼要賦值為null則是,delete只是告訴作業系統這塊記憶體可以回
收了,但是記憶體依然在這裡,如果程式再一次使
用了delete的指標,那麼依然會指向這塊記憶體,很有可能導致程式崩潰;delete和delete[]的區別
(8)static,const的作用,這個樓主沒有被問到,但是依然是C++的常見問題之一
(9)C++和C的區別,可以參考《Effective C++》中條款01種對C++的分塊進行講解
(10)...待續

STL:

這部分推薦看《STL原始碼分析》,不用全看,看原理介紹部分即可,畢竟不是沒個人都對STL的原始碼感興趣的 (1)迭代器失效的情形 (2)vector使用過程中的問題,一般是問vector記憶體重分配相關的問題 (3)set和map的相同點和不同點 (4)自行設計一個動態陣列,即vector
(5)...待續

資料結構和演算法:

(1)演算法中除了直接讓你做題之外,常見排序演算法必需熟練掌握,冒泡,插入,選擇,快排,shell排序,桶排序,基數排序
演算法可以刷刷leetcode和牛客網上的公司真題。。雖然我沒去刷,但是感覺自己演算法比較薄弱,還是決定要去刷題的
(2)堆和棧的區別和聯絡,堆和棧的相互實現,即用堆實現棧,用棧實現堆
(3)二叉搜尋樹的實現,插入刪除,二叉搜尋樹的概念,平衡二叉樹的概念,紅黑樹的概念,最好能實現,不能實現的話原理
一定要掌握
(4)連結串列的反轉,二叉樹的左右節點反轉
(5)hash表的深入理解
(6)...待續

設計模式:

能知道常用的幾種設計模式,並能做一個簡單的介紹,例如介面卡模式,單例模式,工廠模式等,其中可能還需要考慮執行緒安
全,需要對C++中的相關原語有所瞭解,

計算機網路:

(1)TCP,TCP3次握手,4次揮手,狀態轉換過程;擁塞控制原理,啟動過程,恢復過程;
有時間就看看《計算機網路》,沒時間就看看網上的部落格,大多都比較詳細的介紹了這部分
(2)UDP,UDP優點缺點,和TCP的區別?什麼時候用UDP什麼時候用TCP?使用UDP,TCP的應用層協議有哪些?什麼場
用UDP,什麼場景用TCP?
(3)網路程式設計的socket介面有一定的瞭解,socket(),bind(),send()..等函式,可以看看《Unix網路程式設計》
(4)HTTP和FTP的原理和區別,以及HTTP的一些回覆程式碼的含義
(5)...待續
作業系統:
(1)程序和執行緒的區別聯絡,這個一定要非常清晰的理解,不僅面試需要問到,平時對自己多執行緒程式設計也需要加深理解
(2)程序間通訊和和執行緒間通訊的方式
建議詳細看看《現代作業系統》中的程序這一章;
(3)...待續

三,下面總結一些建議看的書籍:

C++類:《Effective C++》,有一定的C++基礎,並且想提升對C++的理解的同學必看      《C++ primer plus(第六版)》,有基本的C++知識,當然沒有也可以看,但是會比較累,同時有比較充裕的時間
的同學必看,看完基本對C++中的語法,以及一些細節原理有一個清晰的理解,缺點就是太詳細的,所以需要比較認真,要花比較
長的時間進行理解;
計算機網路:《計算機網路》,《Unix網路程式設計》需要花一定的時間,如果對網路程式設計不是很感興趣,同時和後臺,網路程式設計
關係不大的同學可挑裡面的部分章節看,但是有時間了建議通讀一遍加深理解,前一本偏原理,後一本原理和程式設計相結合
作業系統:《現代作業系統》,程序和執行緒部分必看,然後有時間建議看看其他章節加上對作業系統的理解
設計模式:這個看書看完就忘了,建議掌握常見的幾種並且程式設計實驗一下,其他的慢慢看,同時在程式設計中努力用到
資料結構和演算法+STL:《資料結構和演算法 C++版》,《STL原始碼分析》,放在一起是因為STL中也是資料結構的運用,並且源
碼分析中對各種資料結構有一個比較清晰的講解
另外,如果沒有太多時間進行刷題,複習基礎,可以看看《劍指offer》,裡面對一些常見的面試問題有所介紹,但是如果有時
還是以系統的複習為重,因為系統的複習不單單應對面試,也能提升自己對相關知識點的掌握程度,加深理解