一个色的导航资源精品在线观看|手机看片在线精品视频|伊人亚洲成人电影|亚洲欧美在线男女|无码无码在线观看五月精品视频在线|超碰日韩欧美在线|午夜精品蜜桃一区二区久久久|91欧美动态国产精品女主播|色欲色香天天天综合网在线观看免费|伊人春色在线伊人

c語(yǔ)言怎么開(kāi)發(fā)服務(wù)器?

時(shí)間:2024-09-28 00:17 人氣:0 編輯:招聘街

一、c語(yǔ)言怎么開(kāi)發(fā)服務(wù)器?

C語(yǔ)言開(kāi)發(fā)服務(wù)器可以說(shuō)是一件非常困難和辛苦的事情。首先你需要對(duì)網(wǎng)絡(luò)編程非常熟悉,因?yàn)榉?wù)器需要通過(guò)網(wǎng)絡(luò)進(jìn)行訪(fǎng)問(wèn),它必須架構(gòu)在網(wǎng)絡(luò)協(xié)議上,然后你需要對(duì)網(wǎng)絡(luò)協(xié)議和相關(guān)的程序設(shè)計(jì)接口非常了解,比如socket編程、http協(xié)議及其編程接口等,然后你還要使用多線(xiàn)程,因?yàn)榉?wù)器不可避免地要同時(shí)接受多個(gè)訪(fǎng)問(wèn)請(qǐng)求。綜上,用C語(yǔ)言開(kāi)發(fā)服務(wù)器需要以上技術(shù)。

二、C++開(kāi)發(fā)ftp服務(wù)器開(kāi)發(fā)難嗎?

難度系數(shù)一般,需要具備c++開(kāi)發(fā)知識(shí)才可能行。

三、c++服務(wù)器開(kāi)發(fā)和引擎開(kāi)發(fā)的區(qū)別?

引擎你說(shuō)的是游戲引擎吧? 引擎就是framework 很多語(yǔ)言都有,只不過(guò)一般叫框架 所謂框架就是在語(yǔ)言之上做了一層包裝,然后讓用戶(hù)用框架設(shè)計(jì)好的模式 往里面填代碼,框架會(huì)幫你解決一些行業(yè)內(nèi)常見(jiàn)的問(wèn)題 相對(duì)而言,用戶(hù)用框架開(kāi)發(fā)會(huì)容易一點(diǎn)

四、c++面試題?

首先,問(wèn)問(wèn)面向過(guò)程與面向?qū)ο蟮膮^(qū)別

一般面試C++的面試者都能回答大概,面試的技巧由淺入深,根據(jù)面試者的回答再引導(dǎo)著考察面向?qū)ο蟮南旅娴膬?nèi)容。

然后,可以考察C相關(guān)知識(shí)

C語(yǔ)言基礎(chǔ)還是很重要的,考考概念類(lèi)的const、static、指針、棧、鏈表、排序算法等很體現(xiàn)基本功的問(wèn)題。

繼續(xù),考察C++相關(guān)知識(shí)

構(gòu)造與析構(gòu)函數(shù),虛函數(shù),函數(shù)重載,類(lèi)的繼承多態(tài),內(nèi)存模型等。

最后,項(xiàng)目相關(guān)的問(wèn)題

若面試者做過(guò)大型項(xiàng)目或者招聘需求相關(guān)的項(xiàng)目,可以做適當(dāng)加分。然后根據(jù)項(xiàng)目側(cè)重點(diǎn),問(wèn)問(wèn)項(xiàng)目會(huì)用到的知識(shí),比如進(jìn)程間通訊,通訊協(xié)議,通訊報(bào)文與文件處理之類(lèi)的。

編程能力很重要,編程習(xí)慣更不容忽視

一場(chǎng)面試,時(shí)間有限,肯定不能把所有知識(shí)點(diǎn)都考到,要詳細(xì)的考察面試者的各項(xiàng)能力可以增加一場(chǎng)筆試。筆試的編程題必不可少,除了考察編程能力之外,還可以看出一個(gè)人的代碼習(xí)慣與代碼風(fēng)格。代碼習(xí)慣不好的面試者,需要慎重考慮。

另外,招聘還是要看多方面的看這個(gè)人是否合適。技術(shù)能力與項(xiàng)目經(jīng)驗(yàn)是一方面,性格、價(jià)值觀與企業(yè)文化的融合度,個(gè)人問(wèn)題等也是決定因素。

五、探索C語(yǔ)言后端開(kāi)發(fā):精品面試題及答案解析

前言

近年來(lái),C語(yǔ)言后端開(kāi)發(fā)崗位需求穩(wěn)步增長(zhǎng),成為眾多開(kāi)發(fā)者關(guān)注的熱點(diǎn)。想要成為一名優(yōu)秀的C語(yǔ)言后端開(kāi)發(fā)工程師,除了扎實(shí)的編程功底外,面試準(zhǔn)備也至關(guān)重要。本文將為您提供一些精品的C語(yǔ)言后端開(kāi)發(fā)面試題及詳細(xì)的答案解析,助您在面試中游刃有余。

1. C語(yǔ)言基礎(chǔ)

如果你想成為一名出色的C語(yǔ)言后端開(kāi)發(fā)者,那么對(duì)于C語(yǔ)言的基礎(chǔ)知識(shí)是至關(guān)重要的。

2. 數(shù)據(jù)結(jié)構(gòu)與算法

數(shù)據(jù)結(jié)構(gòu)與算法是后端開(kāi)發(fā)中不可或缺的一部分,下面是一些關(guān)于C語(yǔ)言后端開(kāi)發(fā)相關(guān)的數(shù)據(jù)結(jié)構(gòu)與算法面試題:

  • 棧和隊(duì)列是數(shù)據(jù)結(jié)構(gòu)中常用的兩種數(shù)據(jù)存儲(chǔ)方式,請(qǐng)解釋它們的概念,并給出C語(yǔ)言中的應(yīng)用示例。
  • 請(qǐng)編寫(xiě)C語(yǔ)言代碼,實(shí)現(xiàn)對(duì)一個(gè)數(shù)組的冒泡排序。
  • 介紹二叉樹(shù)的概念及在C語(yǔ)言中的應(yīng)用場(chǎng)景。
  • 什么是哈希表?請(qǐng)舉例說(shuō)明C語(yǔ)言中的哈希表的實(shí)現(xiàn)原理。

3. 文件操作

對(duì)于后端開(kāi)發(fā)來(lái)說(shuō),操作文件是常見(jiàn)的任務(wù)。以下是一些關(guān)于C語(yǔ)言文件操作的面試題:

  • 請(qǐng)簡(jiǎn)述C語(yǔ)言中文件指針的作用和常用操作。
  • 如何使用C語(yǔ)言實(shí)現(xiàn)對(duì)一個(gè)文本文件的讀取和寫(xiě)入操作?請(qǐng)給出示例代碼。
  • 在C語(yǔ)言中,如何判斷文件是否存在?請(qǐng)給出實(shí)現(xiàn)邏輯。

4. 網(wǎng)絡(luò)編程

隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)編程在后端開(kāi)發(fā)中變得越來(lái)越重要。以下是一些關(guān)于C語(yǔ)言網(wǎng)絡(luò)編程的面試題:

  • 簡(jiǎn)要介紹C語(yǔ)言中的Socket編程,并舉例說(shuō)明其在后端開(kāi)發(fā)中的應(yīng)用。
  • 如何使用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的TCP服務(wù)器?請(qǐng)?jiān)敿?xì)描述實(shí)現(xiàn)步驟。
  • 什么是HTTP協(xié)議?請(qǐng)列舉C語(yǔ)言中常用的HTTP庫(kù),并說(shuō)明其特點(diǎn)。

結(jié)語(yǔ)

通過(guò)上述精選的C語(yǔ)言后端開(kāi)發(fā)面試題及答案解析,相信您已經(jīng)對(duì)C語(yǔ)言后端開(kāi)發(fā)領(lǐng)域有了更深入的了解。在備戰(zhàn)面試的過(guò)程中,堅(jiān)持練習(xí)與思考,相信您一定能夠在面試中脫穎而出。最后,感謝您閱讀本文,希望這些內(nèi)容對(duì)您的求職之路有所幫助。

六、c+服務(wù)器開(kāi)發(fā)需要哪些基礎(chǔ)?

服務(wù)器開(kāi)發(fā)需要掌握多個(gè)基礎(chǔ)知識(shí)。首先,需要熟悉網(wǎng)絡(luò)協(xié)議和通信原理,如HTTP、TCP/IP等。

其次,需要了解操作系統(tǒng)和服務(wù)器架構(gòu),如Linux、Windows Server等。

還需要掌握編程語(yǔ)言,如Java、C++等,以及相關(guān)的開(kāi)發(fā)框架和工具,如Spring、Django等。

此外,還需要了解數(shù)據(jù)庫(kù)管理和優(yōu)化,如MySQL、Oracle等。同時(shí),對(duì)于安全性和性能優(yōu)化也需要有一定的了解。最后,具備良好的問(wèn)題排查和解決能力,以及團(tuán)隊(duì)協(xié)作和溝通能力也是必備的技能。

七、計(jì)算機(jī)學(xué)生linux服務(wù)器端開(kāi)發(fā)語(yǔ)言選擇請(qǐng)教:C/C++/Java?

經(jīng)歷過(guò)和題主一樣的糾結(jié)、選擇,最終我選了 C++

選擇那一門(mén)語(yǔ)言對(duì)學(xué)習(xí)linux服務(wù)器端編程最有幫助?

毫無(wú)疑問(wèn),C++!

學(xué)C++,其實(shí)約等于掌握了 C + C++,并且后續(xù)掌握 Java 也會(huì)很快,畢竟C++學(xué)習(xí)曲線(xiàn)會(huì)陡一些。

單獨(dú)學(xué) C可能很難找到互聯(lián)網(wǎng)相關(guān)工作。

為什么我推薦 C++?

因?yàn)槟阆雽W(xué)習(xí) Linux 服務(wù)端編程,那么選擇 Linux C++ 就是最好的方式。

我本來(lái)大二一直都在學(xué)Java的,后來(lái)大二下開(kāi)始轉(zhuǎn) Linux C++,在校招中也順利拿到了騰訊微信后臺(tái) C++ offer,所以我相信我的路線(xiàn)一定對(duì)你或者后來(lái)的學(xué)弟學(xué)妹們有幫助!

這樣的學(xué)習(xí)路線(xiàn)相信大家都見(jiàn)得不少了,寫(xiě)之前也非常忐忑,能不能和其它人寫(xiě)得不一樣, 也定下了一個(gè)目標(biāo),在這里,不能是簡(jiǎn)單的堆砌學(xué)習(xí)資源和書(shū)單推薦,更要細(xì)化如何有效的去執(zhí)行落地。

爭(zhēng)取做到讓看到的同學(xué)有一種相見(jiàn)恨晚的感覺(jué)哈哈哈。

所以大家可以試著看一下,幫我檢查下有沒(méi)有達(dá)到預(yù)想的效果哈哈,希望不要被打臉

那就正式開(kāi)始吧。

(學(xué)習(xí)路線(xiàn)有點(diǎn)長(zhǎng),先給大家一波我的面經(jīng)、看的書(shū)、刷題筆記等匯總:

絕不是在網(wǎng)上那種打包下載的,而是自己需要學(xué)到某個(gè)方向知識(shí)的時(shí)候,需要看了,去網(wǎng)上挨個(gè)找的,最后匯總而成。這部分我是會(huì)不斷把它完善的,當(dāng)成自己的小電子書(shū)庫(kù),不多,但貴在精。

我整理的這些書(shū)大家可以在這里獲取,對(duì)于學(xué)習(xí)計(jì)算機(jī)的同學(xué)幫助非常大,且十分系統(tǒng)

下載鏈接:

計(jì)算機(jī)必看經(jīng)典書(shū)單

干貨 |收藏

一、后端/后臺(tái)/服務(wù)器開(kāi)發(fā)?

經(jīng)常在各大公司招聘上看到后端、后臺(tái)、服務(wù)器開(kāi)發(fā)等等,有些同學(xué)經(jīng)常被這些名詞搞混。

其實(shí)這些名詞都是相近的,但是也有點(diǎn)區(qū)別,這里說(shuō)說(shuō)我的理解:

  • 首先一般公司分為前端和后端,前端就是和用戶(hù)打交道的,負(fù)責(zé)用良好的視覺(jué)效果將數(shù)據(jù)呈現(xiàn)給用戶(hù),廣義的前端包括客戶(hù)端(安卓、IOS)、Web前端、小程序等。
  • 而與之對(duì)應(yīng)的后端則是負(fù)責(zé)業(yè)務(wù)邏輯處理,比如下單、支付等,重在業(yè)務(wù)流程的處理。

后臺(tái)一般和后端是一個(gè)意思,而服務(wù)器開(kāi)發(fā)則稍微廣義一點(diǎn),不僅包含了后臺(tái)開(kāi)發(fā),而且也包括支撐整個(gè)后臺(tái)應(yīng)用的基礎(chǔ)開(kāi)發(fā),比如搜索引擎、微服務(wù)、RPC 框架、KV、存儲(chǔ)、MQ 等。

后臺(tái)/后端重在業(yè)務(wù)處理,是偏向應(yīng)用層開(kāi)發(fā),而服務(wù)器開(kāi)發(fā)不僅包括應(yīng)用層開(kāi)發(fā),更是囊括了整個(gè)支撐后臺(tái)業(yè)務(wù)的相關(guān)組件的開(kāi)發(fā)。

那 Linux C/C++ 服務(wù)器/后臺(tái)開(kāi)發(fā)指的什么呢,其實(shí)就是基于 Linux 上 的 C++ 編程。

但是相比 Java 系更強(qiáng)調(diào) Linux 系統(tǒng)編程、網(wǎng)絡(luò)編程能力,有的還會(huì)涉及到服務(wù)端底層協(xié)議和網(wǎng)絡(luò)框架開(kāi)發(fā)。

傳統(tǒng)的 Java 、Go后臺(tái)開(kāi)發(fā)偏向 Web 開(kāi)發(fā),也就是接收前端請(qǐng)求,通過(guò)微服務(wù)互相調(diào)用,完成業(yè)務(wù)邏輯處理,然后返回給前端。

實(shí)際上在騰訊這邊的 C++ 后臺(tái)開(kāi)發(fā),也是類(lèi)似的,本身有非常成熟的基于 C++ 的微服務(wù)體系,大多數(shù)開(kāi)發(fā)也只需要關(guān)注業(yè)務(wù)邏輯就好,不過(guò)還是會(huì)要求 Linux 系統(tǒng)編程、網(wǎng)絡(luò)編程等能力。

二、后臺(tái)開(kāi)發(fā)都考察哪些?

一般來(lái)說(shuō) Linux C/C++ 后臺(tái)開(kāi)發(fā)方向涉及以下這些基礎(chǔ)知識(shí):

  • C/C++ 語(yǔ)言特性和實(shí)現(xiàn)原理
  • 計(jì)算機(jī)網(wǎng)絡(luò)
  • 網(wǎng)絡(luò)編程 和 Linux 系統(tǒng)編程
  • 操作系統(tǒng)原理
  • 部分 Linux 內(nèi)核原理,如內(nèi)存管理、文件系統(tǒng)、虛擬內(nèi)存等
  • Linux 常見(jiàn)命令使用
  • 算法與數(shù)據(jù)結(jié)構(gòu)
  • 數(shù)據(jù)庫(kù)使用及原理
  • 常見(jiàn) NoSQL組件,如 Redis、Memcached
  • 版本控制 Git

非必選加分項(xiàng):

  • 分布式相關(guān),如一致性協(xié)議比如 Raft 算法、分布式存儲(chǔ)等
  • docker、k8s 等虛擬化和云計(jì)算相關(guān)的
  • 系統(tǒng)設(shè)計(jì)能力,如短鏈服務(wù)、評(píng)論服務(wù)、Feed流系統(tǒng)、搶紅包、秒殺等

由于篇幅限制,這篇文章主要介紹基礎(chǔ)知識(shí)的學(xué)習(xí)路線(xiàn)和方法,其它加分項(xiàng)以后再單獨(dú)寫(xiě)。

三、C/C++

首先是語(yǔ)言的基礎(chǔ)知識(shí),一些關(guān)鍵字和實(shí)現(xiàn)原理等:

  • 指針、引用、數(shù)組、內(nèi)存
  • 引用與指針區(qū)別
  • C 和 C++ 的一些區(qū)別,比如 new、delete 和 malloc、free 的區(qū)別
  • 虛機(jī)制:虛函數(shù)、虛函數(shù)表、純虛函數(shù)
  • 繼承、虛繼承、菱形繼承等
  • 多態(tài): 動(dòng)態(tài)綁定,靜態(tài)多態(tài)
  • 重寫(xiě)、重載
  • 智能指針原理:引用計(jì)數(shù)、RAII(資源獲取即初始化)思想
  • 智能指針使用:shared_ptr、weak_ptr、unique_ptr等
  • 一些關(guān)鍵字的作用:static、const、volatile、extern
  • 四種類(lèi)型轉(zhuǎn)換:static_cast, dynamic_cast, const_cast, reinterpret_cast
  • STL部分容器的實(shí)現(xiàn)原理,如 vector、deque、map、hashmap
  • 模板特化、偏特化,萃取 traits 技巧
  • 編譯鏈接機(jī)制、內(nèi)存布局(memory layout)、對(duì)象模型
  • C++11 部分新特性,比如右值引用、完美轉(zhuǎn)發(fā)等

這里列出來(lái)的只是一些比較重要的部分,實(shí)際上可能只算 C++ 的冰山一角, 大家且學(xué)且珍惜吧,這不 C++11 還沒(méi)整透徹,C++ 20 又出來(lái)了,生命不息,學(xué)習(xí)不止。

怎么學(xué)?

1. 《C++ Primer》

這本書(shū)基本包括了 C++ 11 的全部特性,最好把前面三部分:C++基礎(chǔ)、C++標(biāo)準(zhǔn)庫(kù)、類(lèi)設(shè)計(jì)者的工具都看一遍,我當(dāng)時(shí)花了一個(gè)多月斷斷續(xù)續(xù)看到了第16章模板那里。

2. Effective 系列:《Effective C++》、《More Effective C++》、《Effective STL》

第一本是重點(diǎn),光看《C++ Primer》缺少實(shí)踐的話(huà),大概率還寫(xiě)不出合格的 C++ 代碼,而《Effective C++》就是通過(guò) 55 條非常具體的做法告訴你什么樣才是符合 C++ 編碼規(guī)范的,可以縮短你寫(xiě)出合格 C++ 代碼的時(shí)間,減少踩坑,強(qiáng)烈推薦必讀,后面兩本優(yōu)先級(jí)稍低,可以有時(shí)間再讀。

3. 《STL 源碼剖析》和《深度探索 C++ 對(duì)象模型》

看完 Primer 和 Effective,你應(yīng)該已經(jīng)能夠比較熟練的使用C++了,但是還缺少對(duì) C++ 底層實(shí)現(xiàn)機(jī)制的認(rèn)識(shí)。比如虛函數(shù)表、成員變量布局等,同時(shí)對(duì)于 STL 庫(kù)可能也僅僅停留在使用上。 推薦的這兩本可以分別完善你在 C++ 底層實(shí)現(xiàn)和 STL 源碼、原理上的認(rèn)識(shí)。

以上書(shū)籍同時(shí)建議和侯捷老師的視頻配合服用,效果更佳。

直接在 B 站搜索「候捷 C++」即可,主要有以下幾個(gè)系列:

  • 《C++內(nèi)存管理》
  • 《STL源碼分析》
  • 《C++ STL與泛型編程高級(jí)》
  • 《C++11 新特性》

我基本都看了,收獲挺大的,建議看下,可以開(kāi)倍速。

最近發(fā)現(xiàn) B 站關(guān)于侯捷老師的 C++ 視頻課程幾乎全部被下架了,于是自己搜集了一套非常全的視頻,大家趕緊去下載保存?zhèn)溆茫?/b>

侯捷C++全套視頻|含下載方式

看完以上資料,算是 C++ 入門(mén)了,應(yīng)付面試也是足夠的,基本到達(dá)了正確高效地使用 C++ 這一層面。

是不是聽(tīng)到這有點(diǎn)崩潰,特么的看了這么多,才入門(mén)???

如果你想在 C++ 語(yǔ)言上更進(jìn)一步,那么有以下的書(shū)籍推薦:

  • 《C++ 語(yǔ)言的設(shè)計(jì)與演化》
這本書(shū)是 C++ 之父 Bjarne Stroustrup 寫(xiě)的,關(guān)于 C++ 的前世今生,以及未來(lái)的演進(jìn)方向,可以了解 C++ 的設(shè)計(jì)哲學(xué)。C++ 復(fù)雜的語(yǔ)言特性一直讓人詬病,通過(guò)這本書(shū),可以看到各種特性引入的目的,也更深入了解到了 C 和 C++ 之間關(guān)系。比如 C++ 里有個(gè)原則就是所有的實(shí)現(xiàn)機(jī)制都不能帶來(lái)額外的運(yùn)行時(shí)開(kāi)銷(xiāo)。

我也正在看這本書(shū)。

  • 《C++ 沉思錄》
  • 《C++ Templates》和《C++模版元編程》
C++模板元編程屬于另外一個(gè)世界了,一般公司里開(kāi)發(fā)用得比較少,這個(gè)也是一個(gè)大坑,如果實(shí)在感興趣可以去看看,感受下 C++ 的博大精深,不過(guò)這玩意我也不太會(huì),也不推薦你去花時(shí)間在上面。
  • CppCon視頻
這是 C++ 社區(qū)組織的類(lèi)似開(kāi)源峰會(huì)那種,每次都會(huì)討論一些關(guān)于 C++ 的話(huà)題,沒(méi)事去刷一個(gè),還是挺有意思的。 Youtube 直接搜 CppCon 即可找到。

四、操作系統(tǒng)

操作系統(tǒng)這門(mén)課,我的感覺(jué)是易學(xué)難精,但是掌握到日常編程和面試夠用還是比較容易的。

那么畢業(yè)生或者說(shuō)你去準(zhǔn)備校招面試應(yīng)該達(dá)到怎樣的水平:

  • OS 四大模塊的理論知識(shí): 進(jìn)程與線(xiàn)程管理、內(nèi)存管理、IO與文件系統(tǒng)、設(shè)備管理
  • 了解 Linux 內(nèi)核部分實(shí)現(xiàn)原理,如內(nèi)存管理、進(jìn)程管理、虛擬文件系統(tǒng)等

其中內(nèi)存、進(jìn)程、IO 是重點(diǎn),這幾塊也是和編程關(guān)系最密切的,這里推薦先挑本偏理論的書(shū)看看,了解操作系統(tǒng)的全貌:

  • 《現(xiàn)代操作系統(tǒng)》
  • 《操作系統(tǒng)—精髓與設(shè)計(jì)原理》

不必全看,兩者任選一本都不錯(cuò),我自己是仔細(xì)看了第二本,因?yàn)槭俏覀兘滩?,同時(shí)挑著看了現(xiàn)代操作系統(tǒng)部分章節(jié)。

這部分看完你應(yīng)該對(duì)下面這些話(huà)題有一個(gè)清晰認(rèn)知了:

  • 操作系統(tǒng)由哪些構(gòu)成
  • 進(jìn)程的狀態(tài)、切換、調(diào)度
  • 進(jìn)程間通信方式(共享內(nèi)存、管道、消息)
  • 進(jìn)程和線(xiàn)程的區(qū)別
  • 線(xiàn)程的實(shí)現(xiàn)方式(一對(duì)一、多對(duì)一等)
  • 互斥與同步(信號(hào)量、管程、鎖)
  • 死鎖檢測(cè)與避免
  • 并發(fā)經(jīng)典的問(wèn)題:讀者寫(xiě)者、哲學(xué)家就餐問(wèn)題
  • 為什么需要虛擬內(nèi)存,MMU 具體如何做地址轉(zhuǎn)換的
  • 內(nèi)存為什么分段、分頁(yè)
  • 頁(yè)面置換算法
  • 文件系統(tǒng)是如何組織的
  • 虛擬文件系統(tǒng)(VFS)是如何抽象的
  • ...

但是這還不夠,看完偏理論的書(shū),當(dāng)面試官問(wèn)「進(jìn)程和線(xiàn)程的區(qū)別」時(shí)。

大概只能回答出「進(jìn)程是資源分配的最小單位,線(xiàn)程是CPU調(diào)度的最小單位,balabala...」這樣正確卻普通的答案。

但是如果你了解 Linux 內(nèi)核的實(shí)現(xiàn),就可以實(shí)際出發(fā),講講 Linux 中進(jìn)程和線(xiàn)程是如何創(chuàng)建的,區(qū)別在哪里。

比如在 Linux 中進(jìn)程和線(xiàn)程實(shí)際上都是用一個(gè)結(jié)構(gòu)體 task_struct來(lái)表示一個(gè)執(zhí)行任務(wù)的實(shí)體。進(jìn)程創(chuàng)建調(diào)用fork 系統(tǒng)調(diào)用,而線(xiàn)程創(chuàng)建則是 pthread_create 方法,但是這兩個(gè)方法最終都會(huì)調(diào)用到 do_fork 來(lái)做具體的創(chuàng)建操作 ,區(qū)別就在于傳入的參數(shù)不同。

深究下去,你會(huì)發(fā)現(xiàn) Linux 實(shí)現(xiàn)線(xiàn)程的方式簡(jiǎn)直太巧妙了,實(shí)際上根本沒(méi)有線(xiàn)程,它創(chuàng)建的就是進(jìn)程,只不過(guò)通過(guò)參數(shù)指定多個(gè)進(jìn)程之間共享某些資源(如虛擬內(nèi)存、頁(yè)表、文件描述符等),函數(shù)調(diào)用棧、寄存器等線(xiàn)程私有數(shù)據(jù)則獨(dú)立。

這樣是不是非常符合理論書(shū)上的定義:同一進(jìn)程內(nèi)的多個(gè)線(xiàn)程共享該進(jìn)程的資源,但線(xiàn)程并不擁有資源,只是使用他們。

這也算符合 Unix 的哲學(xué)了— KISS(Keep It Simple, Stupid)。

但是在其它提供了專(zhuān)門(mén)線(xiàn)程支持的系統(tǒng)中,則會(huì)在進(jìn)程控制塊(PCB)中增加一個(gè)包含指向該進(jìn)程所有線(xiàn)程的指針,然后再每個(gè)線(xiàn)程中再去包含自己獨(dú)占的資源。

這算是非常正統(tǒng)的實(shí)現(xiàn)方式了,比如 Windows 就是這樣干的。

但是相比之下 Linux 就顯得取巧很多,也很簡(jiǎn)潔。

對(duì)于進(jìn)程、線(xiàn)程這塊你還可以把 fork、vfork、clone 、pthread_create 這些模塊關(guān)系徹底搞清楚,對(duì)你理解 Linux 下的進(jìn)程實(shí)現(xiàn)有非常大的幫助。

說(shuō)了這么多,就是想強(qiáng)調(diào)一下理論聯(lián)系實(shí)際的重要性。

特別是操作系統(tǒng),最好的實(shí)踐就是看下 Linux 內(nèi)核是怎么實(shí)現(xiàn)的,當(dāng)然不是叫你直接去啃 Linux 源碼,那不是一般人能掌握的。

最好的方式是看書(shū),書(shū)的脈絡(luò)給你理得很清晰。

書(shū)籍推薦:

  • 《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》
這本書(shū)恰到好處,即講清楚了內(nèi)核實(shí)現(xiàn)的要點(diǎn),又不會(huì)通篇源碼。

這本書(shū)重點(diǎn)關(guān)注「第 3 章進(jìn)程管理」、「第 5 章系統(tǒng)調(diào)用」、「第12章內(nèi)存管理」、「第13章虛擬文件系統(tǒng)」、「第 15 章進(jìn)程地址空間」

這些章節(jié)屬于操作系統(tǒng)核心部分,其它如中斷處理、塊 IO、設(shè)備管理根據(jù)你自己興趣選擇看下就可以了。

基本上做到這里,操作系統(tǒng)就沒(méi)什么大問(wèn)題了。

五、計(jì)算機(jī)網(wǎng)絡(luò)

需要掌握的網(wǎng)絡(luò)協(xié)議和知識(shí):

  • HTTP、TCP、IP、ICMP、UDP、DNS、ARP
  • IP地址、MAC地址、OSI七層模型(或者 TCP/IP 五層模型)
  • HTTPS安全相關(guān)的:數(shù)字簽名、數(shù)字證書(shū)、TLS
  • 常見(jiàn)網(wǎng)絡(luò)攻擊:局域網(wǎng)ARP泛洪、DDoS、TCP SYN Flood、XSS等

計(jì)網(wǎng)知識(shí)比較繁雜,很多同學(xué)都反映網(wǎng)絡(luò)很難學(xué),一大堆的網(wǎng)絡(luò)協(xié)議,依次學(xué)完后,還是不知道網(wǎng)絡(luò)是怎么構(gòu)成的。

這就是沒(méi)有用對(duì)學(xué)習(xí)方法,導(dǎo)致只見(jiàn)樹(shù)木,不見(jiàn)森林。

學(xué)習(xí)時(shí),推薦你抓住一條主線(xiàn) 「一個(gè)數(shù)據(jù)包是如何發(fā)送出去的?」

帶著這個(gè)問(wèn)題依次去學(xué)應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層,思考這些層之間是如何串聯(lián)起來(lái)的。

這就是自頂向下的思路,那自然要推薦:

  • 《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》
這本書(shū)從我們最常接觸的 HTTP、FTP、SMTP 等應(yīng)用層協(xié)議講起,可以清晰看到引入各個(gè)層的作用。

比如為了區(qū)分同一個(gè)主機(jī)的不用應(yīng)用,引入了傳輸層,并使用不用的端口號(hào)作為區(qū)別;

為了在不同子網(wǎng)間傳輸數(shù)據(jù)引入了網(wǎng)絡(luò)層,并使用 IP 地址尋址路由;

網(wǎng)絡(luò)層解決了不同子網(wǎng)間路由的問(wèn)題,但是同一個(gè)局域網(wǎng)內(nèi)確定主機(jī)卻是通過(guò) MAC 地址,所以引入了鏈路層來(lái)承載 IP 數(shù)據(jù)包;

同時(shí)為了將 IP 地址和 MAC 地址做轉(zhuǎn)換映射又產(chǎn)生了 ARP 協(xié)議。

層層遞進(jìn),逐層揭開(kāi)網(wǎng)絡(luò),非常推薦!

還有一本書(shū):

  • 《網(wǎng)絡(luò)是怎樣連接的》
非常淺顯易懂的描述了「一個(gè)數(shù)據(jù)包是如何發(fā)送出去的」,也不費(fèi)時(shí)間,看慣了機(jī)工社的大黑書(shū),看這種反而有種看小人書(shū)的感覺(jué),有基礎(chǔ)的話(huà),一天左右就過(guò)完了。

只有把握住了整個(gè)網(wǎng)絡(luò)脈絡(luò)主線(xiàn)才不至于被紛繁復(fù)雜的網(wǎng)絡(luò)協(xié)議所搞暈,剩下的就是不斷的細(xì)化,填充這些主干上的細(xì)枝末節(jié)。

那么有哪些細(xì)節(jié)可以去填充呢?

比如 ARP 工作過(guò)程、IP 地址、IP 分片、NAT(UDP 打洞)、鏈路層訪(fǎng)問(wèn)控制協(xié)議等等。

還有最重要的 TCP 協(xié)議,TCP 也是面試和計(jì)網(wǎng)中最重要的概念:

  • 三次握手、四次揮手
  • 狀態(tài)轉(zhuǎn)換
  • TCP 狀態(tài)中 TIME_WAIT
  • 擁塞控制
  • 快速重傳、慢啟動(dòng)等

這么多東西肯定需要背,但不要死記,最好帶著問(wèn)題去思考為什么要這樣做。

這里列幾個(gè)問(wèn)題:

  • TCP 如何實(shí)現(xiàn)可靠傳輸?shù)模ó?huà)外音:如何基于 UDP 實(shí)現(xiàn)可靠傳輸
  • TCP 連接建立為什么不是兩次握手(畫(huà)外音:三次握手的充分必要性說(shuō)明
  • TIME_WAIT 的存在解決了什么問(wèn)題,等待時(shí)間為什么是 2 MSL

整個(gè) TCP 的核心就是圍繞著 可靠傳輸 + 高效傳輸(流量控制和窗口管理)

由于 TCP 的細(xì)節(jié)實(shí)在太多,自頂向下那本書(shū)有點(diǎn)不太夠,所以你需要去看看:

  • 《TCP/IP詳解卷1:協(xié)議》
這本書(shū)不要從頭看,而是挑出其中涉及到 TCP 的章節(jié)

到這里,對(duì)于整個(gè)網(wǎng)絡(luò)以及 TCP 都應(yīng)該有了一個(gè)全面而細(xì)致的認(rèn)識(shí)。

但是計(jì)網(wǎng)中還是有一些有意思的問(wèn)題,如果你沒(méi)思考過(guò),也許回答不出來(lái)。

比如:

  • 為什么有了 MAC 地址還要 IP 地址,IP 地址和 MAC 地址的區(qū)別是什么?
  • 如何理解廣播域和沖突域?
  • 路由器和交換機(jī)有什么區(qū)別?
  • TCP 連接的本質(zhì)是什么,真的是“鏈接”嗎?(曾經(jīng)被問(wèn)過(guò):Java socket 創(chuàng)建的 TCP 連接,對(duì)于主機(jī)掛了和 JVM 掛了有什么區(qū)別?

這些問(wèn)題只有當(dāng)你真正理解了才能回答出,僅僅記住協(xié)議的話(huà),估計(jì)很難應(yīng)對(duì)靈活的面試題。

此外,網(wǎng)絡(luò)部分還需要準(zhǔn)備 HTTP、HTTPS,推薦:

  • 《圖解HTTP》

最后別忘了自己回答一遍那被問(wèn)爛了、寫(xiě)爛了的問(wèn)題:

  • 從 URL 輸入到頁(yè)面展現(xiàn)到底發(fā)生什么

越細(xì)越好,五百字以上吧,哈哈哈

六、網(wǎng)絡(luò)編程

C++ 后臺(tái)開(kāi)發(fā)基本是離不開(kāi)網(wǎng)絡(luò)編程的,其實(shí)甚至整個(gè)后臺(tái)開(kāi)發(fā)也可以看做是在做網(wǎng)絡(luò)編程。

只不過(guò)別人的框架幫我們做了協(xié)議解析、網(wǎng)絡(luò)數(shù)據(jù)傳輸、解封包這些底層操作。

比如 SpringBoot 這種保姆級(jí)框架,基本上屬于將一個(gè)框架能干的事都干完了,以至于我們開(kāi)發(fā)業(yè)務(wù)只需要定義接收和返回包的數(shù)據(jù)格式,然后做邏輯處理就完了。

像序列化、解封包、IO 處理這種網(wǎng)絡(luò)編程必備的臟活業(yè)務(wù)開(kāi)發(fā)根本不會(huì)接觸到。

但是網(wǎng)絡(luò)編程技能還是很重要的,特別是對(duì)于 Linux C++ 開(kāi)發(fā)來(lái)說(shuō)。

Linux 下網(wǎng)絡(luò)編程核心的包括系統(tǒng)編程和網(wǎng)絡(luò) IO 兩個(gè)部分:

  • 進(jìn)程間通信方式: 信號(hào)量、管道、共享內(nèi)存、socket 等
  • 多線(xiàn)程編程:互斥鎖、條件變量、讀寫(xiě)鎖、線(xiàn)程池等
  • 五大 IO 模型:同步、異步、阻塞、非阻塞、信號(hào)驅(qū)動(dòng)
  • 高性能 IO 兩種模式:Reactor 和 Proactor( 但是 Linux 下由于缺少異步 IO 支持,基本沒(méi)有 Proactor
  • IO 復(fù)用機(jī)制:epoll、select、poll(破解 C10K 問(wèn)題的利器)

推薦的書(shū):

  • 《Unix網(wǎng)絡(luò)編程》
  • 《Unix環(huán)境高級(jí)編程》
這兩本是磚頭書(shū),雖然是網(wǎng)絡(luò)編程和 Unix 系統(tǒng)編程方面的無(wú)出其右的圣經(jīng),但主要用途還是墊顯示器(逃, 個(gè)人覺(jué)得這種書(shū)不是面向讀者的,具體原因和如何閱讀這種書(shū)在后文介紹。
  • 《Linux高性能服務(wù)器編程》
我強(qiáng)烈推薦,這本書(shū)前半部分基本是在重復(fù)計(jì)網(wǎng)基礎(chǔ)知識(shí),但是后面幾章關(guān)于高性能服務(wù)器程序框架、高性能IO、IO復(fù)用、定時(shí)器、多線(xiàn)程編程、線(xiàn)程池和進(jìn)程池還是講得非常全面到位的,值得一看,看完基本上對(duì)于整個(gè)網(wǎng)絡(luò)編程就有了框架。
  • 《Linux多線(xiàn)程服務(wù)器端編程》
這本書(shū)同樣強(qiáng)烈推薦,這是陳碩大佬寫(xiě)的書(shū),說(shuō)實(shí)話(huà)第一部分:C++ 多線(xiàn)程系統(tǒng)編程都直接把我看蒙了,沒(méi)有想到 C++ 里要做到線(xiàn)程安全這么難,第一章我看了兩三遍才看懂吧。。。 這是難得的講解 C++ 多線(xiàn)程編程的書(shū)。

并且在書(shū)中,陳碩大佬用了一章講解了 Muduo 網(wǎng)絡(luò)庫(kù)設(shè)計(jì)與實(shí)現(xiàn),Muduo 比較適合學(xué)完基礎(chǔ)的網(wǎng)絡(luò)編程后繼續(xù)進(jìn)階學(xué)習(xí)如何設(shè)計(jì)和寫(xiě)一個(gè)網(wǎng)絡(luò)庫(kù),是一個(gè)高質(zhì)量的 Reactor 網(wǎng)絡(luò)庫(kù),采用 one loop per thread + thread pool 實(shí)現(xiàn),代碼比較簡(jiǎn)潔,書(shū)和源碼搭配著看作為學(xué)習(xí)網(wǎng)絡(luò)編程方面來(lái)說(shuō)是非常不錯(cuò)。

學(xué)完網(wǎng)絡(luò)編程就可以寫(xiě)點(diǎn)小項(xiàng)目練手了,這里列舉幾個(gè)項(xiàng)目:

  • HTTP 服務(wù)器,這個(gè)似乎成了 Linux C/C++ 人手一個(gè)的項(xiàng)目了? 這里推薦兩個(gè)做為參考: https://github.com/imarvinle/WebServer: 這是我看完高性能服務(wù)器編程后寫(xiě)的 https://github.com/linyacool/WebServer :這是???linya 大佬寫(xiě)的 不過(guò) HTTP 服務(wù)器看著挺簡(jiǎn)單的,但是可以擴(kuò)展寫(xiě)的地方還是挺多的,比如可以加入代理功能,這部分我在留學(xué)生 lab 中寫(xiě)過(guò),但是沒(méi)有集成到這個(gè)里面來(lái),可以加入日志庫(kù),可以添加 CGI 支持等等。
  • 網(wǎng)絡(luò)庫(kù) 這個(gè)也算是造輪子了, 可以就采用 one loop per thread + thread pool 這種模式,先去看懂 Muduo 源碼,然后自己再寫(xiě)一個(gè)類(lèi)似的,這個(gè)過(guò)程就算是抄,你也可以學(xué)到不少東西的,學(xué)編程不就是這樣先看,再模仿、修改,然后創(chuàng)新嗎?
  • RPC 寫(xiě)一個(gè) PRC 你需要考慮到序列化、網(wǎng)絡(luò)傳輸、服務(wù)發(fā)現(xiàn)等,比較有名的有 grpc、brpc,這兩個(gè)網(wǎng)上文檔都比較完善,可以學(xué)習(xí)一下實(shí)現(xiàn)原理。 這里還有一個(gè)簡(jiǎn)單版本的:https://github.com/guangqianpeng/jrpc
  • 類(lèi)似QQ的網(wǎng)絡(luò)聊天室 簡(jiǎn)單版的就可以直接在局域網(wǎng)內(nèi)實(shí)現(xiàn)群聊、單聊等。 更進(jìn)一步可以考慮一下如何不通過(guò)服務(wù)器中轉(zhuǎn)消息實(shí)現(xiàn) P2P 聊天,類(lèi)似 QQ,這里會(huì)涉及到 UDP 打洞、NAT 轉(zhuǎn)換等知識(shí),還是很有意思的,我大二用 Java 搞過(guò)。

七、系統(tǒng)級(jí)編程

作為 C/C++ 程序員,編寫(xiě)的程序不像 Java、Python 這些是在虛擬機(jī)上,直接就是在操作系統(tǒng)上運(yùn)行,那么就必須了解操作系統(tǒng)底層機(jī)制和運(yùn)行原理。

就和 Java 程序員要求了解 JVM 是一個(gè)道理,你得熟悉代碼運(yùn)行的平臺(tái),才能在出問(wèn)題的時(shí)候準(zhǔn)確定位到。

這個(gè)也是在我們學(xué)校在大三開(kāi)設(shè)的一門(mén)課程《System Programing》,從 CMU 引進(jìn)的,教材也是沿用 CSAPP,這也是我覺(jué)得大學(xué)上過(guò)最值的課了。

我重新認(rèn)真讀 CSAPP 就是在大三上這個(gè)課期間,包括做了每個(gè)章節(jié)附帶的 lab, 這是我當(dāng)時(shí)做 Bomblab 的題解:

https://www.jianshu.com/p/479333cbccc4

這里推薦兩本書(shū):

  • 《深入理解計(jì)算機(jī)系統(tǒng)》
不需要我多介紹了
  • 《程序員自我修養(yǎng)》
別被名字欺騙了,這不是教你養(yǎng)生的,而是學(xué)了會(huì)掉頭發(fā)的硬核知識(shí)

兩本書(shū)側(cè)重點(diǎn)各不相同,CSAPP 非常巧妙的把數(shù)字電路基礎(chǔ)、二進(jìn)制與指令集體系、匯編語(yǔ)言、程序設(shè)計(jì)及優(yōu)化、存儲(chǔ)器體系結(jié)構(gòu)、鏈接與裝載、進(jìn)程、虛擬內(nèi)存這一堆來(lái)自各不同的計(jì)算機(jī)學(xué)科的核心知識(shí)點(diǎn)串在一起,并以程序員的視角呈現(xiàn),所以這本書(shū)的英文名字叫《Computer Systems A Programmer's perspective》。

而程序員自我修養(yǎng)則重在鏈接、目標(biāo)文件、裝載、庫(kù)與運(yùn)行時(shí),看完這本書(shū)你會(huì)了解到一個(gè) C/C++ 程序是如何被編譯成目標(biāo)文件的,以及 Linux 下目標(biāo)文件的格式,不同目標(biāo)文件又是如何被鏈接成一個(gè)可執(zhí)行程序,在鏈接時(shí)如何處理符號(hào)、重定位、地址解析等,以及靜態(tài)鏈接、動(dòng)態(tài)鏈接區(qū)別等等,最后可執(zhí)行文件又是如何被加載進(jìn)內(nèi)存,如何和虛擬內(nèi)存空間映射的。

你可能會(huì)覺(jué)得這個(gè)又是只能用于面試,實(shí)際派不上用場(chǎng)的知識(shí)?

那簡(jiǎn)直大錯(cuò)特錯(cuò),說(shuō)真的,這兩本書(shū),我是反復(fù)看了三遍以上,當(dāng)然后續(xù)看都是挑著重點(diǎn)看的。

舉個(gè)例子吧,寫(xiě) C/C++ 的同學(xué)沒(méi)少遇到這些編譯錯(cuò)誤吧:

undefined reference to xxx

Symbol key multiply defined (by xxx.o and yyy.o)

在我大一的時(shí)候遇到這些問(wèn)題簡(jiǎn)直一臉懵逼,根本連報(bào)錯(cuò)都看不懂。

特別是涉及到多文件編程的時(shí)候,經(jīng)常傻乎乎的在頭文件中定義變量,導(dǎo)致變量多重定義,這些問(wèn)題沒(méi)有學(xué)過(guò)鏈接知識(shí)的其實(shí)很難理解。

在實(shí)際編程也是經(jīng)常會(huì)遇到的。

又比如extern、static 這些關(guān)鍵字是如何在編譯鏈接時(shí)起作用,變量的申明與定義又有什么區(qū)別?

這部分可以算是真正的內(nèi)功了,提升你對(duì)計(jì)算機(jī)系統(tǒng)的理解,也有助于解決實(shí)際編程過(guò)程中會(huì)出現(xiàn)的問(wèn)題,當(dāng)然也會(huì)在面試中出現(xiàn)。

八、數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)首先要學(xué)會(huì) SQL 的使用,這里推薦《MySQL必知必會(huì)》。

數(shù)據(jù)庫(kù)原理方面可以看看《數(shù)據(jù)庫(kù)系統(tǒng)概念》,這本書(shū)挺厚的,包含了從 SQL 到數(shù)據(jù)庫(kù)設(shè)計(jì)再到數(shù)據(jù)庫(kù)原理、分布式數(shù)據(jù)庫(kù)都有,可以挑著看,比如關(guān)系模型、數(shù)據(jù)庫(kù)設(shè)計(jì)(三大范式)、數(shù)據(jù)磁盤(pán)存儲(chǔ)和組織方式、索引、并發(fā)控制等。

當(dāng)然了整個(gè)數(shù)據(jù)庫(kù)最重要的還是索引和并發(fā)控制(鎖、MVCC等),這部分也是面試常考的:

  • 索引存儲(chǔ)結(jié)構(gòu):B樹(shù)、B+樹(shù)索引、Hash索引
  • 索引的使用:主鍵索引、覆蓋索引、最左前綴原則、索引下推等
  • 鎖:樂(lè)觀鎖、悲觀鎖、表鎖,行鎖,意向鎖,讀鎖,寫(xiě)鎖等等
  • MySQL InnoDB MVCC 實(shí)現(xiàn)機(jī)制
  • 存儲(chǔ)引擎:InnoDB、MyISAM等,各自的優(yōu)缺點(diǎn)
  • 事務(wù):ACID理論

這部分推薦兩本書(shū):

  • 《高性能MySQL》
  • 《MySQL技術(shù)內(nèi)幕》
這兩本主要對(duì)索引、innodb存儲(chǔ)引擎、鎖、并發(fā)控制講得比較清楚,建議挑對(duì)應(yīng)章節(jié)看。

九、算法和數(shù)據(jù)結(jié)構(gòu)

首先需要掌握常見(jiàn)的數(shù)據(jù)結(jié)構(gòu):

  • 線(xiàn)性表、數(shù)組、鏈表
  • 棧與隊(duì)列
  • 樹(shù)、二叉樹(shù)、多叉樹(shù)實(shí)現(xiàn)和遍歷方式,AVL樹(shù)實(shí)現(xiàn)以及插入刪除過(guò)程、紅黑樹(shù)(了解定義即可)
  • 圖,以及圖的實(shí)現(xiàn)方式、遍歷
  • B樹(shù)、B+樹(shù)
  • 散列函數(shù)和散列表

常見(jiàn)的算法:

  • 排序算法:冒泡、插入、快速、希爾、堆排、基數(shù)、歸并等
  • 字符串匹配算法:KMP
  • 常見(jiàn)算法思想:遞歸、枚舉、遞推、分治、貪心、動(dòng)態(tài)規(guī)劃等

視頻可以看看 :

  • mooc 上浙大的《數(shù)據(jù)結(jié)構(gòu)》
  • 學(xué)堂在線(xiàn)上清華鄧俊輝老師的《數(shù)據(jù)結(jié)構(gòu)與算法》

這兩個(gè)是我看過(guò)覺(jué)得不錯(cuò)的才在這推薦,第一個(gè)是初學(xué)數(shù)據(jù)結(jié)構(gòu)時(shí)跟著看,第二個(gè)是大三復(fù)習(xí)時(shí)刷的。

入門(mén)版書(shū)籍可以看看:

  • 《啊哈算法》
  • 《算法圖解》

稍微進(jìn)階點(diǎn)的:

  • 《算法第四版》
這本書(shū)強(qiáng)烈推薦,難度適中,但是全面。

終極版:

  • 《算法導(dǎo)論》
這個(gè)量力而行就好了。。。 推薦理由是:我不推薦顯得沒(méi)有逼格(:

有了基礎(chǔ)的算法思想和數(shù)據(jù)結(jié)構(gòu)儲(chǔ)備,剩下的就是刷題了:

  • 《劍指offer》
建議必刷
  • leetcode
建議分類(lèi)刷,先易后難,比如數(shù)組、二分、二叉樹(shù)、動(dòng)態(tài)規(guī)劃,一個(gè)一個(gè)系列搞定,總結(jié)經(jīng)驗(yàn),保證 150 道簡(jiǎn)單和中等以上吧

最重要的是,保持手感,有空就刷一道。

十、網(wǎng)站和視頻

有些同學(xué)喜歡看視頻,那我也在這里統(tǒng)一推薦一下吧

  • B站
你的一站式學(xué)習(xí)網(wǎng)站,用你想學(xué)的關(guān)鍵字在這搜就完了
  • 中國(guó)大學(xué) mooc
基礎(chǔ)課程學(xué)習(xí)
  • 網(wǎng)易云課程、學(xué)堂在線(xiàn)
一些技術(shù)課程、公開(kāi)課學(xué)習(xí)

Linux C/C++ 可以去看看黑馬的,我試看過(guò)幾集 IO,講得還是不錯(cuò)的,就是有點(diǎn)慢,個(gè)人覺(jué)得不如看書(shū)。

刷題可以看看??妥笊竦囊曨l

計(jì)算機(jī)網(wǎng)絡(luò)可以看看 B 站韓立剛或者 mooc 哈工大的

操作系統(tǒng)可以看看學(xué)堂在線(xiàn)上清華的《操作系統(tǒng)》

推薦了這么多書(shū),從哪看起?

一、淺談學(xué)習(xí)方法

如果你認(rèn)真看過(guò)我前面介紹每一部分的學(xué)習(xí)路線(xiàn)時(shí),可以發(fā)現(xiàn)我特別強(qiáng)調(diào)學(xué)習(xí)抓主線(xiàn),并且將每一個(gè)基礎(chǔ)知識(shí)的主線(xiàn)給大家列出來(lái)了。

這里再次強(qiáng)推,學(xué)習(xí)新東西的時(shí)候,重點(diǎn)是先對(duì)整體脈絡(luò)、知識(shí)結(jié)構(gòu)有一個(gè)大概的映像和了解,然后抓住這個(gè)領(lǐng)域的主線(xiàn),順著主干,突出重點(diǎn)去學(xué)習(xí)。

集中時(shí)間,速戰(zhàn)速?zèng)Q,不要將時(shí)間線(xiàn)拉得太長(zhǎng),越長(zhǎng)可能越堅(jiān)持不下去,效果越差。

對(duì)于細(xì)枝末節(jié)的內(nèi)容,可以留到實(shí)踐的時(shí)候,用到了再去查!

如果一頭扎進(jìn)零碎的知識(shí),去看手冊(cè)、字典型的書(shū),那必然是事倍功半的。

細(xì)節(jié)留給實(shí)踐去補(bǔ)充,我們的時(shí)間要花在刀刃上,注重知識(shí)的體系性和框架的建立。

二、常見(jiàn)問(wèn)題

說(shuō)實(shí)話(huà),其實(shí)這些書(shū)籍或多或少都被各路大神推薦過(guò),確實(shí)經(jīng)典。但是大神們卻很少告訴你他們是如何去看的,該怎么去看這些書(shū),難道一本本一頁(yè)頁(yè)的挨著啃嗎?

這部分才是我今天最想說(shuō)的部分,「該如何去看大厚書(shū)」。

比如我后臺(tái)就經(jīng)常有同學(xué)問(wèn):

  • 有些書(shū)看的找不到重點(diǎn),看不下去了,怎么辦,比如深入理解計(jì)算機(jī)系統(tǒng),UNIX 網(wǎng)絡(luò)編程,APUE,求指教
  • 我不是科班 CSAPP 可能不是全部看得懂,該怎么辦?
  • 大佬,這么多書(shū)看得完嗎?
  • 剛開(kāi)始看這些書(shū)很痛苦怎么辦?

這些書(shū)該怎么看,可能過(guò)來(lái)人,準(zhǔn)備過(guò)秋招的都比較清楚,但是作為還在大二、大三的會(huì)比較懵逼。

就拿我當(dāng)時(shí)親身經(jīng)歷來(lái)說(shuō),在網(wǎng)上搜網(wǎng)絡(luò)編程如何學(xué)習(xí),很多人都推薦 UNP、APUE。

好嘛,買(mǎi)來(lái)看,從第一頁(yè)挨著挨著看,而且書(shū)中的示例代碼我大部分也照著敲了,最后看了七八章,發(fā)現(xiàn)始終是在學(xué)一些 socket api 和 系統(tǒng) api 的用法,沒(méi)摸到網(wǎng)絡(luò)編程的框架思維。

后面我又去搜,看到有人推薦《Linux高性能服務(wù)器編程》,去豆瓣看了下了目錄,似乎正是我想要的東西。

直接找來(lái) PDF 開(kāi)始看,果然這本書(shū)才真正讓我理解了網(wǎng)絡(luò)編程的整個(gè)套路和框架,學(xué)到了各種事件處理模式、計(jì)時(shí)器、信號(hào)處理、線(xiàn)程池這些網(wǎng)絡(luò)編程中很重要的東西。

當(dāng)然 UNP 和 APUE 也是不能丟的,這兩本書(shū)我當(dāng)做了字典查詢(xún),比如學(xué)到了 IO 部分,回去看 UNP 中關(guān)于五種 IO 模型的介紹。

用到 connect、listen、bind 這些函數(shù),再回去看 UNP 第四章,不得不說(shuō),UNP 關(guān)于這些 socket API 的使用和各種異常情況的處理方式都介紹得非常詳細(xì)和深入,不愧是網(wǎng)絡(luò)編程領(lǐng)域的圣經(jīng)。

但是初學(xué)者看卻容易在細(xì)節(jié)中迷失,抓不到綱領(lǐng),這也是這類(lèi)書(shū)的缺點(diǎn)。

類(lèi)似 UNP、APUE 這種書(shū)本身是面向知識(shí)體系的,而不是面向讀者,它們其實(shí)更像字典,把這個(gè)領(lǐng)域內(nèi)的所有知識(shí),非常細(xì)致的堆疊在一起,看上去就是平鋪直敘,充斥著細(xì)節(jié),對(duì)讀者極其不友好。并且書(shū)里內(nèi)容實(shí)在大而全,很多根本不用學(xué)。

比如 UNP 講了 sctp 這種協(xié)議用法、多播、unix 域協(xié)議這些實(shí)際用得很少的東西,挨著看不僅會(huì)看不下去,而且比較浪費(fèi)時(shí)間。

但是它們又是經(jīng)典的,確實(shí)是這些領(lǐng)域內(nèi)在體系性和深入性上都做得非常好的書(shū)。

什么書(shū)才是面向讀者的呢?

那就是抓住該領(lǐng)域的核心主干,提綱挈領(lǐng),帶領(lǐng)讀者由淺入深,同時(shí)又有一定的細(xì)節(jié),看完讓人茅塞頓開(kāi)。

比如《自頂向下》、《Linux高性能服務(wù)器編程》、《Linux多線(xiàn)程服務(wù)端編程》、《STL源碼剖析》、《Effective C++》、《CSAPP》、《程序員自我修養(yǎng)》等都有各自想要論述的主線(xiàn)在里面,看起來(lái)也是一環(huán)扣一環(huán),非常循序漸進(jìn)。

我的看書(shū)方法就是對(duì)于面向知識(shí)體系那種堆砌細(xì)節(jié)的書(shū),我們先瀏覽目錄,做到對(duì)整本書(shū)有映像,再大致看一些我們關(guān)心的部分,比如 UNP 和 APUE 中 IO、文件、進(jìn)程控制、信號(hào)、線(xiàn)程、線(xiàn)程控制、基本套接字編程 這些是比較重要的模塊,其它邊角知識(shí),可以用到再去查。

還有一點(diǎn),很多同學(xué)反映看不懂類(lèi)似 CSAPP 這樣的書(shū),那我們都知道,任何一本書(shū)基本上都是有前置依賴(lài)的。

沒(méi)有掌握要求的背景知識(shí)去看肯定很吃力的。

就比如我大一下只有基礎(chǔ)的 C 知識(shí)和一丁點(diǎn)計(jì)算機(jī)導(dǎo)論知識(shí),然后屁顛屁顛的跑去看 CSAPP(學(xué)長(zhǎng)畢業(yè)擺地?cái)傎u(mài)書(shū)我瞎買(mǎi)的),那時(shí)候只知道這本書(shū)被譽(yù)為神書(shū),但是看到前兩三章就蒙了,真的有點(diǎn)難,對(duì)于當(dāng)時(shí)的我來(lái)說(shuō)太底層了,根本不知道在說(shuō)啥,看過(guò)也只是看過(guò),就像天空飛過(guò)鳥(niǎo)兒,但沒(méi)有痕跡。

直到后來(lái)大三再次拿起,我才意識(shí)到這本書(shū)的偉大之處就在于將計(jì)算機(jī)不同學(xué)科知識(shí)有機(jī)的串在了一起。那時(shí)候看,更多是一種補(bǔ)充、深入學(xué)習(xí)以及完善了,因?yàn)楹芏嘀R(shí)分別在數(shù)字邏輯、匯編語(yǔ)言、操作系統(tǒng)這些課程中學(xué)過(guò)了。

所以要明白,你看不懂不是因?yàn)槟惚繘](méi)天賦,而是你有前置依賴(lài)的知識(shí)沒(méi)有完成,還沒(méi)學(xué)會(huì)走,就想跑了。

一般來(lái)說(shuō),每本書(shū)的首頁(yè)會(huì)介紹看這本書(shū)需要哪些前置知識(shí),可以關(guān)注一下。

還有一種看書(shū)的方法,我在復(fù)習(xí)的時(shí)候采用過(guò),那就是橫向?qū)W習(xí)。

比如我復(fù)習(xí)操作系統(tǒng),在《操作系統(tǒng):精髓和設(shè)計(jì)原理》中看到了關(guān)于內(nèi)存、虛擬內(nèi)存的各種介紹,看完理論再去看《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》12 章「虛擬內(nèi)存」、15 章『進(jìn)程地址空間』,最后再去看《CSAPP》第 9 章『虛擬內(nèi)存』,這樣看下來(lái),基本上內(nèi)存這塊理解得比較透了,這些書(shū)關(guān)于這塊的介紹是各有優(yōu)缺點(diǎn)的,正好互補(bǔ)。

又比如在《精髓與設(shè)計(jì)原理》中介紹了進(jìn)程加載和鏈接,其實(shí)講得比較偏理論,看完還是覺(jué)得似懂非懂。

那我又會(huì)去《CSAPP》看第 7 章「鏈接」,這一章基本講清了靜態(tài)鏈接、目標(biāo)文件、可重定位目標(biāo)文件、引用解析、加載這些關(guān)于鏈接的核心概念,但是一個(gè)章節(jié)講這么多,難免不夠深入。

我又會(huì)去看《程序員自我修養(yǎng)》這本書(shū)第 4 章「靜態(tài)鏈接」、第 6 章 「可執(zhí)行文件的裝載與進(jìn)程」、第 7 章 「動(dòng)態(tài)鏈接」,這本書(shū)核心主題就是鏈接、加載,所以這一路看下來(lái),對(duì)于鏈接、加載這塊基本上搞得比較透徹了,也許沒(méi)幾個(gè)面試官有你清楚。

同樣索引你也能從《數(shù)據(jù)庫(kù)系統(tǒng)概念》、《高性能MySQL》、《MySQL技術(shù)內(nèi)幕》中挑選對(duì)應(yīng)的章節(jié),串起來(lái)看,取每本書(shū)優(yōu)點(diǎn),這樣學(xué)習(xí)真的很高效也很深入。

這就是我在復(fù)習(xí)的時(shí)候采用的用知識(shí)點(diǎn)串聯(lián),跨多本書(shū)高效精準(zhǔn)的復(fù)習(xí)方式,效果也很不錯(cuò),春招十幾次面試沒(méi)有一次因?yàn)檫@些基礎(chǔ)知識(shí)掛過(guò)。

啰嗦了一大堆,就是回答這些問(wèn)題的:

“有些書(shū)看的找不到重點(diǎn),看不下去了,怎么辦,比如深入理解計(jì)算機(jī)系統(tǒng),UNIX 網(wǎng)絡(luò)編程,APUE,求指教”、“我不是科班 CSAPP 可能不是全部看得懂,該怎么辦?”、“大佬,這么多書(shū)看得完嗎”、“剛開(kāi)始看這些書(shū)很痛苦怎么辦”

三、要花多久時(shí)間才能學(xué)完

這個(gè)不好說(shuō),根據(jù)你的基礎(chǔ)和學(xué)習(xí)效率不同,比如我大一、大二對(duì)于一些基礎(chǔ)的知識(shí)學(xué)得比較認(rèn)真,基礎(chǔ)還算可以,按照這樣一套走下來(lái)也就大半年。大概每天花四五個(gè)小時(shí)以上吧。

如果真的是連計(jì)網(wǎng)、操作系統(tǒng)理論這樣的東西一點(diǎn)基礎(chǔ)都沒(méi)的話(huà),那估計(jì)得一年以上,畢竟這些內(nèi)容基本覆蓋了科班的核心課程,人家上三年課,你一年解決,已經(jīng)算很快了好吧。

一年真的足夠從小白學(xué)起嗎?

感覺(jué)是差不太多的,但是估計(jì)得每天付出五六小時(shí)以上了,并且學(xué)習(xí)方法得當(dāng)。

你去牛客就會(huì)發(fā)現(xiàn),存在各路大三、研一自學(xué)轉(zhuǎn)碼的同學(xué),最后還能成為 offer 收割機(jī),所以,不要懷疑一年不夠,最關(guān)鍵的是你要找到正確的路線(xiàn),然后執(zhí)行下去。

文中推薦的書(shū)真的全部要看嗎?

當(dāng)然不是,我自己都沒(méi)看完,但是我的策略已經(jīng)說(shuō)過(guò)了,基本上大部分書(shū)都看了重要的章節(jié),這樣看起來(lái)是很快的。

并且隨著你看書(shū)越來(lái)越多,基礎(chǔ)越來(lái)越好,你會(huì)發(fā)現(xiàn)每本書(shū)前面幾章都是鋪墊基礎(chǔ)知識(shí),大部分可以直接跳過(guò),舉個(gè)例子

《Linux高性能服務(wù)器編程》這本書(shū)前幾章是這樣的:

  • 第1章 TCPIP協(xié)議族
  • 第2章 IP協(xié)議詳解
  • 第3章 TCP協(xié)議詳解
  • 第四章 TCPIP通信案例:訪(fǎng)問(wèn)Internet上的Web服務(wù)器
  • 第五章 Linux網(wǎng)絡(luò)編程基礎(chǔ)API

你覺(jué)得這些章節(jié)在看過(guò)《自頂向下》、《TCP/IP詳解》之后還有必要看嗎?我反正是半天掃過(guò)去就完了。

最后,不管說(shuō)再多方法,再多的路線(xiàn),最終都需要自己花時(shí)間去啃、去執(zhí)行。

四、語(yǔ)言疑惑

還有一個(gè)很多選擇 C++ 方向同學(xué)都存在的疑惑,在這里我也想解釋一下:

C++ 語(yǔ)言特性多,又難學(xué),很多都是底層開(kāi)發(fā)才會(huì)用到,C++ 就是個(gè)坑,是否應(yīng)該轉(zhuǎn) Java、Go 呢?

當(dāng)然不是的,的確在頭條、美團(tuán)、阿里這種業(yè)務(wù)部門(mén)使用 Go、Java 系更多,首先還是那個(gè)觀點(diǎn),校招生對(duì)于企業(yè)來(lái)說(shuō)都是一張白紙,面試官考察的是你的基礎(chǔ)知識(shí)和聰明度,來(lái)決定是否有培養(yǎng)潛力,語(yǔ)言確實(shí)不重要。

那你可能會(huì)說(shuō),明明各種面經(jīng)上常常出現(xiàn) ConcurrentHashMap、虛表、虛函數(shù)實(shí)現(xiàn)機(jī)制這樣和語(yǔ)言強(qiáng)相關(guān)的問(wèn)題。

在我看來(lái)啊,面試深入問(wèn)一些語(yǔ)言實(shí)現(xiàn)細(xì)節(jié),其實(shí)不是在考你語(yǔ)言,而是看你是否有主動(dòng)鉆研的意識(shí),是不是只停留在應(yīng)用的層面,同時(shí)也借語(yǔ)言考察一些數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)方面的基礎(chǔ)知識(shí)。

所以呢,我覺(jué)得 C/C++、Java、Go 你深入學(xué)習(xí)哪一個(gè)都可以,關(guān)鍵還是找對(duì)相應(yīng)的學(xué)習(xí)路線(xiàn),一直堅(jiān)持學(xué)下去,不要每天都停留在我到底是學(xué) Java 好還是 C++ 好這樣無(wú)解的問(wèn)題。

另外,想對(duì)學(xué) C++ 的同學(xué)說(shuō),可能你會(huì)發(fā)現(xiàn)身邊同學(xué)都在搞 Java、Go之類(lèi)的,找工作缺少一些一起復(fù)習(xí)準(zhǔn)備的朋友,有些甚至勸你別學(xué) C++。那這個(gè)時(shí)候你一定要堅(jiān)定自己的選擇,多在??突蛘呔W(wǎng)上找找同方向的朋友一起交流、學(xué)習(xí)。

說(shuō)實(shí)話(huà),就找工作這塊來(lái)說(shuō),個(gè)人覺(jué)得區(qū)別真的是不大的,不管從薪資、面試難度來(lái)說(shuō)都是差不太多,更多的還是算法和基礎(chǔ)知識(shí)。

而且也有不少同學(xué) Java 進(jìn)騰訊需要轉(zhuǎn) C++,C++ 進(jìn)阿里、美團(tuán)需要轉(zhuǎn) Java 的,這都不是事兒。

那 C++ 目前應(yīng)用場(chǎng)景有哪些呢?

一句話(huà),對(duì)性能或者執(zhí)行效率要求比較高的應(yīng)用,比如游戲引擎、infra、推薦引擎、存儲(chǔ)等,當(dāng)然也能拿來(lái)寫(xiě)業(yè)務(wù)(沒(méi)錯(cuò)說(shuō)的就是鵝廠(chǎng)),也有做 C++ 客戶(hù)端開(kāi)發(fā)的,主要是 MFC、QT 等。

說(shuō)實(shí)話(huà),像游戲引擎、infra這類(lèi)都是門(mén)檻比較高的,并且招聘的數(shù)量也有限,一般人很難進(jìn),而且目前互聯(lián)網(wǎng)公司的業(yè)務(wù)部門(mén)大多使用的是 Java、Go這類(lèi)語(yǔ)言。

所以 C++ 的需求量是相比 Java、Go這類(lèi)少很多的,但是同時(shí)學(xué)習(xí) C++ 也沒(méi) Java 那么多,所以相對(duì)來(lái)說(shuō)競(jìng)爭(zhēng)還沒(méi)那么大,并且 C++ 學(xué)的不錯(cuò),你同樣可以去面阿里、美團(tuán)這種 Java 技術(shù)棧的公司,大廠(chǎng)基本不會(huì)限制語(yǔ)言的。

這里給一份我的面經(jīng)和刷題筆記, 包含各大廠(chǎng)Java、C++ 等面經(jīng), 看完一定有幫助:

pdf都可以在這個(gè)開(kāi)源倉(cāng)庫(kù)進(jìn)行下載:

https://github.com/imarvinle/awesome-cs-books

------update-----

這里有一份現(xiàn)代C++必學(xué)書(shū)單推薦:

編程指北:想學(xué)好 C++,這些書(shū)你必須知道 | C++學(xué)習(xí)路線(xiàn)

此外,面試中算法也非常重要,所以在這里也推薦一份谷歌大佬總結(jié)的刷題筆記:

編程指北:看完谷歌大佬的刷題筆記, 我直接手撕了200道 Leetcode 算法題

還有另外一個(gè)谷歌大佬也出了一本,很棒:

編程指北:看完這本谷歌師兄的刷題筆記,直接秒殺了 200 道 LeetCode 算法題

END

上面文章有所刪減,全文可以看看這里:

萬(wàn)字長(zhǎng)文 | 這可能是東半球最保姆級(jí)的后臺(tái)服務(wù)器開(kāi)發(fā)學(xué)習(xí)路線(xiàn)

最后再給大家分享下我整理的這些書(shū),可以在這里獲取,對(duì)于學(xué)習(xí)計(jì)算機(jī)的同學(xué)幫助非常大,且十分系統(tǒng)

書(shū)單:書(shū)單推薦,少即是多(含下載方式)

這篇文章有點(diǎn)長(zhǎng),一下子可能一下子看不完,大家可以先收藏著,碼字太累了,收藏的時(shí)候也請(qǐng)來(lái)一個(gè)素質(zhì)三連哦~

八、成為頂級(jí)C語(yǔ)言開(kāi)發(fā)者:C語(yǔ)言服務(wù)器培訓(xùn)指南

為什么C語(yǔ)言服務(wù)器培訓(xùn)如此重要?

在當(dāng)今技術(shù)迅猛發(fā)展的時(shí)代,服務(wù)器端開(kāi)發(fā)成為了軟件工程師的熱門(mén)領(lǐng)域。而C語(yǔ)言由于其高效性和靈活性,在服務(wù)器端開(kāi)發(fā)中依然占據(jù)著重要地位。因此,接受一次系統(tǒng)的C語(yǔ)言服務(wù)器培訓(xùn)將對(duì)您成為一名頂級(jí)C語(yǔ)言開(kāi)發(fā)者起到至關(guān)重要的作用。

什么樣的C語(yǔ)言服務(wù)器培訓(xùn)課程值得選擇?

選擇一門(mén)適合自己的C語(yǔ)言服務(wù)器培訓(xùn)課程意味著您將得到一套完善的知識(shí)體系,從而更好地應(yīng)對(duì)日益復(fù)雜的服務(wù)器開(kāi)發(fā)挑戰(zhàn)。一個(gè)理想的C語(yǔ)言服務(wù)器培訓(xùn)課程應(yīng)該具備以下幾個(gè)特點(diǎn):

  • 全面涵蓋:包括C語(yǔ)言基礎(chǔ)、網(wǎng)絡(luò)編程、多線(xiàn)程與并發(fā)、數(shù)據(jù)庫(kù)操作等內(nèi)容。
  • 實(shí)踐導(dǎo)向:提供豐富的編程實(shí)例和項(xiàng)目實(shí)戰(zhàn),讓您可以真正動(dòng)手實(shí)踐,掌握關(guān)鍵技能。
  • 權(quán)威認(rèn)證:課程結(jié)合了業(yè)界著名的C語(yǔ)言認(rèn)證考試,幫助您在培訓(xùn)結(jié)束后獲得權(quán)威的C語(yǔ)言服務(wù)器開(kāi)發(fā)證書(shū)。
  • 導(dǎo)師資質(zhì):培訓(xùn)機(jī)構(gòu)提供經(jīng)驗(yàn)豐富的導(dǎo)師,他們將分享自己在實(shí)際項(xiàng)目中的經(jīng)驗(yàn)和最佳實(shí)踐。
  • 靈活學(xué)習(xí)方式:提供線(xiàn)上和線(xiàn)下的學(xué)習(xí)方式,讓您可以根據(jù)自己的時(shí)間安排選擇合適的學(xué)習(xí)模式。

C語(yǔ)言服務(wù)器培訓(xùn)帶來(lái)的益處

通過(guò)系統(tǒng)的C語(yǔ)言服務(wù)器培訓(xùn),您將獲得以下幾個(gè)顯著的益處:

  • 提高就業(yè)競(jìng)爭(zhēng)力:擁有專(zhuān)業(yè)的服務(wù)器開(kāi)發(fā)技能,成為企業(yè)青睞的人才。
  • 開(kāi)發(fā)高效的服務(wù)器程序:掌握C語(yǔ)言的底層編程,編寫(xiě)高性能、高并發(fā)的服務(wù)器程序。
  • 解決服務(wù)器開(kāi)發(fā)難題:通過(guò)培訓(xùn),您將學(xué)會(huì)如何在實(shí)際的服務(wù)器開(kāi)發(fā)中應(yīng)對(duì)各種挑戰(zhàn)。
  • 獲得行業(yè)認(rèn)可:通過(guò)C語(yǔ)言服務(wù)器培訓(xùn)課程獲得的證書(shū)將對(duì)您的職業(yè)發(fā)展帶來(lái)更多機(jī)會(huì)。

結(jié)語(yǔ)

C語(yǔ)言服務(wù)器培訓(xùn)為您成為頂級(jí)C語(yǔ)言開(kāi)發(fā)者鋪就了堅(jiān)實(shí)的基礎(chǔ)。通過(guò)系統(tǒng)學(xué)習(xí)和實(shí)踐,您將能夠掌握服務(wù)器開(kāi)發(fā)的關(guān)鍵技能,提高自身的就業(yè)競(jìng)爭(zhēng)力,并在項(xiàng)目中迅速解決各種服務(wù)器開(kāi)發(fā)難題。不要錯(cuò)過(guò)這個(gè)機(jī)會(huì),開(kāi)啟您的C語(yǔ)言服務(wù)器培訓(xùn)之旅吧!

感謝您閱讀本文,希望這篇文章能夠?yàn)槟峁╆P(guān)于C語(yǔ)言服務(wù)器培訓(xùn)的專(zhuān)業(yè)參考和實(shí)用指南。

九、C/C++ 有哪些適合快速開(kāi)發(fā)的socket服務(wù)器框架?

  如果有 C++ 背景可以考慮用 Thrift,這個(gè)需要服務(wù)器和客戶(hù)端一起使用。

  如果只考慮服務(wù)器,Go 和 NodeJS 都是不錯(cuò)的選擇,看看官方的例子就已經(jīng)比較清楚了?! ≈劣?socket 連接的穩(wěn)定性,主要還是在于 TCP 心跳檢測(cè)和數(shù)據(jù)重傳做的好不好,對(duì)于信道不好的情況,比如使用 3G 卡做聯(lián)網(wǎng)時(shí),要每隔幾十秒就發(fā)一個(gè)沒(méi)有數(shù)據(jù)的心跳包,保證盡早檢測(cè)到斷線(xiàn)請(qǐng)求,盡早重連。服務(wù)器端性能應(yīng)該問(wèn)題不大,就算設(shè)備每秒鐘都發(fā)數(shù)據(jù)只要業(yè)務(wù)不太復(fù)雜就不會(huì)遇到什么瓶頸。

十、C#開(kāi)發(fā)中常用的Web服務(wù)器介紹

C#是一種通用、面向?qū)ο蟮木幊陶Z(yǔ)言,廣泛應(yīng)用于各種Web應(yīng)用程序的開(kāi)發(fā)。在C#開(kāi)發(fā)中,Web服務(wù)器是一個(gè)非常重要的組成部分,它負(fù)責(zé)處理客戶(hù)端發(fā)送的HTTP請(qǐng)求,并返回相應(yīng)的響應(yīng)數(shù)據(jù)。下面我們就來(lái)介紹幾種常見(jiàn)的C#開(kāi)發(fā)中使用的Web服務(wù)器。

1. IIS (Internet Information Services)

IIS是微軟公司開(kāi)發(fā)的Web服務(wù)器軟件,它是Windows操作系統(tǒng)的一部分,可以直接在Windows系統(tǒng)上安裝和使用。IIS支持多種Web應(yīng)用程序技術(shù),如ASP.NET、PHP、CGI等,是C#開(kāi)發(fā)中最常用的Web服務(wù)器之一。IIS具有穩(wěn)定性高、性能優(yōu)異、安全性強(qiáng)等特點(diǎn),是企業(yè)級(jí)Web應(yīng)用程序的首選。

2. Kestrel

Kestrel是.NET Core框架內(nèi)置的跨平臺(tái)Web服務(wù)器,它是一個(gè)高性能的HTTP服務(wù)器,可以直接在C#應(yīng)用程序中使用。Kestrel具有輕量級(jí)、跨平臺(tái)、可擴(kuò)展等特點(diǎn),非常適合用于開(kāi)發(fā)微服務(wù)和容器化應(yīng)用程序。Kestrel通常作為反向代理服務(wù)器的前端,與Nginx或Apache等服務(wù)器配合使用,提高應(yīng)用程序的性能和可靠性。

3. Nginx

Nginx是一款開(kāi)源的高性能Web服務(wù)器和反向代理服務(wù)器,廣泛應(yīng)用于各種Web應(yīng)用程序的開(kāi)發(fā)和部署。Nginx具有高并發(fā)處理能力、低內(nèi)存占用、易擴(kuò)展等特點(diǎn),非常適合用于處理大規(guī)模的Web流量。在C#開(kāi)發(fā)中,Nginx通常作為反向代理服務(wù)器,與Kestrel等Web服務(wù)器配合使用,提高應(yīng)用程序的性能和可靠性。

4. Apache

Apache是另一款廣泛使用的開(kāi)源Web服務(wù)器軟件,它支持多種編程語(yǔ)言和Web應(yīng)用程序技術(shù),包括ASP.NET。Apache具有穩(wěn)定性高、擴(kuò)展性強(qiáng)、安全性好等特點(diǎn),是C#開(kāi)發(fā)中常用的Web服務(wù)器之一。與Nginx類(lèi)似,Apache也可以作為反向代理服務(wù)器,與Kestrel等Web服務(wù)器配合使用,提高應(yīng)用程序的性能和可靠性。

總之,在C#開(kāi)發(fā)中,IIS、Kestrel、Nginx和Apache是幾種常見(jiàn)的Web服務(wù)器選擇。每種Web服務(wù)器都有自己的特點(diǎn)和適用場(chǎng)景,開(kāi)發(fā)者需要根據(jù)具體的項(xiàng)目需求和部署環(huán)境,選擇合適的Web服務(wù)器來(lái)部署和運(yùn)行C#應(yīng)用程序。

感謝您閱讀這篇文章,希望通過(guò)這篇文章,您可以了解到C#開(kāi)發(fā)中常用的Web服務(wù)器,并能夠根據(jù)自己的需求選擇合適的Web服務(wù)器來(lái)部署和運(yùn)行您的C#應(yīng)用程序。

相關(guān)資訊
熱門(mén)頻道

Copyright © 2024 招聘街 滇ICP備2024020316號(hào)-38