面試通知是週三下午兩點,地點在學院實驗樓西樓的一間小機房。
沈舒凝收到簡訊的時候正在圖書館二樓靠窗的老位置,手機在桌上震了一下,她低頭看了一眼,然後下意識地往右手邊看了看——段嘉許不在,桌上只有一臺合著的銀色筆記型電腦,主人大概去上課了。
她收回目光,把通知簡訊又讀了一遍,心跳快了半拍。
週三下午,沈舒凝提前十五分鐘到了實驗樓。機房的門半敞著,裡面傳來敲鍵盤的聲音和壓低了嗓門的交談。她站在門口深吸一口氣,抬手敲了敲門框。
“進。”
是桑延的聲音,但比平時在圖書館裡聽到的少了幾分吊兒郎當,多了一層公事公辦的利落。
沈舒凝推門進去,發現機房裡不止兩個人。段嘉許和桑延坐在第一排的桌子上——不是椅子上,是桌子上,兩個人各踞一方,中間隔著一臺投影儀。旁邊還坐著文娛部的部長許清晏和一個她不認識的研究生模樣的男生,每人面前攤著一疊報名表和評分表。
許清晏看到她進來,笑著招了招手:“舒凝來了,過來坐。”
沈舒凝規規矩矩地走到正中間那張椅子上坐下,把揹包放在腳邊,膝蓋併攏,雙手放在腿上。她今天穿了一件奶白色的圓領毛衣,頭髮紮成了低馬尾,露出一截白淨的脖頸,整個人坐在機房略顯昏暗的光線裡,乾淨得像是跑錯了片場。
桑延翹著腿坐在桌上,居高臨下地看著她,嘴角的笑意在“面試官”和“熟人”之間反覆橫跳。他翻了翻面前的報名表,明知故問地說:“沈舒凝是吧?自我介紹一下。”
沈舒凝點點頭,開口的聲音不大但很穩:“各位學長學姐好,我是計算機科學與技術專業大一的新生,沈舒凝。我想加入演算法與遊戲設計部。”
說完停了一下,然後補充道:“我對遊戲引擎的底層演算法比較感興趣,暑假自學過一部分圖形學和尋路演算法的內容,看過一些開源引擎的原始碼,雖然很多還看不懂,但我想學。”
許清晏挑了挑眉,低頭在評分表上寫了幾個字。
旁邊那個研究生模樣的男生推了推眼鏡,翻出一張紙,開始念題。他叫陳嶼,是研二的,被段嘉許拉來當技術面的工具人。他念題的語氣很平,像在讀天氣預報:“第一題,請簡述A演算法中啟發式函式對尋路效率的影響,並舉例說明什麼情況下A會退化為Dijkstra演算法。”
沈舒凝聽完題,沒有馬上回答。她皺了皺眉,不是被難住了的那種皺眉,而是真的在思考。
她沉默了大概十秒鐘,然後開口,語速不快,但條理清晰:“A的核心在於啟發函式h(n)的選取。當h(n)始終為0的時候,A等價於Dijkstra,需要探索幾乎全部節點才能到達目標。如果h(n)始終小於等於真實代價,就能保證找到最優路徑,但h(n)越小效率越低。而如果h(n)在某些情況下大於真實代價,可能更快找到路徑但不一定是最優解。”
她說到這裡停了一下,像是在腦子裡整理接下來要說的話,然後加了一句自己的理解和延伸:“但我認為在實際的遊戲場景裡,有時候不一定要保證絕對最優路徑,如果在開放世界地圖特別大的情況下,可以考慮接受次優解來換取尋路效率,比如用HPA*做分層尋路。這個思路可能不太適合所有型別的遊戲,但對一些大地圖的RPG來說是可接受的,當然,這只是我作為一個新手的想法。”
機房裡安靜了一瞬。
陳嶼推眼鏡的手指停在了半空中,低頭看了一眼自己手裡的標準答案——標準答案上沒有“HPA*分層尋路”這一條。他轉頭看了段嘉許一眼,眼神里的意思是:這個大一的什麼來頭?
段嘉許沒有看他。他的目光落在沈舒凝身上,手指無意識地轉著手裡的一支筆,表情看起來和平時沒什麼兩樣,但轉筆的動作在沈舒凝說出“次優解”三個字的時候停了一瞬。
桑延倒是毫不掩飾自己的欣賞,首接笑了出來:“小沈同學,你暑假到底看了多少書?”
但這只是開始。
接下來的幾道題,一道比一道刁鑽。陳嶼問了記憶體管理與快取最佳化的問題,沈舒凝回答的角度不是從純理論的層面去背八股,而是結合了她自己寫過的一個小專案的實際體驗。
說到一半她大概是覺得自己的表達不夠首觀,站起來走到旁邊的白板前,拿起記號筆畫了一個簡易的記憶體分配示意圖,用不同顏色的線條標出了快取命中和未命中的路徑。
“不好意思,我畫圖更能說明白。”她畫完之後轉過身,發現對面五個人都在用一種難以形容的目光看著她,她耳朵一紅,以為自己哪裡講錯了,小聲補充了一句,“這些只是我個人的理解,可能不太成熟……”
“沒有,你繼續。”許清晏說。
但真正讓整個面試氛圍發生質變的,是最後一道題。這道題是段嘉許親自出的,陳嶼唸的時候都忍不住先在心裡罵了他一句不是人。








