2023春招技術(shù)崗B卷復(fù)盤(pán):算法與計(jì)算機(jī)基礎(chǔ)考點(diǎn)解析)
春招的戰(zhàn)場(chǎng)上筆試往往比簡(jiǎn)歷更早替你說(shuō)話。2023屆伴魚(yú)春季校園招聘技術(shù)崗B卷我是在一個(gè)周六的下午打開(kāi)它的。當(dāng)時(shí)身邊的同學(xué)都在投在線教育、工具類App的公司伴魚(yú)在少兒英語(yǔ)賽道里技術(shù)口碑一直不錯(cuò)所以這份卷子我做得格外認(rèn)真。做完整張卷子我的感受是它不像很多大廠那樣上來(lái)就甩一堆偏題怪題而是很克制地在考察“你作為一個(gè)工程師基礎(chǔ)到底扎不扎實(shí)”。這篇文章我想從這套B卷出發(fā)把技術(shù)崗筆試的題型結(jié)構(gòu)、考點(diǎn)分布、算法題的思考路徑以及我在實(shí)際做題過(guò)程中的時(shí)間分配和踩坑經(jīng)歷完整地拆開(kāi)講一遍。無(wú)論你明年要投伴魚(yú)還是準(zhǔn)備其他教育科技公司的技術(shù)崗這份復(fù)盤(pán)應(yīng)該都能給你一些參考。1. 先認(rèn)識(shí)B卷一次技術(shù)筆試到底在篩選什么1.1 為什么會(huì)有A卷B卷之分很多同學(xué)第一次看到“B卷”兩個(gè)字就緊張總覺(jué)得是不是比A卷難或者是被調(diào)劑了。實(shí)際上在校園招聘里A卷和B卷通常是為了防止同一時(shí)間筆試的考生互相傳答案。伴魚(yú)在2023屆春招的技術(shù)崗筆試中設(shè)置了多套試卷題目難度和考察范圍基本一致只是題目順序、具體輸入輸出樣例做了差異化。所以B卷并不是“備胎卷”也不是“勸退卷”它就是把同一場(chǎng)人才篩選拆成了幾套平行題目而已。我當(dāng)時(shí)拿到B卷的時(shí)候系統(tǒng)上明確標(biāo)注了考試時(shí)間、題目數(shù)量和總分結(jié)構(gòu)。這里我要提醒一下筆試開(kāi)始前5分鐘一定要把考試說(shuō)明讀完。有些同學(xué)一上來(lái)就寫(xiě)代碼寫(xiě)到一半才發(fā)現(xiàn)這套卷子有選擇題限時(shí)、編程題有部分分機(jī)制節(jié)奏就亂了。伴魚(yú)的B卷我記得是“選擇題 編程題”的組合模式選擇題覆蓋計(jì)算機(jī)基礎(chǔ)編程題考察算法和代碼落地能力。1.2 伴魚(yú)技術(shù)崗筆試的考察定位在拆解具體題目之前我覺(jué)得有必要先理解伴魚(yú)這類教育科技公司的技術(shù)筆試到底在篩什么人。少兒英語(yǔ)產(chǎn)品有大量的音視頻互動(dòng)、課程推薦、用戶行為分析、服務(wù)端高并發(fā)場(chǎng)景所以技術(shù)團(tuán)隊(duì)對(duì)候選人的要求集中在三個(gè)方面計(jì)算機(jī)基礎(chǔ)扎實(shí)不扎實(shí)、寫(xiě)代碼能不能落地下來(lái)的工程能力、以及面對(duì)一個(gè)沒(méi)有標(biāo)準(zhǔn)答案的真實(shí)問(wèn)題時(shí)能不能拆解清楚。所以整份B卷給我的感覺(jué)就是它不追求讓你在某個(gè)冷門(mén)知識(shí)點(diǎn)上“見(jiàn)多識(shí)廣”而是反復(fù)考察幾個(gè)核心領(lǐng)域——數(shù)據(jù)結(jié)構(gòu)、常見(jiàn)算法、操作系統(tǒng)、網(wǎng)絡(luò)基礎(chǔ)、數(shù)據(jù)庫(kù)常識(shí)。這其實(shí)是一件好事因?yàn)閭淇挤较蚍浅C鞔_你不需要去背一大堆偏門(mén)八股文把主干知識(shí)點(diǎn)吃透成績(jī)就不會(huì)差。筆試真正的篩選邏輯不是看你“做過(guò)什么”而是看你在有限時(shí)間內(nèi)能不能穩(wěn)定輸出。這和高考類似題目本身不一定難到做不出來(lái)但時(shí)間壓力、心理壓力、輸入輸出格式的細(xì)節(jié)都會(huì)把水平相近的人拉開(kāi)差距。所以我一直建議學(xué)弟學(xué)妹把筆試當(dāng)成一次“限時(shí)工程實(shí)踐”來(lái)對(duì)待而不是把它當(dāng)成期末考。2. 題型解構(gòu)與考點(diǎn)地圖B卷的高頻考察點(diǎn)2.1 常見(jiàn)題型與分值分布技術(shù)崗筆試的題型一般不會(huì)太花哨伴魚(yú)2023屆春招技術(shù)崗B卷整體上分兩個(gè)部分第一部分是客觀題包括單選和多選覆蓋計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)第二部分是編程題通常是兩到三道算法題總分占比最高??陀^題部分拼的是平時(shí)積累和考前背誦的熟練度編程題部分拼的是讀題、建模、編碼、調(diào)試的綜合能力。從我實(shí)際做題的經(jīng)驗(yàn)來(lái)看客觀題部分不能拖太久。有些同學(xué)遇到一道模糊的多選題反復(fù)糾結(jié)一糾結(jié)就是五分鐘等做到編程題的時(shí)候時(shí)間已經(jīng)用了三分之一。我當(dāng)時(shí)的策略是客觀題每道題最多90秒不會(huì)的先標(biāo)記做完編程題之后再回頭慢慢推敲。這里有個(gè)小技巧在線筆試系統(tǒng)一般都有“標(biāo)記待定”的功能進(jìn)場(chǎng)之后先花30秒熟悉界面布局別等到做題時(shí)再手忙腳亂。分值分布上編程題永遠(yuǎn)是C位。說(shuō)實(shí)話客觀題做得再好編程題AC不了兩道以上進(jìn)面試的希望都不大。原因很簡(jiǎn)單客觀題考察的是“你知道什么”編程題考察的是“你能做出什么”后者才是工程師崗位最核心的能力。2.2 算法與數(shù)據(jù)結(jié)構(gòu)是絕對(duì)重點(diǎn)我復(fù)盤(pán)了這份B卷的考點(diǎn)再結(jié)合2023屆春招其他教育科技公司的卷子發(fā)現(xiàn)算法題的高頻考點(diǎn)其實(shí)非常集中。數(shù)組和字符串操作是基礎(chǔ)操作基本每次筆試都有鏈表、棧、隊(duì)列屬于必拿分的題二叉樹(shù)的相關(guān)操作比如層序遍歷、最近公共祖先、路徑和等出現(xiàn)的概率極高動(dòng)態(tài)規(guī)劃幾乎是中等難度以上的題標(biāo)配貪心算法、回溯算法、哈希表優(yōu)化也都是??汀0轸~(yú)這套B卷的算法題有一個(gè)特點(diǎn)題干通常會(huì)用業(yè)務(wù)場(chǎng)景來(lái)包裝比如給用戶上課記錄、課程包依賴關(guān)系但剝掉業(yè)務(wù)外殼之后內(nèi)核還是經(jīng)典的算法模型。所以我在備考時(shí)一直強(qiáng)調(diào)一件事就是不要被題干的“故事”帶走讀題時(shí)第一時(shí)間把輸入輸出抽象成數(shù)據(jù)結(jié)構(gòu)再判斷它屬于哪一類算法題。這個(gè)能力不是天生的需要平時(shí)刷題時(shí)有意識(shí)訓(xùn)練。如果你現(xiàn)在還在算法題“看答案都會(huì)自己寫(xiě)就廢”的階段別慌這是正常的過(guò)程。我當(dāng)時(shí)是先把LeetCode熱題HOT 100按標(biāo)簽刷了兩遍第一遍不看題解硬寫(xiě)寫(xiě)不出來(lái)就標(biāo)記第二遍集中攻克標(biāo)記過(guò)的題。這個(gè)過(guò)程比追求刷題數(shù)量重要得多因?yàn)楣P試考的是“能不能在壓力下獨(dú)立寫(xiě)出來(lái)”而不是“看沒(méi)看過(guò)這道題”。2.3 計(jì)算機(jī)基礎(chǔ)與工程能力考察客觀題部分計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫(kù)是三大主力。計(jì)算機(jī)網(wǎng)絡(luò)喜歡考TCP三次握手和四次揮手、HTTP狀態(tài)碼、TCP與UDP的區(qū)別、DNS解析過(guò)程。操作系統(tǒng)喜歡考進(jìn)程與線程的區(qū)別、死鎖產(chǎn)生的條件與處理、虛擬內(nèi)存、進(jìn)程調(diào)度算法。數(shù)據(jù)庫(kù)喜歡考索引失效場(chǎng)景、事務(wù)的ACID特性、隔離級(jí)別、B樹(shù)結(jié)構(gòu)、慢查詢優(yōu)化思路。這些知識(shí)點(diǎn)看起來(lái)瑣碎但有一個(gè)共同特點(diǎn)它們都是實(shí)際開(kāi)發(fā)中每天會(huì)遇到的“底層邏輯”。比如你在做接口聯(lián)調(diào)時(shí)遇到超時(shí)排查順序必然是先看網(wǎng)絡(luò)層再查服務(wù)端日志再看數(shù)據(jù)庫(kù)慢查詢。這套思維方式和筆試考的內(nèi)容完全一致??陀^題里還偶爾會(huì)出現(xiàn)一些代碼閱讀題給你一段C或者Java代碼讓你寫(xiě)出運(yùn)行結(jié)果或者判斷是否會(huì)出現(xiàn)編譯錯(cuò)誤。這類題考察的是對(duì)語(yǔ)言特性的掌握踩坑點(diǎn)往往集中在值傳遞與引用傳遞、靜態(tài)變量與實(shí)例變量的初始化順序、try-catch-finally的return順序、String與StringBuilder的區(qū)別等。這些細(xì)節(jié)平時(shí)寫(xiě)業(yè)務(wù)代碼不會(huì)太在意但筆試就是要把這些“禿頭細(xì)節(jié)”挖出來(lái)考一考。3. 算法題的底層方法論把B卷的編程題拆開(kāi)看3.1 題目讀懂比寫(xiě)代碼更重要我見(jiàn)過(guò)太多同學(xué)看到算法題腦子里第一時(shí)間想的是“這道題我是不是見(jiàn)過(guò)”然后直接套模板開(kāi)寫(xiě)。這種情況在簡(jiǎn)單題上沒(méi)什么問(wèn)題但到了中等題以上的難度十有八九會(huì)寫(xiě)歪。我自己的習(xí)慣是花5分鐘讀題2分鐘在草稿紙上畫(huà)出題目給出的樣例輸入輸出搞清楚每一步的變換過(guò)程再動(dòng)筆寫(xiě)代碼。舉個(gè)例子如果題目里給出一個(gè)課程依賴關(guān)系數(shù)組要求你判斷能否完成所有課程的學(xué)習(xí)這本質(zhì)上就是一個(gè)拓?fù)渑判騿?wèn)題。但如果你不去畫(huà)依賴圖不去模擬一遍樣例直接憑感覺(jué)寫(xiě)并查集就會(huì)漏掉“環(huán)”的判斷。很多同學(xué)AC不了不是不會(huì)拓?fù)渑判蚨歉緵](méi)看出來(lái)題目在考拓?fù)渑判?。所以這里我分享一下我的讀題三步法第一步看輸入輸出格式確定數(shù)據(jù)結(jié)構(gòu)。輸入是一維數(shù)組、二維數(shù)組、還是字符串往往直接決定了算法的選擇方向。第二步用題目給的樣例手工推演一遍確保自己完全理解題意的變換過(guò)程。第三步思考邊界情況數(shù)組為空、只有一個(gè)元素、數(shù)據(jù)量極大這些情況是不是必須特殊處理。這套流程熟練之后讀題時(shí)間會(huì)大幅下降而且寫(xiě)出來(lái)的代碼邊界要穩(wěn)健得多。筆試的判題系統(tǒng)里真正讓你丟分的不一定是核心邏輯反而是各種邊界條件。3.2 暴力解到最優(yōu)解的思考路徑筆試和面試有一個(gè)很大的區(qū)別面試的時(shí)候面試官會(huì)引導(dǎo)你一步一步從暴力解優(yōu)化到最優(yōu)解考察你的思維過(guò)程但筆試面對(duì)的是一個(gè)冰冷的判題系統(tǒng)它只看你提交的代碼能不能在規(guī)定時(shí)間和內(nèi)存內(nèi)通過(guò)所有測(cè)試用例。很多同學(xué)的誤區(qū)是“一道題要么AC要么0分”。實(shí)際上筆試系統(tǒng)一般按照通過(guò)的測(cè)試用例比例給部分分。所以你即使想不出最優(yōu)解先把暴力解寫(xiě)出來(lái)也能拿到一部分分?jǐn)?shù)。我在做B卷的時(shí)候策略就是如果一道題5分鐘內(nèi)沒(méi)有任何最優(yōu)解思路立刻用最粗暴的方式先寫(xiě)一版能跑通小規(guī)模數(shù)據(jù)的代碼保證拿到部分分然后在這個(gè)基礎(chǔ)上再考慮優(yōu)化。以“最長(zhǎng)無(wú)重復(fù)子串”這道經(jīng)典題為例暴力解是枚舉所有子串判斷每個(gè)子串是否有重復(fù)字符時(shí)間復(fù)雜度O(n^2)。這個(gè)思路肯定能過(guò)小數(shù)據(jù)用例但大數(shù)據(jù)用例會(huì)超時(shí)。優(yōu)化思路是用滑動(dòng)窗口加哈希表把時(shí)間復(fù)雜度降到O(n)——窗口右側(cè)不斷擴(kuò)展遇到重復(fù)字符就移動(dòng)左側(cè)窗口同時(shí)更新哈希表中字符的最新位置。這類“暴力解到最優(yōu)解”的思考路徑是筆試中最值錢(qián)的能力。平時(shí)刷題時(shí)不要只看一遍題解就劃走要把“為什么能優(yōu)化”“優(yōu)化的關(guān)鍵變量是什么”弄明白。這樣哪怕筆試碰到原題變形你也能通過(guò)思考路徑找到最優(yōu)解法。3.3 邊界條件與代碼質(zhì)量代碼質(zhì)量是筆試中很容易被忽略的隱性評(píng)分項(xiàng)。在線判題系統(tǒng)確實(shí)只看輸出結(jié)果但如果你的代碼里有明顯的內(nèi)存泄漏比如用了C/C卻不做內(nèi)存釋放、沒(méi)有處理空指針、循環(huán)里有多余的重復(fù)計(jì)算這些問(wèn)題在某些用例下就會(huì)變成超時(shí)或異常。我在做B卷編程題時(shí)會(huì)刻意遵守幾個(gè)代碼規(guī)范變量命名要有語(yǔ)義。直接用i、j、k寫(xiě)循環(huán)沒(méi)問(wèn)題但核心狀態(tài)變量至少要能看懂是什么意思萬(wàn)一代碼調(diào)不通調(diào)試時(shí)能快速定位。關(guān)鍵邏輯寫(xiě)注釋。不是每行都寫(xiě)注釋而是在算法核心步驟那里寫(xiě)兩行說(shuō)明方便自己檢查思路是否符合題意。寫(xiě)完代碼后手動(dòng)模擬一遍樣例輸入。這一步能攔截掉大部分手誤問(wèn)題比如數(shù)組越界、指針錯(cuò)位、循環(huán)條件寫(xiě)錯(cuò)等。我自己就有一次真實(shí)教訓(xùn)筆試時(shí)寫(xiě)二叉樹(shù)層序遍歷核心邏輯全對(duì)但把隊(duì)列的offer和poll方法用混了導(dǎo)致節(jié)點(diǎn)訪問(wèn)順序錯(cuò)誤。當(dāng)時(shí)如果花30秒手動(dòng)模擬一下樣例立刻就能發(fā)現(xiàn)。所以不要過(guò)度依賴編譯器幫你檢查養(yǎng)成“寫(xiě)完代碼先在腦子里跑一遍樣例”的習(xí)慣會(huì)省下很多無(wú)效提交次數(shù)。4. 筆試現(xiàn)場(chǎng)的節(jié)奏控制與實(shí)戰(zhàn)復(fù)盤(pán)4.1 時(shí)間分配策略以伴魚(yú)B卷常見(jiàn)的“客觀題 編程題”結(jié)構(gòu)為例如果整場(chǎng)考試時(shí)間是90分鐘我通常會(huì)這樣分配前10分鐘快速瀏覽全卷。了解客觀題數(shù)量、編程題數(shù)量、每道題目的分值做到心里有數(shù)。中間35分鐘完成客觀題。遇到不會(huì)的先標(biāo)記跳過(guò)不在單題上過(guò)度糾結(jié)。這個(gè)階段的目標(biāo)是快而穩(wěn)正確率優(yōu)先。后40分鐘主攻編程題。先做自己最有把握的題保證AC一道是一道再啃難度更高的題。最后5分鐘檢查。檢查提交狀態(tài)、客觀題標(biāo)記項(xiàng)處理遺漏。這個(gè)時(shí)間分配不是死的你可以根據(jù)自己實(shí)際情況微調(diào)。但核心原則是不要在前面的客觀題上消耗過(guò)多精力導(dǎo)致后面能拿分的編程題沒(méi)有時(shí)間做。編程題的分值密度通常是客觀題的好幾倍拿編程題的確定性收益永遠(yuǎn)優(yōu)于摳客觀題的不確定收益。4.2 做題順序與取舍做題順序是筆試策略里特別重要的一環(huán)。我見(jiàn)過(guò)有人拿到卷子先做第一道編程題一做就是四十分鐘最后后面的編程題完全沒(méi)時(shí)間碰。這種策略非常冒險(xiǎn)因?yàn)槟悴⒉磺宄谝坏李}是不是整套卷子里最難的。我的建議是做題順序遵循“先易后難、先分高后分低”的原則先看所有編程題的題干憑經(jīng)驗(yàn)快速判斷每道題的難度等級(jí)。先做最有把握的那道拿到AC讓自己迅速進(jìn)入狀態(tài)建立信心。再做第二有把握的題爭(zhēng)取再拿一道AC。最后剩下的時(shí)間用來(lái)攻克最難的那道即使AC不了也要寫(xiě)出暴力解拿部分分。實(shí)際做伴魚(yú)B卷時(shí)我遇到的最理想情況是第一道編程題是數(shù)組加雙指針的模型思路清晰15分鐘AC第二道是二叉樹(shù)遍歷的變種考慮了一會(huì)兒25分鐘AC第三道動(dòng)態(tài)規(guī)劃題一開(kāi)始沒(méi)找到狀態(tài)轉(zhuǎn)移方程先用暴力搜索拿了部分分最后花了10分鐘想到了記憶化搜索的優(yōu)化方式順利AC。這個(gè)過(guò)程就是我上面說(shuō)的“先易后難、先拿穩(wěn)再攻堅(jiān)”策略的實(shí)戰(zhàn)演示。4.3 從筆試題反推崗位能力模型筆試做完之后我養(yǎng)成了一個(gè)習(xí)慣把卷子里的考點(diǎn)和實(shí)際工作場(chǎng)景做映射。這個(gè)習(xí)慣幫我很多因?yàn)槎噍喢嬖嚴(yán)锏捻?xiàng)目深挖、系統(tǒng)設(shè)計(jì)題往往就源自筆試中的那些核心知識(shí)點(diǎn)。比如伴魚(yú)這種在線教育公司系統(tǒng)面對(duì)的核心場(chǎng)景是用戶集中在上課高峰期訪問(wèn)需要支撐高并發(fā)課程內(nèi)容包含大量音視頻對(duì)網(wǎng)絡(luò)傳輸和客戶端性能有要求用戶行為數(shù)據(jù)需要實(shí)時(shí)分析用來(lái)做課程推薦和教學(xué)優(yōu)化。這些業(yè)務(wù)場(chǎng)景對(duì)應(yīng)到技術(shù)棧上就是高性能服務(wù)端開(kāi)發(fā)、CDN與網(wǎng)絡(luò)優(yōu)化、大數(shù)據(jù)處理與實(shí)時(shí)計(jì)算。筆試考察的TCP擁塞控制、進(jìn)程線程模型、索引優(yōu)化、算法復(fù)雜度分析全部是這些場(chǎng)景的底層支撐。所以準(zhǔn)備筆試本質(zhì)上是在倒逼自己把計(jì)算機(jī)基礎(chǔ)重新過(guò)一遍。這比“為了刷題而刷題”的備考視角要有意義得多。當(dāng)你把這些知識(shí)點(diǎn)放進(jìn)真實(shí)業(yè)務(wù)場(chǎng)景里去理解而不是死記硬背概念你會(huì)發(fā)現(xiàn)客觀題也變簡(jiǎn)單了——因?yàn)槟憷斫饬艘粋€(gè)東西為什么這樣設(shè)計(jì)記憶自然就牢固了。5. 常見(jiàn)問(wèn)題與避坑經(jīng)驗(yàn)實(shí)錄5.1 筆試中遇到的典型問(wèn)題每次幫學(xué)弟學(xué)妹輔導(dǎo)筆試我發(fā)現(xiàn)他們的問(wèn)題高度相似我整理了一份高頻問(wèn)題清單分享給大家問(wèn)題一客觀題反復(fù)糾結(jié)浪費(fèi)大量時(shí)間。解決方案是標(biāo)記跳過(guò)等做完編程題再回看往往心態(tài)放松之后反而更容易判斷。問(wèn)題二編程題拿到手不建模直接寫(xiě)代碼寫(xiě)到一半發(fā)現(xiàn)思路不對(duì)只能推倒重來(lái)。解決方案是養(yǎng)成先寫(xiě)偽代碼、再寫(xiě)正式代碼的習(xí)慣。問(wèn)題三代碼提交后發(fā)現(xiàn)數(shù)組越界但自己怎么都看不出來(lái)。解決方案是寫(xiě)代碼時(shí)特別留意循環(huán)邊界條件尤其是等于號(hào)的加與不加。問(wèn)題四對(duì)輸入輸出格式理解錯(cuò)。有些題目要求多組輸入有些要求輸出結(jié)果之間用空格還是換行分隔細(xì)節(jié)搞錯(cuò)了照樣AC不了。問(wèn)題五心浮氣躁AC不了就心態(tài)崩了影響后續(xù)題目發(fā)揮。解決方案是告訴自己“筆試只是面試的敲門(mén)磚”盡力拿到能拿的分快速翻篇。其中輸入輸出格式這個(gè)問(wèn)題我特別想多說(shuō)一句。LeetCode上的題目都是核心代碼模式你只需要實(shí)現(xiàn)一個(gè)函數(shù)就行但很多校招筆試用的是ACM模式需要自己寫(xiě)完整的輸入解析和輸出邏輯。如果不提前熟悉??途W(wǎng)那套筆試系統(tǒng)的輸入輸出寫(xiě)法會(huì)非常吃虧。務(wù)必在筆試開(kāi)始前用??途W(wǎng)或賽碼網(wǎng)上的OJ題練一練在線編程模式尤其是讀取整行字符串、處理按空格分割的整數(shù)數(shù)組、處理多行輸入這幾個(gè)基本功必須過(guò)一遍。5.2 獨(dú)家避坑清單接下來(lái)這份避坑清單是我在多次筆試中踩過(guò)坑之后總結(jié)出來(lái)的。每一行都是用真實(shí)教訓(xùn)換來(lái)的編譯器版本不同語(yǔ)法支持也不同。有的筆試系統(tǒng)只能用C11你用C17的語(yǔ)法特性寫(xiě)代碼編譯直接報(bào)錯(cuò)。太新的語(yǔ)言特性能不用就不用。全局變量重置問(wèn)題。有些題目有多組測(cè)試數(shù)據(jù)如果你用全局變量存儲(chǔ)中間結(jié)果下一組數(shù)據(jù)跑的時(shí)候沒(méi)有初始化結(jié)果必然出錯(cuò)。每次處理新的測(cè)試數(shù)據(jù)前記得把全局變量清空。不要用遞歸深度過(guò)大的解法。筆試系統(tǒng)對(duì)棧深度有限制遞歸層級(jí)太深會(huì)直接爆棧。遇到樹(shù)和圖的問(wèn)題優(yōu)先考慮迭代解法或者把遞歸改成顯式棧。大數(shù)據(jù)量輸入時(shí)不要用Scanner逐行讀性能太差。在Java里用BufferedReader在C里用scanf或者關(guān)閉同步的cin寫(xiě)出來(lái)更穩(wěn)妥。提交之前檢查代碼文末是否有多余的空格或換行。有些判題系統(tǒng)對(duì)輸出格式的空白字符極其敏感多一個(gè)空格都不行。這些坑看起來(lái)都很小但每一件都真實(shí)存在任一個(gè)踩中都會(huì)讓你丟分。我甚至見(jiàn)過(guò)有同學(xué)因?yàn)镾canner讀數(shù)據(jù)太慢被大數(shù)據(jù)量用例直接判超時(shí)的。所以平時(shí)練習(xí)時(shí)就按照筆試的輸入輸出格式來(lái)寫(xiě)形成肌肉記憶考試時(shí)就不容易翻車。5.3 面試前我建議你再做一遍的事筆試如果順利通過(guò)接下來(lái)就是面試環(huán)節(jié)。很多同學(xué)筆試完就把試卷丟在一邊這是非??上У?。我強(qiáng)烈建議你在收到面試通知之后把筆試的題目重新做一遍但這次不是純做題而是做三件事第一復(fù)盤(pán)每道題背后想考察的知識(shí)點(diǎn)。比如一道“判斷課程依賴是否存在環(huán)”的題背后是拓?fù)渑判蚝蛨D論那你就要把拓?fù)渑判虻膬煞N實(shí)現(xiàn)Kahn算法和DFS都復(fù)習(xí)一遍同時(shí)把并查集也順帶過(guò)一遍。第二把你筆試中沒(méi)寫(xiě)出來(lái)的題重新寫(xiě)一遍并且把解題思路用語(yǔ)言表達(dá)出來(lái)。面試時(shí)經(jīng)常會(huì)有現(xiàn)場(chǎng)白板編程或者口述思路的環(huán)節(jié)你能不能在緊張狀態(tài)下把思考過(guò)程清晰表達(dá)出來(lái)直接影響面試官的印象分。第三把筆試中涉及的計(jì)算機(jī)基礎(chǔ)知識(shí)點(diǎn)整理成自己的知識(shí)樹(shù)。比如網(wǎng)絡(luò)部分可以從TCP三次握手延伸到擁塞控制、滑動(dòng)窗口、粘包拆包數(shù)據(jù)庫(kù)部分可以從索引延伸到事務(wù)隔離級(jí)別、MVCC、分庫(kù)分表操作系統(tǒng)部分可以從進(jìn)程線程延伸到協(xié)程、IO多路復(fù)用。面試官非常喜歡從一個(gè)點(diǎn)開(kāi)始深挖你準(zhǔn)備得越深面試時(shí)就越從容。我見(jiàn)過(guò)很多筆試成績(jī)不錯(cuò)的同學(xué)卻折在面試上原因就是只知道刷題不知道總結(jié)。筆試和面試本質(zhì)上是一整個(gè)考察鏈條筆試篩出了“會(huì)寫(xiě)代碼的人”面試要篩出“代碼寫(xiě)得好、腦袋清楚、溝通順暢”的人。課后總結(jié)這一步就是把“會(huì)寫(xiě)代碼”升級(jí)為“真懂代碼”的關(guān)鍵。從這套2023屆伴魚(yú)春季校園招聘技術(shù)崗B卷反推整個(gè)校招季的準(zhǔn)備思路有一點(diǎn)我想特別強(qiáng)調(diào)筆試拿高分從來(lái)不是靠臨時(shí)抱佛腳而是靠前期系統(tǒng)性的知識(shí)梳理和實(shí)戰(zhàn)打磨。如果你現(xiàn)在還在準(zhǔn)備階段最好的起步方式就是打開(kāi)一份真題卷按真實(shí)考試的時(shí)間要求模擬一遍再把這篇文章里提到的考點(diǎn)地圖、解題方法論、避坑清單逐條過(guò)一遍。等到真正坐在筆試考場(chǎng)里的時(shí)候你會(huì)發(fā)現(xiàn)所謂的好運(yùn)氣其實(shí)就是準(zhǔn)備充分之后遇到的所有題目恰好在射程之內(nèi)而已。