不要慌,我有億點(diǎn)小建議,萬字長文!

轉(zhuǎn)自:編程指北
今年互聯(lián)網(wǎng)寒冬,整個(gè)就業(yè)市場哀鴻遍野,有關(guān)于當(dāng)前形勢下計(jì)算機(jī)碩士如何找工作的問題。有一些還在學(xué)校的小朋友也是比較發(fā)愁。今天看到一篇非常不錯的文章,分享給大家。
在閱讀之前,有一些前提需要說明:
-
互聯(lián)網(wǎng)未來未必還是一個(gè)好生意,所以本文并不是建議大家繼續(xù)卷互聯(lián)網(wǎng),而是如果你決定要進(jìn)場,如何準(zhǔn)備。
-
作者個(gè)人經(jīng)歷有限,本文講的是比較優(yōu)秀的同學(xué)如何準(zhǔn)備大廠的算法類校招,并且是業(yè)務(wù)線上的算法。以下情形本文的觀點(diǎn)可能不正確:
-
- 硬實(shí)力或基礎(chǔ)方面,不足以達(dá)到大廠門檻要求的
- 目標(biāo)是非算法類崗位,例如后臺開發(fā)的
- 目標(biāo)是各類以發(fā)paper為主的AI lab的
- 水平已經(jīng)顯著的出類拔萃,不需要通過傳統(tǒng)的校招卷來卷去拿offer的
-
雖然如此,部分觀點(diǎn)也應(yīng)該值得參考就是了
文章分為觀點(diǎn)篇和方法篇。
Part2關(guān)于作者BigMoyan ?https://zhuanlan.zhihu.com/p/567878099
BigMoyan 的自述:無需知道太多,總之是有比較多面試經(jīng)驗(yàn)(包括面試別人和被面試)的人就是了,我們還是從道理上看觀點(diǎn)是否有益
Part3 觀點(diǎn)篇0x00:招聘方希望從校招招到什么樣的同學(xué)
不管是眼下的寒冬還是前些年的盛世,大廠的對校招同學(xué)的期望從未變過:我們始終想招具有快速成長潛力的同學(xué)。這是核心邏輯和第一優(yōu)先級,因此這也就規(guī)定了你的目標(biāo):成為一個(gè)具有快速成長潛力的人,并在面試中表現(xiàn)出來。
對校招來說,招聘方不應(yīng)期望從實(shí)驗(yàn)室剛出來的同學(xué)有什么業(yè)務(wù)洞察或特別的工程能力,也不應(yīng)期望校招同學(xué)能達(dá)到來則能用的狀態(tài)(即使能達(dá)到,也未必是最合適),一則不現(xiàn)實(shí),二則給校招的錢也確實(shí)不配有這么多要求。
我知道你目前的水平也就那樣,但誰TM不是從那個(gè)狀態(tài)過來的呢?只要你能證明你值得培養(yǎng),培養(yǎng)的出來,培養(yǎng)出來后真的能扛得了事兒,那就劃算。
0x01:八股文和代碼:耗時(shí)最多,其實(shí)最不重要
很多同學(xué)把準(zhǔn)備面試、準(zhǔn)備找工作等價(jià)于刷leetcode,背八股文。按照我的面試經(jīng)驗(yàn),這些耗時(shí)很大的工作往往是面試中最不重要的一環(huán)。
當(dāng)然該準(zhǔn)備還是要準(zhǔn)備,常識性的東西答不上來,leetcode easy都寫不出來,那也過于離譜。但說他最不重要是因?yàn)?,一些八股文問題和代碼問題,答不上來也不一定會怎么樣。
開玩笑,你真當(dāng)你的面試官隨手都能AC一個(gè)leetcode hard嗎?很可能連medium都A不了。很多搞AI算法的,代碼題能磕磕絆絆寫個(gè)DP就不錯了。算法工程師的代碼問題,往往只是看一下你很基礎(chǔ)的思考方式和代碼風(fēng)格,確認(rèn)下你多少還是個(gè)正經(jīng)搞CS的,那就成了。
基本上我覺得能比較順暢的過easy題,有medium題目的思路,有點(diǎn)計(jì)算復(fù)雜度的概念,能講出問題的分析思路,編程語言層面上的理解到位,相關(guān)工具能夠正確使用,那就夠。
比起你已經(jīng)知道的東西,證明“我能快速學(xué)會”更重要。
注意是“證明我能快速學(xué)會”,而不是“號稱我能快速學(xué)會”。
例如,一個(gè)問題或一種概念你不了解,但你能夠根據(jù)你已經(jīng)有的知識猜測或推斷出它是什么,應(yīng)該具有什么樣的性質(zhì),你能給出應(yīng)該用什么關(guān)鍵詞去檢索能夠獲取的相關(guān)知識,能夠設(shè)計(jì)什么實(shí)驗(yàn)來驗(yàn)證你的猜想。
0x02:關(guān)于paper:重要但是也沒你想的那么重要
你以為你的頂會paper是用來證明自己的在某個(gè)領(lǐng)域的專業(yè)程度,以找到對口崗位的。
其實(shí)不是,它的唯一作用是證明“你在上一份工作中績效表現(xiàn)優(yōu)秀”,從而讓公司覺得你接下來還會表現(xiàn)優(yōu)秀。
因?yàn)槿绻隳茏龀鍪澜缂壍膭?chuàng)新工作,你應(yīng)該不會來找工作。如果你像其他同學(xué)一樣投簡歷找工作,大概率你的paper成色也就那樣
可能在某一個(gè)細(xì)分領(lǐng)域的某一個(gè)技術(shù)點(diǎn)上有了不錯的改進(jìn),但對公司來說有什么意義呢?
更不要提大部分的工作跟產(chǎn)業(yè)實(shí)踐完全不能對口了,搞遙感圖像的也要找工作,搞蛋白質(zhì)結(jié)構(gòu)的也要找工作,搞醫(yī)學(xué)圖像的也要找工作。你說一篇醫(yī)學(xué)圖像的頂會paper對淘寶抖音和拼多多有什么意義?
這個(gè)認(rèn)識,大家是要有的。paper有一兩個(gè)差不多的夠證明自己就行了,這玩意邊際效益遞減,特別是你的paper是明顯的一個(gè)系列、前后關(guān)聯(lián)很大的時(shí)候(非常常見,一個(gè)好的會議文章改巴改巴投個(gè)期刊)。
0x03:人人都愛自驅(qū)
一線leaders有一次培訓(xùn)討論一個(gè)問題:你最希望下屬具有的素質(zhì)是什么?排名第一就是自驅(qū),這幾乎是所有人的共識。
你需要證明你是一個(gè)自驅(qū)的人。你的paper可能是導(dǎo)師安排,師兄引導(dǎo),薪火相傳的結(jié)果,很多實(shí)驗(yàn)室在某些領(lǐng)域積累深厚,paper都是成系列的,在這種實(shí)驗(yàn)室,一個(gè)中人之姿也能做出不錯的成績,當(dāng)然我認(rèn)為這沒什么,能考進(jìn)這種實(shí)驗(yàn)室說明你也是很有水平的。
但脫離那個(gè)環(huán)境你還行嗎?你能不能獨(dú)自尋找問題,迎接挑戰(zhàn),持續(xù)自驅(qū)的做出成績?
競賽、開源代碼建設(shè)、以及任何具有一定挑戰(zhàn)性的,非標(biāo)的經(jīng)歷都有助于幫助你證明這一點(diǎn)。例如你雖然本職工作是做AI方面的研究,但喜歡打游戲,因此自己嘗試做了一個(gè)游戲還搞得有模有樣。這個(gè)經(jīng)歷跟你要找的工作可能毫無關(guān)系,但他證明了你是自驅(qū)的,你總能通過持續(xù)的自我驅(qū)動去學(xué)習(xí)、研究、嘗試,達(dá)到你的目標(biāo)。
一個(gè)員工最牛逼的狀態(tài)是“包的住事兒”,這樣你的領(lǐng)導(dǎo)就可以做甩手掌柜。領(lǐng)導(dǎo)不管你,你也能搞定,這當(dāng)然需要相當(dāng)?shù)哪芰?,但起點(diǎn)至少是你能夠主動動起來。
0x04:聰明vs勤奮
中國人是很推崇天道酬勤的,勤奮也是我很欣賞的一種天分。
但是很遺憾,聰明,而不是勤奮,是大廠面試中你最需要展現(xiàn)的特質(zhì)。勤奮很容易偽裝,很難持久,勤奮而無出色成果,則勤奮反而是減分項(xiàng)。
大廠的程序員是一份比較高端的工作,很多人從情緒出發(fā),會對這個(gè)說法很不屑,但客觀看,實(shí)際上一線大廠的骨干技術(shù),所需要的綜合能力是比較高的,它不能或很少能通過簡單的勤奮達(dá)成。
越是高端的崗位,越是需要聰明,如果招聘方的目標(biāo)是把你培養(yǎng)成骨干,那你是不是聰明就是一個(gè)很重要的考量維度。
聰明有很多種,我們常規(guī)認(rèn)為的數(shù)理上的聰明未必是最重要的,實(shí)際上我認(rèn)為,對公司來講最重要的聰明是洞察力。越到后期的面試,越高級的面試官,越不會考察你代碼寫的怎么樣,八股文背的怎么樣。給你一個(gè)開放問題,你能不能理解出題人想要考察的方向,能不能正確建模問題,思考出合乎邏輯的解決方案,能不能正確評估方案的優(yōu)缺點(diǎn)和瓶頸,能不能對后續(xù)迭代有一些想法?
洞察力最明顯的一種體現(xiàn)就是建模和遷移能力,如果針對面試官的問題,你能回答出這兩句話:
這個(gè)問題本質(zhì)上是一個(gè)XXX問題 這個(gè)XXX問題與YYY問題的思路是相通的,我們可以基于YYY問題上的研究成果設(shè)計(jì)XXX問題的解決方案如下 那這會是很好的狀態(tài)。
除了洞察,還有很多類型的聰明也很受歡迎。例如快速學(xué)習(xí),歸納總結(jié),邏輯推導(dǎo)。你可能需要reveiw一下,如果一定要說你自己很聰明的話,你哪里聰明?
0x05:溝通:一直都很重要
溝通。同樣是越靠后的面試越重要。講話啰嗦,詞不達(dá)意,語言理解不暢,任何一個(gè)讓面試官覺得“溝通不舒服”的點(diǎn)都可能直接導(dǎo)致你拿不到offer。
我要說的是,即使在hc相對寬松的前幾年,也是如此,并不是因?yàn)閔c緊了面試官吹毛求疵。
你的面試官大概率都是你以后工作的同事和領(lǐng)導(dǎo),溝通順滑與否直接決定你們未來的合作情況。大廠的算法員工都是非常昂貴的,所以團(tuán)隊(duì)其實(shí)不大,管理也相對精細(xì),組織結(jié)構(gòu)上相對大一些的團(tuán)隊(duì),實(shí)際上也是分很多小方向支持各類業(yè)務(wù)。
人少,事多,所以一個(gè)人就要當(dāng)一個(gè)人的用,你是個(gè)溝通黑洞,可能相關(guān)的一片業(yè)務(wù)就全完?duì)僮?。甚至因?yàn)槟銣贤芰Φ膯栴},整個(gè)團(tuán)隊(duì)都會受到效率影響,這是個(gè)非常致命的問題。
那些“做技術(shù)工作只要把技術(shù)搞好了就行”的想法是顯而易見的謬誤。我目前尚未見過任何一個(gè)人搞技術(shù)能搞到離了你公司不轉(zhuǎn)業(yè)務(wù)停擺的,也許有,但肯定不是校招的各位。
公司的工作環(huán)境是合作和競爭,是團(tuán)隊(duì)作戰(zhàn)。這個(gè)世界上沒有真空中的球形程序員,有的只是一個(gè)個(gè)既要寫代碼,又要想算法,既要對接產(chǎn)品經(jīng)理,又要對領(lǐng)導(dǎo)做匯報(bào),既要管理下屬和同事,又要管理領(lǐng)導(dǎo)和合作伙伴的真實(shí)的程序員。
越是HC收緊,招聘方越是要精打細(xì)算,你又能搞算法,又能搞工程,又能作為接口人去跨團(tuán)隊(duì)合作,那你性價(jià)比就很高。
0x06:性格:不是玄學(xué)
面試是很看匹配度的,所謂匹配度,一是你的自身素質(zhì)和背景與當(dāng)前的崗位需求是否匹配,二是你的性格特質(zhì)與團(tuán)隊(duì)是否匹配。
很多時(shí)候后者的占比更重要。
我們曾經(jīng)面試過一個(gè)紙面上非常優(yōu)秀的候選人,名校畢業(yè),paper有分量,在多個(gè)大廠有實(shí)習(xí)經(jīng)歷且實(shí)習(xí)期間都做出了很好的成果,實(shí)際面試后聰明度、理解力、工程能力樣樣拿得出手。
按理說這么優(yōu)秀,offer肯定是穩(wěn)的,但最后還是被斃了,原因主要是工作風(fēng)格和價(jià)值觀方面的,這種原因有點(diǎn)敏感,容易引起爭論我就不詳細(xì)講了。但事實(shí)就是,你確實(shí)可能因?yàn)檫@種看起來很玄學(xué)的原因跟offer失之交臂。
總體而言,積極但有分寸,陽光但不幼稚,思想開放不偏激,有靈活度又不失原則的風(fēng)格是比較能夠獲得認(rèn)可,跟大部分團(tuán)隊(duì)匹配度都不差的。
簡而言之,需要你思想正面,聽話好帶,講道理能講通。我們不必談這是否是資本家控制勞苦大眾的手段——也不必這么上綱上線。只談一下?lián)Q位思考,你是否也希望你的伙伴和隊(duì)友是這樣的人?
我們倒不必為了一個(gè)offer就強(qiáng)迫自己改頭換面或者去做偽裝,雙向選擇的事情。但我的確認(rèn)為這樣的性格對個(gè)人成長是有好處的,如果你也認(rèn)為這是一種更好的狀態(tài),那去磨練自己的性格也是準(zhǔn)備面試的一部分。
0x07:實(shí)習(xí)經(jīng)歷:關(guān)鍵實(shí)習(xí)經(jīng)歷很有幫助
我們一開始就說了,招聘方不應(yīng)指望校招同學(xué)有多強(qiáng)的業(yè)務(wù)洞察和工程實(shí)踐能力。
但如果你有呢?顯然是一個(gè)加分項(xiàng)。
當(dāng)然本身拿到有足夠成色的實(shí)習(xí)offer也是比較難的,也算是實(shí)力證明的一部分,如果用實(shí)習(xí)經(jīng)歷作為找工作的關(guān)鍵要素,頗有點(diǎn)循環(huán)論證的意思,所以這里就不多講大廠實(shí)習(xí)了。
實(shí)習(xí)經(jīng)歷需要下面兩個(gè)點(diǎn)至少占一個(gè):
實(shí)習(xí)的工作本身很難很有挑戰(zhàn)性,你通過實(shí)習(xí)參與了實(shí)際的產(chǎn)業(yè)實(shí)踐,了解了公司工作的套路方法、工具鏈,并且對業(yè)務(wù)有了一定認(rèn)識和洞察。實(shí)習(xí)的工作本身未必特別難,但你做出了有特色的成果。如果你的實(shí)習(xí)經(jīng)歷讓面試官覺得“這不就是XXXX這樣搞一下就好了”?那多半不會在面試中體現(xiàn)出什么價(jià)值。
此外,與專業(yè)或工作領(lǐng)域無關(guān)的實(shí)習(xí)經(jīng)歷沒有任何用處,是減分項(xiàng),最好寫都不要寫。你告訴我你一個(gè)計(jì)算機(jī)碩士暑假去實(shí)習(xí)做電話客服,我會覺得你有病。關(guān)于簡歷上什么加分什么扣分,后面再細(xì)說。
最后,如果你的實(shí)習(xí)經(jīng)歷與團(tuán)隊(duì)需求高度吻合,恭喜你,很加分,但可遇不可求。
0x08:請回答下面的問題或練習(xí)
方法論是虛的,你需要有一些手段來診斷自己的準(zhǔn)備情況,不妨請一位已經(jīng)工作的有經(jīng)驗(yàn)者作為你的模擬面試官,嘗試回答下面的問題
-
如果說你是一個(gè)聰明人,你認(rèn)為你聰明在什么地方?理由是什么?
-
你的實(shí)習(xí)/項(xiàng)目/paper中,難點(diǎn)在哪里,為什么困難?你是如何解決的?
-
你迄今為止覺得自己最牛逼,最得意的一件事是什么?
-
你覺得工作的意義是什么,你期望中理想的工作是什么樣的?請你的面試官從工作角度(而不是朋友角度)審視你的回答。
-
請你的模擬面試官針對你的項(xiàng)目進(jìn)行挑戰(zhàn),要求面試官能夠根據(jù)你的陳述,給出一個(gè)關(guān)于你項(xiàng)目的不同的解決方案,你來進(jìn)行defense。如果面試官的方案不行,為什么不行。如果可行,你為什么沒那么干:
-
- 你的模擬面試官是否充分理解了你項(xiàng)目的目標(biāo)、價(jià)值、方案邏輯?
- 你的defense是否有理有據(jù)有節(jié),溝通過程中你的模擬面試官是否覺得舒服?
-
尋找一些開放問題,在模擬面試中限定時(shí)間回答并復(fù)盤
上文講了一些我關(guān)于校招同學(xué)找工作的觀點(diǎn)。聊做參考。
也看了一些大家的反饋,其實(shí)主要的反饋點(diǎn)在于,很多人認(rèn)為今年這個(gè)形勢,你leetcode做不出hard連面試資格都沒有(因?yàn)榉浅>恚_@里我無法向你做什么保證,因?yàn)槊總€(gè)公司在這方面要求確實(shí)會有所不同,但有幾個(gè)點(diǎn)我還是愿意分享一下:
- 每個(gè)公司對AI算法的代碼能力要求各有不同,我能提供的客觀信息是,我社招面過的公司(包括但不限于字節(jié)x2、微眾銀行、螞蟻金服、小紅書、蝦皮、愛奇藝、喜馬拉雅、Roblox、私募),所遇到的所有代碼問題,難度沒有超過leetcode medium的,且有的代碼沒完全做出來也不影響繼續(xù)下一面。
- 這個(gè)問題我和你的視角可能不一樣,站在學(xué)生和求職者的視角,你看到的是今年的面試都是medium往上hard不封頂,你看到的是誰誰誰代碼沒做出來就沒有后續(xù)了,因此你推測做不出medium肯定過不了面試。但實(shí)際上沒有下一輪未必是代碼的問題,或主要未必是代碼的問題。
- 從工作實(shí)踐上看,我也不認(rèn)為leetcode代碼能夠?qū)χ苯訉ぷ鳟a(chǎn)生什么重大增益,相對而言更好的編碼習(xí)慣和對運(yùn)行效率的敏感更重要一些。我相信在這點(diǎn)上各個(gè)業(yè)務(wù)線上的算法崗位都差不多,所以才有面試造航母入職擰螺絲的說法?;谶@個(gè)認(rèn)知,算法團(tuán)隊(duì)至少在理論上不應(yīng)讓leetcode的難度過高,并成為刷人的硬性指標(biāo)。
但見仁見智,這些認(rèn)識未必對,但相對于求職者的反饋,我更希望看到更多面試官的反饋,來分享你們團(tuán)隊(duì)對算法同學(xué)的代碼能力有何種要求。
畢竟選擇知乎這樣一個(gè)平臺來分享,當(dāng)然是相信大家的水平,相信評論區(qū)要比正文更精彩。
這一篇務(wù)實(shí)一點(diǎn),講一下具體應(yīng)該怎么準(zhǔn)備找工作,同樣有幾點(diǎn)要寫在前頭:
- 事有輕重緩急,有些事情也許已經(jīng)來不及做了,那你就當(dāng)它是寫給低年級的、還沒有那么緊急的同學(xué)的;
- 如果你的時(shí)間不太多,應(yīng)該撿自己還來得及做的事情,按著優(yōu)先級搞,這個(gè)時(shí)候講究二八原則:用20%的時(shí)間拿到80%的成果,不要精益求精了。
0x00:硬實(shí)力:算法基礎(chǔ)與CS基礎(chǔ)
開篇先打臉,盡管在上一篇中我已經(jīng)講了,八股文用處不太大,但那是對八股文和代碼問題不太大同學(xué)而言的,所要指出的是,如果你的八股文水平和代碼水平已經(jīng)尚可,就不要花太多時(shí)間再進(jìn)一步精益求精了。
現(xiàn)在來定義什么叫八股文尚可(其實(shí)是很優(yōu)秀了):
-
常見的傳統(tǒng)機(jī)器學(xué)習(xí)算法,如決策樹、隨機(jī)森林、梯度提升樹、SVM、LR、PCA能夠講出其核心思想,優(yōu)缺點(diǎn)與適用情況,能夠講出其優(yōu)化目標(biāo),能夠講出這個(gè)算法為什么叫這個(gè)名字。如果你好好上了課,這點(diǎn)應(yīng)該有一兩天的集中復(fù)習(xí)就足夠。
-
在至少一個(gè)細(xì)分領(lǐng)域了解當(dāng)前技術(shù)的大體進(jìn)展,SOTA方法,思路,能對流行的方法有自己的評價(jià),言之成理。如果你有好好做研究,不管有沒有paper,這點(diǎn)應(yīng)該是默認(rèn)具備的。
-
對廣泛的深度學(xué)習(xí)話題,能夠了解具有相當(dāng)影響力的重要工作,能夠講出其核心idea和大體思路。這個(gè)“廣泛的深度學(xué)習(xí)話題”既包括大的應(yīng)用領(lǐng)域:CV、NLP或Audio,也包括近期比較熱門的話題,如AI藝術(shù)創(chuàng)作,也包括一些理論:自監(jiān)督學(xué)習(xí)、領(lǐng)域自適應(yīng)、元學(xué)習(xí)等。這三點(diǎn)的優(yōu)先級依次下降,最差情況,你也需要對大領(lǐng)域的關(guān)鍵工作能說出來一二三。這點(diǎn)比較難,因?yàn)樵掝}廣泛,難免了解過于粗淺,最佳狀態(tài)是平時(shí)就很關(guān)注學(xué)界動態(tài),牛逼的工作出來以后有好奇心能去看一眼,稍微研究一下。
-
對深度學(xué)習(xí)/機(jī)器學(xué)習(xí)的基本理論有本質(zhì)層面的認(rèn)識,能夠從原理層面回答深度學(xué)習(xí)的各類常用組件“why”的問題。這點(diǎn)難在你并不知道你理解的是否正確,建議可以準(zhǔn)備好問題列表例如“為什么正則項(xiàng)可以抑制過擬合”,然后去知乎搜大家的討論,多看一些觀點(diǎn)取其精華。
-
熟練至少一種深度學(xué)習(xí)框架,所謂熟練:
-
- 你對這個(gè)學(xué)習(xí)框架的設(shè)計(jì)思路基本了解,你清楚各個(gè)模塊的作用和工作機(jī)理
- 你能夠用這個(gè)深度學(xué)習(xí)框架實(shí)現(xiàn)自定義的結(jié)構(gòu),而非只是簡單調(diào)用高層API
- 你對這個(gè)深度學(xué)習(xí)框架的常見坑點(diǎn)很熟悉,了解大部分情況下的最佳實(shí)踐
-
對常見的CS概念有基本了解,也就是正兒八經(jīng)的八股文了,特別是:
-
- 對linux有基本了解,了解常見的命令,能夠搞定一般的環(huán)境和工具配置,了解一些基本的概念,知道bashrc、根目錄下的幾個(gè)文件夾分別是干嘛的
- 了解git的一些基本概念和用法
- 了解HTTP、web服務(wù)、SQL、NoSQL、消息中間件、微服務(wù)、容器技術(shù)等等亂七八糟的概念,不用深入,基本上知道“是什么,解決什么問題,什么時(shí)候用”就可以了。
- 了解分布式的一些基本框架、工具或理論
- 知道常見算法的時(shí)空復(fù)雜度和大體思路,知道常見數(shù)據(jù)結(jié)構(gòu)的概念和適用場景。
- 其他八股文:進(jìn)程線程,內(nèi)存,動態(tài)/靜態(tài)鏈接庫等等等,網(wǎng)上搜一個(gè)八股文面經(jīng)看一下
-
最好能會除Python以外的一門靜態(tài)語言,水平能夠達(dá)到能看懂,能寫一些不太復(fù)雜的功能。以C++為例,基本上C++ primer模版之前的內(nèi)容能大體了解,就足夠了。
0x01:硬實(shí)力:代碼題
繼續(xù)來自我打臉,上一篇仍然講了代碼題并非那么重要,但同樣,如果你從來沒做過代碼題,那必然也是過于離譜導(dǎo)致無法通過面試的。
如果你不是ACM選手,只是單純?yōu)榱藴?zhǔn)備招聘而練習(xí)代碼,那我認(rèn)為代碼的程度,以leetcode medium為上限即可,追求過于高的代碼水平邊際收益不高(除非你要面試谷歌這種)
具體練習(xí)也有講究,我認(rèn)為以下面兩類問題為比較重要:
- 模擬類的問題:這類問題通常都不難,也不涉及高深的算法,思路都很直接,主要練習(xí)用代碼實(shí)現(xiàn)出來的能力
- DP類的問題:就面試準(zhǔn)備而言,算法上能夠解決DP類問題就足夠了,DP可能是面試中最常見的難度稍高的問題。
以下問題無需花時(shí)間練習(xí):
- 要借助除了棧、隊(duì)列、二叉樹、散列表以外的其他數(shù)據(jù)結(jié)構(gòu)才能方便解決的問題
- 要借助除了排序、搜索、簡單動態(tài)規(guī)劃、遞歸以外的特殊算法才能方便解決的問題
- 腦筋急轉(zhuǎn)彎類的問題
練習(xí)代碼題請注意如下幾點(diǎn):
- 前期以熟悉為主,后期要限定時(shí)間,一般面試中的代碼考察最長不會超過1h,通常是30min一個(gè)題,如果到時(shí)間沒有解決,你需要練習(xí)基于已經(jīng)有的部分闡述思路,講解代碼,給出沒有做出來的理由
- 后期需要練習(xí)面試環(huán)節(jié)下的代碼編寫,面試環(huán)境下,你需要避免一聲不吭寫30min沒做出來的情況,并且你可以向面試官尋求幫助。
- 寫完代碼需要看題解,了解自己代碼的時(shí)空復(fù)雜度,是否還有優(yōu)化的空間。通常代碼題是一套一套的,面試官允許你用低效的方法實(shí)現(xiàn),但一旦你實(shí)現(xiàn),下來的問題就是復(fù)雜度如何,可否進(jìn)一步優(yōu)化。
- 基于上一條,可以練習(xí)先用蠢辦法快速解決問題(i.e各種暴力),拿到基本分,然后再優(yōu)化成更聰明的辦法。可以避免沒做出來直接0分。
0x02:硬實(shí)力:paper
沒什么好說的,這不是臨時(shí)抱佛腳能抱來的東西,這里只提一點(diǎn):
- 對于目標(biāo)崗位是大廠業(yè)務(wù)算法的同學(xué),記住paper是邊際效用遞減的,當(dāng)你已經(jīng)取得不錯的成果時(shí),需要更早的思考繼續(xù)投入的性價(jià)比。
- 但邊際效用遞減,不是說沒有paper也能行。有沒有是一個(gè)問題,什么質(zhì)量是另一個(gè)問題,有多少是第三個(gè)問題,重要性依次遞減。
- 對于目標(biāo)崗位是純研究崗的同學(xué),需要在學(xué)校期間提前選定意向崗位,針對性的做paper
0x03:硬實(shí)力:實(shí)習(xí)
如有可能,應(yīng)該積極尋求大廠相似崗位的實(shí)習(xí),如果不清楚自己要找什么工作,應(yīng)積極尋求大廠的算法實(shí)習(xí),不要太在意具體做什么。
絕對避免做無意義的實(shí)習(xí),所謂無意義,指的是這段實(shí)習(xí)經(jīng)歷不能寫在簡歷上,寫上了就扣分。
找實(shí)習(xí)的面試準(zhǔn)備與應(yīng)屆生面試準(zhǔn)備大體相同,但有一點(diǎn)例外:
- 能夠連續(xù)實(shí)習(xí)很長時(shí)間,每周能投入更多時(shí)間的實(shí)習(xí)生,能夠在實(shí)習(xí)面試中獲得巨大優(yōu)勢
這一點(diǎn)跟你老板的風(fēng)格相關(guān),因此這引出了對準(zhǔn)研究生的一個(gè)建議:
- 如你的目標(biāo)是工業(yè)界而非學(xué)術(shù)界,那在可能的情況下,你要找允許長時(shí)間實(shí)習(xí)、條件比較寬松的導(dǎo)師
- 但自帶資源的業(yè)界大佬導(dǎo)師除外,因?yàn)槟愫芸赡軙苯尤ニP(guān)系很好的公司
0x04:準(zhǔn)備簡歷
首先,找到建議你“簡歷最好控制在一頁”的人,打一頓。
這種狗屁說法由來已久,以至于現(xiàn)在已經(jīng)很難知道出處。我猜原因可能是紙質(zhì)的簡歷頁數(shù)多了容易丟,但互聯(lián)網(wǎng)目前已經(jīng)很難看到紙質(zhì)簡歷了。
但可以確定的是,它確實(shí)是狗屁說法。你的簡歷不需要控制在一頁,簡明扼要把你的主要情況表現(xiàn)出來即可,經(jīng)歷過于牛逼的整個(gè)三四頁也沒問題。
下面是一份簡歷準(zhǔn)備的注意事項(xiàng),以下各項(xiàng)在簡歷上有順序關(guān)系
-
姓名電話郵箱和微信號,如果有好的開源代碼給git主頁,有好的技術(shù)博客給博客鏈接,不需要告訴我你是不是黨員,是否已婚。
-
教育背景給到學(xué)校和專業(yè)即可,除非你導(dǎo)師很牛逼(業(yè)界都知道的那種牛逼),一般也不需要告訴我你導(dǎo)師是誰。除非你的成績很拿得出手,也不需要告訴我你的績點(diǎn)和成績
-
列出你拿得出手的獎項(xiàng),如果沒有,可以列獎學(xué)金。
-
- 獎項(xiàng)應(yīng)該是專業(yè)相關(guān)的
-
如果你不是CS或相關(guān)專業(yè)背景的,可能需要給出與面試相關(guān)的主干課程或自學(xué)過的課程,否則不需要。你列出來的課程,不管是自學(xué)還是學(xué)校上課,都要做好被考察的準(zhǔn)備。
-
列出你的技能點(diǎn),包括編程語言能力、算法能力等
-
- 輕易不要用精通,精通意味著你會激發(fā)面試官的挑戰(zhàn)欲
- 如果你確實(shí)精通,有信心面對面試官的大部分問題,大膽寫精通,這將幫助你把面試話題引導(dǎo)到你擅長的領(lǐng)域
-
不要列出沒有意義的證書,例如全國計(jì)算機(jī)等級考試X級,CET4成績
-
- 但如果這個(gè)證書是一項(xiàng)有難度的、能證明你自驅(qū)的,請列出
-
如果有實(shí)習(xí)經(jīng)歷,展示你的實(shí)習(xí)經(jīng)歷
-
- 該實(shí)習(xí)必須是專業(yè)上的,不要寫無關(guān)緊要的實(shí)習(xí)經(jīng)歷
- 實(shí)習(xí)經(jīng)歷不要寫心得體會,也不要寫流水賬,寫你所取得的最牛逼的成績,加粗。
-
展示你的項(xiàng)目經(jīng)歷,如果沒有,用paper經(jīng)歷代替,也可以用實(shí)習(xí)經(jīng)歷、競賽經(jīng)歷代替
-
- 描述項(xiàng)目的背景,目標(biāo),意義
- 描述你在其中扮演的角色,所負(fù)責(zé)的工作
- 描述你的獨(dú)特貢獻(xiàn),這個(gè)貢獻(xiàn)能夠展現(xiàn)你的聰明才智,寶貴品質(zhì),優(yōu)秀素養(yǎng)。這一點(diǎn)的重要性超過你的想象,僅僅是作為一個(gè)螺絲釘參與一個(gè)項(xiàng)目,其中沒有體現(xiàn)出任何個(gè)人特質(zhì),基本上等于你沒有這個(gè)項(xiàng)目。
- 描述所取得的成果,如果沒有取得預(yù)期成果,描述為什么
-
展示你的獨(dú)特經(jīng)歷
-
- 開源代碼或社區(qū)共建
- 公開演講、授課
- 展示自驅(qū)的經(jīng)歷
- 其他具有一定影響力的經(jīng)歷
-
展示你的學(xué)術(shù)經(jīng)歷,包括paper和專利
-
- 不必按時(shí)間排,按牛逼程度降序排
- 如果上面的內(nèi)容已經(jīng)比較充分,這里可以按參考文獻(xiàn)格式列出。如果覺得內(nèi)容不充分,可以加一兩句話描述paper的核心工作。
-
展示你的自評、上述模塊未介紹,但你覺得值得一說的東西
簡歷準(zhǔn)備的核心要義,有以下幾點(diǎn):
- 簡明扼要,重點(diǎn)突出,不要讓人覺得你啰啰嗦嗦婆婆媽媽
- 簡歷的目標(biāo)是讓你與眾不同,一份僅僅是符合要求的簡歷實(shí)際上沒有任何競爭力。你需要讓面試官對你感興趣,或者通過過硬的實(shí)力,或者通過特殊的經(jīng)歷,或者通過其他什么手段,哪怕是一個(gè)漂亮的簡歷模板。
- 質(zhì)勝文則野。文勝質(zhì)則史,文質(zhì)彬彬。
0x05:面試:講解項(xiàng)目
這一條是面試最重要的部分,而且不管是幾面都要陳述的。之所以不放在硬實(shí)力的部分,是因?yàn)橄鄬τ凇坝幸粋€(gè)不錯的項(xiàng)目”,”講一個(gè)不錯的項(xiàng)目“更重要。
而”講一個(gè)不錯的項(xiàng)目“有時(shí)候并不需要”有一個(gè)不錯的項(xiàng)目“作為前提。
對照你的簡歷,找到一個(gè)相對而言比較好的項(xiàng)目,所謂比較好的項(xiàng)目:
- 有一定的復(fù)雜度,方便擴(kuò)展
- 你在其中承擔(dān)了比較多的工作,且有一定難度和挑戰(zhàn)性
列入如下內(nèi)容,如果可能,準(zhǔn)備文本:
- 具有領(lǐng)域特點(diǎn)的專業(yè)詞匯及其通俗解釋
- 項(xiàng)目的背景和價(jià)值,價(jià)值最好要關(guān)聯(lián)到應(yīng)用層面甚至商業(yè)化層面。
- 你參與的部分在整個(gè)項(xiàng)目中的作用,最忌自己的部分說的清清楚楚,跟其他部分怎么合作一臉懵逼,這是典型的沒有大局觀,自己把自己當(dāng)螺絲釘。
- 過程中遇到的困難和解決方案,這部分需要深入挖掘整理,很多同學(xué)做事情的時(shí)候其實(shí)挺困難的,做完以后又云淡風(fēng)輕覺得不過如此,感覺也沒有講的必要,這是非常不可取的。需要review到當(dāng)時(shí)的能力和狀態(tài),完整梳理當(dāng)時(shí)為什么會卡殼,都試了哪些錯,為什么那些錯誤的方向不work,怎么想到正確的方案的,正確的方案為什么work。
- 從現(xiàn)在的角度出發(fā),回顧項(xiàng)目,提出現(xiàn)存的問題及更優(yōu)的解法或提升方案。
講解項(xiàng)目要達(dá)到下面的程度:
- 對于沒有領(lǐng)域背景,或只有比較通用的、一般的算法知識的人,能夠比較輕松的理解你所講的內(nèi)容,明確你工作的價(jià)值
- 對于比較有經(jīng)驗(yàn)的人,你能夠應(yīng)對他們提出的挑戰(zhàn)
特別是第一條,有的同學(xué)把項(xiàng)目的重點(diǎn)總是放在算法細(xì)節(jié)上,這對于方向跟你一致、背景跟你相似的面試官而言是合適的,但對大部分面試官不合適。我如果連你構(gòu)建的場景和問題都沒有代入,基本上就不用談對你的算法有什么看法了,更無法理解其中的精妙之處。如果我對你所說的名詞沒有一個(gè)基本認(rèn)知,連算法都無從談起。
算法的精妙需要大量的背景和前序知識鋪墊,帶著面試官進(jìn)入場景,分析問題,讓你的solution自然而然浮現(xiàn),這是比較好的狀態(tài)。
第二條的練習(xí)方式上一篇文章也有提,就是找比較有經(jīng)驗(yàn)的人去挑戰(zhàn)你,給你的解決方案提供一個(gè)alternative的方案,你來對面試官的方案做評價(jià)。
講得清楚才說明理解的到位,講不清楚,就是沒理解。
0x06:面試:開放問題
開放問題實(shí)際上是AI算法崗位要面試的重點(diǎn),由于是開放問題,反而不好做準(zhǔn)備,所以這里是比較見功夫的。開放問題主要考察這些內(nèi)容:
- 業(yè)務(wù)問題的抽象
- 可行性評估
- 溝通
所謂業(yè)務(wù)問題的抽象,指的是你能不能抓住主要矛盾,忽略次要矛盾,把一個(gè)產(chǎn)品經(jīng)理提來的,籠統(tǒng)的需求轉(zhuǎn)換為一個(gè)算法問題。
所謂可行性評估,指的是對于這個(gè)算法問題,你所需要的資源是否是可接受的,你所需要的前置算法是否是存在或滿足需求的。
所謂溝通,就是對你所不掌握的情況,你是否會主動確認(rèn),在整個(gè)解決問題的過程中,與面試官有良性互動。
開放問題還有一個(gè)特點(diǎn),就是如果你答的不錯,你自己是知道的,有一種”我的思路很對頭“的感覺。
我曾經(jīng)遇到的一個(gè)比較好的開放問題是:某業(yè)務(wù)希望以發(fā)滿減紅包的形式促進(jìn)用戶回流,問如何設(shè)計(jì)紅包的金額方案在給定預(yù)算下拉盡量多的用戶回來。
大家可以試試,這個(gè)問題我也沒有答案,所以不用問我了,自己思考自己評估即可。
另外一個(gè)有參考答案的開放問題見蘇神的博客 “熵”不起:從熵、最大熵原理到最大熵模型(二) - 科學(xué)空間|Scientific Spaces 中提到的快餐店消費(fèi)分布的估算問題,雖然這不是真實(shí)的業(yè)務(wù)問題,但也絕不是腦筋急轉(zhuǎn)彎。
btw, @蘇劍林 的博客建議所有算法工程師全篇通讀,記得多多打賞,在我所認(rèn)識的同齡人里,這位所展現(xiàn)出來的聰明度和勤奮度是首屈一指的。
0x07:面試:應(yīng)對挑戰(zhàn)
挑戰(zhàn)包括對項(xiàng)目的挑戰(zhàn),也包括一些意外情況,這里沒有套路和技巧了,只有一些方法論。
- 多做鋪墊:講算法先講思路,講項(xiàng)目先講背景。
- 合理推測:也許你不知道準(zhǔn)確思路或定義,但你可以合理猜測一個(gè),給出你猜測的理由并尋求驗(yàn)證。
- 實(shí)事求是:你永遠(yuǎn)不知道面試官的知識儲備剛好在哪一點(diǎn)上讓你踢到鐵板,所以不要嘗試糊弄他。也許一道沒做出來的代碼題不會讓你掛掉,但“嘗試糊弄”這種動機(jī)一定會讓你掛。
- 無需爭執(zhí):不要在一個(gè)點(diǎn)上與面試官反復(fù)拉鋸
- 注意細(xì)節(jié):細(xì)節(jié)體現(xiàn)真實(shí),細(xì)節(jié)體現(xiàn)差異??梢灾鲃犹岢鼍唧w的tricks分享給面試官,千萬避免泛泛而談。
- 堅(jiān)守本心:能不能接受加班?平常有什么愛好?這種問題與其浪費(fèi)心思琢磨面試官的意圖,不如怎么想的怎么說,是什么樣就說什么樣。心態(tài)就是雙向選擇,也許當(dāng)下你的當(dāng)務(wù)之急是不管什么先拿到一個(gè)offer再說,但實(shí)際上更重要的是找到一個(gè)合適的工作。
0x08:尾聲
這篇小總結(jié)乃是翻某個(gè)知乎問題的回答,看了大家哀鴻遍野的感嘆,所做的一點(diǎn)個(gè)人的小總結(jié)。其實(shí)我并不參加今年校招,所總結(jié)的未必正確。其中有些建議,似更加適合低年級的同學(xué),因?yàn)閭}促之間難見提升。有些知易行難,因?yàn)槌D牮B(yǎng)成的說話做事習(xí)慣本性難移,即使想偽裝也偽裝不來。
真是事到臨頭才準(zhǔn)備,那所能臨時(shí)補(bǔ)救的,可能也就是八股文和代碼題了,在這上面用功倒也無可厚非。
一個(gè)算法工程師應(yīng)該是什么樣?我以為這個(gè)角色應(yīng)該是產(chǎn)品中最懂算法的,碼農(nóng)中最懂業(yè)務(wù)的,科學(xué)家中最懂工程的,工程師里最懂理論的。這樣一個(gè)處在交界地中的角色,既能夠有深刻的業(yè)務(wù)洞察明晰價(jià)值,又有足夠的工程能力應(yīng)付落地,又有足夠的科學(xué)素養(yǎng)調(diào)研推導(dǎo),從而成為一個(gè)“擅長理解問題和解決問題”的人。解決業(yè)務(wù)問題若成為算法工程師之核心價(jià)值,那這樣的人選該有什么樣的素質(zhì)和天分,該以什么樣的題目和形式進(jìn)行考核,也就不問而知了。
