后端校招第四批復(fù)盤(pán):核心考點(diǎn)與備戰(zhàn)指南)
2018年秋招那陣字節(jié)跳動(dòng)后端崗的筆試和面試被不少同學(xué)當(dāng)成國(guó)內(nèi)大廠后端考題的風(fēng)向標(biāo)。我當(dāng)時(shí)幫學(xué)弟系統(tǒng)整理過(guò)一套后端校招的復(fù)盤(pán)筆記恰好覆蓋到第四批。四年多以后回看這批題仍然覺(jué)得很有代表性算法題不算難到離譜但基礎(chǔ)題覆蓋面極廣技術(shù)面試又特別喜歡沿著一條問(wèn)題鏈層層追問(wèn)。這篇文章就把我當(dāng)時(shí)整理的考點(diǎn)、踩坑點(diǎn)、答題思路以及如果放到現(xiàn)在重新準(zhǔn)備一次我會(huì)怎么學(xué)一并寫(xiě)出來(lái)希望對(duì)正在準(zhǔn)備后端校招的同學(xué)有實(shí)際幫助。1. 2018年第四批后端校招為什么這一輪值得拿出來(lái)復(fù)盤(pán)1.1 招聘節(jié)奏與批次背后隱藏的信息字節(jié)跳動(dòng)的校招后端方向在2018年分了多批進(jìn)行第四批大致處在秋招中后期。很多人以為批次越靠后崗位越少、難度越低實(shí)際情況恰恰相反第四批和后面的批次反而容易出難題和偏題因?yàn)榍捌谝呀?jīng)篩掉了一大批人出題團(tuán)隊(duì)有更大空間去做“區(qū)分度測(cè)試”。這批筆試投遞鏈路大概是官網(wǎng)投遞簡(jiǎn)歷、在線筆試、三輪技術(shù)面試加一輪HR面試。我身邊的樣本里筆試環(huán)節(jié)會(huì)刷掉六七成候選人能進(jìn)入面試的基本都是算法基礎(chǔ)比較扎實(shí)、計(jì)算機(jī)基礎(chǔ)沒(méi)有明顯短板的同學(xué)。也正因?yàn)槿绱说谒呐拿嬖嚬倨毡槟J(rèn)你已經(jīng)具備了基本的編程能力不會(huì)在簡(jiǎn)單題上放水而是直接把問(wèn)題往底層原理和工程場(chǎng)景兩個(gè)方向深挖。1.2 這一批筆試面試的整體風(fēng)格復(fù)盤(pán)下來(lái)第四批后端方向的筆試題有非常明顯的三個(gè)特征。第一重基礎(chǔ)、輕框架。筆試?yán)锊粫?huì)直接考Spring Boot怎么用、MyBatis的XML怎么寫(xiě)而是考Java基礎(chǔ)、操作系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)原理這些“八股”背后的理解深度。框架可以突擊但基礎(chǔ)原理短期補(bǔ)不上來(lái)這是面試官最想篩掉的一類(lèi)人。第二算法題以經(jīng)典題型為主但邊界條件摳得很細(xì)。筆試兩道編程題難度大約對(duì)標(biāo)LeetCode Medium偏簡(jiǎn)單但如果你平時(shí)只刷題、不care代碼規(guī)范很容易在空指針、數(shù)組越界、大數(shù)溢出這類(lèi)細(xì)節(jié)上翻車(chē)。第三技術(shù)面試喜歡“連環(huán)追問(wèn)”。一個(gè)問(wèn)題不會(huì)止步于“你知不知道”而是會(huì)順著你的回答一直往下問(wèn)直到問(wèn)到你不會(huì)為止。比如你說(shuō)知道HashMap那面試官就會(huì)追問(wèn)JDK 7和JDK 8的底層結(jié)構(gòu)差異、擴(kuò)容時(shí)鏈表插入順序、為什么線程不安全、ConcurrentHashMap是怎么優(yōu)化的。這種問(wèn)法考察的是你知識(shí)的深度和邊界感。2. 筆試環(huán)節(jié)的兩個(gè)大坑編程題思路和基礎(chǔ)選擇題的邊界2.1 編程題的高頻類(lèi)型與應(yīng)對(duì)策略第四批筆試的算法題從當(dāng)時(shí)參與過(guò)的同學(xué)復(fù)盤(pán)來(lái)看主要集中在四個(gè)方向字符串處理、數(shù)組與鏈表操作、DFS/BFS搜索、簡(jiǎn)單動(dòng)態(tài)規(guī)劃。沒(méi)有特別偏門(mén)的計(jì)算幾何、數(shù)論或復(fù)雜圖論這也就意味著只要你有針對(duì)性地刷過(guò)劍指Offer和LeetCode Hot 100筆試編程題是能拿到不錯(cuò)分?jǐn)?shù)的。拿一類(lèi)出現(xiàn)頻率很高的題型舉例最長(zhǎng)無(wú)重復(fù)字符子串。這類(lèi)題在LeetCode上是Medium難度暴力的做法是兩層循環(huán)枚舉所有子串再判斷每個(gè)子串內(nèi)部是否有重復(fù)字符時(shí)間復(fù)雜度是O(n^3)在筆試環(huán)境下非常容易超時(shí)。比較標(biāo)準(zhǔn)的做法是用滑動(dòng)窗口加哈希表右指針不斷右移擴(kuò)張窗口左指針在發(fā)現(xiàn)重復(fù)字符時(shí)跳到上一次出現(xiàn)位置的下一個(gè)位置這樣整體復(fù)雜度只有O(n)。我建議你在筆試前把這類(lèi)“看似是字符串題實(shí)際上是雙指針題”的題目整理成一份清單重點(diǎn)練滑動(dòng)窗口、雙指針、前綴和三種思路。因?yàn)樽止?jié)筆試的判題環(huán)境比較嚴(yán)格不會(huì)給部分分如果暴力寫(xiě)法超時(shí)整道題就是零分。平時(shí)練習(xí)時(shí)每道題做完之后至少再想一遍“最壞情況是什么、有沒(méi)有更優(yōu)解法”這會(huì)比單純刷題量大要有效得多。2.2 基礎(chǔ)選擇題里最容易翻車(chē)的四個(gè)知識(shí)模塊筆試不光有算法題還有一批基礎(chǔ)選擇/填空題。這些題單看每個(gè)知識(shí)點(diǎn)都不算難但它們經(jīng)常組合起來(lái)考一不留神就掉坑。我根據(jù)當(dāng)時(shí)的復(fù)盤(pán)把翻車(chē)率最高的四個(gè)模塊列在下面。Java基礎(chǔ)值傳遞與引用傳遞、String不可變性、equals和hashCode的契約關(guān)系、ArrayList和LinkedList的適用場(chǎng)景。操作系統(tǒng)進(jìn)程與線程的區(qū)別、死鎖的四個(gè)必要條件、虛擬內(nèi)存與分頁(yè)、上下文切換開(kāi)銷(xiāo)。網(wǎng)絡(luò)TCP三次握手與四次揮手、TIME_WAIT狀態(tài)的作用、TCP與UDP的區(qū)別、HTTP與HTTPS的握手過(guò)程。數(shù)據(jù)庫(kù)MySQL索引底層為什么用B樹(shù)、事務(wù)的ACID特性、四種隔離級(jí)別分別解決什么問(wèn)題。很多同學(xué)會(huì)忽略操作系統(tǒng)這個(gè)模塊覺(jué)得后端開(kāi)發(fā)用不上。但實(shí)際上字節(jié)這類(lèi)重視基礎(chǔ)的公司校招筆試?yán)锊僮飨到y(tǒng)題目占比不低。你至少要能解釋清楚為什么線程切換比進(jìn)程切換開(kāi)銷(xiāo)小死鎖產(chǎn)生的必要條件是哪四個(gè)虛擬內(nèi)存解決了什么問(wèn)題如果你現(xiàn)在時(shí)間緊迫我建議優(yōu)先把網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)兩塊吃透這兩部分在筆試和面試中出現(xiàn)的頻率最高而且它們和生活直覺(jué)比較接近容易快速上手。操作系統(tǒng)可以放到第二優(yōu)先級(jí)Java基礎(chǔ)則是必須達(dá)到“張口就能說(shuō)清楚”的程度。提示筆試時(shí)遇到不會(huì)的選擇題不要慌。大多數(shù)基礎(chǔ)選擇題的選項(xiàng)之間有明顯層級(jí)關(guān)系比如“進(jìn)程是資源分配的基本單位線程是CPU調(diào)度的基本單位”如果你記住這些關(guān)鍵定義很多題都可以排除兩個(gè)以上錯(cuò)誤選項(xiàng)。3. 技術(shù)面試的三種追問(wèn)鏈并發(fā)、緩存、系統(tǒng)設(shè)計(jì)都是連環(huán)炮3.1 從HashMap到ConcurrentHashMap并發(fā)基礎(chǔ)怎么準(zhǔn)備才不會(huì)被追問(wèn)打穿第四批后端方向的面試第一輪技術(shù)面往往從一個(gè)非常“日常”的問(wèn)題開(kāi)始HashMap的實(shí)現(xiàn)原理是什么如果只聽(tīng)你回答“底層是數(shù)組加鏈表”面試官會(huì)繼續(xù)追問(wèn)直到把你問(wèn)到墻角為止。我梳理了一條當(dāng)時(shí)出現(xiàn)頻率很高的問(wèn)題鏈。HashMap底層數(shù)據(jù)結(jié)構(gòu)是什么JDK 7和JDK 8分別是什么結(jié)構(gòu)為什么JDK 8要把鏈表轉(zhuǎn)成紅黑樹(shù)閾值為什么是8HashMap的擴(kuò)容機(jī)制是怎么樣的擴(kuò)容時(shí)元素的索引如何重新計(jì)算HashMap為什么線程不安全put操作并發(fā)時(shí)會(huì)出什么問(wèn)題ConcurrentHashMap是怎么解決線程安全問(wèn)題的JDK 8里的實(shí)現(xiàn)和JDK 7有什么不同分段鎖和CAS加synchronized各自適合什么場(chǎng)景如果你只是背了結(jié)論沒(méi)理解設(shè)計(jì)動(dòng)機(jī)很可能會(huì)在“閾值為什么是8”這個(gè)問(wèn)題上卡住。其實(shí)這個(gè)數(shù)字來(lái)自泊松分布的統(tǒng)計(jì)結(jié)果在隨機(jī)哈希碼的情況下鏈表節(jié)點(diǎn)數(shù)達(dá)到8的概率已經(jīng)非常低約為一千萬(wàn)分之六所以用8作為鏈表和紅黑樹(shù)的轉(zhuǎn)換閾值是為了在時(shí)間和空間上取得平衡。準(zhǔn)備這類(lèi)問(wèn)題時(shí)我的方法是畫(huà)一張“問(wèn)題鏈地圖”把每個(gè)核心知識(shí)點(diǎn)寫(xiě)成節(jié)點(diǎn)用箭頭連接“為什么會(huì)問(wèn)到下一個(gè)問(wèn)題”。比如HashMap為什么線程不安全自然引出ConcurrentHashMap而ConcurrentHashMap的實(shí)現(xiàn)又引出了鎖粒度和CAS的概念。面試前按著地圖自己給自己講一遍錄音回聽(tīng)你會(huì)發(fā)現(xiàn)很多地方其實(shí)講不清楚這些講不清楚的地方就是查漏補(bǔ)缺的重點(diǎn)。3.2 Redis緩存穿透、擊穿、雪崩區(qū)分概念只是第一步第二三輪面試中緩存幾乎是必考話(huà)題。面試官通常會(huì)拋出一個(gè)業(yè)務(wù)場(chǎng)景讓你設(shè)計(jì)緩存方案然后順勢(shì)考察你對(duì)Redis的理解深度。2018年第四批后端面試中Redis相關(guān)問(wèn)題出現(xiàn)得尤其多可能是當(dāng)時(shí)的業(yè)務(wù)量增長(zhǎng)對(duì)緩存依賴(lài)越來(lái)越重的映射。絕大多數(shù)同學(xué)都能說(shuō)出緩存穿透、緩存擊穿、緩存雪崩的定義但面試官真正想聽(tīng)的是你如何應(yīng)對(duì)以及為什么這樣應(yīng)對(duì)。緩存穿透查詢(xún)一個(gè)不存在的key請(qǐng)求直接打到數(shù)據(jù)庫(kù)。應(yīng)對(duì)方案是緩存空值或者用布隆過(guò)濾器在緩存層前置判斷。需要注意緩存空值的過(guò)期時(shí)間不能太長(zhǎng)不然大量不存在的key會(huì)占滿(mǎn)內(nèi)存。緩存擊穿一個(gè)熱點(diǎn)key在緩存過(guò)期瞬間大量請(qǐng)求同時(shí)打到數(shù)據(jù)庫(kù)。應(yīng)對(duì)方案是互斥鎖或者把熱點(diǎn)key的過(guò)期時(shí)間設(shè)置得更長(zhǎng)甚至設(shè)置為永不過(guò)期由后臺(tái)任務(wù)主動(dòng)更新。緩存雪崩大量key同時(shí)過(guò)期或者Redis實(shí)例宕機(jī)導(dǎo)致請(qǐng)求全部打到數(shù)據(jù)庫(kù)。應(yīng)對(duì)方案是給過(guò)期時(shí)間加隨機(jī)因子做集群部署還可以在應(yīng)用層做熔斷限流保護(hù)數(shù)據(jù)庫(kù)。我見(jiàn)過(guò)不少候選人能背出這幾個(gè)概念但當(dāng)面試官追問(wèn)“布隆過(guò)濾器誤判怎么辦”或者“互斥鎖加在哪個(gè)層面”時(shí)就開(kāi)始支支吾吾。所以準(zhǔn)備時(shí)不要只背名詞要默認(rèn)自己是一個(gè)架構(gòu)師正在設(shè)計(jì)一個(gè)線上系統(tǒng)。可以自己?jiǎn)栕约喝绻悸∵^(guò)濾器判斷key不存在但實(shí)際存在會(huì)發(fā)生什么如果互斥鎖等待時(shí)間過(guò)長(zhǎng)如何降級(jí)3.3 系統(tǒng)設(shè)計(jì)題從秒殺場(chǎng)景看面試官真正想考察什么第四批面試中系統(tǒng)設(shè)計(jì)題通常是壓軸的。常見(jiàn)題目有設(shè)計(jì)一個(gè)短鏈系統(tǒng)、設(shè)計(jì)一個(gè)排行榜、設(shè)計(jì)一個(gè)秒殺系統(tǒng)。這些題目沒(méi)有標(biāo)準(zhǔn)答案面試官考察的是三個(gè)能力需求拆解能力、技術(shù)選型能力和邊界權(quán)衡能力。以秒殺系統(tǒng)為例一個(gè)典型的回答思路是首先明確核心訴求瞬時(shí)流量巨大但真正成功下單的請(qǐng)求占比很低。因此系統(tǒng)設(shè)計(jì)的目標(biāo)是“擋住大部分流量而不是讓所有請(qǐng)求都走到最后一步”。然后拆解技術(shù)方案前端層通過(guò)按鈕置灰、答題驗(yàn)證碼等方式攔截人工重復(fù)提交。網(wǎng)關(guān)層基于令牌桶算法做限流超出的請(qǐng)求直接返回“已搶完”。緩存層把商品庫(kù)存提前加載到Redis用Lua腳本保證扣庫(kù)存的原子性。消息隊(duì)列下單請(qǐng)求先寫(xiě)入MQ由消費(fèi)者異步處理訂單削峰填谷。數(shù)據(jù)庫(kù)層最終一致性保證庫(kù)存扣減和訂單生成可以不在同一事務(wù)里。這個(gè)方案的每一步都會(huì)引出追問(wèn)。比如面試官可能會(huì)問(wèn)Redis扣庫(kù)存時(shí)如果服務(wù)宕機(jī)了怎么辦MQ消費(fèi)失敗如何保證訂單不丟這時(shí)候你要能說(shuō)出持久化策略、ACK機(jī)制和重試冪等這些概念。整體來(lái)看系統(tǒng)設(shè)計(jì)題不需要你有真實(shí)的大廠高并發(fā)經(jīng)驗(yàn)但需要你具備“分層設(shè)計(jì)”的思維知道每一層該干什么、會(huì)出什么錯(cuò)、怎么兜底。4. 簡(jiǎn)歷里的技能棧取舍前后端分離、框架和“數(shù)字后端”的迷惑項(xiàng)4.1 項(xiàng)目經(jīng)驗(yàn)怎么寫(xiě)框架會(huì)寫(xiě)和能講清楚是兩回事從當(dāng)年的簡(jiǎn)歷來(lái)看很多同學(xué)都會(huì)寫(xiě)“熟悉Spring Boot”“了解Vue前后端分離開(kāi)發(fā)”這些技能在熱詞里也頻繁出現(xiàn)。但面試官對(duì)這類(lèi)表述其實(shí)已經(jīng)免疫了。他們真正關(guān)心的是你在項(xiàng)目里實(shí)際做了什么解決了什么問(wèn)題有沒(méi)有遇到過(guò)難點(diǎn)。我當(dāng)時(shí)幫學(xué)弟改簡(jiǎn)歷時(shí)最常給的建議是不要寫(xiě)流水賬而要寫(xiě)“動(dòng)詞加結(jié)果”。比如“使用Spring Boot開(kāi)發(fā)RESTful API實(shí)現(xiàn)了用戶(hù)登錄和權(quán)限校驗(yàn)功能”就太普通了可以改成“基于Spring Security實(shí)現(xiàn)JWT無(wú)狀態(tài)鑒權(quán)解決分布式場(chǎng)景下Session共享問(wèn)題接口平均響應(yīng)時(shí)間降低約XX%”。哪怕數(shù)據(jù)是自己壓測(cè)出來(lái)的也比空泛的“熟悉”要有說(shuō)服力。如果你簡(jiǎn)歷里寫(xiě)了前后端分離項(xiàng)目面試官很大概率會(huì)問(wèn)前后端如何交互跨域問(wèn)題是怎么解決的登錄狀態(tài)是怎么保持的這些問(wèn)題的答案其實(shí)并不復(fù)雜無(wú)非是HTTP協(xié)議、JSON格式、CORS、Token這些概念。你只要做過(guò)真實(shí)項(xiàng)目并且復(fù)盤(pán)過(guò)代碼基本都能答上來(lái)。怕就怕只用了框架生成器自己沒(méi)有梳理過(guò)請(qǐng)求從前端到后端的完整鏈路。4.2 容易被名字誤導(dǎo)的方向軟件后端 vs 數(shù)字后端熱詞里出現(xiàn)了不少“數(shù)字后端”“芯片后端”“Innovus數(shù)字后端”這樣的詞這里專(zhuān)門(mén)提醒一下這類(lèi)崗位在芯片設(shè)計(jì)流程里指的是布局布線、時(shí)序收斂、物理驗(yàn)證這些環(huán)節(jié)和互聯(lián)網(wǎng)公司的后端開(kāi)發(fā)服務(wù)端開(kāi)發(fā)完全是兩個(gè)方向使用的工具鏈也完全不同。每年都有同學(xué)因?yàn)闆](méi)仔細(xì)區(qū)分投錯(cuò)了崗位等到面試時(shí)才發(fā)現(xiàn)面試官問(wèn)的問(wèn)題自己完全沒(méi)準(zhǔn)備過(guò)。所以投遞簡(jiǎn)歷前一定要仔細(xì)看崗位描述里的技術(shù)棧關(guān)鍵詞如果出現(xiàn)Spring、Redis、MySQL、分布式這些就是軟件后端如果出現(xiàn)Verilog、布局布線、時(shí)序約束、Innovus、Virtuoso這些就是芯片后端。求職方向不要跑偏準(zhǔn)備也要跟著崗位走。4.3 工程化技能點(diǎn)到為止Jenkins、Maven和Node.js的正確打開(kāi)方式2018年的校招候選人普遍在工程化工具上比較薄弱。大多數(shù)人只會(huì)在IDE里點(diǎn)擊運(yùn)行沒(méi)有命令行打包、部署的經(jīng)驗(yàn)。我當(dāng)時(shí)在簡(jiǎn)歷里看到“熟悉Maven”的人不少但被問(wèn)到“Maven的生命周期有哪些階段”就答不上來(lái)。其實(shí)這個(gè)問(wèn)題不難哪怕沒(méi)有系統(tǒng)學(xué)過(guò)只要用Maven打包過(guò)幾次項(xiàng)目就能說(shuō)出validate、compile、test、package、install、deploy這幾個(gè)主要階段。對(duì)于Jenkins這類(lèi)CI/CD工具我的建議是不需要精通但至少要有一個(gè)“會(huì)搭一條最簡(jiǎn)單的流水線”的經(jīng)驗(yàn)。你用Maven構(gòu)建一個(gè)Spring Boot項(xiàng)目然后通過(guò)Jenkins拉取代碼、執(zhí)行構(gòu)建、部署到服務(wù)器這一套流程跑通就足夠在簡(jiǎn)歷里寫(xiě)“了解持續(xù)集成基本流程”。Node.js的情況也類(lèi)似如果你在后端項(xiàng)目里用過(guò)npm管理依賴(lài)寫(xiě)過(guò)簡(jiǎn)單的Node.js服務(wù)完全可以寫(xiě)進(jìn)簡(jiǎn)歷但要誠(chéng)實(shí)地標(biāo)明“了解”而不是“精通”。5. 如果讓我重新準(zhǔn)備一次基于第四批考點(diǎn)整理的學(xué)習(xí)路線5.1 按模塊拆解的時(shí)間規(guī)劃表如果你現(xiàn)在距離校招還有3到4個(gè)月可以參考我整理的這條路線。它并不復(fù)雜但每一步都需要產(chǎn)出“可展示的成果”。時(shí)間段核心內(nèi)容復(fù)習(xí)目標(biāo)與產(chǎn)出第1-2周Java基礎(chǔ)理解String、集合、異常、IO、反射能畫(huà)出ArrayList和HashMap的底層結(jié)構(gòu)圖第3-4周并發(fā)編程掌握synchronized、volatile、Lock、AQS、并發(fā)容器能畫(huà)出線程狀態(tài)轉(zhuǎn)換圖第5-6周計(jì)算機(jī)網(wǎng)絡(luò)與OS默寫(xiě)TCP三次握手四次揮手能解釋TIME_WAIT掌握進(jìn)程線程、死鎖、虛擬內(nèi)存第7-8周MySQL與Redis能解釋索引為什么用B樹(shù)掌握事務(wù)隔離級(jí)別能描述緩存穿透/擊穿/雪崩解決方案第9-10周框架與項(xiàng)目完成一個(gè)高質(zhì)量后端項(xiàng)目使用Spring Boot、RESTful API、JWT鑒權(quán)、Redis緩存第11-12周模擬面試與刷題LeetCode專(zhuān)題刷題數(shù)組、鏈表、字符串、樹(shù)、DP每天對(duì)著鏡子/錄音復(fù)述原理這個(gè)表格不是死規(guī)定但整體邏輯遵循“先語(yǔ)言、后系統(tǒng)、再數(shù)據(jù)庫(kù)、最后項(xiàng)目”的順序。有一個(gè)常見(jiàn)錯(cuò)誤是很多同學(xué)一開(kāi)始就撲在Spring Boot上結(jié)果問(wèn)到底層原理時(shí)暴露得很快。框架可以讓你簡(jiǎn)歷好看但真正讓你通過(guò)面試的是計(jì)算機(jī)基礎(chǔ)。5.2 刷題到底刷多少、刷什么關(guān)于算法刷題第四批筆試給我們的啟示是與其追求刷題量不如追求“每道題都能講清楚思路”。我當(dāng)時(shí)給學(xué)弟的標(biāo)準(zhǔn)是劍指Offer的五十多道題每道至少二刷LeetCode Hot 100至少一刷熱門(mén)專(zhuān)題數(shù)組、鏈表、字符串、二叉樹(shù)、動(dòng)態(tài)規(guī)劃的正確率要穩(wěn)定在七成以上。刷題時(shí)養(yǎng)成一個(gè)習(xí)慣每道題做完用幾句話(huà)總結(jié)它的核心思路。比如“這道題用了雙指針因?yàn)閿?shù)組有序”“這道題用了動(dòng)態(tài)規(guī)劃狀態(tài)轉(zhuǎn)移方程是XXXX”。總結(jié)得清楚說(shuō)明你真的理解了。面試官手寫(xiě)算法題時(shí)其實(shí)更看重你的解題流程先確認(rèn)題意、再討論思路、最后寫(xiě)代碼。很多人一上來(lái)就悶頭寫(xiě)寫(xiě)到最后發(fā)現(xiàn)思路不對(duì)反而印象更差。5.3 表達(dá)訓(xùn)練原理講得清楚比背得熟更重要我見(jiàn)過(guò)不少簡(jiǎn)歷很漂亮的候選人卻被一場(chǎng)面試打回原形原因只有一個(gè)會(huì)做不會(huì)說(shuō)。比如你問(wèn)他進(jìn)程和線程的區(qū)別他說(shuō)“進(jìn)程是資源分配的基本單位線程是CPU調(diào)度的基本單位”然后就沒(méi)了。這其實(shí)只能算“知道”不算“理解”。更好的表達(dá)方式是加入類(lèi)比和場(chǎng)景。我會(huì)這樣講進(jìn)程就像一家餐廳有自己的廚房、餐桌和倉(cāng)庫(kù)線程就像餐廳里的服務(wù)員他們共享這些資源但各自負(fù)責(zé)不同的客人。如果兩個(gè)服務(wù)員同時(shí)改一張訂單就可能產(chǎn)生數(shù)據(jù)不一致的問(wèn)題所以需要加鎖。這種表達(dá)方式更容易讓面試官相信你真正理解了概念而不只是背了定義。練習(xí)方法是每周挑3個(gè)知識(shí)點(diǎn)用“是什么、為什么、怎么做”三段式給自己講一遍有條件的話(huà)找個(gè)一起準(zhǔn)備秋招的同學(xué)互相提問(wèn)。當(dāng)你發(fā)現(xiàn)自己已經(jīng)能把并發(fā)、緩存、事務(wù)這些話(huà)題講得順暢而不打磕巴時(shí)面試的把握就會(huì)大很多。6. 最后聊點(diǎn)實(shí)在的這批面試題給我的三點(diǎn)啟發(fā)面試結(jié)束后的復(fù)盤(pán)比面試本身更重要。我當(dāng)年見(jiàn)過(guò)不少同學(xué)面完就覺(jué)得自己“掛了”不愿意去回想題目和答案這其實(shí)非常可惜。第四批這批題目給我最大的啟發(fā)是后端面試并不會(huì)追問(wèn)所有細(xì)枝末節(jié)它只會(huì)在幾個(gè)核心知識(shí)樹(shù)上不斷加深所以與其追求知識(shí)的廣度不如在關(guān)鍵知識(shí)點(diǎn)上挖得足夠深。第一點(diǎn)啟發(fā)是原理永遠(yuǎn)比API重要。你會(huì)用Redis的set命令不算本事能解釋清楚Redis為什么快、單線程模型解決了什么問(wèn)題、持久化怎么保證不丟數(shù)據(jù)才是面試官真正想聽(tīng)的。第二點(diǎn)啟發(fā)是項(xiàng)目經(jīng)驗(yàn)的關(guān)鍵是“真實(shí)”。哪怕你只是做了一個(gè)課程設(shè)計(jì)級(jí)別的項(xiàng)目只要你把每一步都吃透了面試官其實(shí)能感受到。最怕的是簡(jiǎn)歷上寫(xiě)了五六個(gè)項(xiàng)目面試官稍一追問(wèn)就露餡。第三點(diǎn)啟發(fā)是面試中的溝通能力是可以練習(xí)的。面試不僅是考試也是交流你講得清楚、問(wèn)得主動(dòng)面試官對(duì)你的印象分就會(huì)高很多。如果你正在準(zhǔn)備后端校招把這篇文章里的考點(diǎn)清單當(dāng)成一面鏡子對(duì)著查漏補(bǔ)缺。不用焦慮自己還有多少?zèng)]看按著知識(shí)模塊一個(gè)一個(gè)啃每天能講清楚一個(gè)核心知識(shí)點(diǎn)三個(gè)月后的你會(huì)比現(xiàn)在強(qiáng)非常多。祝順利。