1. 前言
對(duì)于軟件開發(fā)校招而言,不管是應(yīng)聘前端、后端還是移動(dòng)端崗位,筆試是大部分同學(xué)都無(wú)法避免的一個(gè)環(huán)節(jié),筆試中占據(jù)最重要地位的肯定是算法問(wèn)題,如何高效并且快速的準(zhǔn)備校招算法就是本章需要關(guān)注的問(wèn)題。
2. 筆試
2.1 整體流程
我們只需要分析下招聘通知,就不難發(fā)現(xiàn)互聯(lián)網(wǎng)大廠在篩選簡(jiǎn)歷時(shí)會(huì)優(yōu)先考慮這幾類同學(xué):
- 學(xué)校:大廠青睞公認(rèn)的名校,例如清華、北大、上交、復(fù)旦等,或者是傳統(tǒng)計(jì)算機(jī)強(qiáng)校:浙大、北郵、西安交大等。
- 競(jìng)賽經(jīng)歷:參加ACM-ICPC(國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽)并且在區(qū)域賽或者全國(guó)賽獲得好名次、CCPC(中國(guó)大學(xué)生程序設(shè)計(jì)競(jìng)賽),或者藍(lán)橋杯比賽等。
- 大廠實(shí)習(xí)經(jīng)歷:最好是BAT(百度、騰訊、阿里)或者TMD(頭條、美團(tuán)、滴滴),或者是一些知名獨(dú)角獸(例如商湯、猿輔導(dǎo))等有實(shí)習(xí)經(jīng)歷。
具備上述學(xué)歷背景和經(jīng)歷的同學(xué),通過(guò)熟人內(nèi)推的方式,往往能免簡(jiǎn)歷篩選和筆試,直接進(jìn)入到面試流程。
但是對(duì)于大多數(shù)參加計(jì)算機(jī)校招的同學(xué)來(lái)說(shuō),往往都不具備上述幾個(gè)優(yōu)勢(shì),我們應(yīng)該關(guān)心的是,作為普通條件的學(xué)生,如何高效快速的準(zhǔn)備校招筆試。
一般來(lái)說(shuō),一輪完整的技術(shù)校招需要經(jīng)過(guò)的流程如下:
如圖,可以看出,如果我們的算法能力不夠應(yīng)付筆試環(huán)節(jié),往往都沒(méi)有面試的機(jī)會(huì),簡(jiǎn)歷就被無(wú)情篩選掉了。而且對(duì)于頭部互聯(lián)網(wǎng)公司來(lái)說(shuō),很多崗位的投錄比(簡(jiǎn)歷投遞人數(shù)/最終錄取人數(shù))過(guò)高,只能通過(guò)筆試提前篩選。
大部分情況下,候選人在經(jīng)過(guò)了筆試和簡(jiǎn)歷篩選之后,會(huì)經(jīng)歷2到3輪現(xiàn)場(chǎng)面試,通過(guò)之后就能被順利錄取。
所以除了準(zhǔn)備關(guān)于計(jì)算機(jī)基礎(chǔ)的面試題目之外,筆試算法也是關(guān)注的核心。
2.2 筆試考察內(nèi)容
目前大部分的互聯(lián)網(wǎng)公司都支持遠(yuǎn)程筆試和面試,具體的流程如下:
在候選人投遞簡(jiǎn)歷之后,企業(yè)會(huì)提前發(fā)送筆試郵件告知候選人。
因?yàn)楹蜻x人投遞簡(jiǎn)歷的時(shí)間比較分散,所以互聯(lián)網(wǎng)企業(yè)一般會(huì)將候選人分為不同的批次,被分到同一批次的用戶參加同一場(chǎng)筆試,
筆試題型一般分為選擇題、問(wèn)答題、編程題,筆試時(shí)間一般是一個(gè)半小時(shí)到兩個(gè)小時(shí)。
因?yàn)閱?wèn)答題需要人為改卷,選擇題和編程題都可以系統(tǒng)自動(dòng)判定分?jǐn)?shù),所以選擇題+編程題的出題方式比較常見,其中編程題大多是2到4道,主要都是算法題,完成語(yǔ)言不限制(一般都支持C++、Java、Python、Javascript這幾種語(yǔ)言)。
2.3 筆試如何準(zhǔn)備
選擇題一般是考察候選人的計(jì)算機(jī)基礎(chǔ)知識(shí),包含計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、計(jì)算機(jī)組成等。如果是特定的面試崗位,例如Java后端工程師,也可能會(huì)涉及到特定語(yǔ)法,例如考察 Java 的多線程相關(guān)知識(shí)。
選擇題一般靠看書,例如通過(guò)閱讀《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》等教科書,況且目前網(wǎng)上有諸多已經(jīng)整理好的開源題庫(kù),例如慕課網(wǎng)的相關(guān)教程。
算法題則比較特殊,就筆者的觀察,大部分的候選人在不做準(zhǔn)備的情況下都缺乏解決困難筆試題的能力。
因?yàn)榧词故怯?jì)算機(jī)專業(yè)的同學(xué),所接受的大學(xué)編程通識(shí)教育,一般只涉及基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)教程。
在約定的筆試時(shí)間內(nèi),對(duì)于沒(méi)有經(jīng)過(guò)特定訓(xùn)練的候選人,還可能受到緊張等心理因素的影響,往往會(huì)難以編寫無(wú)誤的代碼,最終結(jié)果只能無(wú)緣面試。
筆試考察的算法題難度浮動(dòng)比較大,涵蓋的知識(shí)也從基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),例如堆棧和二叉樹,到比較復(fù)雜的算法過(guò)程,例如深度優(yōu)先查找算法、廣度優(yōu)先查找算法、動(dòng)態(tài)規(guī)劃算法等。但是我們從整體上分析,就不難發(fā)現(xiàn)這些題目大部分都具有固定的解題模板以及解題思路。
大廠面試官的筆試題來(lái)源,可以肯定90%來(lái)自 LeetCode 算法網(wǎng)站以及《劍指offer》這本算法書籍,所以候選人應(yīng)該將關(guān)注的重點(diǎn)放在這兩塊內(nèi)容。
本章后續(xù)的小節(jié)會(huì)給出一些經(jīng)典的數(shù)據(jù)結(jié)構(gòu)和算法解題模板和思路。
3. 小結(jié)
本章節(jié)介紹了校招的整體流程以及筆試需要準(zhǔn)備的內(nèi)容,之后的章節(jié)會(huì)針對(duì)數(shù)據(jù)結(jié)構(gòu)與算法中的典型題目做出分析,題海無(wú)涯,候選人需要做到舉一反三。