大三準(zhǔn)備校招階段,零零散散,前前后后的刷了夠3,4百道題,題目來源LintCode,劍指Offer,Leetcode。當(dāng)然題目之間會有些相似度比較高的,對于常見的算法題目類型,也都有進(jìn)行專題的相關(guān)學(xué)習(xí)。
“校招面試,全程hard模式,進(jìn)來讓寫重復(fù)業(yè)務(wù)邏輯?!边@種經(jīng)歷,我想對于每一個進(jìn)程序員來說都不陌生。確實(shí),一般的業(yè)務(wù)邏輯也不會需要什么旋轉(zhuǎn)樹等復(fù)雜的操作,特別是對于一個前端程序員來說。可是,現(xiàn)在北美,國外互聯(lián)網(wǎng)公司,還是會把手寫算法題當(dāng)做一個考核指標(biāo)。其價值在哪里呢?以下是幾點(diǎn)自己的想法。也正是這些想法,讓我決定重頭再來刷一遍。
-
應(yīng)屆生想進(jìn)大廠,出國工作
校招面試
針對校招這點(diǎn),自己結(jié)合自己找工作經(jīng)歷談一些,面試阿里被問到的比較多,難度看面試官,比較隨機(jī),筆試一般會有一道,網(wǎng)易的筆試,每年都會有三道算法題在,前兩道,如果刷題量在200+,且有自己的思考總結(jié)的,基本可以ac掉,第三道一般是接近hard了。騰訊面的時候,問的則相對少一些,面創(chuàng)業(yè)公司的時候也被問到一些,相比阿里來說要簡單很多,基本的排序,查找。華為有個機(jī)試,沒有什么難度的算法題,但是會很麻煩,基本考察代碼表述邏輯。出國工作
也是目前支撐自己重拾的一個關(guān)鍵原因。 提高代碼實(shí)現(xiàn)思維邏輯能力
很多時候,我們在寫代碼的時候,自己能夠想到如何去實(shí)現(xiàn),但是真正去手寫的代碼出來的時候,就會發(fā)現(xiàn)很多問題,用代碼表述不出來,不知道該套一個循環(huán),里面再做何種判斷,邊界值卡在哪里,通過刷題,可以很好地鍛煉這一點(diǎn)。對一個題目有了想法,很快就可以用代碼實(shí)現(xiàn)出來。提高思考問題的能力
這點(diǎn)尤為關(guān)鍵,遇到問題,上來就寫,然后寫的很爛,再去修,通過刷題,大多數(shù)的題目,在動手前如果沒有深入的思考,很容易按照自己理解錯誤的方向走了,數(shù)據(jù)的各種情形考慮不到,導(dǎo)致始終無法accept。通過不停地刷題,漸漸的就會養(yǎng)成一種習(xí)慣,遇到問題先思考,考慮清楚了,再去下手,而不是上來就動手,很容易從一個小的切入了,而達(dá)不到高屋建瓴的高度去看問題。增強(qiáng)代碼魯棒性
由于題目給予的測試數(shù)據(jù)中,各種類型的數(shù)據(jù)都會存在,所以就強(qiáng)迫我們?nèi)プ屑?xì)的審查代碼,來確定問題中所有可能會出現(xiàn)的特殊值,然后根據(jù)這些特殊值分別做好處理。寫出更簡潔的代碼
通過刷題,我們代碼實(shí)現(xiàn)邏輯的能力會越來越強(qiáng),之前可能很多的循環(huán),if,else嵌套,現(xiàn)在就會變得清晰很多。
綜上,算是重刷Leetcode的原因。
自己所計(jì)劃的是每日一道,Java,C++,Python三種語言實(shí)現(xiàn),同時提供盡可能簡潔,巧妙的方法,同時給出自己的思考過程,當(dāng)然時間有限,題目難度有限,按照自己的計(jì)劃走也是很有難度,盡可能的去超目標(biāo)上靠,做更多。
Github上最近也開了個機(jī)器學(xué)習(xí)的Project ML1024,每日文章閱讀,或者一個機(jī)器學(xué)習(xí)方法,或者一個數(shù)學(xué)公式,總之,每日會有一點(diǎn)contribution。