盤:核心考點(diǎn)與實(shí)戰(zhàn)思路)
每年的八九月份校招筆試就像潮水一樣涌過來。我前幾天剛陪一個(gè)學(xué)弟復(fù)盤完他的秋招流程翻到58同城2023校招后端崗的筆試題時(shí)覺得這套題放在今天看依然有很強(qiáng)的參考價(jià)值。它不偏不怪題型覆蓋很典型從數(shù)據(jù)結(jié)構(gòu)、算法到JVM、MySQL、網(wǎng)絡(luò)再到項(xiàng)目問答基本把后端校招筆試該踩的點(diǎn)都踩了一遍。這篇文章就把我當(dāng)時(shí)整理的高頻考點(diǎn)、實(shí)戰(zhàn)思路和復(fù)盤過程寫出來給正在準(zhǔn)備后端點(diǎn)崗位的同學(xué)做一份參考地圖。1. 筆試形態(tài)與考點(diǎn)布局這套題在考什么先說結(jié)論58同城這套后端校招筆試整體難度屬于中等偏上但不會(huì)故意卡人。它更看重基礎(chǔ)是否扎實(shí)、算法能不能一遍寫對(duì)、遇到問題有沒有清晰的排查思路而不是追求偏題怪題。1.1 題型構(gòu)成與時(shí)間分配我拿到的這套試卷題型大致分成三塊題型題量建議用時(shí)考查方向單選/多選20道左右25分鐘計(jì)算機(jī)基礎(chǔ)、Java基礎(chǔ)、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)編程題2道50分鐘數(shù)據(jù)結(jié)構(gòu)與算法、編碼能力問答/設(shè)計(jì)題1~2道25分鐘項(xiàng)目經(jīng)驗(yàn)、系統(tǒng)設(shè)計(jì)思路整體時(shí)間一般是90分鐘到100分鐘。這個(gè)分配很關(guān)鍵我見過不少同學(xué)在選擇題上糾結(jié)太久導(dǎo)致編程題沒寫完。我的建議是選擇題嚴(yán)格控制時(shí)間一道題超過一分半還沒思路就先標(biāo)記跳過去先把后面的大頭分?jǐn)?shù)拿穩(wěn)。1.2 考點(diǎn)分布與優(yōu)先級(jí)判斷從真題反饋和我自己刷題的經(jīng)驗(yàn)來看考點(diǎn)能分成幾個(gè)梯隊(duì)第一梯隊(duì)是數(shù)據(jù)結(jié)構(gòu)與算法占比最高也最拉分。鏈表反轉(zhuǎn)、二叉樹遍歷、TopK問題、字符串處理、DFS/BFS、動(dòng)態(tài)規(guī)劃都是高頻出現(xiàn)的老朋友。第二梯隊(duì)是Java基礎(chǔ)和數(shù)據(jù)庫(kù)。Java這邊集合類源碼、HashMap底層、并發(fā)編程、JVM內(nèi)存模型是必考重點(diǎn)。數(shù)據(jù)庫(kù)就是索引、事務(wù)、鎖還有SQL手寫。第三梯隊(duì)是計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)和Spring框架。網(wǎng)絡(luò)重點(diǎn)在TCP三次握手四次揮手、HTTP狀態(tài)碼、HTTPS流程操作系統(tǒng)重點(diǎn)在進(jìn)程線程、死鎖、內(nèi)存管理。這里提一句復(fù)習(xí)的時(shí)候別平均用力。算法和Java基礎(chǔ)如果不夠熟性價(jià)比最高的是先死磕這兩塊。網(wǎng)絡(luò)和操作系統(tǒng)可以放到后面用刷題的方式快速過框架類只要準(zhǔn)備幾個(gè)高頻問題就夠了筆試一般不會(huì)深挖Spring源碼。2. 算法編程題實(shí)戰(zhàn)復(fù)盤從題意到AC的完整鏈路算法題是整套卷子的得分大頭也是很多人的心理陰影。我復(fù)盤了當(dāng)時(shí)遇到的題目和后來整理的高頻題選兩道最典型的來拆解。2.1 鏈表題反轉(zhuǎn)鏈表的變體思路有一道題是“反轉(zhuǎn)鏈表中第m到n個(gè)節(jié)點(diǎn)之間的部分”這道題是力扣92題的變體。它比全鏈表反轉(zhuǎn)多了一個(gè)邊界條件處理很能考出基本功。解題思路分三步走建一個(gè)啞節(jié)點(diǎn)dummy指向頭節(jié)點(diǎn)避免頭節(jié)點(diǎn)被反轉(zhuǎn)時(shí)需要特殊處理。找到第m個(gè)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)pre這一步需要先走m-1步。進(jìn)行m到n區(qū)間的局部反轉(zhuǎn)反轉(zhuǎn)方法和普通反轉(zhuǎn)鏈表一樣只是要控制反轉(zhuǎn)次數(shù)為n-m次。代碼核心段大概是這樣的思路ListNode dummy new ListNode(0); dummy.next head; ListNode pre dummy; for (int i 0; i m - 1; i) { pre pre.next; } ListNode cur pre.next; for (int i 0; i n - m; i) { ListNode next cur.next; cur.next next.next; next.next pre.next; pre.next next; } return dummy.next;這里的核心技巧是用pre.next作為每次插入位置的指針不需要記錄太多臨時(shí)節(jié)點(diǎn)。我一開始寫鏈表題喜歡維護(hù)一堆臨時(shí)變量后來發(fā)現(xiàn)越簡(jiǎn)潔的寫法越不容易出錯(cuò)。2.2 TopK問題堆排與快選怎么選另一道高頻題是“求數(shù)組中第K大的元素”。這道題有兩個(gè)主流解法很多人在筆試時(shí)糾結(jié)選哪個(gè)。用堆排序的思路維護(hù)一個(gè)大小為K的小頂堆遍歷數(shù)組堆頂就是第K大的元素。時(shí)間復(fù)雜度O(nlogK)。筆試時(shí)用Java的話直接PriorityQueue就能實(shí)現(xiàn)代碼量不大建議優(yōu)先選這個(gè)方案。PriorityQueueInteger heap new PriorityQueue(k); for (int num : nums) { if (heap.size() k) { heap.offer(num); } else if (num heap.peek()) { heap.poll(); heap.offer(num); } } return heap.peek();如果用快速選擇算法平均時(shí)間復(fù)雜度是O(n)但最壞情況會(huì)退化到O(n2)。筆試現(xiàn)場(chǎng)如果對(duì)快排的partition過程不夠熟我不建議冒險(xiǎn)用快選因?yàn)檫吔鐥l件一旦寫錯(cuò)調(diào)試起來很浪費(fèi)時(shí)間。堆排雖然復(fù)雜度常數(shù)大一點(diǎn)但勝在穩(wěn)定可靠。2.3 編碼環(huán)節(jié)的提分細(xì)節(jié)代碼能AC是一回事代碼能不能讓面試官“覺得你行”是另一回事。筆試系統(tǒng)雖然不會(huì)直接看代碼風(fēng)格但很多公司的筆試題會(huì)和后面的面試官共享你寫的代碼面試官是能看到的。這里有幾個(gè)細(xì)節(jié)值得注意變量命名別用a、b、c這種用meaningful的名稱比如pre、cur、visited、count一眼能看懂作用。循環(huán)邊界條件寫清楚不管是i n還是i n - 1保持全篇一致。能加注釋的關(guān)鍵邏輯加一行注釋表明你確實(shí)理解這段代碼在做什么。寫完自查一遍邊界條件空數(shù)組、只有一個(gè)元素、K超過數(shù)組長(zhǎng)度這些情況代碼能不能正確處理。3. 計(jì)算機(jī)基礎(chǔ)選擇題考點(diǎn)拆解八股文的正確打開方式選擇題部分看起來知識(shí)點(diǎn)很散實(shí)際上還是有規(guī)律可循的。我按Java、數(shù)據(jù)庫(kù)、計(jì)網(wǎng)、操作系統(tǒng)四個(gè)方向來梳理。3.1 Java基礎(chǔ)集合類源碼與并發(fā)JUCJava基礎(chǔ)里最??嫉倪€是HashMap和ConcurrentHashMap。HashMap的底層數(shù)據(jù)結(jié)構(gòu)、put流程、擴(kuò)容機(jī)制、紅黑樹轉(zhuǎn)換閾值這些是每年校招的保留曲目??梢越Y(jié)合源碼去記不要死背結(jié)論。比如HashMap在JDK8的put流程我會(huì)這樣給自己講一遍先算key的hash通過擾動(dòng)函數(shù)讓高位也參與尋址然后看table數(shù)組對(duì)應(yīng)位置是不是空。如果是空就直接插入如果有值就拉鏈鏈表長(zhǎng)度超過8且數(shù)組長(zhǎng)度到達(dá)64就轉(zhuǎn)紅黑樹。擴(kuò)容時(shí)JDK8的優(yōu)化是元素要么留在原位要么移動(dòng)舊容量大小到新的位置不需要重新計(jì)算hash。并發(fā)這塊synchronized和ReentrantLock的區(qū)別、volatile的可見性和有序性、ThreadLocal的內(nèi)存泄漏問題、線程池的核心參數(shù)和拒絕策略都是高頻考點(diǎn)。線程池的參數(shù)一定要記清楚corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler缺一不可。還有線程池的提交流程先判斷核心線程、再往隊(duì)列里塞、再判斷最大線程數(shù)、最后走拒絕策略。3.2 數(shù)據(jù)庫(kù)索引、事務(wù)與鎖機(jī)制數(shù)據(jù)庫(kù)這塊索引是絕對(duì)重點(diǎn)。聚簇索引和非聚簇索引的區(qū)別、聯(lián)合索引的最左前綴原則、回表、覆蓋索引、索引失效的場(chǎng)景每個(gè)都值得花時(shí)間整理成自己的筆記。我復(fù)習(xí)索引時(shí)習(xí)慣用一套自己的話術(shù)去理解聚簇索引就是數(shù)據(jù)本身按索引順序存儲(chǔ)葉子節(jié)點(diǎn)直接存整行數(shù)據(jù)非聚簇索引葉子節(jié)點(diǎn)存的是主鍵值。回表就是先查非聚簇索引拿到主鍵再用主鍵查聚簇索引拿數(shù)據(jù)。覆蓋索引就是查詢的字段本身就在索引里不用回表性能好。索引失效的常見場(chǎng)景包括對(duì)索引列用了函數(shù)或計(jì)算、隱式類型轉(zhuǎn)換、like以通配符開頭、聯(lián)合索引不滿足最左前綴。事務(wù)隔離級(jí)別和MVCC也是一定要掌握的。四個(gè)隔離級(jí)別——讀未提交、讀已提交、可重復(fù)讀、串行化對(duì)應(yīng)的臟讀、不可重復(fù)讀、幻讀問題MySQL默認(rèn)是可重復(fù)讀但I(xiàn)nnoDB通過間隙鎖和MVCC解決了部分幻讀問題。這些內(nèi)容最好能在理解的基礎(chǔ)上自己講一遍而不是背概念。鎖機(jī)制方面全局鎖、表級(jí)鎖、行級(jí)鎖、間隙鎖、臨鍵鎖的區(qū)別和應(yīng)用場(chǎng)景要能分清楚。尤其是臨鍵鎖它是行鎖和間隙鎖的結(jié)合InnoDB默認(rèn)的隔離級(jí)別下范圍查詢會(huì)用臨鍵鎖來防止幻讀。3.3 計(jì)算機(jī)網(wǎng)絡(luò)TCP與HTTP高頻點(diǎn)網(wǎng)絡(luò)這塊最??嫉倪€是TCP。三次握手和四次揮手的狀態(tài)變化要像背電話號(hào)碼一樣熟SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、LAST_ACK、TIME_WAIT、CLOSED。TIME_WAIT這個(gè)狀態(tài)值得多說一句因?yàn)樗?jīng)常被追問。主動(dòng)關(guān)閉連接的一方會(huì)進(jìn)入TIME_WAIT狀態(tài)等待2MSL后才徹底關(guān)閉。為什么要等2MSL兩個(gè)原因第一要保證最后一個(gè)ACK能到達(dá)對(duì)端如果對(duì)端沒收到會(huì)重發(fā)FIN這個(gè)時(shí)間段內(nèi)還能響應(yīng)第二讓本連接產(chǎn)生的所有報(bào)文段都能從網(wǎng)絡(luò)中消失避免污染后續(xù)的連接。HTTP這邊狀態(tài)碼的語義要記清楚尤其是301和302的區(qū)別401和403的區(qū)別。301是永久重定向302是臨時(shí)重定向401是未認(rèn)證403是服務(wù)器理解了請(qǐng)求但拒絕執(zhí)行。HTTPS的握手過程重點(diǎn)是SSL/TLS握手客戶端和服務(wù)端怎么交換證書、怎么協(xié)商對(duì)稱密鑰也要能畫出來講一遍。3.4 操作系統(tǒng)與Linux并發(fā)三板斧操作系統(tǒng)選擇題常考的是進(jìn)程和線程的區(qū)別、進(jìn)程間通信方式、死鎖的四個(gè)必要條件、頁(yè)面置換算法、虛擬內(nèi)存。進(jìn)程間通信方式總結(jié)下來就是八種管道、FIFO、消息隊(duì)列、信號(hào)量、共享內(nèi)存、信號(hào)、socket、eventfd。面試秋招問到最多的是管道和共享內(nèi)存的區(qū)別。管道是內(nèi)核緩沖區(qū)單向流動(dòng)適合父子進(jìn)程或兄弟進(jìn)程共享內(nèi)存是最快的IPC方式但需要同步機(jī)制配合。死鎖四個(gè)條件——互斥、持有并等待、不可剝奪、循環(huán)等待。破壞任意一個(gè)都能避免死鎖比如資源一次性分配破壞持有并等待允許搶占破壞不可剝奪。Linux命令這塊??嫉挠胁榭炊丝谡加胣etstat -tlnp、查看進(jìn)程ps -ef、查看內(nèi)存free -m、磁盤df -h、日志查看tail -f。還有g(shù)rep、awk、sed這三個(gè)文本處理三劍客筆試不一定現(xiàn)場(chǎng)讓你寫但后面的面試大概率會(huì)問。4. 項(xiàng)目問答與系統(tǒng)設(shè)計(jì)題讓開放題變成送分題58同城的筆試后面還附帶簡(jiǎn)答或設(shè)計(jì)類題目通常是讓你聊一聊自己做過的項(xiàng)目或者給一個(gè)場(chǎng)景讓你設(shè)計(jì)方案。這類題目看起來開放其實(shí)有固定的回答框架。4.1 項(xiàng)目介紹STAR法則的實(shí)戰(zhàn)應(yīng)用項(xiàng)目介紹題推薦用STAR法則來組織回答情境、任務(wù)、行動(dòng)、結(jié)果。但更要提醒一個(gè)常見誤區(qū)很多同學(xué)介紹項(xiàng)目時(shí)只講功能不講技術(shù)難點(diǎn)和思考過程。面試官想聽的不是“我實(shí)現(xiàn)了登錄注冊(cè)”而是“我在實(shí)現(xiàn)登錄注冊(cè)時(shí)遇到了什么問題是怎么排查和解決的”。舉個(gè)例子假如項(xiàng)目里有用戶登錄模塊別只說用了JWT。你要能講清楚token過期了怎么處理、用戶退出登錄怎么讓token失效、多端登錄怎么控制、密碼加密用的什么方案、為什么不用MD5而用BCrypt、接口被刷了怎么防。這一層一層追問下去才是項(xiàng)目經(jīng)驗(yàn)真正的含金量。還有一個(gè)經(jīng)驗(yàn)是準(zhǔn)備項(xiàng)目時(shí)可以提前列出“面試官可能會(huì)追問的10個(gè)問題”清單。比如這個(gè)項(xiàng)目的并發(fā)量大概多少你做過壓測(cè)嗎數(shù)據(jù)庫(kù)表怎么設(shè)計(jì)的索引怎么建的為什么如果某個(gè)接口響應(yīng)很慢你會(huì)怎么排查如果數(shù)據(jù)庫(kù)數(shù)據(jù)量翻十倍你的方案還能撐住嗎 把這些問題提前準(zhǔn)備好回答的時(shí)候就不會(huì)慌。4.2 設(shè)計(jì)題先定邊界再談方案開放設(shè)計(jì)題通常是類似“設(shè)計(jì)一個(gè)短鏈接系統(tǒng)”或者“設(shè)計(jì)一個(gè)秒殺系統(tǒng)”的題目。這種情況下最重要的是展現(xiàn)你有結(jié)構(gòu)化的思考而不是一上來就堆技術(shù)名詞。我的回答框架是四步走第一步明確需求邊界。先問清楚是面向C端還是B端預(yù)估的QPS是多少數(shù)據(jù)量多大是否需要強(qiáng)一致。這些信息不同方案可以完全不一樣。第二步定義核心接口。短鏈系統(tǒng)就是兩個(gè)接口生成短鏈和跳轉(zhuǎn)長(zhǎng)鏈。秒殺系統(tǒng)就是預(yù)減庫(kù)存、創(chuàng)建訂單、支付回調(diào)。第三步畫數(shù)據(jù)模型。短鏈系統(tǒng)的核心表就是短鏈映射表字段包括短碼、長(zhǎng)鏈接、創(chuàng)建時(shí)間、過期時(shí)間。要考慮短碼生成算法比如發(fā)號(hào)器或者哈希截?cái)?。第四步考慮性能與擴(kuò)展性。加緩存、削峰、限流、異步化把這些關(guān)鍵詞落到具體的實(shí)現(xiàn)方案里。這套框架的好處是即使你對(duì)某個(gè)技術(shù)方案不熟悉也能讓面試官看到你思考問題的完整性。畢竟設(shè)計(jì)題考察的核心能力不是“背過多少方案”而是“面對(duì)模糊問題你能不能一步步拆解”。5. 筆試現(xiàn)場(chǎng)時(shí)間管理與應(yīng)急策略這一節(jié)聊聊現(xiàn)場(chǎng)發(fā)揮。很多同學(xué)筆試翻車不是因?yàn)椴粫?huì)做而是因?yàn)楣?jié)奏亂了。5.1 不同題型的搶分順序我的實(shí)戰(zhàn)建議是先做編程題再做選擇題最后做問答設(shè)計(jì)題。理由很簡(jiǎn)單編程題要用的時(shí)間最長(zhǎng)而且代碼寫完之后可能會(huì)有編譯錯(cuò)誤、邊界條件要調(diào)這些都是不可控因素越早面對(duì)越好。如果你一到考場(chǎng)先慢慢做選擇題等到編程題的時(shí)候只剩20分鐘大腦很容易進(jìn)入“急急忙忙寫代碼”的狀態(tài)明明能AC的題也可能因?yàn)榇中膩G分。我有一場(chǎng)筆試就是這樣選擇題用掉了40分鐘編程題差點(diǎn)沒寫完從那之后每次都調(diào)整成先編程后選擇的策略。5.2 遇到不會(huì)的題怎么處理遇到不會(huì)的選擇題先憑第一感覺選然后打個(gè)標(biāo)記。等所有題做完還有剩余時(shí)間再回來仔細(xì)想。不要在不確定的題上耗太久時(shí)間成本太高了。編程題如果卡住了先寫偽代碼把思路理出來再慢慢補(bǔ)全實(shí)現(xiàn)。有些筆試系統(tǒng)會(huì)按測(cè)試用例給分如果只能過一部分用例至少把你想到的正確部分的代碼寫上去能拿一分是一分??罩隙惴謱懥丝赡苓€有部分分。另外筆試系統(tǒng)一般會(huì)提供本地編輯器和在線編輯器兩種模式這個(gè)要提前適應(yīng)。在線編輯器沒有代碼提示、沒有自動(dòng)補(bǔ)全平時(shí)如果只依賴IDE寫代碼筆試時(shí)會(huì)非常別扭。我建議平時(shí)刷題就盡量在“不幫寫代碼”的環(huán)境里練至少每周有一兩天用純文本編輯器寫題別慣著自己。5.3 環(huán)境測(cè)試不能跳過有個(gè)特別容易被忽視的坑筆試前的環(huán)境測(cè)試。非技術(shù)崗可能無所謂技術(shù)崗筆試如果攝像頭、瀏覽器、網(wǎng)絡(luò)出了問題就直接廢了。我習(xí)慣提前至少半小時(shí)坐到電腦前先測(cè)一遍攝像頭進(jìn)筆試鏈接加載頁(yè)面測(cè)試編譯器能不能正常跑通一個(gè)Hello World。這個(gè)操作能幫你過濾掉至少一半的意外狀況。6. 考后復(fù)盤與后續(xù)銜接筆試不是終點(diǎn)筆試結(jié)束只是第一步后面還有面試。很多人考完就撒手不管其實(shí)筆試后的復(fù)盤價(jià)值和刷題價(jià)值一樣高。6.1 怎么記錄和整理筆試題我建議每場(chǎng)筆試一結(jié)束趁記憶還熱乎立刻把題目回憶出來記到自己的題庫(kù)里。不用寫得很完整能還原題目大意、你的解題思路、正確答案就行。關(guān)鍵是一周以后重新做一遍檢驗(yàn)自己是不是真的掌握了。比如你發(fā)現(xiàn)自己筆試時(shí)有一道動(dòng)態(tài)規(guī)劃的題沒做出來那就說明DP這塊是你的薄弱環(huán)節(jié)。接下來兩天不要干別的就集中刷DP從背包問題、子序列問題、股票買賣問題一路刷到區(qū)間DP和狀態(tài)壓縮。帶著問題去刷題效果比漫無目的地一天刷十道強(qiáng)得多。6.2 筆試與面試的知識(shí)復(fù)用筆試?yán)锟嫉幕A(chǔ)題就是你面試時(shí)會(huì)被追問的題。我把筆試中反復(fù)出現(xiàn)的知識(shí)點(diǎn)和面試中反復(fù)被問到的知識(shí)點(diǎn)做了一個(gè)匯總表你會(huì)發(fā)現(xiàn)兩者高度重合。知識(shí)點(diǎn)筆試考法面試追問方向HashMap底層結(jié)構(gòu)、put流程的選擇題ConcurrentHashMap分段鎖還是CAS擴(kuò)容機(jī)制線程池參數(shù)選擇、執(zhí)行流程選擇題線程池大小怎么定CPU密集和IO密集分別怎么設(shè)MySQL索引索引失效場(chǎng)景、最左前綴選擇題覆蓋索引和回表在項(xiàng)目里怎么用慢查詢?cè)趺磧?yōu)化Redis緩存數(shù)據(jù)類型、過期策略選擇題緩存穿透、擊穿、雪崩怎么解決分布式鎖實(shí)現(xiàn)方案TCP狀態(tài)流轉(zhuǎn)、字段含義選擇題TIME_WAIT為什么是2MSLTCP粘包怎么解決筆試暴露出來的薄弱點(diǎn)不用等到面試通知下來再補(bǔ)當(dāng)場(chǎng)復(fù)盤出來就當(dāng)場(chǎng)補(bǔ)掉后面找實(shí)習(xí)、沖大廠都省力很多。6.3 心態(tài)建設(shè)筆試的隨機(jī)性遠(yuǎn)大于實(shí)力最后說點(diǎn)掏心窩子的。早幾年我準(zhǔn)備校招時(shí)把每一場(chǎng)筆試都當(dāng)成生死戰(zhàn)結(jié)果崩了好幾場(chǎng)。后來才想明白筆試是一個(gè)概率事件有的場(chǎng)次題目剛好是你的舒適區(qū)有的場(chǎng)次全是你的盲區(qū)。同樣水平的兩個(gè)人不同場(chǎng)次的筆試分?jǐn)?shù)可以差出50%以上。所以別因?yàn)橐粓?chǎng)筆試沒考好就開始否定自己。正確做法是把每一場(chǎng)筆試當(dāng)成一次免費(fèi)的模擬測(cè)試考完看自己哪塊弱補(bǔ)齊就好了。校招季這么長(zhǎng)機(jī)會(huì)多的是真正決定你能不能拿到offer的是你能不能在一場(chǎng)又一場(chǎng)的考試中保持“發(fā)現(xiàn)問題→補(bǔ)弱點(diǎn)→再戰(zhàn)斗”這個(gè)循環(huán)不中斷。準(zhǔn)備后端筆試這條路沒有捷徑但每一步都算數(shù)。把這篇文章里提到的考點(diǎn)吃透再用三五場(chǎng)筆試練手你會(huì)發(fā)現(xiàn)自己面對(duì)題目時(shí)越來越從容。祝刷題順利Offer到手。