好難選??!
時間:2021-08-19 16:29:55
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(dǎo)讀]大家好,我是小林哥。昨天寫的「圖解Redis|AOF日志」,竟然翻車了,這篇寫的很認真,還沒看到小伙伴可以去看看。說正事。前段時間,有位讀者跟我發(fā)消息說,他拿了這三個實習(xí)的offer。不知道你們驚呆沒,我是當場驚呆了,感覺這三個閉著眼選都沒問題,這個問題就好像是選北大還是清華,就...
大家好,我是小林哥。昨天寫的「圖解 Redis | AOF 日志」,竟然翻車了,這篇寫的很認真,還沒看到小伙伴可以去看看。說正事。前段時間,有位讀者跟我發(fā)消息說,他拿了這三個實習(xí)的 offer。不知道你們驚呆沒,我是當場驚呆了,感覺這三個閉著眼選都沒問題,這個問題就好像是選北大還是清華,就是這么樸實無華。后面他選擇了去天美,原因是他本身對游戲興趣就很強烈,他學(xué)習(xí)編程的起因也是源于游戲,他對游戲的熱愛是從小就有的了。看到這,大家很想看這位讀者的經(jīng)歷吧?小林有先見之明,所以今天邀請了這位讀者來分享他的校招經(jīng)歷和學(xué)習(xí)經(jīng)驗。不多 BB 了,直接發(fā)車!
阿里阿里云C 研發(fā)。
Momenta Deep Learning。
大疆自動駕駛測試開發(fā)。
當然,也不是一帆風(fēng)順,面掛了有:
基本信息
Hello,這里是傘兵一號。本人是一個小菜雞,雙非,軟件工程專業(yè)。本科一直在ACM實驗室,但是面試結(jié)束之前都沒有拿過牌(沒打過現(xiàn)場賽)。自己由興趣做了兩個項目,一個是大一時候做的 Unity3D 的一個 FPS 游戲,還有一個是 CV AI 的一個項目。本次春招靠運氣拿到了幾家不錯的 offer。字節(jié)跳動今日頭條后端。騰訊天美服務(wù)器后臺開發(fā)。阿里阿里云C 研發(fā)。
Momenta Deep Learning。
大疆自動駕駛測試開發(fā)。
當然,也不是一帆風(fēng)順,面掛了有:
- 微軟蘇州 SDE(被調(diào)劑,相當于掛)
- 網(wǎng)易雷火筆試
春招經(jīng)歷
三月
都說金三銀四,但是因為我覺得自己太菜,三月份我不敢投任何一家,3/20 號微軟截至投遞,因為我對 WLB 的追求,微軟一直是我的 DreamOffer。所以我在 3/19 投出了我的第一份簡歷,可以看到,簡歷上實際上大部分是用來充數(shù)的,項目的話除去上面兩個項目其余都是課程設(shè)計,獎項也因為本人太菜和本次 ACM 賽季的延遲,含金量不是很高,所以我當時投出去內(nèi)心是十分坎坷的。幸運的是收到了微軟的筆試通知,3/27 參加了筆試,拿到了滿分,到這里三月份就結(jié)束了。四月
4/1, 下午投了網(wǎng)易雷火,晚上就筆試,我把自己作死了。具體是怎么回事呢,大概是我看到一道 dp 可寫,但是我沒寫,我覺得最后一題那個數(shù)電模擬題比較有意思,我就去寫那個了,但是一直 TLE,最后 2.5 道題恥辱退場,成功把自己玩死了。4/8, 收到了微軟的面試邀請,此時我對于除去 C 之外所謂的八股文完全沒有看過,但是聽說微軟那邊主要注重于算法。我也沒有專門去準備「八股文」,就這樣,我開始了人生中的第一場面試,第一場面試體驗非常好,一直聊項目。最后寫算法因為緊張還聽錯題目了,發(fā)現(xiàn)聽錯之后面試官非常 nice 的說,沒事,就當作是你寫了兩個題。4/16,微軟終面,面試很順利,后面面試官問我,如果以你的FPS項目為基礎(chǔ),設(shè)計一個多人對戰(zhàn)服務(wù)器,怎么設(shè)計,并且面試官和我說:「如果這個問題你能答上來,我覺得今天面試結(jié)果還是非常不錯的」。我之前也沒仔細看過這方面,就憑借著多年游戲經(jīng)驗答了,我答了傳包協(xié)議和原因,具體設(shè)計,面對高負載采用主從模式容災(zāi) 分布式處理,采用類似于幀同步的方式。面試官認同了我的方案,說我說的是一種非常經(jīng)典的游戲服務(wù)器設(shè)計方案,面試結(jié)束之后我去問了在騰訊搞游戲的學(xué)長,他說我說的都在點子上。我這時候以為大約有 5 成把握了,而且很奇怪,面完之后我就不想面其他家了,一直在等消息,那段時間很焦慮,學(xué)不進東西。4/26,轉(zhuǎn)折點來了,我那批面試的人,微軟發(fā)了第一批(也是唯一一批)offer,沒有我,這時候我開始慌了,開始去準備簡歷投其他公司。4/27-4/30,投了BAT、Momenta、大疆。大疆 4/27 當晚直接面試,Momenta 也約當晚,但是以為那周考試,我推到 4/30 面試。兩家面試都很順利,4/30 當天收到了 momenta 約我 5/6 二面的通知。五月
5/1,收到了騰訊通知 5/6 面試一面(如果不加班的話,為什么5/1通知呢,如果加班的話,為什么 5/6 面試呢)。五一小長假大概過了一遍小林的「圖解網(wǎng)絡(luò)」和挑著看了看「圖解系統(tǒng)」。5/6,下午 Momenta 終面之后騰訊一面,也蠻順利的,面完騰訊一個小時后通知晚上二面,二面是一位 old-fashion 的工程師,用 c 寫了算法。字節(jié)也約了 5/8 一面。5/7,騰訊約 5/8 三面,大疆發(fā)了 offer。5/8,上午字節(jié)一面很順利,中午約了 5/10 二面,阿里這時候也約了當天晚上一面,下午騰訊三面聊的很開心,面試官非常認可我項目的解決方案,之后開始聊游戲設(shè)計和游戲服務(wù)器技術(shù)的發(fā)展,聊的很投機,三面結(jié)束后幾分鐘,官網(wǎng)顯示到了HR面試階段。過了一會約了我HR面,當天晚上阿里一面,問的很難,我大概憑借經(jīng)驗答上了 60% 左右,我以為我掛了,過了十分鐘左右打過來直接二面,二面相對順利。5/10,下午字節(jié)二面結(jié)束之后直接三面,聊的都很不錯,然后直接HR面,不得不說,效率是真的高啊。Momenta 發(fā)了o ffer。5/12,字節(jié)發(fā) offer 了,阿里約我第二天三面,晚上騰訊給了口頭offer。5/13,阿里三面,本來是釘釘面試,因為網(wǎng)絡(luò)問題變成了電話面試,聊了項目,給面試官介紹了 ACM 比賽(面試官問我,說我本科在 ACM 實驗室搞算法,為什么連SVM的實現(xiàn)也不了解,所以我介紹了 ACM 比賽。5/14,坐上了去銀川的火車,坐了十個小時,第一次去參加ICPC線下賽,運氣好,拿了銀牌(銀川賽站相對其他賽站含金量要低)。5/17,在回來的路上收到了阿里約HR面的電話,(因為火車進山了,打了三次才約成時間,麻煩人家了。5/19,騰訊發(fā)了offer,阿里HR面,面完之后當晚發(fā)了offer。至此,我的春招結(jié)束了。總結(jié)一下吧,能拿到這些 offer,運氣也占很大一部分。面試中項目占了很大一部分時間,和面試官聊的也很開心,也得到了許多很棒的改進建議,充分的認識到了自己的不足。其實這么多場面試下來,我覺得更多的不是像考官-考生這樣的關(guān)系,更多的像是兩個「技術(shù)宅」在聊天,都感覺到大家非常友善,互相交流技術(shù),面試體驗一級棒。學(xué)習(xí)經(jīng)歷
記得當時在知乎上看到這樣一個問題:「你為什么選擇計算機專業(yè)?」我在這里選一部分我當時的回答。一句話,源于游戲。小時候家里在山村里,爸爸到城里去工作,家里一般只有我和我媽媽,我哥家有一臺小霸王游戲機,我就幾乎天天都想跑去他家頂蘑菇,玩雪人兄弟,魂斗羅。兩個小孩玩的也蠻高興的。后來應(yīng)該是我爸媽看到了電視上小霸王「學(xué)習(xí)機」的廣告,以為真的能「學(xué)習(xí)」,就給我也買了一臺。結(jié)果到手之后發(fā)現(xiàn)不太對勁,就和我說每周只能禮拜五玩一個小時。六歲時候我搬到了城里,這臺游戲機又繼續(xù)陪伴了我大約三年的時間,那時都手柄很劣質(zhì),大概十塊錢還是五塊錢一個,經(jīng)常十字鍵就搓斷了,只剩一個搖桿,我就那張衛(wèi)生紙墊在上面繼續(xù)玩,經(jīng)常把我大拇指的皮搓破。。。每次在外面受了傷或者去醫(yī)院看完病回來,疼的不行的時候我媽就和我說:“去吧,打開游戲機玩會”。每次打開游戲我的疼痛就瞬間蕩然無存。慢慢的,我也學(xué)皮了,學(xué)會了偷偷打游戲,好幾次我媽摸了摸電視屁股,然后我就遭了打。。到后來小霸王掛了,家里買了臺世嘉 MD2,當時的第一感覺只有震撼。“這上面的畫質(zhì)太好了,游戲也比「黃卡」游戲機上的好玩”。還有一個經(jīng)常和朋友們交換的密碼本。不過「黑卡」游戲機的卡帶太貴了,記得當時買的一款國內(nèi)的游戲是 40 元,帶紙盒和說明書。這對于當時一周 5 塊錢零花的我來說是要攢兩個月左右的。形成鮮明對比的就是之前的「黃卡」,幾乎都是 x in 1,不過這也給我?guī)砹撕糜螒蛑档没ㄥX的感覺。沙丘魔堡,幽游白書,光明力量,戰(zhàn)斧,炸彈人,Super Off Road 等等,好游戲太多太多了。另外有個小插曲就是我小學(xué)一年級的時候得了過敏性紫癜,住院了。有兩個東西讓我印象深刻。一個是我媽媽送給我的一本書《小熊開店記》,還有一個就是我爸爸的朋友送給我的電子積木玩具,這兩樣?xùn)|西也是對我數(shù)學(xué)和電路的啟蒙吧。初中的時候,通過盜版 cod 接觸到了主機游戲這一塊兒,和好朋友邊玩邊贊嘆這他媽就是藝術(shù)。當時頂著 800x600 的分辨率和全低畫質(zhì)打完了cod9,從此開始研究硬件,天天心心念念著我那份 1200 塊極致性價比裝機單。100 多塊錢買了根三星 2G 內(nèi)存條發(fā)現(xiàn)電腦滴滴的響,商家又給我換了一條藍魔,插上能用了,我的電腦也升級為了 4G 內(nèi)存,裝機的夢想也是高考完了才實現(xiàn)。12 年接觸到了 steam,也第一次買了正版游戲,省吃儉用一年花 240 買了盒裝的cod8。大概是 13 年吧,有一天好哥們拿著本 ivon horton 寫的《C語言入門經(jīng)典》神秘兮兮的和我說:“咱們玩了這么久的游戲,要不要寫個游戲玩玩”。就這樣,初中時候接觸到了 c 語言,算是知道了這么個東西(初中課上vb沒好好學(xué))。從此立下了改變中國游戲局面的志向,進入了這一個大坑。“我們總想著改變世界,其實不被這個世界所改變已是奢求”中考之后我去了一個垃圾省重點,好哥們?nèi)チ耸?nèi)三大高中之一。高中期間他繼續(xù)閱讀 C 入門,我看完那本 C 之后也就沒寫過代碼。高考我發(fā)揮失常,他發(fā)揮正常,他去了某 985 學(xué) CS,我到了雙非學(xué)SE。(我們兩個學(xué)校的名字也挺有意思的,我經(jīng)常和他說我們是兄弟院校)這里插一句,到現(xiàn)在實際上挺感慨的,性能不錯的電腦也有了,也用獎學(xué)金買了 switch 和 PS,可是玩游戲的時間卻越來越少了。到了大學(xué),一開始自己搗鼓了幾個月 unity,做出來個 FPS 游戲,自己通過 youtube 和官方文檔好不容易把重力系統(tǒng)搗鼓出來,又加了加技能,特殊彈藥和 BOSS 戰(zhàn),雖然啥也不懂,但是慢慢搗鼓出來,很開心。后面聽說了 ACM 比賽,開始自學(xué)劉汝佳老師的《算法競賽入門經(jīng)典》(所謂的「入門經(jīng)典」,我到現(xiàn)在還沒刷完),之后進入了 ACM 實驗室,進入了天坑。算法的學(xué)習(xí),如同吉老師說的,現(xiàn)在 ACM 算法競賽和實際工作需求的偏差越來越大。我個人 ACM 的學(xué)習(xí)過程是相對曲折的,因為我們是自己找題訓(xùn)練,在學(xué)完基礎(chǔ)的算法過后,有一段時間進入了迷茫期,不知道學(xué)什么,怎么學(xué),現(xiàn)在的話有譬如 acwing 這樣的網(wǎng)站可以系統(tǒng)性的針對算法競賽進行一個學(xué)習(xí),我認為是很不錯的。就我本次春招找工作中遇到的算法題來說,總體難度不是很高,如果你有 ACM 經(jīng)驗的話當然更好,但是沒有搞過 ACM 也沒有關(guān)系,掌握基本的算法思想如二分,分治,普通的動態(tài)規(guī)劃,DFS/BFS和基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)如樹,棧,隊列,堆,鏈表即可。我個人的話是在 leetcode 上刷了 100 多道題目左右,難度分布大概 4Easy-4Medium-2Hard 這樣子,如果沒有 ACM 經(jīng)驗的話推薦刷 300 多道應(yīng)該也差不多,重點在于掌握思想,而不是去死記硬背。有 ACM 經(jīng)驗的我也建議大概刷一下 leetcode,相較于 ACM 比賽還是有一點差別的(當然,大佬除外)。面試題中思維題居多,想鍛煉思維的話也可以到 codeforces 上刷一些題目,推薦 DIV3 的所有題目和 DIV2 的前三道題,非常鍛煉思維能力。學(xué)習(xí)方面的話,專業(yè)課均分保持在 90 ,因為考試相對簡單。我認為,計算機基礎(chǔ)是最重要的,什么語言無所謂,語言只是一個工具,只要對計算機足夠了解,學(xué)任何東西都會快速上手。從那時開始買書,我在實驗室的工位也慢慢壘起了一座小書山。這是我大二時候的座位。閱讀經(jīng)典書籍,讓我受益良多,特別是黑皮書系列,yyds!我印象深刻的是《計算機組成原理:硬件/軟件接口》書中說的計算機系統(tǒng)結(jié)構(gòu)的八個偉大思想:正如 David Wheeler 所言:All problems in computer science can be solved by another level of indirection后面學(xué)習(xí)不論是計算機網(wǎng)絡(luò),還是操作系統(tǒng),都對這幾個思想印象深刻,感覺都是這幾個思想的具體化實現(xiàn),類似于 cache 或者 Redis 這樣的技術(shù),我認為實際上就是利用了加速大概率事件,和存儲器層次的思想去進行設(shè)計和加速。在選擇專業(yè)方向分流的時候,我覺得,程序員多少應(yīng)該學(xué)習(xí)底層(只是本人的拙見),我選擇了有 x86 匯編,arm 匯編的方向,我認為這些屬于程序員的內(nèi)功。尤其是 C 程序員,要對匯編和內(nèi)存有具體了解,看到代碼,我們要具有通過編譯器視角,CPU 視角去看代碼的能力,所謂的「知其然,知其所以然」。如同侯捷老師所言:「學(xué)習(xí)需要明師。但是明師可遇不可求,所以退而求其次你需要好書,并盡早建立自修的基礎(chǔ)。迷時師渡,悟了自渡,尋好書看好書,就是你的自渡法門?!?/p>我在學(xué)習(xí)過程由衷的覺得機械工業(yè)出版社出版的多本經(jīng)典書籍讓我受益良多,比如龍書《編譯原理》,上文提到的《計算機組成原理:硬件/軟件接口》,還有《計算機網(wǎng)絡(luò)自頂向下方法》《現(xiàn)代操作系統(tǒng)》《匯編語言基于x86處理器》等等,都是經(jīng)典中的經(jīng)典。還有 effective 三部曲,《代碼大全》《深度探索C 對象模型》《STL源碼解析》等好書,無一不讓人讀起來大呼過癮(當然我還沒全讀完,最近準備去補一下 CSAPP,英語版好貴?。。?/p>英語對于程序員來說也是重中之重,有很多時候要去外網(wǎng)求解,比如 stackoverflow 上和暴躁老哥激情對噴,到 github 上和大家同性交友等等。不過我學(xué)習(xí)英語的道路比較畸形,小時候上了幾年補習(xí)班背了幾千詞,之后再也沒有背過英語。后面英語的提升就是通過看視頻和玩游戲和老外聊天,友(激)好(情)交(對)流(噴)來學(xué)習(xí)……
“計算機科學(xué)中遇到的所有問題都可通過增加一層抽象來解決”
一點建議
小林哥讓我給在校生一點學(xué)習(xí)建議,但我也是在校生,談不上能有什么資歷給大家建議,只能說給大家分享一點經(jīng)驗吧。如果您是剛?cè)雽W(xué)的大一大二的學(xué)生,那么我建議您要著重計算機基礎(chǔ)知識的學(xué)習(xí),語言只是表達思想的工具,對于計算機的理解會幫助您去理解學(xué)習(xí)語言。同時也要注重實踐,多去寫代碼,學(xué)會使用 Debugger 去調(diào)試,選擇一個現(xiàn)代的 IDE,可以幫助您去更好的學(xué)習(xí),如 JetBrains/VisualStudio 等,這些學(xué)生都可以去申請免費試用,可以去申請 GitHubStudentPack。學(xué)習(xí) Linux 也可以使用 WSL 去學(xué)習(xí),相對安裝 Linux 系統(tǒng)來說要簡單許多,同時也不要忘記了學(xué)習(xí)代碼風(fēng)格,代碼風(fēng)格太差會影響你找 BUG 的能力和耗費的精力,也有可能造成一行代碼報五個錯的奇葩情況。還要學(xué)會如何使用搜索引擎,查找文檔可以去 Microsoft Document、IBM Knowledge Center、cppreference 等,找具體問題可以去? Github 和 StackOverflow 等,學(xué)會如何提問也是一種很重要的東西。對語言不必要求什么都學(xué),我認為到畢業(yè)時會使用一門 OOP 語言和一門腳本語言即可,語言實際上是一種觸類旁通的東西,重點在于思維的培養(yǎng)。要去大膽的做一些自己當前能力之外的項目,在學(xué)習(xí)完基本的軟件工程學(xué)的基礎(chǔ)上,或者說只要你了解了面向?qū)ο笏季S和基本的設(shè)計原則如「高內(nèi)聚,低耦合」。去做一些自己真正感興趣的事情,自己去設(shè)計這個軟件的架構(gòu)和實現(xiàn),所謂實踐出真知,不要懼怕做有挑戰(zhàn)性的項目,Just do it(干就完了)。對于未定義行為(undefined behavior)不必耗費太多精力(如 i i i
這樣的毒瘤題目。如果您和我一樣是大三大四的同學(xué),正在找工作或者準備找工作,那么我推薦您大致看一下面試經(jīng)驗,復(fù)習(xí)「八股文」,實際上我建議您結(jié)合之前的學(xué)習(xí)去理解,很多東西是上文提到的八大思想的具體實現(xiàn)。以我個人為例,我在學(xué)習(xí)「八股文」期間,很多東西是去理解,把他掛載到之前的一個知識點上,面試開始前幾個小時去大致看一下具體細節(jié),在理解的基礎(chǔ)上,您可以和面試官款款而談。對于「八股文」,我們要盡量融會貫通,建立起完整的計算機體系知識結(jié)構(gòu),這樣學(xué)習(xí)起來會事半功倍。對于算法的訓(xùn)練,如同上文,刷一刷 leetcode,總結(jié)一下算法思想,再加上適當?shù)木毩?xí)即可。對于自己寫的項目,大致回想一下有哪些技術(shù)難點或者有趣的地方,能夠具體從想法的出現(xiàn),解決的方案,中途的問題,后續(xù)的測試,未來的發(fā)展方向做講解即可。總結(jié)
說了這么多,總結(jié)一下。實際上回顧我這一段時間的學(xué)習(xí)生活,其實都源自與對于計算機的興趣,其實很多時候不像是在學(xué)習(xí),更多像是在玩,在我的眼中,計算機是個很有意思的東西,不論是自己去組裝臺式機,還是去寫代碼,更多的是基于興趣的學(xué)習(xí)和實踐,我認為實踐在這門學(xué)科中和學(xué)習(xí)知識是同等重要的。我始終認為,計算機基礎(chǔ)知識是一切的基礎(chǔ),具體語言,各種工具只是「外功」,但是計算機基礎(chǔ)知識就是「內(nèi)功」,只重視外功的招式,而不注意內(nèi)功的修行,是不可能成為高手的。最后以我很喜歡的侯捷老師的一句話做結(jié)尾:“萬丈高樓平地起,勿在浮沙筑高臺”實習(xí)只是開始,今后還望能繼續(xù)進步,與君共勉。本文只是個人觀點,只能給大家提供我的學(xué)習(xí)歷程和思考角度,并不代表這樣就是對的,我也只是一個在慢慢摸索的菜雞罷了,也受我本人狹隘眼界的局限性,還請大家見諒。十分感謝小林哥給我這個機會能夠和大家進行經(jīng)驗交流與分享。在這里祝看到這篇文章的您,萬事勝意。