非科普通985碩進大廠的後端程序員的個人秋招總結

又到一年秋招季,據說今年就業形勢不好,但我自己是沒怎麼感覺到。可能是由於準備的早吧,來分享下秋招經驗,純粹個人經驗,不保證正確,僅供參考。

面經

投了10個左右,面了7個,拿了5個offer,面經如下:

  1. 雲從 C++工程師
  2. 盛大 C++服務端
  3. 美團 後端
  4. 網易互娛 遊戲研發
  5. 字節跳動 後端
  6. 攜程 後端 涼經:
    就涼的很莫名其妙,一面就balabla介紹自己,介紹自己的項目,吹了下嵌入式TDD的各個要點,然後就面試官說,看你學習能力很強,我會推薦你入下一輪。然後就再也沒消息了。
    感覺攜程也不是很想招人,面試體驗也不好,好幾組在一個房間裏一起面,特別吵,面之前在門外小道排隊,和民工等發工資似的。外面看着SOHO很大氣,內部真是一言難盡。
  7. 地平線 嵌入式 涼:
    二面涼的,也是不知道爲什麼,面的感覺沒啥問題,面試官也說會推薦給下一輪,然後就沒消息了。都是命吧。面經沒記。

非科班如何進大廠

自我介紹下,上海普通985的碩士,非科班,就是那種看上去和編程毫無關係的專業。但研究生階段實際上做的是嵌入式方面的工作,沒有人帶,純粹自學。

總的來說,作爲一個非科班的能夠秋招找的這麼順利,按我自己看來應該主要是因爲準備的早。一定要提早準備!

如果你還是大二,或者研究生剛剛入學,正好看到這篇文章,那是最理想了。這樣你有充足的時間去準備。我自己是從大二大三那樣就確定了以後要做程序員了,所以從那個時候就已經開始自學編程,開始積累博客。

作爲一個非科班的,你要和科班的競爭進大廠,怎麼競爭?

大廠看重什麼

要知道大廠最看重什麼 — 技術熱情學習能力基礎知識。反而小廠才更加強調技術水平,要求你一上來就能幹活。大廠願意花成本來培養人才,你要做的就是讓大廠相信他能夠把你培養成人才,相信你值得培養。不要以爲你在簡歷上寫一句:有技術熱情。有任何用處。漂亮話誰都會說,關鍵不是你說了什麼而是你做了什麼。

怎麼體現技術熱情

那怎麼證明你有技術熱情,或說怎麼證明你願意鑽研技術?舉幾個例子:

  1. 長期維護博客絕對算是一個很好的方式,而且一定要是長期維護,而不是臨時創建應付人的,這是臨時抱佛腳不了的,也是你和其他那些沒有長遠規劃的面試者的一個很大的區分點,它直接就代表着你的技術積累,你對技術的鑽研。當然你的博客一定要寫的有水平,而不是到處複製黏貼。面試時面試官是完全有可能直接點進你的博客去看的,看到幾篇文風良好、邏輯清晰、排版舒適的博文絕對是加分項,如果分享了代碼,一定要注意代碼質量。反之,要是各種複製黏貼,代碼格式亂七八糟,請問你是故意讓面試官知道你是什麼垃圾麼? 另一個好處就是它本身就是你對某方面鑽研過的一個直接的證明。比如要是看到JD上要求能閱讀英文技術文檔。我就直接扔上去一句,博客上有10W字技術文檔翻譯,效果好過一句各種自誇的話百倍。
  2. 如果參與了高星的Github開源項目,或者自己有長期維護的開源項目,那自然也是十分棒的!這個也不是可以臨時抱佛腳的,如果有精力的話去嘗試一下吧。
  3. 參加各種編程相關競賽,這個太重要的,如果你有ACM競賽的獲獎精力啥的,SP那還不隨便拿。直接證明了你的算法基本功。但是非科班的機會比較少,自己看情況吧。起碼數學建模參加一下,可能還可以作爲面試時的談資。
  4. 通學某大型開源庫,這個一般要根據JD的要求,學JD裏有提到的那些庫,如果直接把研究結果反到博客上那自然是極好的,但是是真的要好好學,因爲可能會被面試官往死了問哦。這本來也是面試準備裏頭要做的事之一。

怎麼體現學習能力

學習能力怎麼體現? 學歷和你在學校的績點不就是最好的證明麼。 要是你高考能上清華北大,或者績點很高,常年班級第一,誰會質疑你的學習能力和智商?頂多就是質疑你的態度,願不願意學編程而已。

已經看到這篇文章了,學歷自然是很難改變了(當然本科的話也可以通過考研來提升學歷)。要是來的及的話,一定要保證你的績點儘可能高,各種拿獎學金。

注意:你都已經要當程序員了,那些學生會、各種社團的幹事呀什麼的人際交往方面的東西就別屁顛屁顛的各種參加了,這對於程序員來說是減分項,寫簡歷上還不如不寫,有這時間還不如多做幾道算法題。要清楚你想要什麼,多做對你的目標有用的事,別各種湊熱鬧看別人都在幹什麼就也着急忙慌的做什麼。

當然,學習能力也可以通過紮實的基礎知識來側面體現,也算是學歷和績點都不行時的救命稻草吧。

怎麼自學基礎知識

非科班的肯定先天在基礎知識上相比科班有所欠缺,但也不用把這想爲劣勢,因爲一方面,其實完全可以通過自學達到科班的水平,另一方面,因爲知道你非科班,面試官本身在校招時就會降低對你的期望,這樣,其實只要你達到和另一個科班同等基礎水平,那自然更傾向選你。爲什麼?因爲你自學能達到和科班相近水平,那可不就證明你比科班的學習能力強的多麼?

自學編程怎麼自學?如果你是非科班的就別指望在課上學的那些編程了,那連玩具都寫不出來。別看國內某某著名2X寫的那個 C/C++的書,簡直就是錯誤示範。要學就找那些外文經典著作一本本完完整整的學,不是崇洋媚外,外國當然也有2X書,但是能引進國內或者能夠讓國人知曉的自然都是那些真正好的,多學習大師寫的代碼自然能潛移默化的讓你養成良好的代碼習慣和抽象思維。

至於學習路線

不管你是做什麼的,都強烈推薦讀完以下幾本:

《編碼》
《網絡是怎樣連接的》、《程序是怎樣跑起來的》、《計算機是怎樣跑起來的》(三件套)

都是科普性質的,讀起來非常順暢,當小說讀就好。快點的話兩週能幹完一本。讀完就能對我們現代整個的計算機系統有一個全局的理解(其實也基本夠面試的時候吹吹牛皮了)。

作爲後端方向主要要關注:語言本身、算法與數據結構、計算機組成原理、操作系統、計算機網絡、數據庫原理、選學編譯原理。

語言本身,後端基本就兩個路線:C/C++以及Java
由於我之前做嵌入式的,自然的就使用C了,個人十分推崇C,因爲它強迫程序員思考程序的本質,強迫各種造輪子,雖然可能不見得利於工程,但是卻很利於個人水平的提高。
如果要學C的話,學通一本C聖經:《C Programming Language》就幾乎搞定了所以語言方面的了,剩下的都是一些實踐以及上層概念方面的東西了。
然後要學C++,學習一些面向對象的知識,更高級的那些概念,這些都是面試中很常考察的知識點。C++另人頭大,內容太多了,只能花時間慢慢啃。有好幾本經典書籍都可以看。比如《C++ Primer》。特別厚,學完一本要好久,個人只讀了半本。而且學完語言本身,你還得去學學STL庫的實現,面試常考。

如果你用Java的話,那後面所有的內容都要相應變化。JAVA有自己的一整套體系,JVM、Spring全家桶啥的,自己去了解。

除了語言本身外,最重要的就是數據結構與算法了,重要到什麼程度?哪怕你其他基礎知識啥都不會,如果你數據結構與算法學的好到一定程度,很多大廠照樣要你。 程序 = 算法 + 數據結構
《數據結構與算法分析—c語言描述》這本學透就夠了。剩下的一些小算法知識點在找工作前稍微刷刷題補一下就沒問題了。

計算機組成原理其實就讀上面的三件套就夠了,進一步應該趕快學學《CSAPP》,優先級很高的,神書。

操作系統來說,有時間的話去讀讀《APUE》、《現代操作系統》。個人是學了RTOS,學了相關的書籍。麻雀雖小,該有的幾乎都有,基本知道OS的知識點,算是取巧了。

計算機網絡原理,讀了《網絡是怎麼連接的》實際就已經夠面試時候80%的知識點了,剩下的根據面經補充一下一些細節知識就行。但是要好好學的話應該再學學《TCP/IP 詳解》《計算機網絡 自頂向下方法》,畢竟我們不光是爲了找工作而學習。還得考慮以後晉升不是?搞不好什麼時候某個知識就突然用上了呢。

數據庫原理。這個是我的弱項,我面試時是直接說自己沒學,直接屏蔽掉數據庫相關問題的,實際上對後端來說數據庫是很重要的一個知識點。MySQL,Redis什麼的都是現在實際很常用的數據庫,需要去學習他們的原理、應用什麼的。索引優化啥的可以考的很深。以及數據庫相關架構啥的,讀寫分離、複雜均衡之類的東西可以通過看相關公衆號文章補一補,我應該自己看了些公衆號文章,所以面試的時候還能扯一扯這些。。。

編譯原理。這個就完全是託我搞嵌入式的福了,由於在嵌入式開發中我整天在各種反彙編,設置鏈接器配置文件,設置編譯器參數什麼的,對這些學的比較透徹。編譯鏈接這方面的知識比較底層,不一定會考,但是一定是加分項。知其然還要自其所以然。能夠把整個過程講清楚也能給面試官一個很好的印象。當然其實惡補一下,也沒太多知識要記。

總的來說,以上都是要花很多時間去提前準備的,而把你和其他目標不明的應屆生區分開來的關鍵其實就是這些無法臨時抱佛腳的東西。後面這些東西都是可以速成的。

校招準備

關於實習

怎麼說呢。大部分人都說一定要找實習。但是其實我是沒有實習的,照樣拿了這麼多offer。

總結說來,如果你的科研項目和你的崗位毫無關係,根本扯不上,就沒有編程的那種,那你無論如何一定要去實習,揹着導師偷偷去也得去。千萬別信導師那些鬼話,什麼跟着他把項目好好搞好對工作有什麼什麼好處,什麼幫你介紹好工作什麼的,都是扯淡。導師爲了自己的利益什麼鬼話都說的出來。不然等你寫簡歷時你會發現你根本沒東西可寫!

而我之所以沒實習也過的去的原因是因爲我在科研項目中就是負責編程的,SOA的IOT這樣的,所以其實我還是能寫一些東西的,面試的時候還是有得講的。當然,由於我做的是嵌入式,而找工作找的都是後端,不是很匹配,所以感覺就是因爲這個原因,各個廠都只能頂多給大白菜,沒有給sp的。或許我要是找了個AT的實習的話就能拿SP了對吧。

簡歷編寫

簡歷一定要好好準備,千萬別自己xjb亂做,也別上網隨便搜那種花裏胡哨的模板,就簡明扼要就行了。推薦就直接使用超級簡歷app 上的模板,照着提示往裏頭填就好。

寫簡歷時關鍵就是用簡單的語句突出自己的優點,和JD儘可能匹配,廢話不要有,各種語氣詞不要有。這些要點你可以直接去知乎上搜索 應屆生簡歷 相關問答來學。當時我寫簡歷之前看了好久的知乎相關問答,然後再各種改,才終於改出了個還不錯的簡歷的。簡歷十分關鍵,連簡歷都入不了HR的法眼那連面試機會都沒有。

我寫的時候就是把自己想想成HR,HR一天要看幾百上千份簡歷,根本沒時間一個個字細看,所以你要想象你就是那個已經看了幾百份簡歷的HR,根本沒有心情細看簡歷了。想問你能夠在兩三分鐘能看完你自己簡歷的重點並且對你產生興趣麼?因爲要是兩三分鐘沒有吸引住你自己的話,那你這簡歷可能就要被永遠扔進垃圾桶了呀!

筆/面試準備

經過前面N久的基礎知識學習,實際上你已經具備了拿offer的基本條件,但是理論和實際是有差距了。爲了能夠成功拿到心儀的offer,應該要在筆/面試前做如下準備:

  1. 刷算法題:《數據結構與算法分析》學完並不能保證你遇到真正的算法題會做,這個是要刷一些題目找感覺的。另外,那本書上並沒有包含所有算法技巧,比如快慢指針判斷有環什麼的技巧。但是隻要你刷到了對應題型,遇到一次就基本記住了。刷題網站很多,可以在leetcode或者牛客網上刷算法題。面試和筆試時一般考的難度是easy到medium這樣,偶爾會有hard的。能把所有題都刷過去自然好,不能的話也按分類,把主要的幾種類型的題都刷一些。刷個兩百道應該就可以上戰場了。這也是爲筆試做準備。不同公司如有筆試會用不同的考試系統,在在線筆試前最好多去熟悉下編程環境,輸入輸出什麼的,避免不必要的丟分。
  2. 刷面經:雖然你學了一堆基礎知識,但總是會有遺漏的。這種時候就得靠面經來查缺補漏以及臨時抱佛腳了。特別是後端,我面了這麼多家,雖然不同家的偏重不一樣,但是幾乎是逃不出面經中的那些知識點範圍的,所以面向面經準備真的很重要。隨便給貼一個我準備時看的面經:
    https://blog.csdn.net/shanghairuoxiao/article/details/72876248
    再次強調,這主要是在你有平時積累的基礎上查缺補漏的,這麼多知識點真別想靠短時間內全學會。
  3. 簡短的個人介紹:絕對不能和簡歷內容衝突,但也不能背簡歷,多講些簡歷上沒寫的,作爲簡歷的補充。關鍵是要時刻體現出你爲什麼適合這份工作,別講一堆個人興趣愛好籍貫什麼的沒用的。這個知乎上也有問答,多去看看。

關於面試

不用太卑微,就和聊天一樣,面試官和你是平等的,他就是你未來的同事。如果他讓你感到噁心,那你也能大概知道這個公司是什麼水平,不去就罷了。

自信點,不要緊張,你就是要在這些時間裏儘可能的展現你自己。

有些問題沒答上來也沒什麼,沒人能夠什麼都懂,別影響後面的心態。

清楚一件事情:能把你叫來面試說明你的簡歷已經符合了這個崗位的要求了,只是叫你過來看看你是不是真的像簡歷上寫的那麼好而已。

我自己是因爲音樂上的事經常各種表演,所以已經練的根本不緊張了,面試還都蠻順利的,也不知道能建議些啥。

總結

總之,一定要有長久的個人規劃,併爲之不斷努力。機會是留給有準備的人的(當然我也認識抱佛腳三天進了騰訊的產品經理,但你不會想去賭這個概率的)。

另:工作原因。後面這個博客會慢慢轉向後端知識。嵌入式的知識大家且看且珍惜吧0.0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章