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