當前位置: 華文星空 > 知識

大學電腦系最努力的同學都是如何學習的?

2018-03-29知識

說個我讀者的事吧。

雙非本科 + 非科班,透過自學電腦,校招時共投遞了上百家公司,最終他從最開始月薪 5k offer 成功換成年總包 35w+ 的 offer,從他的身上只看到「努力」這兩字。

諾, 在校期間買了上千元的電腦書, 下圖只是其中的一部份:

他去年校招相當坎坷,被打擊過,也失落過,但是他並沒有因此一蹶不振,而是繼續堅持自學下去,他相信努力是有用,在今年春招拿下了 年總包 35w+ 的 offer, 雖然相比大廠offer收割機的同學不算什麽,但是作為一個普通人,能逆襲成這樣,已經相當牛逼的了!

他的經歷寫的很長,我認認真真看完了,感觸很深,看的出是個很認真的小夥子,大家可以耐心把這篇文章看完,相信你會收獲很多。

一、校招路程

伴隨著拿到一份滿意的offer,令人折磨的校招終於告一階段了…

我的校招經歷應該是非常坎坷的一段經歷,但是應該能夠給其他還在迷茫的小夥伴一點幫助,所以在小林哥的鼓勵下我決定將我的校招經歷和我的學習路程以及經驗還有一點這段時間的感悟分享給大家,如果能對大家起到一點微小的幫助是最好的事情。

先說一下我自己的校招經歷吧。

我自己是一名雙非非科班的學生,高考的時候報「軟體工程」這個專業但是滑檔了,分到了一個自己不喜歡的專業,又沒有提前做職業規劃,導致到了大學之後渾渾噩噩了三年。

一直混到了大三下學期,因為疫情的原因在家裏上網課,在六月份左右的一天,我突然覺得我不可能這樣一直混到畢業吧?那我以後能幹什麽呢?

認真思考了幾天, 覺得不能這樣子下去了 ,但是又不喜歡本專業,因為我一直對電腦比較感興趣,所以最後想著幹脆去當程式設計師吧。

說幹就幹,我從七月份開始買了一本【大話數據結構】和一本謝希仁的【電腦網路】還有一本【C++ primer】就開始看起來了,當時也沒有做任何規劃,也是一時興起,所以就三天打魚兩天曬網的開始學起來了( 真的很建議大家在不論做什麽事情之間做一個詳細的規劃,這非常非常重要! )。

然後一晃眼就到了九月份,開學我到了學校還要先補考兩門課程( 混子的悲哀…大學千萬不要掛科! ),然後補考完就到了九月中旬了,我匆匆制作了份簡歷,然後就開始投簡歷,基本上都是石沈大海, 只有一份面試機會 ,而這個面試也是讓我真正改變的契機。

我還記得這個面試是來自「深信服」的,甚至到現在我都記得當時那個面試官的長相,整場面試三十分鐘,我說的最多的三個詞是「不了解」、「不清楚」、「不太懂」…基本上是一問三不知。

甚至最後面試官想撈我一手,問我們專業還學什麽課程,我說模電、數電,面試官說:額…好吧…你有什麽想問我的嗎?

我都結結巴巴說不出話來。面試的過程中我真的超級超級羞愧,剛開始面了五分鐘我就想結束面試了,真的是什麽都不會,真的說不出來的丟人,我同學說我當時整個人的臉都漲紅了。

當天晚上我躺在床上羞愧又難過,都睡不著覺,我不斷地問自己:「你這麽菜哪來的臉投簡歷?」

下定決定開始 停止投簡歷 ,好好充實自己。

正趕上當當做活動,我一口氣買了一千多元的書,從C++、數據結構與演算法、電腦網路、作業系統還有 Linux 相關的全部買了個齊全。

從此開始了每天瘋狂學習的道路,每天基本上 睜眼學到閉眼 ,夢裏都是知識,我覺得我自己在電腦這方面還是有一點悟性的吧,再加上一點韌性,所以我學起來很快。

我尤其喜歡 C++ 相關的知識,當時覺得學累了就看看 C++ 相關的書籍充一充電。

就這樣充實的生活學了一個月左右,正好十月中旬學校有線下校招,我就去試了試水,面試比較簡單,很快就下了offer,我還記得好像是 base 長沙月薪 5k+,其他的待遇就忘記了。

我當時的心態就是覺得啊?不是吧?我就值這個價嗎?

還難過了一段時間,然後想都沒想就直接拒了,覺得還是自己太菜了,然後 繼續投入到學習當中 了。

到了 11 月初學校又有線下校招,我又過去試了一下。最後拿到了 base 上海月薪 10k+,我還記得崗位是叫「 MMI 助理開發工程師」,我當時都不知道這個是幹什麽的,待遇覺得還挺好的,因為我們專業以前的畢業生都是能拿到 6—8k 都算是不錯的了。但是最後猶豫了一下,還是拒絕了, 覺得這應該不是我的極限

一直保持學習到 12 月初,突然某手機大廠聯系我面試,說實話都我不知道什麽時候投的簡歷了,應該是秋招補招把我撈上來了。

當時我整體學的差不多了,蠻久沒面試了,所以我就試了試,幾輪面試下來我基本上侃侃而談,不會的東西很少,所以很快 offer 就下來了,base 北京月薪 15k+,猶豫了蠻久的,最後考慮到秋招末期了而且有大廠的名頭,最後就接了 offer 了。

當時心裏想著拿一個保底,然後還想著再好好學一學,春招再沖一沖。

結果放假回家兩個月基本沒怎麽學習,因為過年家裏事挺多的,也沒有一個好的環境,自己的內心也比較浮躁。

到了三月初又補考了一門課程,然後發現自己根本學不進去了,最後就決定去公司提前實習了。

到了公司以後,感覺大廠確實是大廠,各方面真的很不錯,但是呆了一段時間之後發現部門的業務和主要技術和我期待的有偏差。

所以一邊實習一邊學習,最後在四月初離職回到學習繼續開始春招, 最後成功拿到了一份 base 北京總包 35+ 的 offer

我自己挺滿意的,而且因為我學習的時間太短了,前前後後可能有效學習就大半年左右,最後能拿到這樣的 offer 我也感到非常慶幸,最重要的是技術方向也是我比較喜歡的方向。

這裏提一下違約的事,我之前簽的那個大廠 沒有索取違約金 ,然後違約流程走了大概半個月左右,最後拿到了新的三方。

據我了解好像一般比較大的企業都不會索取違約金,一些小企業可能要先交違約金再解約三方。

這裏並不是鼓勵大家去違約,只是說在有更好的選擇或者明顯感覺到現在的崗位不適合自己的情況下,不要懼怕去違約,有些同學可能害怕違約了企業會拉黑自己,實際上這種可能性很低,而且並沒有實質的影響。

hr 經歷的違約事件數不勝數,並不會對你做特殊處理。就業是一個雙向選擇的過程,為了自己以後的職業發展,還需要做更慎重的考慮。

因為匆匆學習,更多的只是學習了理論知識,而且演算法與計畫經驗還有實習經歷都阻隔了我進大廠的可能,基本上我筆試都做的很艱難,大部份大廠筆試都掛掉了,就算勉強進了面試,也倒在了手撕演算法的環節上。

導致我現在拿到 offer 後還是在不斷的刷題,因為演算法基礎太差了,但是它又是那麽重要。

我的經歷更像是一個普通人的經歷吧,不像其他大佬大廠offer拿到手軟,我前前後後的面試公司可能就十來家,最後成功拿到手的 offer 也就四個。

功利一點來看,從 5k+ 到 10k+ 再到 15k+ 最後到 20k+,慢慢打怪成長一樣。有時候後悔自己覺悟的太晚,準備的太慢,導致錯過了更好的自己。

但是轉念一想, 改變,就是好事

二、學習規劃

我自己一開始沒有什麽規劃方向,走著走著就往 C++/QT 客戶端那邊走了,因為學了點 QT,但是後來又覺得後端可能發展方向好一點,所以在辭去實習之後重新投的簡歷也全部投的後端方向的。

所以我的學習規劃基本上是 C++ 伺服端方向 的,希望可以給各位同學一些幫助。

程式語言

我自己是有較紮實的 C 知識,所以學 C++ 並不是那麽困難,而且我比較喜歡 C++ 這門語言,喜歡它的嚴謹和多樣性,所以我看的 C++ 書籍可能比較多。

從【C++ Primer】到【Effective C++】系列再到【C++沈思錄】這些前前後後可能看了十幾本左右,越往後看越體會到 C++ 的復雜性,越看越感覺難…

校招的話 C++ 一般不會問的很難,甚至如果面試官是搞 PHP 或者 Java 的可能都不問你語言相關。

所以我 不建議你直接啃【C++ Primer】,把它當作一本詞典來用會更好 ,新人上來一直看這麽厚一本書很容易直接被勸退。

我推薦你從【C++ 新經典】 -->【Essential C++】 --> 【C++新經典 物件模型】這樣的順序學習,基本上校招應付面試是綽綽有余了。

如果想要在面試中在 C++ 相關做到侃侃而談的話可以看看 Effective 系列的書籍,以及啃一啃【深入理解 C++ 物件模型】這本書,我過年的時候把它放在家裏了,是我最後悔的事。因為到現在為止,我看這本書都蠻吃力的,需要慢慢的看,細細的看,而且很多地方都不理解。

如果有時間的話也可以把 python 當第二語言,用慣了 C++ 再學 python,是一種不一樣的體驗,真的挺有意思的。

其實語言並不是那麽重要,基礎知識更重要,建議把更多的時間放在基礎知識上,尤其是想要沖大廠的同學

數據結構與演算法

數據結構與演算法這方面的話是非常非常非常重要的,想要沖大廠的同學們如果這方面不過關可能連筆試都過不去,更別談面試的手撕演算法了。

我自己的話因為準備比較匆忙,所以只是把匆匆【劍指offer】刷了一遍半,然後 leetcode 刷了 100 道左右 easy 題,看了一遍【labuladong演算法小抄】(從小林哥這中的嘿嘿),面試和筆試一般太難的題我就宕機了。

我後面復盤了一下,我因為時間緊,所以刷題很匆忙,像趕任務一樣,刷完了就完了,也沒有做總結和回顧。

實際上一道題可以牽扯到一類題的做法,都是有框架和套路的,有很多大佬都總結過。

刷題的話還是需要不斷地總結和回顧,才能達到有效刷題,像我都是無效刷題。

根據我做的筆試題來看的話,基本上我 建議你把【劍指offer】刷兩遍,然後 leetcode 熱題 100 道刷一遍,最後跟著【labuladong演算法小抄】總結一遍框架,基本上這一塊就妥了

但是盡量還是一直要保持刷題,因為以後工作了跳槽也對演算法有要求,多多益善吧。

以上是建立在有數據結構的基礎上,如果對數據結構不了解的話可以先看一下【大話數據結構】或者某客時間上有一門關於數據結構的課程。

演算法這方面的話一定不要一直悶頭刷題,要學會總結題型和方法。

做的多了你拿到一道題的時候腦海裏就有了基本的框架,該用什麽數據結構去做,該用什麽方法去做,心裏都有一個數了,是數量引起質變的一個過程。

我個人就比較慚愧了,這方面基礎不是很紮實,導致現在也在一直補。

從我寥寥無幾的大廠面試經驗來看,在面試的時候面試官會引導你去做題,是有一個相當舒適的做題環境的,所以不用畏懼演算法如猛虎,做的多了對付校招還是綽綽有余。

作業系統

作業系統我自己是從【深入理解電腦系統】先看,發現有些地方難以理解,而且不少章節用純組譯來演示,看不太懂,又去看了【現代作業系統】和【作業系統導論】,閱讀順序幾乎是從難到易,一路踩雷…

我建議初學者先看一下【作業系統導論】,這本書講的比較淺而且易懂,然後再看【現代作業系統】,看的差不多了,最後看【深入理解電腦系統】。

【深入理解電腦系統】的話,可以跳著看,有幾章節是用純組譯演示的,懂組譯的同學可以看一看,不懂的同學粗略看一看也沒關系。

還有可以看看小林的圖解作業系統,有了一定基礎知識,去看之後基本能應對校招的面試。

小林已經把圖解作業系統整理成PDF。

現在開源給大家下載:

到這基本校招問的知識你已經具備了,如果想要實踐的話,github上也有一些和作業系統相關的計畫可以看一看。

電腦網路

電腦網路我自己是先看了謝希仁的【電腦網路】,發現講的太雜了,並不是很深入,又看了【TCP/IP詳解:卷1】,又發現講的太深入了,根本看不懂,最後又看了【電腦網路自頂向下方法】和【Http圖解】,面試的時候就夠用了。

我建議你直接看【電腦網路自頂向下方法】就好了,然後直接看小林哥總結的電腦網路相關的知識就可以了,應付面試時綽綽有余了。

為了方便閱讀,小林也把 圖解網路 整理成了PDF,大家可以作為面基突擊的手冊,開源給大家下載:

設計模式

這個我自己是透過【大話設計模式】入門,然後看網上別人部落格總結的一些知識,最後在某客時間上買了一門設計模式相關的課程學習了一下( 某客時間該打廣告費了,笑~ )。

總體來說學的並不是很深入,因為設計模式這個東西學起來很簡單,但是實際計畫中套用起來太難了,而且根據我面試中的經驗,一般蠻少有面試官會問,就算問也就問一問簡單的單例模式、工廠模式這些,問的不是很深入。

所以我建議你透過【大話設計模式】入個門,然後對設計原則和常用的設計模式有個印象,最後可以在網上看看別人的經驗。

校招的話很難在這一塊問的比較深入,雖然它很重要,但是沒有商業計畫和工作經驗的前提下,應屆生很難真正熟悉這些,最多做到入個門,這樣就已經足夠了。

資料庫

資料庫相關的話我是學習了 MySQL 和 Redis 兩個比較常用的資料庫。

MySQL 我是先讀【高效能 MySQL 】然後又學了某客時間上的【 MySQL45 講】最後最近再看【 MySQL 是怎樣執行的】,又是一路暴雷…

所以我建議你先看【MySQL是怎樣執行的】,然後在某客時間上看【MySQL實戰45講】,最後稍微看一看【高效能MySQL】( 挑章節看,這本書講的太深,理解起來比較困難 )。

最好在學完這些之後自己動手去部署一個 MySQL,然後挑一些小計畫做一做。

我在面試的時候和面試官聊 MySQL 聊的比較深,他給我出了蠻多 MySQL 相關場景題,我答的不盡人意,面試官說我基礎可以,但是實際上手比較差,建議我私下可以部署一個 MySQL 試一試,這些問題會有更好的理解。

所以我把這個建議也給你,希望可以理論實際雙管齊下,不要像我一樣做個偏科生(哭)…

Redis 的話我是先看了一遍【Redis設計與實作】,然後在某客學了【Redis 核心技術與實戰】,在看實戰經驗的過程中,感覺有一些吃力,於是又返回去看了一遍【Redis設計與實作】。

Redis 算是我比較匆忙的學習了,因為在決定走後端這條道路之後補學的,學習的比較匆忙,所以我也只能給一點粗淺的建議,建議先看【Redis設計與實作】,有了基礎知識之後可以選擇看一下其他 Redis 的書籍或視訊加深基礎,然後去某客時間學習一下【Redis設計與實作】。

我面試的話,Redis 方面基本沒有什麽太大的問題,一般問的都可以說道一二。

Linux系統

Linux 的話我建議你先看【鳥哥的 Linux 私房菜】,對 Linux 整體有了一些了解之後,可以再看一看【Linux 系統編程】。

因為走的是後端方向,所以看一下【Linux高效能伺服器編程】,強推這門書,都是幹貨,然後跟著書上做一個伺服器相關的計畫,會有助於加深理解。

如果想學Linux內核的話,先看【Linux設計與實作】,這本書看起來難度尚可,後面有能力的話可以研究下【深入理解Linux內核】(我自己是放棄了…真的看的很困難)。

而且我面試的時候雖然簡歷上寫了,但是面試的時候並沒有被問到 Linux 內核相關的問題,所以這個一般應該是加分項,有能力的可以搞一下。

Linux 系統的話純看書可能事半功倍,最好在 Linux 環境下做兩個小計畫,這樣子對整體學習可能更有用處。

上一張我在這個過程中不斷補全自己知識點的圖吧,只要知識框架搭起來之後,學習是件很輕松的事情。

三、 學習心得

我覺得我自己算是學習速度比較快的人吧,學習效率也還可以,所以把我自己的學習方法分享給大家。

我在學習一門新技術的時候,會選擇一本難度適宜的書,根據目錄在自己腦海中把知識框架搭起來,然後看書慢慢去填補具體的知識,就像一顆多叉樹一樣,系統化的學習。

在看完一遍書之後,會有意的去看一些比較重要的知識,深化這些知識,同時我也關註了許多公眾號,在框架搭起來並完善之後碎片化的學習。

最後再看一看網上別人對這門技術一些知識的理解,再對照自己的理解,補充最佳化。

最好的是做一些小的計畫,去套用這些知識,畢竟實踐出真知(然而我因為時間太短,這一步沒有進行555)。

同時面試的過程也是一個查漏補缺的過程。

思維導圖是一個好東西,給大家推薦一下,有助於系統化的搭建知識體系,上一張我在春招的時候補全Redis知識的圖吧。

因為學習 Redis 的時間比較短,而且並沒有過實際上手,所以用知識導圖把這些知識分門別類的儲存,然後記憶到腦子裏,在面試的過程中,學習並且不斷補充,加深自己的知識深度。

其實看視訊也是一種不錯的學習方式,但是我個人更習慣看書構建知識框架,所以仁者見仁智者見智啦。

四、感悟

給大家分享一些我在校招中的感悟吧,我眼中的【 校招 = 技術 + 心態 + 運氣 + 勇氣 】。

技術是毋庸置疑最重要的一點,沒有技術的基礎,一切都是空談。

同時心態也非常重要,在經歷長時間的筆試、面試的折磨時,還要一日一日的等待面試結果,那段時間每一個電話都以為是 offer call,每一個提示音都以為是信箱資訊…最後可能大部份都沒有結果…

從一開始的滿懷信心到後來的迷茫躊躇再到最後的懷疑自我,這些我都經歷過,在最崩潰的時候真的不想再找工作了,隨緣吧。慶幸的是我堅持下來了,並且最後有一個好的結果。

運氣是比較玄學的一個東西,從投簡歷的時間到面試的部門到各個公司不同的需求,都有可能決定你能否拿到一個滿意的offer。

從我個人而言,秋招和春招加起來可能投了有一百多家公司,最後面試的可能只有十幾家左右,拿到了 4 個offer。

這個是我辭去實習後回到學校春招投的公司,最後筆試的有三家,全掛,直接面試的有兩個,最後拿了一個offer。

因為我演算法基礎比較差,拿 offer 的那家沒有筆試,直接面試,我在面試中發揮的比較好,而且演算法題也都會,所以最後成功拿到了 offer。

最後同時也需要有做決定的勇氣,我在提前實習之後,感覺到我可能不適合這份工作,但是公司又是大廠,而且適時又在春招中後期了,當時也猶豫了蠻久的,最後覺得還是決定不將就,回到學校重新找工作,最後對我而言也是一個比較滿意的結果了,而且公司也沒有要違約金,感謝公司~

比較重要的一點還有就是持續保持學習,並且永遠相信自己,不要放棄。

不止校招,而是進了互聯網這一行,我們基本上只能保持學習,不然猶如逆水行舟,不行則退,大家應該也知道這一點。

放一張自己還放在學校的一部份書吧,其他的都在春節搬回家去了。

也可以看到這部份書中演算法書的比重就很高,所以演算法真的非常非常非常重要,學好演算法是進大廠的第一步,希望大家可以早點做準備,不要像我一樣臨時抱佛腳。

洋洋灑灑寫了這麽多,不止是希望我自己的經歷可以對各位小夥伴起到一些幫助,也是對自己的深度復盤,在這個過程中發現了自己蠻多的不足,希望可以慢慢成為一個技術全面的人。

復盤之後就該進行新的學習啦,努力讓自己享受這個學習的過程吧,畢竟進了咱們這一行,持續學習是非常重要的一件事。

希望大家都可以早作準備,日後拿到一份滿意的 offer ~

感謝你能耐心看到這兒,希望我的經歷能對你起到一些幫助。

如果對你有幫助,別忘記給個三連呀,這對我非常重要

也歡迎大家關註

@小林coding