2025暑期實習(xí)游戲開發(fā)/Unity開發(fā)/VR開發(fā)面經(jīng)總結(jié)
面試公司: 騰訊、字節(jié)跳動、阿里淘天、阿里高德、網(wǎng)易雷火、快手、小騰汽車
投遞崗位: 游戲客戶端開發(fā)(騰訊、字節(jié)跳動、網(wǎng)易雷火、快手);VR/Unity開發(fā)(阿里淘天、小騰汽車);圖形學(xué)算法(阿里高德)
說明: 面經(jīng)按照問題類別分類,不按公司分類。有些問題可能引自我的個人項目,會標(biāo)明。
C++:
- 虛函數(shù)/虛繼承
- C++虛函數(shù)機制?
- 虛表指針存放在哪兒?存放在實例化對象內(nèi)什么位置?為什么要存放在這個位置?
- C++虛繼承機制?虛繼承用于解決什么問題?
- 構(gòu)造函數(shù)可以是虛函數(shù)嗎?
- 析構(gòu)函數(shù)可以是虛函數(shù)嗎?
- 析構(gòu)函數(shù)非虛會有什么問題?
- 智能指針:
- 介紹C11的新智能指針
- shared_ptr循環(huán)引用怎么解決?
- 看過shared_ptr源碼嗎,shared_ptr的底層機制介紹一下?
- shared_ptr是否是線程安全的?為什么?
- 如何自己實現(xiàn)一個shared_ptr?
- 內(nèi)存對齊:
- C++內(nèi)存對齊規(guī)則(一般會給例子計算一個struct或class的大?。?/li>
- 為什么要內(nèi)存對齊?
- 強制不內(nèi)存對齊場景?如何強制不內(nèi)存對齊?
- class增加函數(shù)是否影響class的大小?為什么?
- Enum和Union
- 內(nèi)存管理
- C++內(nèi)存管理機制?
- new的對象放在內(nèi)存什么分區(qū)?
- 如何強制new的對象在棧中?
- C++內(nèi)存泄漏?如何檢測內(nèi)存泄漏?
- 如何避免內(nèi)存泄漏?
- C++野指針?如何檢測野指針?
- 棧溢出?什么情況下會棧溢出?
- STL
- vector和list的差距?哪些場景是否vector?哪些場景適合list?
- push_back和emplace_back的差距?
- map和unordered_map的差別?
- vector是否線程安全?
- 什么情況下STL迭代器會失效?
- 雜項
- static關(guān)鍵字用法
- const關(guān)鍵字用法
- C++編譯過程?鏈接主要做了哪些工作?
- 什么是指針?什么是引用?指針和引用區(qū)別?
- 左值和右值?左值引用和右值引用?
- move函數(shù)?運用場景和作用是什么?
- 淺拷貝與深拷貝?怎么實現(xiàn)淺拷貝?
- C++有哪些鎖?有什么應(yīng)用場景?
- C11有哪些新特性?
三維引擎:
- Unity各個文件夾干什么用的?
- Monobehavior生命周期
- Unity物體的數(shù)據(jù)存儲在哪里?
- .NET垃圾回收機制?
- Godot和Unity有什么不同?(項目相關(guān))
- Godot有什么獨特之處?你為什么選擇Godot做開發(fā)?(項目相關(guān))
計算機基礎(chǔ):
- TCP&UDP相關(guān)
- TCP和UDP是什么?兩者區(qū)別?
- 詳細(xì)說說TCP三次握手?三次握手每次握手丟包會怎么樣?
- TCP保證可靠通信的方法?
- 如何設(shè)計使得UDP實現(xiàn)可靠通信?
- HTTP協(xié)議不同版本之間的差距?
- Socket通信底層用TCP還是UDP?Socket通信有什么好處?
- 進程、線程、協(xié)程的定義、區(qū)別及應(yīng)用場景。
- 并發(fā)和并行有什么區(qū)別?
- 什么是虛擬內(nèi)存,有什么好處?
- 32位系統(tǒng)最大虛擬內(nèi)存?64位系統(tǒng)最大虛擬內(nèi)存?windows操作系統(tǒng)支持的最大虛擬內(nèi)存?
- 介紹常見設(shè)計模式?
- 堆排序?
- 快速排序什么情況達到最差?最差時間復(fù)雜度?
- 穩(wěn)定排序算法的定義?有哪些經(jīng)典排序算法是穩(wěn)定?
- 常見尋路算法?A* 算法?
- 紅黑樹?
- 哈希散列表,散列表需要注意哪些問題?
計算機圖形學(xué):
- 渲染管線相關(guān):
- 基本渲染管線?
- 視錐剔除在渲染管線的哪個階段?
- 光柵化具體做什么的?
- 透明物體渲染?
- 頂點坐標(biāo)包括哪些數(shù)據(jù)?
- 知道頂點著色器和片元著色器嗎?它們的作用都是什么?
- 正交投影和透視投影?如何實現(xiàn)近大遠(yuǎn)小?
- 知道四元數(shù)嗎,它相比旋轉(zhuǎn)矩陣和歐拉角有什么優(yōu)勢?
- 如何保證物體的平滑旋轉(zhuǎn)?
- 我有一個正方形紋理,我想要把他變成圓形的,怎么辦?
- 什么是DrawCall,為什么要減少DrawCall?
- MVP矩陣及其具體含義作用?
- 什么是mipmap?mipmap的作用是什么?如何確定mipmap的層級?
- 紋理映射方法有哪些?各向異性采樣的應(yīng)用場景?
- 介紹一下骨骼動畫?(項目相關(guān))
- GI是什么?Godot引擎有什么實現(xiàn)GI的方式(項目相關(guān))
- 怎么實現(xiàn)水面波動效果?(項目相關(guān))
- 怎么實現(xiàn)AO效果?動態(tài)AO效果怎么實現(xiàn)?(項目相關(guān))
場景題:
- 設(shè)計一個排行榜,排行榜可能包括不同維度(網(wǎng)易雷火)
- 有一個天平,你可以自由設(shè)計砝碼的重量,如何使用盡可能少的砝碼數(shù)量稱出所有重量?如何證明你的設(shè)計的正確性?(網(wǎng)易雷火)
- 給一個二維數(shù)組,1表示陸地,0表示海洋,二維數(shù)組保證只有兩塊連續(xù)的陸地,現(xiàn)在想要在兩塊陸地之間建一座橋如何確定橋的最短值?(網(wǎng)易雷火)
- 看代碼糾錯,具體代碼已忘記,類似傳輸文件流解決對齊問題(騰訊)
- 給海量數(shù)據(jù),如何獲得其中最大的1000個(騰訊)
- 有一個計時器列表,如何設(shè)計能最快找到最先會被觸發(fā)的計時器(騰訊)
- 如何設(shè)計能夠使vector的中間刪除效率變高(騰訊)
- 有一串字符串怎么找到第一個重復(fù)的字符(騰訊)
- 調(diào)用new和delete時自動加計數(shù)和減計數(shù)(類似shared_ptr),如何實現(xiàn)?(騰訊)
手撕:
- 實現(xiàn)LRU(騰訊、字節(jié)跳動、小騰汽車 Leetcode-146)
- 判斷一棵樹是否為平衡二叉樹(騰訊 Leetcode-110)
- 獲取鏈表的中間結(jié)點(騰訊 Leetcode-876)
- 反轉(zhuǎn)字符串中的單詞(字節(jié)跳動 Leetcode-151)
- 最小路徑和(快手 Leetcode-64)
- 設(shè)計實現(xiàn)一個單例模式(騰訊)
- 判斷一個點是否在三角形內(nèi)(高德地圖)
- 你有兩種攻擊方式:群攻和單攻,且單攻的攻擊力一定比群攻高,已知兩只怪物的血量,求最優(yōu)的攻擊方式使得攻擊次數(shù)最小,要求遞歸與非遞歸兩種實現(xiàn)方式(網(wǎng)易雷火)