在大多數(shù)開(kāi)發(fā)人員的認(rèn)知中,C/C++ 是一門非常難學(xué)的編程語(yǔ)言爽哎,很多人知道它的強(qiáng)大蜓席,但因?yàn)?b>“難”造成的恐懼讓很多人放棄。在我看來(lái)课锌,C/C++?一旦學(xué)成厨内,其妙無(wú)窮,就像武俠小說(shuō)中的“九陽(yáng)神功”一樣产镐,有了這個(gè)基礎(chǔ)隘庄,學(xué)習(xí)任何語(yǔ)言和編程技術(shù)都非常快速癣亚!
本文就為大家分享我學(xué)習(xí)C/C++ 的經(jīng)驗(yàn)丑掺,不少人都說(shuō)看完這篇文章感覺(jué)醍醐灌頂,想一看再看述雾,希望你也能有所收獲街州!
01
C/C++ 當(dāng)前的應(yīng)用領(lǐng)域
通常情況下,C++ 可以看成是 C 的一個(gè)超集唆缴。
C?語(yǔ)言目前主要用于像操作系統(tǒng)一類偏底層的應(yīng)用開(kāi)發(fā)鳍征,包括像?Windows/Linux?這樣的大型商業(yè)操作系統(tǒng),以及嵌入式操作系統(tǒng)面徽、嵌入式設(shè)備上的應(yīng)用艳丛,還有一些開(kāi)源的軟件,也會(huì)選擇?C?開(kāi)發(fā)趟紊。
我們?cè)賮?lái)說(shuō)說(shuō)?C++,C++?的應(yīng)用領(lǐng)域目前有三大類:
第一類就是我們目前見(jiàn)到的各種桌面應(yīng)用軟件霎匈,尤其?Windows?桌面軟件戴差,如?QQ、安全類殺毒類軟件铛嘱、各種瀏覽器等暖释;
另外就是一些基礎(chǔ)軟件和高級(jí)語(yǔ)言的運(yùn)行時(shí)環(huán)境,如大型數(shù)據(jù)庫(kù)軟件墨吓、Java?虛擬機(jī)球匕、C#?的?CLR、Python?編譯器和運(yùn)行時(shí)環(huán)境等肛真;
第三類就是一些業(yè)務(wù)型應(yīng)用軟件的后臺(tái)谐丢,像游戲的服務(wù)器后臺(tái),如魔獸世界的服務(wù)和一些企業(yè)內(nèi)部的應(yīng)用系統(tǒng)蚓让。
02
C++ 語(yǔ)言基礎(chǔ)與進(jìn)階
2.1?基礎(chǔ):
這里說(shuō)的基礎(chǔ)不是狹義上的?C++?語(yǔ)言基礎(chǔ),而是包括?C++?開(kāi)發(fā)這一生態(tài)體系的基礎(chǔ)历极,筆者認(rèn)為的基礎(chǔ)包括:
C++?語(yǔ)言本身熟練使用程度窄瘟。
必須結(jié)合一個(gè)具體的操作系統(tǒng)平臺(tái),所以得熟悉某個(gè)操作系統(tǒng)平臺(tái)的?API?函數(shù)趟卸,比如?Linux蹄葱,以及該操作系統(tǒng)的原理。
網(wǎng)絡(luò)通信锄列,網(wǎng)絡(luò)通信在這里具體一點(diǎn)就是?Socket?編程图云。
說(shuō)了這么多,你可能會(huì)覺(jué)得很抽象邻邮。舉個(gè)具體例子竣况,假設(shè)我們現(xiàn)在要開(kāi)發(fā)一個(gè)類似電驢這樣的軟件,軟件界面如下圖:
如上圖所示丹泉,假設(shè)操作系統(tǒng)選擇 Windows情萤,使用語(yǔ)言使用 C++,這款產(chǎn)品的實(shí)現(xiàn)技術(shù)分為?UI?和網(wǎng)絡(luò)通信部分摹恨,下面將詳細(xì)介紹這兩部分筋岛。
UI 部分
無(wú)論你是在閱讀別人的項(xiàng)目還是需要自己開(kāi)發(fā)這樣的項(xiàng)目,在確定了這款軟件使用的 UI 庫(kù)晒哄,您就需要對(duì)?Windows 的窗口睁宰、對(duì)話框、消息產(chǎn)生揩晴、派發(fā)與處理機(jī)制進(jìn)行了解勋陪。
接著,根據(jù)上圖中的軟件功能针贬,大致分為三大模塊宣赔,即資源、下載和分享。這三大塊是可以使用一個(gè)Windows Tab?控件去組織房午,這個(gè)時(shí)候您需要了解?Windows?Tab?控件的特性。
網(wǎng)絡(luò)通信部分
網(wǎng)絡(luò)通信部分屿愚,主要有兩大塊,第一個(gè)是程序啟動(dòng)時(shí)喇喉,與服務(wù)端的交互祖今;第二個(gè)就是文件下載與分享的?P2P?網(wǎng)絡(luò)。
2.2?進(jìn)階:
如果您達(dá)到了我上面說(shuō)的三點(diǎn)后千诬,可以再找一些高質(zhì)量的開(kāi)源項(xiàng)目去實(shí)戰(zhàn)一下。需要注意的是膏斤,最好找一些沒(méi)有復(fù)雜業(yè)務(wù)或者您熟悉其業(yè)務(wù)的開(kāi)源項(xiàng)目(如開(kāi)源的?IM?系統(tǒng))徐绑。
我個(gè)人學(xué)習(xí)一套陌生的開(kāi)源項(xiàng)目時(shí),總是喜歡將程序用調(diào)試器正常跑起來(lái)莫辨,然后再中斷下來(lái)傲茄,統(tǒng)計(jì)當(dāng)前的線程數(shù)目,然后通過(guò)程序入口?main?函數(shù)從主線程追蹤其他工作線程是如何創(chuàng)建的沮榜;接著盘榨,分析和研究每個(gè)線程的用途以及線程之間交互的,這就是先整體把握蟆融,然后找感興趣的細(xì)節(jié)去學(xué)習(xí)草巡。
03
關(guān)于 C++ 的面試
關(guān)于?C++?面試振愿,面試的要求到底是側(cè)重代碼量捷犹、項(xiàng)目經(jīng)驗(yàn)弛饭,還是側(cè)重操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)這種基礎(chǔ)知識(shí)萍歉?
如果你是想進(jìn)入大型互聯(lián)網(wǎng)公司的應(yīng)屆生:
應(yīng)該優(yōu)先好好準(zhǔn)備算法和數(shù)據(jù)結(jié)構(gòu)知識(shí)以應(yīng)對(duì)面試侣颂,這是大型互聯(lián)網(wǎng)公司面試頻率最高的考察范圍。
如果是社會(huì)人士參加的?C++?職位的面試:
如果是大型互聯(lián)網(wǎng)公司枪孩,雖然社招問(wèn)的更多的是項(xiàng)目經(jīng)驗(yàn)憔晒,但適當(dāng)準(zhǔn)備一些基礎(chǔ)的算法和數(shù)據(jù)結(jié)構(gòu)知識(shí)也是非常有用的。
另外拒担,C++ 是一門講究深度的編程技能,對(duì)于有一定工作年限的面試者攻询,面試官往往會(huì)問(wèn)很多原理性的細(xì)節(jié)从撼,這就要求廣大 C++ 開(kāi)發(fā)者在平常多留心、多積累钧栖、多思考技術(shù)背后的原理低零。
本文轉(zhuǎn)載自 | Chat-《如何成為一名合格的 C/C++開(kāi)發(fā)者》
作者 | 范蠡