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

一:背景

	大三,都面臨着找實習的問題,找實習可以說黃金時期就在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++的常見問題之一
		C++中static和const的作用可以看看
	(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》,裏面對一些常見的面試問題有所介紹,但是如果有時
還是以系統的複習爲重,因爲系統的複習不單單應對面試,也能提升自己對相關知識點的掌握程度,加深理解







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