1、秋招 Linux C/C++ offer 狀況前端
2、Linux C/C++ 方向的一些思考mysql
3、計算機基礎知識的梳理ios
4、C++ 方向的深刻學習路線c++
5、項目 + 亮點 + 面試的一些思考面試
6、總結算法
Linux C/C++ 從零基礎到大神的學習路線,本身的真實學習路線,乾貨不少,建議收藏,認真閱讀。sql
在校期間,我一直走的都是 Linux C/C++ 學習路線,歷經暑期實習、秋招決戰、校招期間投的大部分崗位都是 Linux C/C++ 後臺方向,對於這個方向,有着本身的理解。數據庫
從接觸 C++ 到我如今正式工做,大概有 2 年多的時間,對於這個方向的學習路線、以及學習編程的方法摸索出來了一些,看完本文,但願對於正在走 Linux C/C++ 路上的同窗能有所幫助。apache
本人就讀於雙非院校、非科班本科學生,專業是偏硬件的(學校課程只有一門 C 語言與編程相關,其他的課程跟編程一點點的關係都沒有),在校期間也沒拿過什麼大的獎項。編程
計算機基礎爲零,大二上學期接觸 C 語言,大二一年學了 C 語言和數據結構,大三在學校的實驗室開始學習計算機基礎和學習 C++ 方向,一路自學編程,始終相信本身,也是拿到了大廠 offer。
秋招 offer 狀況:
。。。
2017 年暑期實習騰訊,2018 年初實習百度,校招拿了十幾個 Linux C/C++ 方向的 offer,最終的選擇也很玄學,去了本身想去的公司,從事本身喜歡的崗位,如今在編程的路上越走越遠。
一、
對於方向的抉擇,不少人都選擇了 Java 或者 Python 方向,Java 或者 Python 方向確實學的人多,崗位需求不少,入門能比 Linux C/C++ 方向容易一些,可是往深了學,各有各的難度,先敲定了方向,再深刻學習。
Linux C/C++ 方向,國內真正掌握的人,實際上是極少數,這個方向的學習人數也是相對比較少的,入門通常首選 C 語言或者 Python,C、C++ 在編程排行榜也是經久不衰的,排名靠前,若是喜歡,有興趣,走這個方向是能夠的。
Linux C/C++ 方向,國內不少大公司都有招聘這個方向的崗位,BAT 都有,尤爲騰訊,底層架構都是 C++ 寫的,百度核心搜索不少模塊也是 C++ 寫的,阿里雲也在招聘 C++ 方向的工程師,這個方向,學的不錯的,根本不用擔憂找工做的問題,若是學的通常的,其實哪一種語言就都比較難找了,畢竟都知道it行業是技術競爭,優勝劣汰。
Linux C/C++ 的效率是比 Java、Python 快一些的,更偏向於底層,能直接操做內存,對於編程思惟、邏輯能力的提高是有幫助的;其實學習這個方向,是有一點枯燥的,不像 Python 爬蟲、Java、前端能作出一些有趣的東西,小程序開發出一些產品,都能很快用於實戰,得到編程的樂趣,進一步刺激本身學習。
C++ 方向沒有那麼多有趣的東西能夠作,在很長的一段時間內,要靠本身的興趣去堅持學習。
二、
我在大三的時候,用 C++ 寫過五子棋、內存監控工具、壓縮工具、以及實現一些比較複雜的數據結構,實現網絡編程的併發模型;當你學習 Linux C/C++ 方向到必定程度的時候,你會找到這個方向的樂趣,跟其餘方向徹底不同的樂趣,不過,前期真的很難,有一段時間極其痛苦,是要通過很長一段時間的學習,纔能有必定的效果,若是對這個方向,真的沒有啥興趣,最好選擇走前端、Java、Python 等是最好的選擇。可是若是你已是從業Linux c/c++開發幾年了,那就繼續吧,技術提高沒你想的那麼難!
Linux C/C++ 方向,入門稍微難一點,一旦選擇了要走 C++ 方向的,在心態上面,要作好準備,必定不能有畏難內心,作好接觸底層、複雜邏輯的分析、以及具有面向過程 + 面向對象的思想;就是退一步講,我學習了 Linux C/C++ 方向,具有了編程思惟和熟悉了 C++ 語言,之後去公司上班了,也能很快的上手 Java、Python 等方向(我說的上手指的是語言基礎很快的學習,要想深刻,還得花大把的時間),這也是c/c++的優點所在。
按照目前身邊人找工做的狀況,廣泛來講,Java、Python、前端、數據分析、測試方向都要比 C++ 好找一些,更容易找到工做,雖然我是走的 Linux C/C++ 方向,可是對於對底層沒有興趣,對 C 語言沒有興趣的人,不建議走這個方向。
三、
我一路走過來,真的很痛苦,在校期間都想過放棄這個方向,曾經想學個 Java 可能會好一些(身邊學習 Java 的人仍是挺多的),每當快放棄的時候,又想到都學了這麼長時間了,再堅持堅持,就這樣一路走過來了;我是以爲本身真的挺幸運的,有時候,真的不必定非要頭鐵 C++ 方向,要看整個市場行情,順勢而爲,選擇好方向,在深刻!
對於 Java 仍是 C++ 方向的選擇,沒有哪一個方向必定好找工做,沒有哪一個方向必定工資待遇高,互聯網這行,尤爲是靠技術說話的,這些都取決於你自身的技術能力。
選擇走 C++ 方向的,必定要走 Linux C/C++,面向網絡編程,學會 Linux 相當重要!
大廠特別喜歡考察計算機基礎知識,對於基礎掌握的如何,在很大程度上將決定你是否能進入大廠,必定要重視基礎知識的學習;秋招準備:基礎 + 算法 + 項目,加上本身的方向(C++、Java、Python、前端等),其中每一個環節都得準備到位,才能最大程度上拿到大廠 offer,意識很重要,有了意識,再看具體的學習路線。
計算機基礎:數據結構 + 算法、操做系統 + 計算機網絡、數據庫 + Linux、C 語言
工做必備工具:Linux + Git + Sql
無論你是學習什麼方向的,Java、Python、前端、測試、運維等等,這些基礎都不能忽視,有時間的話,必定要打紮實了,有了紮實的功底,在這行才能走的更遠更快!
一、經常使用數據結構與算法:
靠前的數據結構必定要很是的熟練,對於樹、圖複雜的數據結構,最起碼的掌握定義、原理、部分實現,我就記得:我在面試的時候,手寫過紅黑樹的旋轉算法,對於圖的一些最短路徑算法也是當面手寫過,頭條的面試基本上就是全程算法,難度不低。
必定要保證掌握基礎算法 + 常見算法。
在算法方面的要求上,C++ 方向對於算法的要求明顯更高,算法功底必定要紮實!
二、操做系統:很常問的一些技術點,堆和棧、內存分區、虛擬內存 + 物理內存、進程 + 線程 + 協程、死鎖、分片機制、五大組件、中斷和系統調用 、同步和異步等等問題。
對於操做系統的理解,對於這些基礎的計算機知識的掌握是必須深刻學習,要花很大的功夫去理解清楚這些,工做中,對於真實線上系統的穩定性、對於底層技術的理解是有幫助的,操做系統是面試中常見問題之一。
三、計算機網絡:OSI 七層模型和 TCP/IP 四層體系結構,TCP 三次握手與四次揮手、常見的網絡協議(網橋、ARP、IP、ICMP、TCP、UDP、DNS、DHCP)、TCP 粘包、流量控制 + 擁塞控制、數字簽名原理、http + https,http 的狀態碼,https 的安全機制,網絡安全、輸入 www.baidu.com 背後發生了什麼等等問題。
其實工做中,有時就會出現,網絡抖動、網絡延遲,網絡擁塞的狀況,此時就須要具有必定的網絡知識,及時的解決問題,計算機網絡是面試中常見問題之一。
四、數據庫:數據庫做爲存儲數據的地方,其不一樣的數據結構、與應用的場景不同,採起不一樣的數據庫,對於 mysql 基本操做、寫 sql 的優化、表的設計、索引優化、如何更快的查詢、底層數據結構的設計原理等等問題。
常見的設計模式、主要是學習設計模式的思想、單例模式是必須寫代碼實現的,其餘設計模式理解思想,做爲了解內容,後臺開發工程師與 mysql 打交道挺多的,也是面試常見問題之一。
五、Linux系統
Linux是全部學c/c++同窗都繞不開的坎,我整理了Linux方面須要掌握的技術點,不知道怎麼學習的同窗能夠借鑑一下。
實時網絡日誌分析器 GoAccess
六、C 語言
C 語言是我學習編程的第一門語言,是面向過程的語言,對於 C 語言中的數組、函數、指針、內存對其模式、大小端問題、野指針、內存泄露、static、register、define、typedef、struct、union 等一些關鍵字的考察。
我一直把 C 語言當作基礎,不是方向,在 C 語言這裏學到了不少編程的思想,對於 Linux C/C++ 方向,C 語言是基本功,也是一定考察的地方,當初我也是由於特別喜歡 C,走上了 C++ 的道路。因此c語言其實對於全部語言的編程者來講都是值得學習和借鑑的。
C 語言能夠學,C 語言是基礎,不是方向,可是選擇走 C++ 就是要選擇的方向了,要謹慎選擇!
對於上面的每個模塊,其實都能單拿出來,寫的更爲具體一些,可是我的比較懶,就寫出大綱來給你們借鑑一些吧。
一、C++ 基礎
C++ 是面向對象的語言,必定要理解清楚面向對象的思想,先把 C++ 的基礎知識點打牢,剛從面向過程當中轉變過來,必定必定要適應面向對象的寫法。
在學習面向對象的時候,也要考慮如何用面向過程去實現面向對象(其實也就是結構體中有一個成員是函數指針),對於 C++ 的基礎知識,我簡單羅列以下:
一、const的用法
二、引用的用法
三、#define用法
四、構造函數
五、析構函數
六、拷貝構造
七、new、delete 和 malloc、free 的區別
八、訪問限定符 public、private、protected
九、深拷貝和淺拷貝
十、友元函數
十一、static
十二、內聯函數
1三、繼承、虛繼承
1四、鑽石繼承問題
1五、同名覆蓋問題
1六、虛函數表
1七、虛指針
1八、虛函數、純虛函數
1九、接口
20、多態
2一、重寫
2二、重載
2三、函數重載
2四、運算符重載
2五、流類庫和文件
二、C++ 進階
函數模板、類模板,C++ 中對於異常的處理,對於繼承和多態底層的理解,對於 virtual 底層的理解等。
對於 C++ 中 boost 庫八大智能指針的掌握與理解,其核心是理解而且剖析過相應的源碼, <scoped_ptr/shared_ptr/weak_ptr> 這三個是最核心的智能指針,理解清楚智能指針的本質是,內存的申請與釋放所有交給了對象管理,以免人爲疏忽,形成內存泄露。
何爲c/c++Linux方向的深刻學習,就是在掌握上述前提技術基礎之上的進階學習。
若是對上述技術以爲本身還有所不足的同窗,推薦你們一個免費學習課程
連接:https://ke.qq.com/course/417774?flowToken=1010788
主要講的就是c/cLinux方向的技術分享
針對上面,從基礎到 C++,我列出來的都是很是重要的知識點,固然了,也不可能所有列到,有不少技術問題,不少細節,我可能沒有考慮到,沒有寫到,這個還須要在學習的時候,認真看看視頻、看看書,把相應的知識都學到位,基礎打紮實一些。
1、
項目:對於暑期找實習,或者秋招找工做,除了基礎跟方向,接下來就是項目的準備了,對於 C++ 方向,不少人不知道要準備什麼項目?其實項目不在於有多大、有多難,在於項目是不是本身真正作的,本身是否徹底消化了,項目中是否有什麼亮點?
C++ 方面的實戰項目,以數據結構 + 網絡編程 + 實用工具爲主;數據結構方面:能夠實現紅黑樹、B+ 樹,又或者用圖解決什麼實際問題,這些複雜的數據結構實現能夠做爲項目的。
1.對於項目這塊,面試的常見問題有:
a、作這個項目的背景是什麼?
b、項目中具體有哪些模塊,都是怎麼實現的?
c、項目中你的技術亮點有哪些?
d、項目中有什麼難點,你是怎麼解決的?
e、要是從新作這個項目,你這個項目有什麼不足,你會進行哪些改進?
2.亮點:找實習或者找工做,必須的有本身的亮點,我以爲在那麼多基礎知識中,數據結構 + C 語言就是個人亮點之一,只要問到關於這 2 個方面的問題,儘可能回答全面清楚一些,還有就是本身對於 Linux 內核數據結構的剖析也是亮點之一,總之,必定要找到本身的亮點,與別人不同的地方,這個就是面試的加分項。
搜索引擎的底層原理、通信的底層原理,對於這些底層的實現,有興趣的能夠了解看看,其實也沒那麼難,要是在面試的時候,能回答出對這些技術的瞭解,以及本身的一些思考,那就是加分項了。
三、
面試:春招實習、秋招決戰,我不知道投了多少家公司,也不知道面試了多少場,基本上都是海投的,有了面試機會,就要抓住每一次,面試完多作總結、概括、反思;其實面試很玄學,有自身實力的緣由,也有運氣的成分,相信本身,好好表現就好。
對於面試,纔開始我也是比較緊張的,可是當你面的多了,慢慢的就會調整過來,就會好不少,我如今把面試當作是,這是一次近距離和優秀的人交流的機會,是一次學習進步的機會,有了這種心態,其實就好的多了。
對於面試我也自我總結了一些面試題及回答經驗,分析出題人出題的思路在哪裏,畢竟咱們不是要去死記面試題,重要是面試官考題的技術點在哪裏?把技術點吃透,以後再問到相似的問題就不會慌了。
推薦一些好的視頻網站:b 站、牛客網、極客時間、51cto、騰訊課堂,網易雲課程,基本上你所須要的視頻資料均可以去找,實在不行上淘寶看看,我在b站也會平常更新,可是目前還不是不少。
https://space.bilibili.com/437693511
有興趣的朋友能夠看看
我走的是 Linux C/C++ 路線,秋招投遞這個崗位也不少,對於簡歷,面試方面以爲很差不足能夠聯繫我,給你必定的指導吧,這個看時間。
對於想走 Linux C/C++ 方向的同窗,基本上按照上面的路線走,多實戰操做。
日積月累,終有所成!!!加油!!