作者:特立獨行MVP
鏈接:https://www.nowcoder.com/discuss/188367
來源:牛客網
我是20年畢業,目前計划去字節跳動實習,暑假實習拿到了BAT,微軟等十幾家的實習offer(這里的B指的字節 百度沒鳥我。。)
具體面經參見:https://www.nowcoder.com/discuss/172152
暫時寫個個人的學習路線,供大家參考參考~
個人介紹
南京大學電子科學與工程學院,本碩。本科:通信工程。
實習經歷:在北京圖森未來的基礎架構部門。
目前我也是圖森在南京大學的校園大使,大家有想去實習和工作的可以私信我內推呀~
我之前也是經歷過很長一段時間的迷茫,糾結於算法還是研發方向,因為我本身做過算法優化相關的工作(本科末也水過paper)
之前也對深度學習機器學習有過很大的熱情,但是迫於環境和自身的想法還是選擇了研發方向,主要是后台開發和雲計算相關。所以大家如果能夠很早的確定自己的方向還是可以少走些彎路的。當然我的經驗僅供參考。
由於我所在的實驗室比較的。。。。坑。。。。所以研一研二根本沒辦法出去實習,而且南京之前也沒有特別好的大廠可以就近去實習。我在研一末和研二初的時候還是去嘗試投了一些實習,去年是拿到了
- 微軟的nlp的寒假實習
- momenta的高精地圖開發的春季實習
- 趨勢科技的開發崗位實習
- 圖森未來的基礎架構 實習
- 華泰證券 項目實習
沒敢投任何的大廠,那個時候我還是比較的菜的,怕菜的被拉黑。家如果有機會還是可以嘗試寒假或者早一點的實習,會在之后都比較有優勢。
目前我暑假實習基本告一段落,拿到的offer如下:
- 阿里雲 存儲團隊 (杭州)經歷5面
- 騰訊 csig 后台開發 (上海) 經歷4面
- 頭條 基礎架構(北京、上海 ) 經歷4面
- 網易互娛 基礎架構 (廣州) 經歷3面
- 快手 基礎架構 (北京)經歷4面
- 依圖 后端開發 (上海)經歷3面
- 遠景智能 后端開發 (上海) 經歷3面
- 蝦皮科技 c++開發 (深圳)經歷3面
- 商湯科技 雲平台開發 (北京)經歷3面
- 華為雲 雲計算 (杭州) 經歷2面
- 海康威視 大數據開發 (杭州)經歷3面
整個面試周期就是從2月底到4月底這,兩個月,別問我為什么拿到了這么多,我面也快面吐了。我個人的准備大概是在研一的下學期開始的,一直到研二上整整一年,后面我會從語言基礎,數據結構和算法,基礎知識點,項目上進行總結。
學習建議
雖然面試有很多的地方可以討巧和臨時補充以及團隊合作。但是從個人的發展和未來成長來說,我覺得基礎是最最重要的。我個人是看書為主結合一些自己感興趣的項目會寫着練練手如果沒時間寫就多看看別人的項目源碼,然后就是寫寫博客記錄一些自己遇到的問題和想法,很多的問題真的都有在面試當中被問到。
算法和數據結構
這一段算法大神或者ACM大神就不要看了,我怕被噴。
算法這塊因為我沒打過ACM,所以一開始惡補的很多,我建議先找一些比較靠譜的視頻或者公開課去學會比較好,當然如果學校里的課還不錯可以去上上,因為我的專業開的計算機相關的課非常少,我記得本科就一個c語言和c++程序設計。所以我是蹭了很多計科的課:比如數據結構,算法設計與分析這類的課。因為算法這東西還是需要時間去訓練的。
課程
- 浙大的數據結構
- MIT的算法導論
刷題
當然如果你時間不夠那么,牛客網左神的算法課你就不能錯過了!非常系統和直接,就是干貨,看過的都說好。
學完了之后呢,當然就是刷題了,我不推薦每天沒日沒夜的刷,當然我也曾經這樣過一天刷他個十幾道,但是真的這樣效率其實不高,我是建議在有一定題量之后每天隨便找個時間寫個1-2題就夠了,難度就是leetcode中等就行了,推薦大家一些必刷的和一些我覺得還不錯的oj:
必刷:
- 劍指offer 2遍左右夠了
- leetcode 所有簡單和中等的
- 左神算法課上的所有例題
個人推薦:
- hihoCoder :他會有一個每周周賽,都在周日,四道題。難度和代碼量都還是挺大的,如果想去外企我建議多刷刷。
- lintcode: 為什么推薦呢,因為他有個CAT模式也就是天梯上分,寫一題上一顆星每題有時間限制15分鍾或者30分鍾,提交次數限制3次,沒過會懲罰加題。總之非常適合面試模式。我是刷的停不下來。
- codeforces:這個就偏比賽一點,但是很多新題都是這上面改的所以值得做一做。
再給一個我認為好的算法博客:
書籍:
- STL源碼剖析 : 各種數據結構的實現 都在里面 c++必問
- 算法導論 :當個參考書吧,沒事推個導,計算個復雜度還是有點意思的。
- 算法競賽入門經典
語言基礎
我個人的話主要語言是c++,python,java也就是個javaSE水平,go入門。
我個人建議開發的話必選就是一門主流靜態語言:c++或者java當然現在go也非常的火熱。加上一門解釋性語言:python
如果只懂得一門語言的話,競爭力會小一點。除非你是精通c++級別的,那當我沒說,
c++學習建議
首先c++不容易學好,如果僅僅是學習語法或者寫個算法題那幾天就行了。但是用好c++還是需要很長時間的積累的。
多的不說了給大家推薦幾本書:
- C++語言的設計與演化
- Effective C++
- More Effective C++
- 深度探索C++對象模型
- c++ Primer :當個字典吧
- STL源碼剖析
只從語言本身而言就是多看多理解和多使用。沒啥捷徑就是干。
當你覺得語言不是問題的時候那么就可以去看看操作系統相關的以及高性能服務器相關的知識,這些應該是后台方向必點的技能點了。
進階
操作系統
操作系統的話原理大家都懂,但是一問深的就不知道了,什么進程線程,調度算法,虛擬地址這些的問題早就被問爛了。但是如果直接去看linux源碼的話,相信大家和我一樣剛開始都是拒絕的。還是直接懟書吧,基礎最重要:
- 深入理解計算機系統 :經典!太好看了!
- Linux內核設計與實現:不算系統但是算入門級別 建議和操作系統的課本結合一起看會更好
- 深入理解linux內核 :講的2.6版本的內核
建議先把上面的幾本書看看,然后看自己的興趣吧,如果對哪塊很感興趣那就去看源碼看實現吧。
服務器編程
服務器編程其實就是建立在對linux的系統調用的理解以及網絡協議的理解上的。如果這兩塊的知識比較好的話就可以動手實現一些簡單的服務器,然后對比別人實現的,壓測一下性能啥的,可以作為一個還不錯的個人項目,我其實也就是這么做的。
- Linux高性能服務器編程
- UNIX 環境高級編程
- UNIX網絡編程卷1
計算機網絡
計算機網絡的話我是看的浙大的計算機網絡課程,主要就是專注於協議的原理和分層模型,因為東西還是比較的瑣碎的,建議大家多做些筆記寫一寫文檔。不論對於記憶還是日后的復習都是很有用的。
- 計算機網絡原理:自頂向下方法
數據庫
對數據庫的理解也是必不可少的。如果是去大廠的話光會一個mysql基礎可能是遠遠不夠的。
像是Redis,MongoDB等非關系型數據庫也是需要好好的掌握的。因為在實際的項目當中會經常使用Redis
作為緩存,包括其分布式集群的原理等等都是面試的重點。
MySQL的話建議可以看看,mysql必知必會,原理比較少但是使用細節還是挺多的,適合先過一遍。其次就是可以看看尚硅谷的mysql高級部分的課程,關於mysql的查詢優化以及其他的高級特性都是書本上很少有的。很多的數據庫難題都是這上面出現的。
Redis建議看看Redis設計與實現這本書,非常詳細的講了Redis的底層數據結構,包括其復制,集群部分也做了很好的解釋。然后的話可以再去理解一下分布式的Raft算法,Gossip協議等等。
數據庫就是多用多學,個人建議用學一學docker,以后配置這些服務非常方便,也是現在雲計算的一個很重要的組件。
雲計算
為什么會接觸到雲計算其實也是之前實習的時候重要做的項目,主要就是關於docker容器化以及Kubernetes容器編排框架。
docker在容器化的貢獻是巨大的,也可以為我們在日常配置服務過程當中減去非常大的麻煩,不論是工作中還是平時自己的使用都是非常友好的。
如果是走這個方向的話對於docker以及k8s是必修的,建議看看下面的書或者博客:
- Kubernetes權威指南
- docker源碼剖析
- 極客時間:深入剖析Kubernetes專欄
面試技巧
大大小小的面試我也是經歷了大幾十輪了,總結下來就是要有策略,要有總結,以及要有信息。
首先就是策略,一開始最好不要立刻投大廠,因為一上來就面大廠的話容易崩,剛開始面的人少所以難度也會相對高一些,有的還湊合的會被大廠當備胎,很難受的。其次就是能內推就不要走官網,能免筆試免筆試,不是說筆試難度大還是咋地,這玩意其實是玄學,因為你說你一個人做呢沒問題,大神嘛無所謂但是你保不齊別人是一個實驗室或者一個班級的人在做,如果遇到點坑的題目,你交代了,別人合作做出來了那你被掛能怪誰呢。還有就是如果大家也是合作做題的話,oj的查重或者作弊系統的判別現在越來越嚴,如果保不齊你被抓到了,可能就被企業拉黑,然后你還不知道,后面怎么投都沒面試機會這是最慘的。還有就是大家都是一起做的,然后分數也差不多,但是別人接到了面試而你沒有,我就遇到了這樣的情況,就很玄學我都懷疑是隨機選的人面試。反正就是筆試有風險,大家還是抱緊學長學姐的大腿,能走內推就內推。但是內推之前還是需要能夠了解一下這個部門,大概是做什么的,hc的數量以及技術氛圍,這點其實很重要,因為一旦進了流程,你反悔就來不及了,如果過了之后還想換部門那只能重新面試,再走一遍別說多惡心了。其實哪個部門最好或者哪個部門最有前景啥的這些問題,真的很難了解的非常清楚,我就糾結過很久很久,這種事情找不到最優解的,不過還好對我而言現在只是實習。
其次就是面試總結了。面試過程當中我建議大家開啟手機錄音。這樣方便事后復盤,我是每次都會再聽一遍自己的錄音,不論是寫面經還是琢磨自己的回答有錄音真的方便很多。因為面試期間的緊張感會讓你很難用最好的描述回答清楚問題,那么事后總結就會讓你在下次遇到同樣的問題的時候回答的更好。如果說大家有小伙伴在一起戰斗的話那么經常互相分享經驗真的會決定你能不能拿到offer,大家的經驗會讓你迅速成長,說實話面試實習這2月也是我成長的最快的一個階段。
最后就是信息。在面試結束的時候,一般面試官都會問:你有什么問題問我。這個時候我個人最經常問的就是這個部門正在做什么,如果我進來我會接觸到什么。面試官才是最了解這個部門的人,只有從他的口里得到的信息才是最真實也是最有用的,通過他的回答你會了解到這個部門做的產品或者是使用的技術,對於自己的學習方向也有很大的指向作用。其次,我會問的問題就是:您認為我在哪些方面可以提高自己。這個問題其實從側面可以讓你獲取你此次面試的結果。因為這個問題不像問我面試能不能過這樣直白的面試禁忌。一般面試官會指明他認為你的缺點,如果他在說的時候帶有建議的語氣以及對你其他方面的肯定那基本是十拿九穩了,再不濟有大佬對你的一個建議指導對你自己查漏補缺也是非常有幫助的。說下我自己的經歷吧,我在面阿里雲3面的時候,那位p9大佬在我問完這個問題之后不僅肯定了我的一些表現還給我推薦了2本書建議我去閱讀,這真的是非常良好的面試體驗。
最后
這個帖子我會在以后繼續的更新,我目前還在慢慢的職業摸索階段,也還是一個菜鳥而已,如果有任何錯誤的地方也歡迎大家指正修改。
以后的經驗我也會更新在這個帖子里,希望對大家有幫助!