3h天 多久能大概能掌握入門C++?
大一新生,開學專業課有C語言,想提前學習,不知暑假如何規劃才算合理呢??(可能每天還要學高數和雅思,所以給計算機留的時間不是很多也 )
我說的入門C加加就是掌握大概的基本知識,能看懂簡單操作,不需要設計軟體難度較大的程式設計啥的,能達到大一上課較為輕鬆的狀態即可。。
還有一個月大一開學,按照這個進度 我C++在開學前能大概學出個什麼德性呢?(疑問句)
首先給大家推薦一個學習C語言/C++ 的github,分享C語言/C入門、學習路線、電子書籍推薦與下載、影片推薦、小專案、乾貨文章、筆試面試、C語言/C++ 規範、開源專案等。
地址:
C語言/C++學習平臺
1 c++ 發展方向
實驗室開發
C++絕對是工科生中的第一大語言,C++兼具面向過程以及面向物件的特性,既擁有比較優秀的執行速度,又有良好的大型專案開發能力,那簡直可以制霸高校實驗室了。
後端開發
學了C++之後,第一選擇當然就是去面試後臺開發的崗位。
客戶端開發
需要紮實的程式設計基礎和計算機理論基礎,同時可能還要熟悉Windows/C++編譯連結機制、QT客戶端開發技術體系、Windows訊息機制等技術。
音影片開發/多媒體開發
大平臺都在做短影片,同時也不斷接入各種直播模式。在這個趨勢中,對於音影片/多媒體方向的開發需求越來越廣。這個方向更偏向於具體的場景,比如播放器,比如直播平臺,比如音影片特效等。
遊戲開發 掌握了C++基本語法之後,開發遊戲也依然是一個不錯的選擇,目前工業級別的3D遊戲引擎仍然是用C或C++編寫的。
雖然以個人能力無法去完成一個龐大的網路遊戲,但是從簡單開始,編寫一些小遊戲,然後逐漸深入,循序漸進並最終加入大型遊戲開發團隊還是非常好的一個選擇。與之相應的就業崗位主要有遊戲開發工程師、遊戲引擎架構工程師等。
嵌入式開發 C/C++還有一類非常大的就業方向,就是去做嵌入式。嵌入式本身可能是偏硬體一點,但是現在做個什麼事,都是軟硬不分家的。
嵌入式的開發同樣也會涉及到網路程式設計、併發程式設計等方面。通俗點解釋可能就是,嵌入式程式碼是執行在別的小系統上,而不是傳統意義的計算機上。這個方向除了需要程式設計能力,還需要基本的電路理論素養。
人工智慧
人工智慧、機器學習等方向也少不了C或C++語言的身影。需要強調的是雖然C++語言可以從事的方向非常廣泛,但是僅僅掌握C++語法是遠遠不夠的,上述的應用領域C++語言是基礎,進入這些領域還需要進一步深入系統學習相關領域的知識以及去接觸真實企業專案的內容。
2 、c++語法基礎
首先是入門階段,除了基本的迴圈、變數、判斷以外,至少需要掌握這些:
指標、引用、陣列、記憶體
引用與指標區別
虛機制:虛擬函式、虛擬函式表、純虛擬函式
C 和 C++ 的一些區別,比如 new、delete 和 malloc、free 的區別
一些關鍵字的作用:static、const、volatile、extern
四種類型轉換:static_cast, dynamic_cast, const_cast, reinterpret_cast
STL部分容器的實現原理,如 vector、deque、map、hashmap
類的封裝,構造和析構、靜態成員、物件管理;
類的構造(有參建構函式、無參構造、複製構造、預設建構函式)和析構;
物件動態管理、友元函式、友元類、運算子過載;
C++編譯器物件管理模型分析;
運算子過載(一元運算子、二元運算子、運算子過載難點、專案開發中的運算子過載);
模板特化、偏特化,萃取 traits 技巧
繼承、虛繼承、菱形繼承等
多型: 動態繫結,靜態多型
重寫、過載
智慧指標原理:引用計數、RAII(資源獲取即初始化)思想
智慧指標使用:shared_ptr、weak_ptr、unique_ptr等
編譯連結機制、記憶體佈局(memory layout)、物件模型
C++11 部分新特性,比如右值引用、完美轉發等
書籍推薦
C++ Primer中文版
《C++ Primer中文版》本書面向 C++ 語言的初學者,是一本很友好的自學教材。作者把 C 語言的基礎概念和需要注意的程式設計細節說得很清楚,並且例程和習題豐富,相信認真讀過之後,可以完成 C 語言入門這個目標。
高質量程式設計指南
《高質量程式設計指南》,牆裂推薦,這本書看得比較過癮,書裡面有一些程式設計規範的東西,對於寫程式的人來說,還是不錯的,可以培養好的編碼習慣,加深了一些知識的鞏固。比較實用,也適合面試前看看。
Essential C++中文版
《Essential C++中文版》是一本內容不多但很實用的 C++ 入門書籍,強調快速上手與理解 C++ 程式設計。本書主要圍繞一系列逐漸複雜的程式問題,以及用以解決這些問題的語言特性展開講解。你不只學到 C++ 的函式和結構,也會學習到它們的設計目的和基本原理。
More Effective C++(中文版)
《More Effective C++(中文版)》,該書圍繞55條準則,每一條都介紹了一個可讓你寫出更好的C++程式程式碼的方法,並以特別設計過的例子詳加討論。
提高C++效能的程式設計技術
《提高C++效能的程式設計技術》,本書認為 20% 的效能缺陷將會佔用我們 80% 的時間。因此我們把精力集中在最有價值的地方。本書詳細討論了臨時物件、記憶體管理、繼承、虛擬函式、內聯、引用計數以及 STL 等一切有可能提升 C++ 效率的細節內容。無論你是相關領域的從業人員,還是 C++ 程式設計愛好者,或者是渴望突破程式設計瓶頸、大幅提升自我修為的程式設計愛好者,本書都必將使你獲益良多。
從缺陷中學習C/C++
《從缺陷中學習C/C++》從本質上來說,這就是一個 C/C++ 的錯題集。全書中包括 63 個問題引發的錯誤,即書名中的缺陷。也是避坑指南。
C++ Templates中文版
《C++ Templates中文版》,深入瞭解現代 c++ 模板的實用書籍。本書不僅是對 C++ 模板的權威解釋,而且本書還深入地介紹了其他一般的 C++ 思想。
STL原始碼剖析
《STL原始碼剖析》詳細地瞭解 STL 的底層實現機制,同時也可以對常用資料結構,C++ 記憶體管理擁有更深的理解。
其實還有《C++標準庫(第2版)》、《C++併發程式設計實戰》、《C++程式設計思想(兩卷合訂本)》等,介紹的這些書我都買了,不過說實話,後面的幾本都是泛泛的看了下,當作工具書。
影片
清華大學-鄭莉-C++語言程式設計(基礎篇)
清華大學-鄭莉-C++語言程式設計
https://www。
bilibili。com/video/BV1P
A411b75a?p=92
侯捷老師的八部曲:
侯捷C++ 標準 11 -14
侯捷STL 和 泛型程式設計
侯捷C++ 記憶體管理
侯捷C++面向物件高階開發
侯捷STL與泛型程式設計
侯捷 C++ Startup 揭密:C++ 程式的生前和死後
陳碩第三套、Linux CC++網路程式設計實踐-陳碩
a
華為最牛逼的c++ 基礎與提高PDF
LeetCode101題解
Google 開源專案風格指南——中文版
a
QT影片教程:
QT影片教程
https://www。
bilibili。com/video/BV1j
K4y1m7d4
資料結構與演算法
書
比較系統地學習資料結構的話,推薦看《大話資料結構》、《演算法(第4版)》和《資料結構與演算法分析》。
大話資料結構
演算法(第4版)
資料結構與演算法分析
如果剛接觸資料結構的話,可以從《演算法圖解》、《我的第一本演算法書》入手。
演算法圖解
我的第一本演算法書
影片
郝斌資料結構
雖然比較老,但是講的比較詳細,容易理解,對初學者非常友好。
https://www。
bilibili。com/video/BV1U
t411a7rN?from=search&seid=14411767501116137153
資料結構-浙江大學
課程是由陳越與何欽銘共同錄製,b站與慕課網都有,慕課網比較清晰一些
https://www。
icourse163。org/course/Z
JU-93001?from=searchPage#/info
資料結構與演算法基礎
課程由青島大學王卓老師錄製,非常適合考研,講的題比較多。
https://www。
bilibili。com/video/BV1n
J411V7bd?p=1
多動手
動手去做,動手去做,動手去做。重要的話說三遍。
動手包括擼碼,還包括“多畫”
要邊學習邊畫圖。因為對於資料結構中的儲存結構來說,尤其是樹結構和圖結構,儲存結構確實比較複雜,僅靠空間想象難免會有披露,而透過親手畫圖往往能避免很多“坑”,後面關於資料結構與演算法的文章中,我也會加入一些動圖。
把資料結構圖形化,視覺化。在直覺上感受一個數據結構是什麼樣子的。使用它是什麼感覺,抽象上和具體實現上是什麼樣子的。這就是最重要的事情。並且無論是對於簡單的佇列、棧還是平衡樹都很重要而且有效。把資料結構畫出來,在你的腦袋瓜裡面就能想象出來,總之,你需要做的就是,直觀的去了解這些資料結構。
在學習某些演算法時,也可以藉助畫圖來加深自己的理解。可以邊閱讀程式碼邊畫圖,這樣可以更快理清程式碼的實現邏輯。
在透過“多畫”實現理解儲存結構和實現邏輯的基礎上,初學者還要“多擼碼”編寫實現程式碼。對於某一種儲存結構或者演算法,沒有 3 遍以上自己獨立的實現過程,是很難做到融會貫通的。
另外,可以在leetcode和牛客網多刷題。
計算機網路
書
TCP/IP詳解 卷1:協議
堪稱 TCP/IP 領域的聖經。作者 W。 Richard Stevens,他從使用者(程式設計師)的角度,以 tcpdump 為工具,對 TCP 協議抽絲剝繭娓娓道來,讓人歎服。恐怕 TCP 協議的設計者也難以講解得如此出色,至少不會像他這麼耐心細緻地畫幾百幅收發 package 的時序圖。
計算機網路:系統方法(原書第5版)
經典書籍,著重看TCP/UDP部分。
影片
計算機網路微課堂
https://www。
bilibili。com/video/BV1c
4411d7jb?p=1
韓立剛計算機網路 謝希仁 第7版
https://www。
bilibili。com/video/BV1g
V411h7r7?p=1
資料庫
書
MySQL必知必會
入門書籍,書中從介紹簡單的資料檢索開始,逐步深入一些複雜的內容,包括聯結的使用、子查詢、正則表示式和基於全文字的搜尋、儲存過程、遊標、觸發器、表約束等等。
高效能MySQL(第3版)
進階書籍,mysql 領域的經典之作。不但適合資料庫管理員(dba)閱讀,也適合開發人員參考學習。不管是資料庫新手還是專家,相信都能從本書有所收穫。
MySQL技術內幕:InnoDB儲存引擎(第2版)
昇華書籍,詳細講解了 InnoDB 儲存引擎內部的各個功能模組的實現原理,對大家閱讀和理解 InnoDB 的原始碼有重要的指導意義。適合所有希望構建和管理高效能、高可用性的 MySQL 資料庫系統的開發者和 DBA 閱讀。
其他書籍:
《資料庫系統實現》、《Redis設計與實現》。
影片
MySQL_基礎+高階篇- 資料庫 -sql -mysql教程_mysql影片_mysql入門_尚矽谷
https://www。
bilibili。com/video/BV12
b411K7Zu?from=search&seid=2779357081480449466
計算機組成原理
書
深入理解計算機系統(原書第3版)
這是一本很深入和方向性的書,每個 CS 學子都應該去讀,它會告訴你,要想成為一個優秀的程式設計師,你應當重點理解哪些計算機底層原理。
其他書籍:
《計算機組成原理與設計》。
影片
計算機組成原理 清華大學劉衛東 全58講 國家精品課程
https://www。
bilibili。com/video/BV1c
4411w7nd?p=1
計算機組成原理(哈工大劉宏偉)135講(全)高畫質
https://www。
bilibili。com/video/BV1t
4411e7LH?p=1
作業系統
書
現代作業系統(第3版)
本書是作業系統領域的經典之作,講的全面詳細,包括程序、執行緒、儲存管理、檔案系統、I/O、死鎖、介面設計、多媒體、效能權衡,以及有關作業系統設計的最新趨勢。不僅涵蓋了現代作業系統的原理和實踐,而且特別關注了Linux作業系統、Windows Vista作業系統、嵌入式作業系統、實時作業系統以及多媒體作業系統。所以也是面試筆試作業系統的寶典。
其他書籍:
《作業系統真象還原》、《30天自制作業系統》。
影片
作業系統(哈工大李治軍老師)32講(全)超清
https://www。
bilibili。com/video/BV1d
4411v7u7?p=1
2020 南京大學 “作業系統:設計與實現” (蔣炎巖)
https://www。
bilibili。com/video/BV1N
741177F5?p=1
網路程式設計
剛工作的時候第一個專案就是物聯網後臺伺服器軟體,網路上也有類似的網路服務程式,比如即時聊天軟體的後臺伺服器,網遊伺服器,金融交易系統,網際網路企業用的分散式海量儲存,微博發帖的內部廣播通知等等。當然在嵌入式系統上也有移植或維護 TCP/IP 協議棧等等。
熟悉掌握一些網路模型,例如 WINDOWS 系統下使用的 IOCP。Linux系統下使用的 Epoll、select、poll模型。
熟悉一些通用庫例如 ocket Server,RPC Framework
記憶體管理。過載new/delete,記憶體池,物件池的處理。
記憶體洩露檢測,記憶體訪問越界警惕,記憶體碎片的回收。
預分配池減少切換和排程,預處理的執行緒池和連線池,例如資料庫連線池等。
多程序程式設計、多執行緒程式設計
五大 IO 模型:同步、非同步、阻塞、非阻塞、訊號驅動
程序間通訊方式: 訊號量、管道、共享記憶體、socket 等
執行緒安全問題,鎖處理、臨界資源
負載均衡理念,資料的提前準備和即時計算,如果有耗時的業務可以考慮微服務,負載均衡。
定時器、心跳、定時檢查死連結等等
書
有網路和作業系統的基礎很重要。
TCP/IP網路程式設計
非常適合初學者學習的,對網路程式設計的講解清晰直白,完全適合新手入門,寫出了網路程式設計的每一個步驟。
UNIX網路程式設計 卷1:套接字聯網API(第3版)
UNIX網路程式設計 卷2 程序間通訊
學習Unix必備的經典書籍,重要章節看看,可以當工具書使用。
UNIX環境高階程式設計(第3版)
程序控制 ,執行緒控制,程序環境,程序通訊 講得尤為精彩,網路部分講得比較淺,但也夠用。整本書可以說涵蓋了Linux的方方面面,面面俱到,甚至很細。
本書是 Linux 伺服器程式設計領域的經典著作,從網路協議 TCP/IP、伺服器程式設計核心要素,Linux 網路程式設計 API、高階 I/O 函式、Linux 伺服器程式規範、高效能伺服器程式框架、I/O 複用、訊號、定時器、高效能 I/O 框架庫 Libevent、多程序程式設計、多執行緒程式設計、程序池和執行緒池等內容等多角度全面闡釋了編寫高效能 Linux 伺服器應用的方法、技巧和思想。還包含兩個綜合性案例,從實戰的角度講解了高效能伺服器的最佳化、系統監測工具的使用等內容。
Linux多執行緒服務端程式設計
本書是陳碩大佬的作品,重點講解一種適應性較強的多執行緒伺服器的程式設計模型,即 one loop per thread。這是在 Linux 下以 native 語言編寫使用者態高效能網路程式最成熟的模式,掌握之後可順利地開發各類常見的服務端網路應用程式。本書以 muduo 網路庫為例,講解這種程式設計模型的使用方法及注意事項。
影片&原始碼
推薦陳碩大佬的《Linux CC++網路程式設計實踐》以及開源的庫 muduo
https://
github。com/tangtangcodi
ng/C-C-
https://
github。com/chenshuo/mud
uo
libevent 是一個輕量級的基於 event 回撥機制的網路程式設計庫,可以支援 Linux、Solaris、Windows 等系統,它本身是用 C 語言寫的,比較適合入門級的閱讀。
https://
github。com/libevent/lib
event
Asio 是 boost 裡的網路程式設計庫,是用 C++ 語言寫的。裡面用了很多 boost 的資料結構和技巧,包括大量模板的使用,有一定的語言難度。
https://www。
boost。org/doc/libs/1_75
_0/doc/html/boost_asio。html
最後
《K&R》第二版的中文版200多頁,毫不誇張的說我一天就能看完。說實話如果只是為了拿學分,只看這一本就完全夠用。
說實話我最早接觸的東西是Batch,然後是Java,雖然只學了點三腳貓功夫,但足夠理解《C++ Primer》《K&R》《Java程式設計思想》這種入門書了,一口氣看完是沒什麼壓力的。
就大學裡面學的程式設計的基礎知識,我覺得都不用提前自學C++,把python最基礎的過一遍就差不多了,每天一個小時,悟性高也就一週,悟性差最多不超過兩週。因為最基礎的程式設計,都大同小異。如果非要學C++,並且還想牛逼點,我建議花一週時間過下語法,然後B站上找個播放量高點的QT教程,可以擼個介面啥的,這樣開學吹牛也好吹點