拿下15家一線互聯網Offer,一個本碩非科班碼農的後臺開發之路

先說明一下個人基本情況,本碩東南自動化,實驗室主要是做一些圖像處理相關的項目,後面發現自己對算法並沒有太大的熱情,於是轉向了C++後臺開發,在秋招過程中,投遞了大概10+家公司(基本都在7月份完成投遞),最終拿到了以下offer,大部分是sp或者ssp:

騰訊PCG分佈式存儲
百度Feed推薦技術架構部
阿里雲計算平臺事業部
字節跳動視頻架構
拼多多服務端研發
遠景智能後端開發
商湯科技後端開發
華爲頂尖人才計劃(***軟件院)
美團到店平臺技術部
網易互娛遊戲研發

拿下15家一線互聯網Offer,一個本碩非科班碼農的後臺開發之路

如何選擇

在開始介紹學習路線之前,想先和大家分享一下我的幾個觀點,讀研還是工作,算法還是開發,C++還是Java,國企還是互聯網,除了第一個問題外,都曾經困擾過我,當然我相信很多人也會遇到類似的迷茫,所以在這裏分享一些我的想法,希望能給有需要的人提供一些參考,自己已經想的很明確的可以直接跳過~

(1)讀研還是工作
這個問題是牛客上經常被討論的一個問題,已經拿了某大廠的offer是否還有必要讀研,這個問題我的看法是這樣:如果自己很明確就是想進互聯網做開發,並且讀研的學校比較一般,那我建議選擇就業,能力強的人在三年內就能有很好的技術積累,這些是在研究生期間很難得到的錘鍊;相反,學校本身還可以,自己也沒有明確以後就是互聯網做研發,有可能考慮國企或者研究所,或者從事偏研究性的算法工作,建議讀研,因爲國企和研究所學歷卡的比較嚴,讀研意味着以後有更多的選擇。對於我個人而言,本科階段基本沒有計算機相關的就業能力,所以讀研讓我有了更多的時間去思考自己的規劃,並且在自律上有了很大的提高,這些都算是我在讀研過程中的收穫。

(2)算法還是開發
這幾年算法由於起薪較高,偏研究性質的工作吸引了大量的人才涌入,也就造成了現在激烈的競爭情況,不過這都是符合市場規律的正常現象,畢竟風口在哪,熱錢就在哪,總會吸引一大批優秀的人才涌入。對於這個問題,我的看法是個人興趣結合個人特長,算法算是一個投入反饋比較慢的工作,也就是可能投入了大量的精力也會得不到實時有效的反饋,而開發則基本能夠得到實時的反饋,於是我這種本身不是很能耐得住性子的人,對於算法就有些難以接受了(個人有過一段1個多月的算法實習);同時,算法要求一定的數學能力,我很清楚自己更擅長一些邏輯性的問題,而不喜歡數學推理論證性的問題,這也會影響以後的上限。最後就是實驗室有一位堅定走在算法道路上的大佬,@daili0015(牛客),大佬讀完論文後經常腦子裏冒出一些騷操作,看的我是目瞪口呆,發現自己是真的不適合算法。

(3)C++還是Java
剛開始轉開發的時候,糾結過一段時間Java還是C++,有一位師兄勸我轉向Java,畢竟機會多,而我糾結了一段時間後最終選擇了C++,理由是:爲什麼大家都選Java我就要選Java呢,這可能也是性格偶爾有些叛逆的原因吧。好了,回到主題上來,C++應用場景確實不如Java廣泛,但是也是有自己的立足之地的,這裏可以參考@TeeKee 牛客大佬的帖子,C++因爲更偏底層一些,可能上手上難度會略大,說回來其實還是個方向選擇上的問題,Java大多是業務側,數據庫以及各種組件就會很重要,而C++偏底層一些,操作系統以及Linux相關的知識更爲重要一些,具體選擇,因人而異,給個說服自己的理由就好。其實在校招過程中,更加關注的還是基礎知識的把握能力,還有項目過程中體現出來的問題解決能力,快速上手能力,個人的思考,這些都是在美團、遠景(這兩個offer的部門都是Java系)包括春招實習投遞的螞蟻Java崗中注重考查的點。

(4)國企還是互聯網
這真的是一個圍城,城外的人想進去,城裏的人想出來。看過一些國企待不下去跳互聯網去的人,身邊也有不少朋友(復旦、南京大學等本科生)進入國企後,覺得工作上沒有動力,升職加薪遙遙無期,我覺得自己是那個最瞭解自己的人,所以一定要想清楚自己想要什麼,然後做出自己的選擇。

調整心態

我的秋招之路,始於牛客,也在此終於牛客。在牛客上找到了學習路線,學習資源,也明白了自信與堅持的重要性,在這裏放一段(@XiaoTeng )牛客大佬在面經中的一段話:

offer = 心態 * (實力 + 面試技巧) + 緣分運氣

1、心態

首先是要正視自己的能力,不輕視,不高估。不輕視:對自己有信心,機會那麼多,怎麼都能有個差不多的offer,不至於失業 。不高估:清楚自己的能力範圍,保持好心態,面試是有偶然性的。
不要總給自己消極的暗示,心態差了積極調整,一個樂觀向上的態度是非常重要的,提高效率,專注尋找自己的方向。
多交流,不比較。對於每一次面試,只跟自己比有提高就已經很好了,每個人適合的方向和技術棧都不一樣。

2、硬實力是關鍵

我是從2018年3月底開始準備校招,因爲是在18年春招實習的時候獲得了兩次面試機會,分別是網易遊戲和去哪兒,下面給大家還原一下真實面試場景,其實我也是和各位非科班的同學一樣,基本是零基礎開始準備秋招,但希望大家相信只要努力,永遠不晚。

2018.03.27 —— 網易遊戲研發工程師實習面試(下面以Q代表面試官,A代表我)

Q:C裏面內聯有什麼作用

A:不知道…

Q:struct和class有什麼區別,和union有什麼區別

A:不知道…

Q:虛函數有什麼作用

A:不知道…

Q:智能指針聽說過嗎

A:沒聽說過…內心os(啥,這玩意是啥…)

就是在這種情況下,面試官還拿着準備好的題目一直面了我40分鐘,面試體驗很棒,QAQ

2018.04.某天 —— 去哪兒後臺開發實習面試

Q:知道二叉樹的各種遍歷順序嗎?

A:知道,前序中序後序,分別說了下怎麼遍歷的

Q:好,那你手寫一下中序遍歷…

A:拿筆掙扎了好久…一個字沒寫

Q:要不你再好好想想,你都知道遍歷順序了,應該可以寫出來的

A:我真不會寫…

Q:那今天就到這吧…

總結:相信很多同學在開始的基礎都比我好,所以一定要有自信,然後堅持學習,秋招肯定是收穫滿滿(不僅僅是offer上的收穫,還有很多關於自主學習能力、個人自律以及自信上的收穫)。

學習路線

畢竟以前沒刷過題,沒看過書…寫的大部分都是C#代碼,於是決定開始着手秋招,從語言開始系統學習,關於學習的幾個建議(個人覺得算法開發通用,且可能比學習路線更實用!!!):

1、一定要做筆記!!!好記性不如爛鍵盤,知識溫故而知新,每次回顧總結再原來基礎上再引申一些新學到的知識,如果能達到這樣的效果,就相當於自己在給自己面試!做到面試效果好,還不會緊張

2、筆記可以選擇很多可在線編輯的軟件,個人在用的是Evernote,可能已經積累了數十萬字的筆記

3、可以先在網上看看相關的面經,記錄常見的考點,在讀書過程中及時總結自己的答案,這樣既高效,面試時的答案又有自己的理解,絕對加分項!

4、talk is cheap,show me the code. 無論是算法還是開發,只要你是計算機編碼相關從業人員,能刷題都是很重要的,這裏面不僅可以反映你寫代碼的速度和質量、思維的靈活性、對常用算法的掌握與遷移以及將抽象的問題具體化的能力,一定要刷題

下面是各方面知識體系的學習資料和路線,大部分是書籍,少部分是我推薦的一些公開課或者b站視頻

C++:
C++Primer 基礎書籍,初學者建議精讀,可重點關注一些C++11的新特性,比如智能指針、移動構造等在面試中常考的特性
深度探索C++面向對象模型,這是一本建立起C++面向對象模型觀的好書,個人收益良多,另附一份此書總結的技術博客,寫的很好,讀完本書再讀一遍博客,絕對收穫滿滿,以至於我後面複習C++面向對象觀,直接對着博客看了
STL源碼分析,主要看各種STL容器的底層實現方式、內存管理方式,看完自然會對這些容器內部對象到底分配在堆上還是棧上,迭代器失效情況,內存是連續還是非連續等各種問題都有一個很好的掌握
Effective C++和More Effective C++,需要對C++有一定了解和使用經驗後閱讀,裏面主要是介紹各種安全管理、效率提升的小細節,可以參考閱讀,有些小細節可以在手寫代碼時體現,給面試官很好的印象!
操作系統 :
清華大學 陳渝老師的公開課(b站和網易雲課堂上都有),非常系統的講述操作系統的一些實現原理,也把包括生產者消費者、讀者寫者、哲學家就餐等經典問題講得非常透徹,作爲清華的公開課,又不失知識的廣度和深度,推薦 。
深入理解計算機系統(CSAPP),這本書真的是講解整個計算機系統的一部神書,短短的篇幅內能涵蓋到這麼多的技術點(看完公開課後再來讀效果應該會更好),我翻來覆去讀了三四遍,每次讀都有新的收穫,極力推薦 。
現代操作系統,詳細講述操作系統的基本概念,其實我並沒有讀過,因爲沒有找到這本書的電子資源…但是很多人推薦,應該也是一本好書!
Unix環境高級編程(APUE),詳細講述Unix環境下的各種編程機制和接口,建議書上的代碼都自己敲一遍執行,纔能有更好的理解。(尤其是以騰訊爲目標的同學們,此書必讀)
計算機網絡 :
圖解TCP/IP,圖解系列的書籍都是比較淺顯易懂,但是作爲入門或者第一本相關書籍,可以看到全貌卻有不打擊大家的學習積極性,可以快速閱讀 。
圖解HTTP,建議同上,但是我其實對HTTP瞭解並不多,因爲實際上C++開發很少與http打交道,基本是C++與Java通信,Java再與前端通信,但是還是應該擴充自己的知識面 。
計算機網絡,這本書是本科上課時我們選用的教材,對於計算機網絡有一個比較深入的講解,包括網絡協議中的各種設計細節以及相關算法的原理,值得閱讀 。
UNIX網絡編程(UNP),同前面操作系統一樣,可以配合Allen大佬的技術博客,學習一些底層的網絡編程知識,尤其是打算準備網絡相關的項目時,建議細讀本書 。
TCP/IP詳解,非常詳細講述了TCP/IP協議棧下的各個技術細節,建議大家挑自己感興趣的閱讀,都是拔高點,體現個人技術深度的點 。
數據結構:
大話數據結構,入門書籍,把每個抽象數據類型(ADT)的實現方式都講得比較透徹,也涉及了相關的算法,可以仔細閱讀,後面面試可能也會涉及一些讓你在某個應用場景下的適用數據結構,應該詳細掌握 。
清華大學 鄧俊輝老師的公開課,詳細細緻講述了數據結構與算法相關的內容,因爲算法和數據結構密不可分,在講述基本的數據結構與算法同時,包含一些時間複雜度的推導,課程又有一定的深度,老師講課也非常有趣!值得深入學習 。
網易雲浙江大學 數據結構公開課 ,課程感覺不如鄧俊輝老師的有趣,但是優點是有配套的學習平臺和練習題,配合課程刷題,效果更佳!
算法(這塊其實是我的薄弱點,我大概只刷了200道題+劍指offer):
leetcode2016,這本書是在北美找工作的國內同學總結的,將leetcode上的一些經典題目按照各種方法總結在一起的,大約有200題,建議按照專題開始刷!這本電子書我會在後面給出百度網盤的鏈接,大家可以自己下載 。
劍指Offer,不多說了,哪裏不會刷哪裏 。
算法圖解,一本適合剛開始接觸算法的初學者,用通俗易懂的語言說明了一些常用的算法 。
程序員代碼面試指南,左神神書,適合算法進階,題的數量和質量都有保障 。
數據庫:
Mysql必知必會,介紹了sql查詢相關的用法,讀完之後可以配合牛客上的SQL查詢相關練習進行熟悉 。
高性能Mysql
MySQL技術內幕 InnoDB存儲引擎
Redis設計與實現,前面幾本書都是sql相關的知識儲備,而詳細瞭解一款nosql也是很有必要的,因爲各自有不同的應用場景,面試中也常考一些Redis相關知識 。
Mysql:Mysql技術內幕和高性能Mysql側重於數據庫本身的底層實現,而這套視頻則是從實用的角度出發,講解了數據的查詢到優化等方面的知識,配合使用效果更佳 。
設計模式:
大話設計模式,描述了二十多種設計模式的使用場景,設計模式只有瞭解了概念以後,在實際項目中去加深理解,單例模式、工廠模式、***模式、中介者模式等都是在實際項目中常用的設計模式 。
Linux與編譯原理:
鳥哥的Linux家常菜,基本就是講一些Linux下的命令操作,C++必然是跟Linux結合在一起的,所以如果對Linux不夠熟悉,可以粗讀一遍,熟悉相關的命令 。
Linux內核完全註釋,採用早期Linux內核0.11或0.12版本的代碼進行完全註釋講解,作者是同濟的一名老師,閱讀本書需要有一定的彙編基礎、硬件基礎和操作系統基礎,適合對Linux內核機制比較感興趣,想了解底層源碼的同學 。
程序員的自我修養——鏈接、裝載與庫,校招面試過程中發現,只要面試一深入,就經常會討論到編譯和鏈接過程中的一些問題,雖然對開發並沒有太大的作用,但是掌握過程中發生的情況,可以幫助分析和解決一些問題 。
面試相關 :
(下面這兩本書中都有很多常見的面試題,可以細讀當做個人知識的一個查漏補缺,也需要關注一些常見的智力題,比如頭條有時候就會問一些相關的智力題):

程序員面試筆試寶典
王道程序員面試寶典

項目面試問題

在具體的面試中,一些技術問題可能因爲公司或者面試官的不同而不太一樣,但是經過大大小小几十場面試發現,關於項目上,有幾個問題經常被提及,能夠看出一個人的項目深度以及是否在項目過程中有自己獨立的思考:

(1)項目中的難點以及解決方法

建議項目做完一定要及時總結,回顧過程中踩過的坑,走過的彎路,回答這個問題時,可以給出一些參考的解決方式,最後結合實際需求,給出自己的方案。

(2)與現有的一些類似產品,有什麼優勢?或者說爲什麼在你們的使用場景下,要用這種方案 。

因爲主要的項目經歷是推薦場景下的分佈式KV存儲,所以經常被問到與Redis相比的優勢在哪,爲什麼不用這些現有的KV存儲方式。在做項目過程中,就要培養自己的好奇心,多問自己Why,而不是一味的只是How。

(3)如果再給你一次重新做的機會,你覺得哪些方面會有改進和提高?

做完項目以後,一定要去覆盤,想想這裏面可能存在的問題,或者說哪些方面可以被改進

總結:以上幾個問題都是在各大廠面試中經常提及的問題,希望各位做項目時,一定要保持充分的好奇心,對自己的方案有絕對的把控力,然後及時總結和覆盤。

寫在最後

上面大概就是我個人的一個學習路線,基本是書籍+公開課+網課爲主要學習路線,當然對於碩士來說,準備秋招的過程中肯定免不了會穿插有實驗室的一些工作,這就得看個人的時間規劃和安排了,另外效率是很關鍵的一點,如果遇到了心浮氣躁學不下去的情況,建議找個適合自己的方式去放鬆一下,保持好自己的學習效率。接下來想說一些秋招過程中的一些奇葩經歷:

字節跳動的十一輪面試經歷,是的你沒有看錯,我從春招到秋招一共面了十一輪字節跳動!!!

1、3月初,本來打算投春招實習的我簡歷莫名流到了一個日常實習中,想着面就面面吧,然後上來一面面試官說你是C++的啊,我不會C++啊,然後說你在××實習過呀,我以前在那邊工作過幾年,但是我圖像相關的知識我也忘了,沒法面啊,要不就算了吧…(一輪涼涼)

2、4月,春招實習統一面試,面了三輪,只記得第三輪面試時撕的代碼是兩個鏈表的大數相加問題,大概涉及到鏈表的逆置和進行10進制的加法運算…代碼量比較大,寫得比較久,然後三面完就收到感謝信了(三輪涼涼)

3、6月底,投遞字節跳動的超級工程師計劃,簡歷沒有通過,然後又流到一個實習生的招聘中,跟HR商量可以按照校招提前批的要求進行面試,深圳頭條信息流部門,然後因爲實習2個月沒有刷題,二面題目沒寫好,並且問了很多智力題和工程設計題(都是常見問題,在程序員面試筆試寶典和王道程序員面試寶典基本都有覆蓋到,所以建議大家面試前細讀兩本面試書籍查漏補缺),可惜我以前沒有接觸過,臨時想太慢了(二面涼涼,HR小姐姐還給我看了面試評價,基礎還可以,可以實習提升工程能力後再來面…)我是真的題刷的少…

4、7月中,投遞字節提前批,EE部門toB端,面試中問了很多http相關和web服務器相關的知識,平時瞭解的較少(一面涼涼)

5、8月中,字節正式批,投遞的是上海的基礎架構部門,全程聊rpc框架的設計細節…很多沒答上來,我真的很恍惚以爲面的是社招…因爲我本身實習做的是分佈式存儲,並不是rpc框架開發,一面完讓我等一下,結果20分鐘後收到涼涼短信,可能是跟主管商量後覺得欠缺相關開發經驗給掛了(一面涼涼,I’m fine…)

6、本來以爲秋招就此與字節無緣,結果視頻架構部門又把我給撈了…這次一口氣三面,其中聊了很多網絡相關的知識,都是在一些相關知識的基礎上,問一些場景設計的問題,比如說讓你去設計TCP傳輸中的超時重傳,你該怎麼去設計這種…好在我對計算機網絡有一定的理解,順利通過了這次面試,第二天HR就聯繫發了意向書(3面過)

所以我一共面了1+3+2+1+1+3=11輪…我已經可以想象字節內部我的面試評價可能已經佔滿了一頁,哈哈哈哈…

由於我個人沒有記面經的習慣,但是每次遇到一些不太明白的知識點,都會記錄到筆記中,面試總結也轉成了PDF,放在了我提供了百度網盤中(閱讀原文見鏈接),當然由於個人水平有限,其中肯定會有些錯誤的地方,還希望各位在學習過程中保持你的好奇心和質疑的能力!

現在由於經濟下行、大量人才的涌入,互聯網就業確實存在着競爭越來越激烈的問題,但是在秋招求職道路上,只要你能擁有一份清晰且目標明確的學習計劃+良好的學習習慣+高效的學習效率+適當的學習記錄和思考,都能拿到想要的offer,希望諸君都能享受自己選擇的生活~

最後用一句宮崎駿的臺詞與各位共勉——起風了,唯有努力生存。

接下來,要準備畢設,希望順利畢業啦!

如果覺得本文不錯,希望大家能關注轉發下哈,後續會持續給大家更新新的技術內容,你的支持就是對我的動力,感謝大家了。

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