
前幾天整理硬盤翻出一份2017年網易互娛雷火盤古實習生招聘筆試的回憶版。說實話看到那些題目我愣了好一會兒——倒不是說題目多難而是它考察的內容跟這些年我帶新人時反復強調的東西幾乎完全一致。雷火和盤古的實習生筆試兩個多小時代碼加主觀題看似刷的是題實際上篩的是你有沒有“用游戲工程師或策劃的腦子想問題”。這份真題的價值不在于懷舊而在于它給所有想進游戲大廠做實習的人畫了一條異常清晰的基線哪些底層能力是跑不掉的哪些人就算簡歷再漂亮也會在筆試階段被刷掉。這篇文章不打算逐字復述原題而是把這份真題背后最核心的考察邏輯、知識點分布、解題思路和備考路線拆給你看適合準備投游戲公司技術崗或策劃崗實習的同學也適合想了解游戲行業校招筆試風格的從業者參考。1. 這份筆試題背后的行業信號雷火盤古在篩什么1.1 雷火盤古是什么段位的工作室先把背景交代清楚。網易互娛旗下有多個自研工作室雷火和盤古屬于其中技術沉淀比較深的兩支。雷火后來做《逆水寒》《倩女幽魂》系列盤古則是《天諭》等項目的核心開發力量。這些項目有一個共同點大面積使用自研引擎、重度MMO、強社交、長期運營。這意味著在2017年這兩個工作室招實習生時最緊缺的不是“會寫代碼的人”而是“能理解大型在線游戲實時運行邏輯的人”。理解了這一點你再看那份筆試就覺得一切順理成章。它考的不是大學期末考試那些偏理論的東西而是進入實戰前必須掌握的基礎數據結構、算法、網絡、并發、內存、系統設計。這些東西不是死知識而是在游戲服務器承載壓力、客戶端渲染卡頓、數值體系崩壞時必須立刻拿出來用的工具。所以筆試的卷子看起來像“計算機基礎綜合”實際上每道題都在模擬未來工作里的某個真實瞬間。1.2 從筆試結構反推崗位能力模型那年筆試給我的感覺是分工很明確技術崗和策劃崗基本上是兩個池子。技術崗以編程題和計算機基礎為主策劃崗以邏輯題和方案設計題為主篩人標準完全不同。考察模塊對應能力典型題目方向語言基礎與編程題代碼功底、調試能力手寫數據結構、算法題、鏈表反轉與邊界處理計算機基礎系統級理解力多線程、鎖、內存分配、TCP/UDP區別游戲專項引擎與實時渲染的認知渲染管線、Draw Call、物理碰撞、性能瓶頸定位邏輯與數值策劃邏輯推理、數值敏感度系統規則設計、成長曲線計算、平衡性調整主觀表達策劃結構化表達、創意落地設計一個玩法系統、寫任務文案這張表反過來看就是一份能力自檢清單。你投簡歷之前先對著它過一遍大概率能判斷自己離筆試通過還差多少。很多簡歷很漂亮的同學會栽在這上面因為項目經歷寫得很炫但基本功一旦在筆試里亮出來就露餡了。1.3 為什么2017年的題到現在還有參考價值有人會問2017年的題都過去這么多年了引擎版本換代、移動端崛起、品類從MMO擴展到更多細分方向看老題還有用嗎我的看法是有用而且比看很多花哨的新題更有用。因為這份筆試考察的底層能力幾乎沒有變過數據結構與算法的基本功、對計算機系統的理解深度、以及把復雜游戲問題抽象成工程問題的能力。引擎每年都在變開發流程每年都在變但“一個人能不能寫穩一段代碼、能不能設計一個自洽的系統”這件事不會變。我用一個例子說明那年筆試里有不少場景題比如給一個游戲系統讓你設計數據結構和算法或者給你一段有性能問題的代碼讓你分析。這類題的通用解法放在今天依然成立。所以你現在去翻2017年的筆試回憶不是考古而是看清楚了行業對實習生的底線要求。2. 核心考點拆解筆試到底在考什么2.1 編程題算法與數據結構是絕對主力技術崗的筆試里編程題幾乎是半壁江山。那年流行的考察形式有兩類一類是直接叫你手寫代碼另外一類是給一個游戲場景讓你抽象成算法題再寫。后者更陰險因為很多人能看懂純算法題但一到“把游戲系統轉成算法模型”就懵了。舉幾個那年考過的方向拓撲排序用于技能的依賴關系、任務鏈、科技樹的解鎖順序最短路徑尋路系統、NPC移動、地圖連通性動態規劃背包容量與道具組合、關卡獎勵最大化哈希與鏈表玩家在線狀態管理、熱點數據緩存數據結構設計道具倉庫、拍賣行的訂單簿、服務器分區這里要特別提醒一句手寫代碼和IDE里寫代碼是兩種體驗。筆試的時候沒有自動補全、沒有編譯器提示、甚至可能要在紙上畫。我見過太多人平時刷題全靠IDE輔助一上筆試就節奏崩掉。所以備考時練習手寫代碼這一步絕對不能省。2.2 計算機基礎操作系統與網絡藏在游戲場景里游戲行業尤其是網絡游戲對操作系統和網絡的考察點非常集中。線程與鎖、并發模型、內存管理、TCP/UDP、連接管理、同步機制這些是絕對高頻。有意思的是筆試不會直接問你“進程和線程有什么區別”而是會換個游戲場景來問。例如如果一個MMO服務器同時有上萬玩家在線你會怎么設計玩家消息的廣播邏輯這個問題的本質是在考察你對鎖競爭、隊列、并發讀寫和內存拷貝的理解。再比如客戶端和服務器之間做實時戰斗同步用TCP還是UDP為什么幀同步對抖動敏感這些都是工作里真正會遇到的現實問題。所以備考計算機基礎不要死記硬背要把知識點還原到游戲場景里去理解。你只要能回答出“為什么”筆試的選擇題和簡答題基本都能拿下。2.3 游戲專項渲染、物理與性能優化如果投的是客戶端方向或引擎方向游戲專項知識就是必考。那年的卷子里渲染管線的流程幾乎是必問頂點數據、頂點著色器、光柵化、片元著色器、幀緩沖每一步在干什么哪些步驟貴哪些步驟可以優化。然后是場景管理、視錐剔除、遮擋剔除、LOD這些性能優化手段。還有物理引擎的碰撞檢測、剛體、觸發器以及游戲循環里的Update和FixedUpdate差異。對這些內容的準備我有一個經驗不要只背名詞解釋。能說清楚“Draw Call是什么”不算本事能說出“合批的三種方式和各自失敗的原因”才算真的懂。同樣知道“對象池可以降低GC壓力”不算本事能寫出對象池的線程安全版本并解釋為什么鎖粒度要控制在最小范圍才是筆試想要的答案。如果只是概念掃盲你在筆試的主觀題上會非常吃虧。2.4 策劃崗主觀題沒有標準答案但考察思維方式策劃崗的筆試不像技術崗那樣“非對即錯”但它有自己的評分邏輯。主要考三類邏輯推理題有點像公務員行測但會套游戲背景比如給一段規則讓你推斷某個狀態數值題給一個公式要求算傷害、算成長、算經濟平衡系統/玩法設計題給你一個粗略方向讓你寫出完整可執行的方案這類題最怕的是空泛。我見過大量答案“增加趣味性”“提高玩家粘性”“讓玩家有成就感”這樣的詞堆了一整頁但沒有任何一個具體的數字或規則。其實閱卷人想看到的是一個可以運行的系統目標是誰、規則是什么、獎勵怎么發放、怎么防止玩家鉆空子。你可以設計得簡單但必須自洽。3. 筆試準備實操路線從零到能過筆試的時間線3.1 階段一基礎掃盲提前2-4周不管你是不是科班出身筆試前的基礎掃盲都不能跳。我當時帶過一個非科班的朋友C語法能看懂但一遇到指針和內存就犯迷糊。我給他的方案是第一周專門過C的指針、引用、內存模型、STL容器把每種容器的底層結構和復雜度背熟第二周過操作系統和網絡重點看進程線程、鎖、TCP握手和擁塞控制第三周過數據結構把線性表、樹、圖、哈希表的增刪查改復雜度印在腦子里第四周開始做綜合題。每天的時間分配我建議3小時打底1小時語言和基礎概念1小時刷數據結構題1小時整理筆記。別貪多關鍵是每一塊都吃透。比如今天學鏈表就畫圖、寫代碼、推導復雜度、思考應用場景一次到位。很多同學光是看視頻不落筆看的時候感覺全懂一合上課本全忘這是最典型的無效復習。3.2 階段二刷題與專題突破提前2-3周刷題不要按題庫順序從頭往后刷要按專題刷。我建議的順序是數組與字符串、鏈表與棧隊列、樹與遞歸、圖與搜索、動態規劃與貪心、綜合應用題。每一個專題集中火力連續刷幾天直到這類題型的常用套路都爛熟于心再進入下一個專題。因為筆試題目往往在專題內橫向比較你在一個專題里積累足夠多的變式考試時才能快速識別出題人到底想考什么。刷題的時候有三件事必須做否則等于白刷每道題寫完后用一行話說明它的時間復雜度和空間復雜度主動找邊界條件空輸入、只有一個元素、元素全部相同、數值溢出第二天不看答案把前一天做錯的題重新寫一遍這三件事看起來笨但非常有效。因為筆試考的不是你“見過”多少題而是你“能獨立寫出”多少題。第一遍看懂別人的解法不算會第二天默寫出來才算真正吸收。3.3 階段三模擬筆試與復盤考前1-2周考前兩周一定要做至少三次完整的模擬筆試。什么是完整的嚴格2小時倒計時、沒有IDE補全、用一個純文本編輯器或者白紙模擬真實的緊張感。做完之后立刻復盤把每道題的時間分配、卡殼點、寫錯的地方全部記錄下來。復盤的質量直接決定你考場上能不能把時間花在刀刃上。復盤的方式我推薦一個很笨但很有用的方法把自己的答題過程當作別人寫的代碼去review一行一行看找到每一處“當時想當然”的地方。你會發現絕大多數丟分不是因為不會做而是因為審題不清、邊界條件漏判、時間分配失衡。這些都能靠模擬暴露出來。我當年帶過的人里凡是認真做了三輪模擬的筆試通過率明顯比只刷題不模擬的高出一截。3.4 一份拿來即用的資源清單書和資料不用太多關鍵是用透幾本。《數據結構與算法分析》把每個數據結構的手寫實現過一遍《劍指Offer》或同類刷題書面試和筆試題型的經典集錦《深入理解計算機系統》操作系統和內存部分的硬核補充《游戲引擎架構》客戶端方向必備重點是渲染和性能優化章節牛客網筆試專區找到近年游戲公司筆試題做限時模擬另外建議整理一份屬于自己的“錯題集”。不需要多精美Excel或者Markdown都行記錄題型、錯誤原因、正確思路。考前最后一天不刷新題只看錯題集。這個動作看起來很輕但能讓你的大腦在考前保持對易錯點的警覺比臨時抱佛腳刷幾十道新題更有用。4. 實戰環節代表性題型的解題思路演示這一部分我來演示幾個套路的實際解法。題目的具體描述根據考生回憶整理不是逐字原題但考察方向和解題思路是通用的你可以照樣搬到考場上。4.1 算法場景題技能依賴系統與拓撲排序典型的問法是這樣的游戲里有個科技樹每個技能可能依賴若干個前置技能現在給你一張技能表與依賴關系要求輸出一個合法的學習順序。這道題的本質就是有向無環圖DAG的拓撲排序。解法很明確把每個技能看成節點依賴關系看成有向邊。維護每個節點的入度把所有入度為0的節點放入隊列依次彈出并將鄰接節點入度減一當某個節點入度變為0時繼續入隊。最后如果彈出的節點數量等于技能總數說明這是一個合法的學習順序否則說明存在循環依賴設計上就有問題。vectorint topoSort(int n, vectorvectorint edges) { vectorvectorint g(n); vectorint indeg(n, 0); for (auto e : edges) { g[e[0]].push_back(e[1]); indeg[e[1]]; } queueint q; for (int i 0; i n; i) if (indeg[i] 0) q.push(i); vectorint res; while (!q.empty()) { int u q.front(); q.pop(); res.push_back(u); for (int v : g[u]) if (--indeg[v] 0) q.push(v); } return res.size() n ? res : vectorint(); }提示筆試時不要只丟代碼建議在旁邊附一句話說明你的思路閱卷人能更快get到你的點這也是拿過程分的關鍵。這道題的時間復雜度是O(VE)空間復雜度O(VE)。它考察的是你是否能把一個“游戲系統邏輯”快速抽象成數據結構問題并且熟悉經典算法的變式。如果題干改成“輸出所有可能的學習順序”那就需要結合回溯法你要能立刻反應過來問法變了算法核心也要跟著變。4.2 服務器場景題對象池設計與內存分配另一個高頻方向是對象池。題目常以“服務器在戰斗中頻繁創建和銷毀子彈/技能特效對象導致GC壓力很大你會怎么優化”出現。這類題沒有標準到能對答案的代碼但考察的深度非常明確。對象池的核心理念是復用預分配一批對象用的時候從池里取用完了還回池里不做真正的銷毀。實現上需要一個并發安全的容器和一個狀態標記。這里要特別注意鎖的粒度如果每次取都加全局鎖高并發下鎖競爭反而會成為新瓶頸。更穩妥的做法是thread-local池或分片鎖每個線程維護自己的空閑列表線程間再通過一個低頻的全局通道做對象回收。這樣做的本質是用空間換時間把鎖競爭從高頻路徑挪到低頻路徑。這樣的追問往往沒有標準答案但閱卷人眼里會有一個明確層級能答出對象池概念是第一層能指出鎖競爭問題的是第二層能給出分片或thread-local方案的是第三層。你在筆試現場答得越靠后分越高。答題時如果時間充裕甚至可以把核心的acquire和release偽代碼寫出來讓閱卷人直觀看到你的實現思路。4.3 策劃題設計一個好友助戰系統策劃崗的題型我來示范一個系統設計題的答題框架。假設題目是“為一個MMO設計好友助戰系統”不要急著寫設定先拆解目標這個系統是為了拉活躍、拉社交、還是拉付費不同的目標會推導出完全不同的規則。我建議的答法是這樣的核心規則玩家可以借用好友的角色參與限定次數的日常副本每人每天最多助戰3次助戰角色不能用于PVP只用于PVE獎勵與損耗被助戰方消耗助戰次數助戰方獲得友情點友情點可以兌換體力或養成材料。這里要放一個衰減公式比如前3次每次給10點之后每次減半最低給1點防止無限刷風險與反作弊同設備或同IP的判定機制對異常頻繁的助戰關系做收益遞減處理后續擴展助戰獎勵與好友親密度掛鉤引入助戰排行或助戰成就為后續社交裂變留口子這套框架的好處是閉環有目標、有規則、有數字、有反作弊、有延展。哪怕你的數值設計得不是最優至少展示了你具備完整思考一款玩法的能力。空泛的描述在閱卷人那里一分都拿不到因為策劃崗要的就是能落地的方案。4.4 考場時間分配與答題策略最后說考場策略。拿到卷子先花3到5分鐘把整張卷子瀏覽一遍標注題目難度心里有個優先級。我建議的順序是先做會做的、分值高的編程題再做簡答題最后啃硬骨頭。不會做的題千萬不要空著把你想到的解題思路、復雜度、甚至偽代碼都寫上。筆試閱卷不是單純對答案你展示的思考過程本身就能掙過程分。手寫代碼時要從左往右寫變量命名清晰處理好空指針和數組越界。不需要上機跑通級別但要讓閱卷人一眼看出你的代碼在邏輯上是完整的。很多考生在考場上一緊張就開始亂涂亂畫卷面一團糟哪怕思路對也不容易拿分。保持卷面干凈、分段明確是一個成本極低但收益很高的加分動作。5. 踩坑記錄與常見失分點盤點5.1 失分點1代碼細節和邊界條件先說最常見的失分點邊界條件。筆試現場時間緊很多人寫完主體邏輯就不管了覺得能跑通就行。但恰恰是那些空輸入、單個元素、數據量很大的case最容易翻車。比如實現一個鏈表反轉節點為null或者只有一個節點這兩種情況必須單獨處理。再比如用int做加法時要考慮溢出。這類問題不是你不會而是答題習慣不好。解決辦法很簡單每次寫完代碼在代碼前先列三個邊界輸入用注釋的形式寫清楚預期結果。比如鏈表反轉那道題先寫// null - null、// 1 - 1、// 1-2-3 - 3-2-1再寫實現。這樣做有兩個好處一是提醒自己別漏邊界二是閱卷人能看到你有邊界意識這在評分時非常加分。5.2 失分點2只寫結論不寫過程第二種很可惜的失分方式答案寫得很肯定但完全沒有推導過程。算法題寫了結果卻不寫復雜度分析策劃題給了方案卻不解釋為什么這么做。筆試和期末考不一樣閱卷人更想看到你的思維鏈路而不是一個結論。我見過一個很典型的例子一道優化題答案就寫了三個字“用緩存”。看似沒錯但不給緩存什么、什么時候失效、內存開銷多大、怎么保證一致性這等于沒答。如果寫成“使用LRU緩存熱點玩家數據鍵為玩家ID容量限制10000命中率估算約70%淘汰策略基于訪問時間”一樣的概念分數卻完全不同。記住一個原則每個結論后面至少跟一句“因為”或“所以”。5.3 失分點3游戲引擎知識只背概念游戲專項題里背概念的人特別多。比如問“怎么減少Draw Call”很多人脫口而出“合批、LOD、遮擋剔除”但如果追一句“合批需要滿足哪些條件”很多人就答不上來了。合批要求材質相同、貼圖相同最好模型頂點格式也要一致任何一項不滿足合批就會失敗甚至可能因為狀態切換反而變慢。這種細節才是閱卷人想看到的。準備這個方向建議不要只啃書可以打開引擎的Profiler實際看一下或者去看引擎的官方文檔和開發者大會的技術分享。看到真實數據你對概念的理解會立刻上一個臺階。面試時如果面官追問你實際經驗你也可以拿Profiler里的具體數據說話比單純背書有說服力得多。5.4 失分點4策劃崗答題空泛策劃崗最怕的就是空泛。我前面反復強調現在用例子說透。如果題目問“設計一個簽到系統”初級答案是“給玩家每天登錄發獎勵連續簽到有更多獎勵”。這個答案問題在于沒有任何數字和規則來約束它。稍微好一點的答案是“設定7天一個周期第7天給稀有獎勵中斷后從第1天重新計算獎勵呈指數遞增”。再深入一點會考慮“獎勵遞增過快會拉大肝度和氪度差距所以第5天到第6天的獎勵增幅要放緩讓核心付費玩家和非付費玩家都在舒適區內”。策劃筆試不是創意大賽是邏輯考試。你的設計可以不出彩但必須閉環不能留坑。每個規則都要經得起追問玩家會怎么利用這個規則最極端的玩家會怎樣把這幾個問題想清楚你的答題深度就自然上來了。5.5 筆試后的復盤與面試銜接最后說一個很多人忽視的點筆試結束不等于這件事結束了。每次筆試完趁記憶還熱把題目和你的答案記錄到錯題本里每道題標注考察的知識點和你的失誤點。這件事有兩個直接好處。第一下次筆試前你有了私人定制的高頻考點清單效率比盲目復習高一倍。第二面試環節面官經常拿著你的筆試卷來問你提前復盤過就能在面試里清晰地講出“我當時為什么這么寫其實還有更好的思路”。這種主動承認不足并給出改進方案的回答非常加分。每年都有考生筆試沒過但因為復盤認真、態度誠懇被調劑到其他組去補面這種事情并不罕見。說起來我帶過的實習生里能拿到雷火盤古最終Offer的幾乎都有一個共同點他們不把筆試當成一次考試而是當成一次和項目組對話的機會。卷子上的每一道題其實都在幫你理解未來的工作場景你要處理大量并發、要設計自洽的系統、要在壓力下保持邏輯清楚。你自己平時有沒有真的寫過代碼、推演過設計在這樣的筆試里是藏不住的。所以與其研究怎么“過”不如按照這份考察地圖踏踏實實把底子打牢哪怕這次沒過下次一定會有明顯進步。一個人適不適合做游戲行業往往不是看他懂多少新名詞而是看他能不能把手頭的東西想透、做穩這一點在我這些年帶人的經歷里從來沒變過。