2021 屆本科,從我和身邊同學(xué)拿到的offer來看,去一二線大廠的普遍能拿到30w以上,月薪20k上下,甚至有更高的。
說實(shí)話,現(xiàn)在技術(shù)崗(主要指后端(Java、C++、Go........)之。
能做到以下幾點(diǎn),拿到一二線大廠offer 20K 上下的薪資非常容易:
- 算法題,技術(shù)面試筆試都考這個(gè),所以Leetcode至少得刷兩三百道吧,《劍指offer》所有題目過一遍,搞過ACM當(dāng)然更好,不刷題的話,那只有掛等著你了,畢竟現(xiàn)在很卷,面試官也只能通過算法題來加大篩選。
在這里也送大家一本幫助我拿到BAT 等一線大廠 offer 的算法筆記,是一位ucloud大神寫的,對于算法薄弱或者需要提高的同學(xué)都十分受用,算法一定是計(jì)算機(jī)學(xué)習(xí)的重中之重:
BAT面試官編寫的leetcode刷題筆記,看完秒殺80%的題目
- 數(shù)據(jù)結(jié)構(gòu),不要求你手寫紅黑樹,但是 AVL 哈希表 堆這些簡單的數(shù)據(jù)結(jié)構(gòu)得自己實(shí)現(xiàn)過;鏈表、線性表必須熟悉到不能再熟悉,語言的標(biāo)準(zhǔn)庫實(shí)現(xiàn)得了解下吧?什么 Java hashmap,C++ vector 你得知道實(shí)現(xiàn)吧。
- 計(jì)算機(jī)系統(tǒng)知識,內(nèi)存、堆棧、函數(shù)調(diào)用、數(shù)的表示等等,至少《CSAPP》得過一遍吧?(PS:這本書真的很適合程序員補(bǔ)齊計(jì)算機(jī)基礎(chǔ)。
- 操作系統(tǒng),這些東西你總得知道吧:
- 操作系統(tǒng)由哪些構(gòu)成、進(jìn)程的狀態(tài)、切換、調(diào)度
- 進(jìn)程間通信方式(共享內(nèi)存、管道、消息)、進(jìn)程和線程的區(qū)別、線程的實(shí)現(xiàn)方式(一對一、多對一等)
- 互斥與同步(信號量、管程、鎖)、死鎖檢測與避免
- 并發(fā)經(jīng)典的問題:讀者寫者、哲學(xué)家就餐問題
- 為什么需要虛擬內(nèi)存,MMU 具體如何做地址轉(zhuǎn)換的
- 內(nèi)存為什么分段、分頁、頁面置換算法
- 文件系統(tǒng)是如何組織的、虛擬文件系統(tǒng)(VFS)是如何抽象的
最好再結(jié)合Linux實(shí)現(xiàn)看下,推薦《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》,比如linux中就沒有線程和進(jìn)程的區(qū)分,就是一個(gè)task_struct
另外,學(xué)習(xí)操作系統(tǒng)我也非常推薦去做下 MIT6.828,實(shí)現(xiàn)一些線程管理、文件系統(tǒng)等,計(jì)算機(jī)科班不就是搞這些的么。
- 計(jì)算機(jī)網(wǎng)絡(luò),這個(gè)感覺相對簡單,但是計(jì)網(wǎng)知識比較繁雜,很多同學(xué)都反映網(wǎng)絡(luò)很難學(xué),一大堆的網(wǎng)絡(luò)協(xié)議,依次學(xué)完后,還是不知道網(wǎng)絡(luò)是怎么構(gòu)成的。
這就是沒有用對學(xué)習(xí)方法,導(dǎo)致只見樹木,不見森林。
學(xué)習(xí)時(shí),推薦你抓住一條主線 「一個(gè)數(shù)據(jù)包是如何發(fā)送出去的?」
帶著這個(gè)問題依次去學(xué)應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層,思考這些層之間是如何串聯(lián)起來的。
這就是自頂向下的思路,那自然要推薦:
- 《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》
這本書從我們最常接觸的 HTTP、FTP、SMTP 等應(yīng)用層協(xié)議講起,可以清晰看到引入各個(gè)層的作用。
學(xué)習(xí)每層協(xié)議的時(shí)候,最好自己抓包看下,wireshark抓包遇到三次快速重傳會怎么樣?這樣映像會更加深刻
另外說一點(diǎn),學(xué)習(xí)的時(shí)候注意收集優(yōu)質(zhì)的資源,并歸檔,比如我自己整理的電子書庫,絕不是在網(wǎng)上那種打包下載的,而是自己需要學(xué)到某個(gè)方向知識的時(shí)候,需要看了,去網(wǎng)上挨個(gè)找的,最后匯總而成。這部分我是會不斷把它完善的,當(dāng)成自己的小電子書庫,不多,但貴在精。
我整理的這些書大家可以在這里獲取,對于學(xué)習(xí)計(jì)算機(jī)的同學(xué)學(xué)習(xí)以及校招復(fù)習(xí)幫助非常大,且十分系統(tǒng):
書單:
計(jì)算機(jī)必看經(jīng)典書單
- 數(shù)據(jù)庫:sql得會寫吧,這個(gè)推薦看下《SQL必知必會》,幾個(gè)范式有沒有正式運(yùn)用過? 如何進(jìn)行領(lǐng)域建模、數(shù)據(jù)庫設(shè)計(jì),才能夠使得每次查詢的開銷最小?
數(shù)據(jù)庫原理方面可以看看《數(shù)據(jù)庫系統(tǒng)概念》,這本書挺厚的,包含了從 SQL 到數(shù)據(jù)庫設(shè)計(jì)再到數(shù)據(jù)庫原理、分布式數(shù)據(jù)庫都有,可以挑著看,比如關(guān)系模型、數(shù)據(jù)庫設(shè)計(jì)(三大范式)、數(shù)據(jù)磁盤存儲和組織方式、索引、并發(fā)控制等。
當(dāng)然了整個(gè)數(shù)據(jù)庫最重要的還是索引和并發(fā)控制(鎖、MVCC等),這部分也是面試常考的:
- 索引存儲結(jié)構(gòu):B樹、B+樹索引、Hash索引
- 索引的使用:主鍵索引、覆蓋索引、最左前綴原則、索引下推等
- 鎖:樂觀鎖、悲觀鎖、表鎖,行鎖,意向鎖,讀鎖,寫鎖等等
- MySQL InnoDB MVCC 實(shí)現(xiàn)機(jī)制
- 存儲引擎:InnoDB、MyISAM等,各自的優(yōu)缺點(diǎn)
- 事務(wù):ACID理論
這部分推薦兩本書:
- 《高性能MySQL》
- 《MySQL技術(shù)內(nèi)幕》
- 網(wǎng)絡(luò)編程,后臺開發(fā)基本是離不開網(wǎng)絡(luò)編程的,其實(shí)甚至整個(gè)后臺開發(fā)也可以看做是在做網(wǎng)絡(luò)編程。
只不過別人的框架幫我們做了協(xié)議解析、網(wǎng)絡(luò)數(shù)據(jù)傳輸、解封包這些底層操作。
比如 SpringBoot 這種保姆級框架,基本上屬于將一個(gè)框架能干的事都干完了,以至于我們開發(fā)業(yè)務(wù)只需要定義接收和返回包的數(shù)據(jù)格式,然后做邏輯處理就完了。
像序列化、解封包、IO 處理這種網(wǎng)絡(luò)編程必備的臟活業(yè)務(wù)開發(fā)根本不會接觸到。
但是網(wǎng)絡(luò)編程技能還是很重要的,特別是對于 Linux C++ 開發(fā)來說。
Linux 下網(wǎng)絡(luò)編程核心的包括系統(tǒng)編程和網(wǎng)絡(luò) IO 兩個(gè)部分:
- 進(jìn)程間通信方式: 信號量、管道、共享內(nèi)存、socket 等
- 多線程編程:互斥鎖、條件變量、讀寫鎖、線程池等
- 五大 IO 模型:同步、異步、阻塞、非阻塞、信號驅(qū)動
- 高性能 IO 兩種模式:Reactor 和 Proactor( 但是 Linux 下由于缺少異步 IO 支持,基本沒有 Proactor
- IO 復(fù)用機(jī)制:epoll、select、poll(破解 C10K 問題的利器)
推薦幾本書:
- 《Linux高性能服務(wù)器編程》
- 《Unix網(wǎng)絡(luò)編程》
- 《Unix環(huán)境高級編程》
- 編程語言:雖然說語言不重要,但是總得擅長一門語言吧?C++的話,那幾本書(Effective三部曲,《Effective C++》、《More Effective C++》、《Effective STL》、STL 源碼剖析、對象模型)都得過一遍吧? Java的話,JVM原理得看下吧?GC 得看下吧?JDK重要集合類庫得看吧
- 項(xiàng)目:說句實(shí)話,學(xué)校里接觸的項(xiàng)目能有多高大上?如果只是用幾個(gè)框架的那種,我建議不要寫到簡歷上,不如去github上參與開源項(xiàng)目,GSOC了解一下?當(dāng)然如果你的實(shí)驗(yàn)室很厲害,跟導(dǎo)師做的項(xiàng)目很牛逼另說。還有一條路就是上面的5,6,7,任何一個(gè)花上半年時(shí)間去實(shí)現(xiàn)一個(gè)簡陋的原型(比如實(shí)現(xiàn)一個(gè)簡單的內(nèi)核),都是非常好的簡歷加分項(xiàng)。事實(shí)上,國外名校這些課的最后的project都是讓你實(shí)現(xiàn)一個(gè)原型。
- 英語: 這個(gè)面試一般不會涉及到(除非是英文面試),但是我仍然認(rèn)為英語是很重要的能力。具體的來說,就是“遇到一個(gè)撒比問題不去打擾同事自己谷歌或者bing從stackoverflow找到回答并且獨(dú)立解決” 或者“老板讓我去接觸一個(gè)沒搞過的東西我硬著頭皮點(diǎn)開文檔看了兩天兩頁終于能解決問題” 的能力。
- 信息采集能力:對于學(xué)校不太好(非C9)的同學(xué),這個(gè)能力其實(shí)是最關(guān)鍵的。最優(yōu)秀的同齡人在學(xué)習(xí)些什么?我想去的公司想招聘什么樣的人才?面試會問什么?春招秋招到底是什么,如何投遞?實(shí)習(xí)真的很重要嗎? 這些問題,你去百度,去知乎搜索,去牛客網(wǎng)搜索,其實(shí)都有回答。為什么說這個(gè)能力重要?舉個(gè)例子,BAT熱門崗位留給秋招的坑寥寥無幾,因?yàn)榭佣急粚?shí)習(xí)轉(zhuǎn)正的同學(xué)占了,如果你之前不知道春招,沒有去實(shí)習(xí),能去BAT熱門崗位的機(jī)會自然就很渺茫了。又比如,秋招各家公司筆試難度都明顯高于面試難度,原因一方面是篩人,另一方面是筆試作弊現(xiàn)象很嚴(yán)重。如果你知道春招、秋招提前批是不用筆試的,是不是你的機(jī)會又多了幾分?
- 社交能力:幾個(gè)關(guān)鍵字:頭條白金碼 、組內(nèi)直推 自己去牛客搜索吧。
以上是對本科研發(fā)崗的要求。算法崗和研究生的要求我不太清楚,想必只會更高。
當(dāng)然,我上面說的這些要求,對于絕大多數(shù)同學(xué)來說都非常遙不可及。
但是,如果你在一個(gè)很普通的高校,不拿最高的標(biāo)準(zhǔn)要求自己,那你的結(jié)局就是和你的那些學(xué)長學(xué)姐一樣,去個(gè)普普通通的公司,過普普通通的一生。
另外,如果你還是大一、大二的學(xué)弟學(xué)妹,再給幾點(diǎn)建議:
其實(shí)這是我一直推崇的 CS 科班學(xué)生的典型學(xué)習(xí)路線,基本上基礎(chǔ)課跟著國外 CS 名校課程來,準(zhǔn)沒錯(cuò)。
能夠做到 50%,應(yīng)該國內(nèi) BAT 這種公司的 offer 就比較好拿了,但是問題在于,我們剛上大學(xué)的時(shí)候其實(shí)很難從一開始就有如此清晰而明確的規(guī)劃。
不少同學(xué)往往是到了大三下,發(fā)現(xiàn)身邊有同學(xué)都拿到頭條、ucloud的實(shí)習(xí)offer了,突然意識到,好像快要找工作了。
然后才匆匆開始認(rèn)真撿起來學(xué)習(xí),而平時(shí)都是把老師布置的作業(yè)完成就好了。
所以對于還在校的CS專業(yè)學(xué)弟學(xué)妹,有幾點(diǎn)建議:
- 提高信息搜索、采集能力
做公眾號這段時(shí)間,很多同學(xué)問我要xx Lab的資料,csapp的 lab 資料,其實(shí)我想說這些東西我去找和你去找都是一樣的,打開Google,輸入對我發(fā)的那些關(guān)鍵字,你就能找到。
而且你找到的將會是一手資料,而我發(fā)給你以及諸如網(wǎng)盤上下載的,其實(shí)都是 N 手了。 - 多看信息密度大、質(zhì)量高的資料
比如那些經(jīng)典的書籍、課程,不要整天在CSDN、掘金這些博客平臺逛,當(dāng)然,我不是說這些博客都不好。
而是,你學(xué)習(xí)的資料,大概決定了你所能學(xué)到知識的上限,這些博客大多也是作者看完了其它書、專欄之后自己寫的總結(jié)。
快速了解可以看博客,但是想要學(xué)得深入,不該省的時(shí)間終究是省不了的。
自己看書,雖然更費(fèi)時(shí)間,但是知識會更加的系統(tǒng)和全面。 - 要有危機(jī)意識
現(xiàn)在計(jì)算機(jī)很火,各種轉(zhuǎn)碼、跨考計(jì)算機(jī)的同學(xué)很多,競爭也很大,每年看牛客上的經(jīng)驗(yàn)貼,都會發(fā)現(xiàn),cpp primer 雖然很厚,但總會有人過了兩三遍,而你也許一遍還沒過完,也總有人 leetcode 刷了七八百道,而你也許直到面試前,劍指offer還沒看完呢。
想要拿到滿意的offer,就早點(diǎn)開始認(rèn)真學(xué)習(xí)、好好準(zhǔn)備、刷題,面向就業(yè)學(xué)習(xí)蠻好的。 - 每個(gè)人都能學(xué)好計(jì)算機(jī),你需要的是持續(xù)不斷的努力
我們會在各種論壇上看到一些前輩侃侃而談他們的經(jīng)驗(yàn),也許有很多技巧、有天賦。
但最本質(zhì)的一定是他們持續(xù)不斷的付出,一萬小時(shí)定律我一直堅(jiān)信。
換到 CS 專業(yè),可以類比出”10 W行代碼”定律,在本科四年,或者研究生三年,不說10w 行,幾萬行代碼總的有吧。
寫代碼很多情況下,就是無他,唯手熟爾。
自己粗略的統(tǒng)計(jì)了下,加上寫的各種 lab,大學(xué)寫的代碼應(yīng)該是接近10w 行的。 - 最后,在這里送大家算法筆記,幫助我和一起找工作的同學(xué)拿到BAT 等一線大廠 offer ,是一位ucloud大神和谷歌大佬寫的,包含了C++、Go、Java等版本,對于算法薄弱或者需要提高的同學(xué)都十分受用,算法一定是計(jì)算機(jī)學(xué)習(xí)的重中之重:
贊同0