來源:https://blog.csdn.net/ajian005/article/details/8003655
C++學習之路
1、序員學習why要學習C/C++/object-c?
最近想寫點有用的個程東西,發現自己最拿手的序員學習java用起來真是笨手笨腳的。
碰到好多實現起來巨繁瑣的個程問題,比如操作底層庫,序員學習和OS framework交互,個程做個用戶體驗好點的序員學習本地圖形程序等等,這些都是個程java的軟肋。
其實,序員學習我一直對底層頗感興趣,個程工作中也只能接觸一下JVM,序員學習但VM畢竟是個程VM,始終與底層失之交臂。
Linux、Mysql、Memcached、Boost、Apache、JVM、ACE... ... 很多基礎服務都是用C/C++實現的,要像了解他們原理、能看懂代碼、可以修改bug、增加新功能模塊
開發嵌入式、中小型項目C/C++項目,維護C/C++項目... ...
加深對系統底層的理解
2、How學習C/C++?
下文是我整理的一些C++圖書列表,按順序閱讀,可涵蓋入門到精通。
《The C programming language》必讀
《C++ Primer》,號稱是一本可以讓你從C或JAVA程序員轉為一個真正的C++程序員的入門參考書,必讀。
《The C++ programming language》,C++之父,人稱B教主著作,在看過C++ primer后,應該可以跳章選讀。
《Think in c++》,網上說此書的中文版翻譯質量奇差,推薦看影印版,選讀。
《Effective c++》,類似 Effective java,講的是最佳實踐,程序員必讀。
《More effective c++》,上書的補充。
《The C++ standard library》,會寫C,不會用標準庫怎么行。這就跟java程序員不會用java.util包一樣,必讀。
《Effective STL》,STL庫的最佳實踐。Effective C++作者又一力作,必讀。
《The annotated STL source》,STL源碼分析,這本書應該算是深入/精通類了,選讀。
《Generic programming and STL》,號稱C++編程里,就是跟模板,泛型打交道,那么精通泛型是勢在必行。
《C++ Template》,C++模板編程,代碼復用的經驗之道,必讀。
《Exceptional C++》,跟Effective C++類似,屬于最佳實踐和難題解析,書中列出了許多應用場景和實例代碼供讀者揣摩,選讀。
《More Exceptional C++》,上書的補充。
《Exceptional C++ Style》,上上書的補充
《Inside The C++ Object Model》,有了上面這些書做鋪墊,那么終于可以讀此神書了。它會帶你游覽C++對象模型的底層實現機制。讀完此書,任何C++代碼看起來如同行云流水,必讀。
3、優秀的C/C++開源項目(閱讀代碼)
OS:Linux kernel? LVS、Linux應用程序
DB:Mysql、PostgreSQL
Complier:VM、GCC
Framework:OpenSip、SipProxy、
Net:ACE(Java Mina、Netty)、TCP/IP、HTTP協議棧
Cache:Memcached、Redis、
Library:STL(java util package)、Boost、Qt(UI)、
balance:Apache、Nginx
... ...
自學者可以參考的學習順序(Linux C++現場全科班培訓的順序)
http://www.xuanyuan-soft.cn/
?
Linux C++全科班課程,專注Linux/UNIX服務器端軟件開發(后臺開發),培養企業所需的專業Linux/UNIX C++軟件工程師。課程涉及UNIX/Linux服務器端軟件開發的各個方面:Linux/UNIX、C++、Boost、ACE、Oracle /MySQL、企業級的實戰項目等。
上課方式
全日制脫產學習、歷時4個月(120天 * 10小時 = 1200小時)。
課程模塊
Linux C++全科班課程由以下模塊組成:
Module01 - Linux系統基礎
由于本系列課程基于Linux(或UNIX),熟悉Linux操作系統是必要的前提。該模塊的課程包含以下方面的內容:
常用Unix/Linux命令
熟悉文件管理、文本處理、進程管理、網絡、系統管理等各個方面大約100個常用的命令。
深入了解bash
了解Linux默認shell: bash 的語法、命令執行、I/O重定向、任務控制等。正則表達式基礎
由于UNIX/Linux中很多強大的文本處理命令如:grep、awk、sed,還有vi編輯器等工具配合正則表達式將產生強大的威力,所以熟悉正則表達式語法是十分必要的。find、grep、sed、awk
四個強大的UNIX工具,特別是sed、awk在文本處理方面的能力非常強大,在Linux下工作應該掌握這幾個命令。
Linux環境高級編程
一、課程目標
本次課程涵蓋Linux系統編程的幾個主要方面,通過本次課程的學習,學員將具備以下能力:
了解Linux系統調用和類庫的區別;
熟悉文件I/O、文件和目錄、進程管理、進程間通信(IPC)、信號、時間與定時器的編程。
二、參訓要求
參加本次課程的學員須具備以下能力:
本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
能熟練使用常用的Linux命令;
能熟練使用gcc、gdb、熟練撰寫makefile;
最好熟練使用vi、emacs等文本編輯器其中的一種。
三、課程實踐環境
學員自備電腦
操作系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
編譯器:GCC v4.1+、GDB v7.0+
可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、預備知識
UNIX歷史和標準
UNIX; BSD & System V
GNU project; Linux Kernel
POSIX, SUSv3, SUSv4
Linux系統相關概念
系統調用和庫函數
錯誤處理
特性測試宏
系統數據類型
系統限制和選項 (sysconf(), pathconf())
系統參數:/proc文件系統
2、文件I/O
Linux I/O系統調用與C標準庫stdio的比較
I/O系統調用: open(), close(), read(), write()
控制I/O的Buffer
讀寫指針的定位:lseek()
I/O控制:ioctl()
原子操作和數據競態
文件控制: fcntl()
文件打開的狀態標志(status flags)
文件描述符
復制文件描述符:dup(), dup2()
3、文件和目錄
文件屬性
獲取文件的屬性:stat()
文件的時間戳
文件的所有權:chown()
文件的操作權限:chmod()
目錄和連接文件
硬連接和軟連接 (符號連接)
目錄
迭代目錄樹
當前工作目錄(CWD)
路徑名
監控文件系統的事件:inotify
inotify API
inotify事件
inotify限制
4、進程控制
進程屬性
進程ID(PID)和父進程ID(PPID)
進程內存布局
棧 (Stack)
堆 (Heap)
命令行參數和環境變量列表
非局部goto (nonlocal goto):setjmp() 和 longjmp()
創建和終止進程
創建進程:fork()
fork() 后的多進程數據競態
進程終止:exit(3) 和 _exit(2)
退出處理器:atexit()
等待子進程的退出:wait(), waitpid(), waitid()
SIGCHLD 信號
執行程序
execve()
exec() 系列庫函數
解釋腳本
文件描述符和 exec()
信號和 exec()
執行Shell命令:system()
守護進程 (Daemons)
創建守護進程的幾個步驟
使用 SIGHUP 信號使一個進程變成守護進程
系統中守護進程的示例:syslog
進程權限相關
文件 /etc/passwd 和 /etc/group
User ID, and Group ID
Real, effective, and saved set IDs
其它 group IDs
Set-user-ID and set-group-ID programs
獲取或修改進程權限
5、信號 (Signals)
信號類型和默認動作
信號處理方式
信號處理器
發送信號
信號集
阻塞信號(signal mask)
系統調用的中斷和重新執行
等待信號
6、時間和定時器(Timers)?
時間相關的數據類型
POSIX Clock
獲取當前時間
設置當前時間
C標準庫 時間函數
Sleep
定時器(Timers)
簡單的定時器:alarm()
interval Timers
高級定時器
7、進程間通信 (Interprocess Communication, IPC)
????
傳統UNIX IPC
管道和優先隊列 (Pipe and FIFO)
SYSV 消息隊列 (SYSV Message Queue)
SYSV 信號量 (SYSV Semaphore)
SYSV 共享內存 (SYSV Shared Memory Segments)
內存映射文件 (Memory Mapping Files)
POSIX IPC
POSIX IPC的優勢
POSIX 消息隊列 (POSIX Message Queue)
POSIX 信號量 (POSIX Semaphore)
POSIX 共享內存 (POSIX Shared Memory Segments)
五、時間安排
課程時間:3天,以每天6小時計,具體安排如下:
Day1
1 - 預備知識
2 - 文件I/O
3 - 文件與目錄
Day2
4 - 進程控制
5 - 信號
6 - 定時器
Day3
7 - 進程間通信
課程回顧與總結
六、課程資源
Module02 - Linux開發環境
不同系統平臺下的開發工具、開發環境各有不同。該模塊課程關注的是Linux C++/C開發所必需的一系列工具:
vi(vim)文本編輯器
一個UNIX世界標準的文本編輯器,簡約而強大,不論作為開發人員還是系統管理員,熟練使用vi是一項基本的、且不可或缺的技能。gcc/g++ C/C++編譯器
通過具體的示例講解使用gcc/g++編譯單個、多個文件、共享庫、靜態庫等。gdb 調試器
通過具體的示例來熟悉通過gdb來調試C/C++應用程序、修正應用程序運行期的錯誤。make和makefile
學習編寫makefile,使用make來構建一個完整的項目。CVS - 版本控制
運用CVS來進行代碼的版本控制。Eclipse CDT(Linux Emacs 、Windows MS Vistual Studio )
一個非常強大的C/C++ IDE,強大的文本編輯器、與GCC工具鏈的無縫結合、方便的gdb前端、集成CVS/Subversion等版本控制等,提供眾多的便利,大大減輕開發者的負擔。
Linux高性能網絡編程
?一、課程目標
本次課程深入講解Linux下的socket編程,并以此為基礎,著重討論如何提高網絡服務端應用的性能,通過本次課程的學習,學員將收獲以下方面的成果:
?
熟練使用socket系列函數進行網絡編程;
深刻理解服務端應用的性能要求;
利用Linux提供的各種機制,有效地解決服務端應用的性能瓶頸。
二、參訓要求
參加本次課程的學員須具備以下能力:
了解TCP/IP協議,有網絡編程概念。
本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
能熟練使用常用的Linux命令;
能熟練使用gcc、gdb、熟練撰寫makefile;
最好熟練使用vi、emacs等文本編輯器其中的一種。
三、課程實踐環境
學員自備電腦
操作系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
編譯器:GCC v4.1+、GDB v7.0+
可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、POSIX Thread - 多線程
線程管理
線程創建:pthread_create()
線程終止:pthread_exit()
線程連接和分離:join and detach
線程同步機制
互斥體:mutex
讀寫鎖:read-write lock
條件變量:condition variable
線程屬性控制
mutex屬性控制
2、Socket 簡介
Socket地址數據結構:struct sockaddr,struct sockaddr_in
字節序以及字節序操作:ntohl(), ntohs(), htonl(), htons()
Internet地址操作:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()
3、TCP Socket
socket():創建socket
bind():綁定地址
listen():開始偵聽
accept():接受來自客戶端的連接
connect():連接到服務器
getsockname()和getpeername():獲取本地和對端地址
I/O 操作:read(), write()
更高效的I/O 操作:readv(), writev()
TCP Server編程步驟
TCP Server v1:迭代式Echo Server
TCP Server v2:多進程并發式Echo Server,使用fork()和exec*()
TCP Server v3:多線程并發式Echo Server,使用pthread
TCP Client編程步驟
TCP Client:Echo Client
4、UDP Socket
recvfrom()和sendto():收發UDP數據報
UDP Echo Server
UDP Echo Client
組播(Multicast)和廣播(Broadcast)
5、Socket Options和 IP Options
常用的Socket Options
常用的IP Options
Socket選項和IP選項對網絡應用的影響
6、I/O多路復用:構建反應式(Reactive)網絡應用
UNIX I/O多路復用機制概要
為什么I/O 多路復用對于網絡應用很重要
I/O 多路復用與多線程(反應式模型和并發模型)
select / poll
在TCP Server和UDP Server中使用select和poll
Linux特有I/O 多路復用機制:Event poll (epoll)
在TCP Server和UDP Server中使用epoll
7、異步I/O:構建前攝式(Proactive)網絡應用
相關概念:同步I/O和異步I/O、Proactor模式
異步I/O 是如何提高I/O 性能的
異步I/O系列操作
使用異步I/O的機制構建TCP Server
8、高性能網絡編程討論
考究高性能網絡編程中應該遵循的原則,討論并發、同步、事件多路分離等機制的適用場
網絡應用的瓶頸何在
事件多路分離 vs 一連接一線程 (Event demultiplexing vs One thread per connection)
同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O)
如何適當地使用多線程
什么時候需要多個 事件多路分離線程
9、應用層協議定義與實現
為什么要自定義應用層協議
定義應用層協議 (以XMMEP協議為例)
用C++實現自定義的協議 (以XMMEP協議為例)
注:XMMEP為X-Messenger Message Exchanging Protocol
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
Day1
1 - POSIX Thread - 多線程
2 - Socket 簡介
3 - TCP Socket
4 - UDP Socket
5 - Socket Options和 IP Options
Day2
6 - I/O多路復用:構建反應式(Reactive)網絡應用
7 - 異步I/O:構建前攝式(Proactive)網絡應用
8 - 高性能網絡編程討論
9 - 應用層協議定義與實現
課程回顧與總結
六、課程資源
?
Linux高級I/O機制
一、課程目標
I/O常常是現代應用程序的性能瓶頸,為突破這個瓶頸,現代操作系統不斷推出新的I/O機制,使高性能的I/O編程變成可能。本次課程將討論Linux下幾種高性能I/O的機制,這些功能都是基于成熟的系統調用,通過本次課程的學習,學員將掌握以下內容:
傳統File I/O;
散/聚 I/O (Scatter/Gather I/O);
阻塞式和非阻塞式I/O;
I/O多路復用;
select() , ?poll();
Event poll (epoll);
異步I/O;
運用I/O多路復用機制和異步I/O機制提高網絡應用的并發響應和性能。
二、參訓要求
參加本次課程的學員須具備以下能力:
本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
能熟練使用常用的Linux命令;
由于本次課程涉及socket編程,所以學員需有Linux下socket編程的經歷;
能熟練使用gcc、gdb、熟練撰寫makefile;
最好熟練使用vi、emacs等文本編輯器其中的一種。
三、課程實踐環境
學員自備電腦
操作系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
編譯器:GCC v4.1+、GDB v7.0+
可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、預備知識
理解:UNIX下一切皆文件
I/O的實質和I/O的步驟
2、文件I/O
Linux I/O系統調用與C標準庫stdio的比較
I/O系統調用: open(), close(), read(), write()
控制I/O的Buffer
讀寫指針的定位:lseek()
I/O控制:ioctl()
原子操作和數據競態
文件控制: fcntl()
文件打開的狀態標志(status flags)
文件描述符
復制文件描述符 (dup(), dup2())
3、散/聚I/O (Scatter/Gather I/O)
什么是散/聚 I/O,為什么需要散/聚 I/O
系統調用:readv(), writev()
4、I/O多路復用 (I/O Multiplexing)
什么是I/O多路復用
I/O多路復用和多線程并發處理I/O的區別
select(), poll():傳統的UNIX I/O多路復用機制
select(), pselect()
poll(), ppoll()
Epoll:Linux系統新的I/O多路復用機制Event poll介紹
創建epoll實例
控制epoll
等待I/O事件
epoll的兩種觸發方式:水平觸發(level-triggered)、邊緣觸發(edge-triggered)
5、異步I/O
關于同步I/O:阻塞式I/O和非阻塞式I/O
什么異步I/O
理解同步I/O和異步I/O的差別
異步I/O重要數據結構:異步I/O控制塊--struct aiocb
異步讀、寫操作:aio_read(), aio_write()
檢查異步操作的結果:aio_error(), aio_return()
取消異步操作:aio_cancel()
異步文件同步:aio_fsync()
6、使用高性能I/O機制提高網絡服務端應用的性能
為什么傳統的I/O機制會導致服務端應用的性能瓶頸
使用select()和poll()實現ACE中的Reactor模式
使用epoll實現ACE中的Reactor模式
在網絡應用中使用異步I/O機制:模擬ACE中Proactor模式和框架\
實例演示,區別傳統I/O機制和高性能I/O機制對于服務端應用的重要性
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
Day1
1 - 預備知識
2 - 文件I/O
3 - 散/聚 I/O
4 - I/O多路復用
?
Day2
5 - 異步I/O
6 - 高性能I/O機制和網絡服務端應用
Module03 - C++編程語言
深入講解C++編程語言的各個方面,即完整的C++語法講解:
語言基礎
詳細介紹變量、表達式、語句、指針、數組、流程控制、函數、文件組織等。抽象機制 - 面向對象編程
深入講解C++的抽象機制,封裝(類)、繼承、多態;操作符重載、函數對象、異常處理等。模板 - 泛型編程
詳細介紹C++的模板機制,類模板、函數模板、模板特化等方面的內容。
C++面向對象編程高級培訓
?一、課程目標
本次課程圍繞C++面向對象編程這一課題,深入的講解C++ OOP語言機制,以及運用面向對象技術有效架構C++應用。通過本次課程的學習,學員將具備以下能力:
深刻理解C++面向對象語言機制;
面向對象編程的若干法則。
二、參訓要求
參加本次課程的學員須具備以下能力:本次課程假定學員有編程經歷,使用C/C++、Java或其它語言實際編寫過代碼;
能熟練使用Windows或Linux下的C++編譯器(如g++)、調試器(如gdb)。
三、課程實踐環境
學員自備電腦
實踐平臺 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
四、課程大綱
本次課程由以下幾個部分構成:
1、從C到C++
引用和指針:為什么引用很重要
const關鍵字:為什么const很重要
名字空間 (namespace)
2、深入C++對象
關于C++對象
內置類型的對象,如int、double對象
自定義類型的對象
對象類型的定義
關鍵字class和struct
類成員:成員函數和數據成員
靜態數據成員
成員的訪問控制
對象的size
關于this指針
onst成員函數、const究竟修飾什么
mutable數據成員
4種特殊成員函數:constructor、destructor、copy constructor、operator=
對象的構造、初始化列表
對象的析構
對象的復制
什么情況下有必要顯式定義4種特殊函數
C++對象生命周期
3、操作符重載
關于C++中操作符重載機制
重要操作符重載
算術運算:+, -, *, /, %, ++, --, ...
關系運算:>, <, ==, !=
下標存取:[ ]
函數調用:(),函數對象
類型轉換、單參數構造函數與隱式轉換、阻止隱式轉換 -- explicit關鍵字友元與成員
4、面向對象基礎 -- 繼承
基類與派生類
再談對象的構造與析構
虛函數、純虛函數
派生類的內存布局、虛函數表
多態、多態類型、如何體現多態
虛析構、為什么虛析構很重要
5、關于繼承更多的話題
多繼承
虛繼承與虛基類
對基類的訪問、public / protected / private繼承
Down cast:static_cast<>和dynamic_cast<>
運行期類型識別 (RTTI)
6、C++與面向對象設計
C++語言機制提供了完整的OOP支持
?超越繼承
OOP若干法則和設計模式
封裝變化,分離不變與變化
面向接口編程,而不是針對實現編程
多用組合、少用繼承
努力保持交互對象間的松耦合
類設計的開閉原則:類應該對擴展開放、對修改關閉
依賴抽象,而不是依賴具體類
最少知識原則
好萊塢法則 (控制反轉):不要打電話給我,我會找你的
單一責任原則:一個類應該只有一個引起變化的原因
五、時間安排
課程時間:3天,以每天6小時計,具體安排如下:
Day1
1 - 從C到C++
2 - 深入C++對象
3 - 操作符重載
Day2
4 - 面向對象基礎 -- 繼承
5 - 關于繼承更多的話題
Day3
6 - C++與面向對象設計
課程回顧與總結
Module04 - C++標準庫(注意:C++11規范增加了一些標準庫)
?完整地講解STL各大組件:容器、算法、函數對象、容器適配器、迭代器、迭代器適配器等;另外還包括string、I/O stream;為了更好地了解STL容器的特性、排序算法,額外安排:數據結構簡介和常用排序算法簡介2個部分的內容。
常用數據結構簡介
介紹動態數組、linked-list、binary search tree、rb-tree、hash table、stack、queue、heap等常用的數據結構。STL容器詳細介紹
vector、list、deque、stack、queue、priority_queue、map、set等容器的特性和用法。常見排序算法介紹
簡要介紹各種常見排序算法的原理,及其實現。STL算法和預定義函數對象標準庫提供了多達60多個算法函數,涉及排序、搜索、排列組合等多個方面,其中多數算法會使用如greater、less、binder2nd等函數對象,該單元的課程詳細介紹了上述算法的使用和相關函數對象的具體作用。
迭代器
STL容器和算法高度解耦,而算法之所以能方便的作用于STL容器,維系二者的就是迭代器。
在這個單元的課程中講介紹C++迭代器的類別、各類迭代器適配器的用法。string - 字符串
相對于C風格的字符串處理,C++提供了更安全和方便的字符串類型 string,給class提供類眾多的方法確保針對字符串處理的安全、便捷性。該單元的課程講完整地介紹string的使用。I/O stream
C++標準庫提供的一個強大的I/O流框架。本單元詳細介紹標準輸入/輸出、文件輸入/輸出、字符串輸入/輸出流的運用,利用操控符來控制輸入/輸出的格式。?數值
介紹C++數值運算的算法,如valarray、4組數值算法函數、隨機數等方面的內容。
?
C++泛型編程與STL高級培訓:
?一、課程目標
?
C++作為一門多風格的程序設計語言,除了強大的面向對象支持外,泛型編程(模板機制)的支持更是極大程度上提高了C++的表現能力,現在模板的運用已成為C++類庫、應用程序中自然且不可分割的一部分,滲透到各個角落。本次課程將深入、細致的講解C++模板機制、STL、Boost相關類庫的實現思路、手法以及其表現出的智慧,以企通過本次課程的學習,將這些經驗自如地用到后續的軟件開發中。這次課程關注:
C++模板機制
STL和Boost部分類庫的剖析
二、參訓要求
參加本次課程的學員須具備以下能力:
本次課程假定學員有編程經歷,使用C/C++、Java或其它語言實際編寫過代碼;
能熟練使用Windows或Linux下的編譯器(如g++)、調試器(如gdb)。
三、課程實踐環境
學員自備電腦
實踐平臺 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
四、課程大綱
本次課程由以下幾個部分構成:
1、C++ 模板機制
關于C++模板
類模板
函數模板
模板實例化
模板參數
使用模板參數指定策略
特征類 (Traits classes)
模板特化
完全特化
部分特化類模板的派生
Curiously Recurring Template Pattern (CRTP)、
依賴名字:關鍵字typename和template的另一種用處
2、STL 概要
什么是STL
STL組件
容器
算法
迭代器
函數對象
?適配器
分配器
STL的能力與限制
3、STL容器
?
序列容器
Vector
?Deque
List有序關聯容器
Multisets
Sets
Multimaps
Maps
無序關聯容器
Unordered Multisets
Unordered sets (Hashsets)
Unordered Multimaps
Unordered maps (Hashmaps)
4、STL迭代器
關于迭代器
迭代器的操作
迭代器類別
Input Iterators
Output Iterators
Forward Iterators
Bi-directional Iterators
Random Access Iterators、
Constant Iterators
Reverse Iterator
5、STL算法
STL算法一覽
算法類別
各類算法介紹
非修改性算法
修改性算法
排序算法
集合算法
堆算法
6、預與定義STL數對象
預定義一元函數對象
預定義二元函數對象
判斷式(Predicates)
7、STL適配器
適配器的概念
容器適配器
Stack
Queue迭代器適配器
Inserters函數對象適配器
Binders
Function Adapters
Negaters
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
Day1
1 - C++ 模板機制
2 - STL 概要
3 - STL容器
Day2
4 - STL迭代器
5 - STL算法
6 - 預與定義STL函數對象
7 - STL適配器
Module05 - C++ Boost
Boost是由C++標準委員會成員發起、眾多C++業界高人參與設計并實現的一個涉及面廣、質量高且業已廣泛使用的C++標準后備庫,其中 TR1已經被納入C++0x標準庫。不論從風格和內容組織上講,都可以認為Boost項目是C++標準庫的延伸。截止到boost 1.43版本,boost項目擁有大約100個用途廣泛的實用庫。這部分課程將介紹服務器端開發所需要的幾個組件:
容器與數據結構
介紹boost.any, boost.tuple, boost.array, boost.unordered(基于hash table,即hash_map和hash_set)等組件。字符串算法和文字處理
介紹boost.lexical_cast, boost.format, boost.string_algo等組件。正則表達式
正則表達式語法(perl正則表達式語法)的講解,boost.regex庫的使用。智能指針
詳細介紹shared_ptr、scoped_ptr、weak_ptr等智能指針的使用。函數對象相關
詳細介紹boost.bind, boost.mem_fn, boost.function, boost.ref, boost.lambda等組件。序列化
通過實例熟悉boost.serialization庫的用法。日期與時間
boost.date_time庫的詳細介紹。多線程
作為服務器端開發必不可少的內容之一:多線程支持,boost提供了一個跨平臺的線程庫:boost.thread。
本單元的課程詳細介紹boost.thread。網絡編程
boost.asio庫,通過對各類操作系統原生的socket API以及事件多路分離、異步I/O API的封裝,構成了一個性能優秀、便于編程的網絡編程框架,使復雜的網絡編程任務變得簡單、安全、并且高效。
本單元的課程通過一系列的示例來展示:通過asio來構建TCP同步/異步服務器和客戶端、UDP同步/異步服務器和客戶端應用,從而熟悉asio的接口和編程套路。
Boost核心類庫精講
一、課程目標
Boost是由C++標準委員會成員發起、眾多C++業界高人參與設計并實現的一個涉及面廣、質量高且業已廣泛使用的C++標準后備庫,其中 TR1已經被納入C++0x標準庫。不論從風格和內容組織上講,都可以認為Boost項目是C++標準庫的延伸。本次課程擷取一系列重要的類庫進行深入的講解,涉及的類庫如下:
容器與數據結構;
字符串算法和文字處理;
內存管理相關;
函數對象與高階編程;
I/O
一些實用類庫
二、參訓要求
參加本次課程的學員須具備以下能力:
熟練掌握C++語法,理解C++面向對象和泛型(模板)機制;
三、課程實踐環境
學員自備電腦
實踐平臺 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
Boost 1.47.0+
注:在上課之前,學員須搭建好上述開發實踐環境,如有困難,可以在開課前通過E-Mail或MSN、QQ等方式與講師溝通。
四、課程大綱
本次課程由以下幾個部分構成:
1、Boost類庫概要
Boost的發展
Boost與C++0x(現在的C++2011標準)
Boost類庫組織
Boost類庫的適用范圍
2、容器與數據結構
array:STL風格的定長數組
unordered:基于hash_table的關聯容器,hash_map、hash_set、multi_hash_map、multi_hash_set
bimap:雙向map
mutli_array:多維數組
pointer container:指針容器
property_tree:適合用于讀/寫配置文件的容器
更多實用數據結構簡介
3、字符串算法與文字處理
lexical_cast:類型轉換的類模板
string_algos:字符串算法庫,如查找、匹配、替換等操作
tokenizer:強大的字符串分割工具
regex:強大而易用的正則表達式庫,支持perl、sed、awk等正則表達式語法
4、函數對象與高階編程
回顧std::bind1st()、std::bind2nd()、std::mem_fun()、std::ptr_fun()等適配器
bind和mem_fn:C++標準庫的binder增強版ref:對象引用的包裝器
Function:函數概念的泛化,函數對象的包裝器,可以實現函數的延遲調用和回調
lambda:匿名函數對象,可以很大程度上減少顯式定義函數和函數對象的需求
signal2:線程安全的Signal-Slot機制 (Publishers → Signals/Subscribers → Slots),即Observer模式的實現;
5、內存管理
smart pointers:boost智能指針,scoped_ptr、shared_ptr
pool:內存池
6、I/O
serializtion:序列化,將C++對象的序列化和反序列化,支持的格式有文本格式、xml格式、以及可移植的二進制格式
format:C printf格式的輸入/輸出格式化操作,擁有更好的類型安全和容錯能
iostreams:C++標準庫iostream的補充
7、實用類庫
date_time:日期時間庫
system:操作系統支持
filesystem:可移植的文件系統訪問、操作
program_options:應用程序命令行參數、選項設置以及獲取實用工具
timer:定時器
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
?
Day1
1 - Boost類庫概要
2 - 容器與數據結構
3 - 字符串算法與文字處理
4 - 函數對象與高階編程
Day2
5 - 內存管理
6 - I/O
7 - 實用類庫
Boost高性能網絡編程
?一、課程目標
本次課程圍繞高性能網絡編程這一主題,從眾多的Boost類庫中挑選出Boost.Asio、Boost.Thread以及其它配套的實用庫,作為主要學習的內容,通過本次課程的學習,學員將具
備以下能力:
掌握智能指針、高階函數對象、對象序列化/反序列化等類庫的使用;
理解現代操作系統線程模型、并發以及同步機制;
熟練使用Boost.Thread線程管理和同步機制接口開發并發應用;
深刻理解現代操作系統中事件多路分離和分派機制如select、epoll等、了解異步I/O以及完成事件的分派;
熟練使用Boost.Asio構建穩定、高效和靈活的網絡應用。
二、參訓要求
參加本次課程的學員須具備以下能力:
熟練掌握C++語法,理解C++面向對象和泛型(模板)機制;
了解TCP/IP協議,有網絡編程概念。
三、課程實踐環境
學員自備電腦
實踐平臺 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、viBoost 1.47.0+
注:在上課之前,學員須搭建好上述開發實踐環境,如有困難,可以在開課前通過E-Mail或MSN、QQ等方式與講師溝通。
四、課程大綱
本次課程由以下幾個部分構成:
1、Boost.Serialization - 序列化
基本類型和自定義類型的序列化;
數組、指針和智能指針的序列化;
STL容器、std::string的序列化;
識別類的版本;
XML格式的archive;
二進制格式的archive。
2、Boost.Smart_Ptr - 智能指針
回顧std::auto_ptr<>;
無Copyable 語義的scoped_ptr<>;
shared_ptr<>;
weak_ptr<>;
enable_shared_from_this<>;
3、Boost.Bind and Boost.Function- 函數對象相關
什么是函數對象?
回顧std::bind1st()、std::bind2nd()、std::mem_fun()、std::ptr_fun()等適配器;
Boost bind();
Boost Function;
Boost ref()。
4、Boost.Signals2 - 實現回調機制
Boost Signal2:線程安全的Signal-Slot機制 (Publishers → Signals/Subscribers → Slots),即Observer模式的實現;
簡單的回調;
多個Slot回調;
管理Connections;
一些示例。
5、一些實用類庫
Boost.Property_Tree;
Boost.Format;
6、Boost.Thread - 多線程
線程與進程之區別;
用戶線程與內核線程;
不同操作系統中的線程模型;
線程管理:線程創建、中斷、分離/連接等;
同步機制:Mutex、Lock、Condition_variable、TSS等。
7、Boost.Asio - 網絡編程
Boost.Asio庫,通過對各類操作系統原生的socket API以及事件多路分離、異步I/O API的封裝,構成了一個性能優秀、可移植性高、便于編程的網絡編程框架,使復雜的網絡編程任務變得簡單、安全、并且高效。
Asio相關概念:同步I/O和異步I/O、Proactor模式、Asio和線程;
?
Linux 下 I/O事件多路分離機制:select、epoll;
TCP同步I/O Server/Client編程示例;
UDP同步I/O Server/Client編程示例;
TCP異步I/O Server/Client編程示例;
UDP異步I/O Server/Client編程示例;
Timer - 定時器;
Asio核心接口介紹。
8、高性能網絡編程討論
考究高性能網絡編程中應該遵循的原則,討論并發、同步、事件多路分離等機制的適用場合。
網絡應用的瓶頸在何處?
事件多路分離 vs 一連接一線程 (Event demultiplexing vs One thread per connection);
同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O);
如何適當地使用多線程?
什么時候需要多個 事件多路分離線程?
9、應用層協議定義與實現
為什么要自定義應用層協議?
定義應用層協議 (以XMMEP協議為例);
用C++實現自定義的協議 (以XMMEP協議為例)。
注:XMMEP為X-Messenger Message Exchanging Protocol。
五、時間安排
課程時間:3天,以每天6小時計,具體安排如下:
Day1
1 - Boost.Serialization - 序列化
2 - Boost.Smart_Ptr - 智能指針
3 - Boost.Bind and Boost.Function- 函數對象相關
4 - Boost.Signals2 - 實現回調機制
5 - 一些實用類庫
Day2
6 - Boost.Thread - 多線程
7 - Boost.Asio - 網絡編程1
Day3
7 - Boost.Asio - 網絡編程2
8 - 高性能網絡編程討論
9 - 應用層協議定義與實現
課程回顧與總結
Module06 - C++ ACE
ACE是一個被廣泛使用、設計優雅、高性能的C++通信框架(不僅僅是通信框架),其設計及實現被眾多開源框架所借鑒。是構建穩定、高性能、高吞吐量、跨平臺的服務器端程序的優秀框架。本模塊的課程包含以下幾個方面:?
ACE基礎網絡I/O相關對象
詳細介紹ACE_SOCK、ACE_SOCK_Acceptor、ACE_SOCK_Connector、ACE_INET_Addr等class的使用。Reactor框架
ACE Reactor框架簡化事件驅動程序的開發,而事件驅動是很多網絡化應用的基本特征,這些應用常見的事件源包括I/O事件、Posix信號或 Windows句柄激發以及定時器到期等。
本單元介紹ACE_Event_Handler、Timer、ACE_Reactor等類的使用,并使用該框架構建一個簡易的多人聊天室應用。Task框架
ACE Task框架提供了強大而可擴展的面向對象并發能力,如在基于對象的上下文(context)中派生線程,以及在執行不同線程中的對象之間傳遞消息和對消息進行排隊。Acceptor-Connector框架
ACE Acceptor-Connector框架實現了Acceptor-Connector模式,這種模式通過解除:1,網絡化應用中相互協作的對等服務的連接和初始化所需的活動、2,以及它們一旦連接和初始化后所執行的處理的耦合,增強了軟件復用和可擴展性。Proactor框架
Proactor框架引入異步I/O機制,既保留了Reactor框架的事件多路分離,避免多線程的開銷,同時還緩和了反應式的同步I/O的瓶頸效應。
ACE高性能網絡編程
一、課程目標
本次課程針對使用ACE工具包進行高性能網絡應用開發,通過本次課程的學習,學員將具備以下能力:
了解ACE的架構和組件;
理解現代操作系統線程模型、并發以及同步機制;
熟練使用ACE線程管理和同步機制接口開發并發應用;
熟練使用ACE基本的IPC SAP接口,如SOCK_Stream、SOCK_Dgram等;
深刻理解現代操作系統中事件多路分離和分派機制如select、epoll等、了解異步I/O以及完成事件的分派;
熟練使用ACE Reactor組件、Acceptor-Connector組件、Proactor組件等構建穩定、高效和靈活的網絡應用。
二、參訓要求
參加本次課程的學員須具備以下能力:
熟練掌握C++語法,理解C++面向對象和泛型(模板)機制;
了解TCP/IP協議,有網絡編程概念。
三、課程實踐環境
學員自備電腦
實踐平臺 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
ACE 6.0.0+
四、課程大綱
本次課程由以下幾個部分構成:
1、 ACE簡介
什么是ACE?
ACE的使用范圍;
ACE工具包的架構層次;
ACE的組件簡介。
2、ACE基礎的網絡I/O對象
詳細介紹ACE_SOCK、ACE_SOCK_Acceptor、ACE_SOCK_Connector、ACE_INET_Addr等class的使用。
ACE Socket基類:ACE_SOCK;
TCP主動連接對象:ACE_SOCK_Connector;
基于TCP、面向連接的Socket:ACE_SOCK_Stream;
TCP被動連接對象:ACE_SOCK_Acceptor;
基于UDP、無連接的Socket:ACE_SOCK_Dgram (Unicast)、ACE_SOCK_Dgram_Mcast (Multicast)、ACE_SOCK_Dgram_Bcast (Broadcast)。
3、ACE并發編程:線程與同步
線程與進程之區別;
用戶線程與內核線程;
不同操作系統中的線程模型;
ACE線程管理:Thread_Manager;
ACE線程同步:ACE_Guard、ACE_Thread_Mutex等;
ACE Task框架:Message_Block、Message_Queue、ACE_Task。
4、ACE Reactor框架
ACE Reactor框架簡化事件驅動程序的開發,而事件驅動是很多網絡化應用的基本特征,這些應用常見的事件源包括I/O事件、Posix信號或 Windows句柄激發以及定時器到期等。
關于ACE Reactor框架;
關于事件多路分離和分派 (Event demultiplexing and dispatching );
Linux下 I/O事件多路分離機制:select、epoll;
事件處理器 ACE_Event_Handler:
I/O事件(輸入、輸出)、信號、超時事件、異常事件的捕獲和處理;
ACE_Timer_Queue和ACE_Time_Value:
定時器的應用;
ACE_Reactor:ACE的反應器為ACE Reactor框架的核心,負責事件的檢測、多路分離和事件處理器的分派;
例程:基于ACE Reactor框架實現一個多人聊天室。
5、ACE Acceptor-Connector框架
ACE Acceptor-Connector框架實現了Acceptor-Connector模式,這種模式通過解除:1,網絡化應用中相互協作的對等服務的連接和初始化所需的活動、2,以及它們一旦連接和初始化后所執行的處理的耦合,增強了軟件復用和可擴展性。
集成了Message_Queue的ACE_Event_handler:ACE_Svc_Handler;
接受器:ACE_Acceptor;
連接器:ACE_Connector;
例程:基于Acceptor-Connector框架實現一個轉發服務器。
6、ACE Proactor框架
Proactor框架引入異步I/O機制,既保留了Reactor框架的事件多路分離,避免多線程的開銷,同時還緩和了反應式的同步I/O的瓶頸效應。
關于Proactor模式和Proactor框架;
關于異步I/O;
異步I/O工廠類:
ACE_Asynch_Read_Stream和ACE_Asynch_Write_stream;
ACE_Handler;
前攝式Acceptor-Connector;
前攝器:ACE_Proactor;
例程:基于Proactor框架重新實現多人聊天室。
7、ACE實用工具
ACE日志實用工具:ACE_Log_Msg;
讀寫配置文件:ACE_Configuration_Heap;
Singleton模式 (單例模式) 的ACE實現:ACE_Singleton類模板。
8、高性能網絡編程討論
考究高性能網絡編程中應該遵循的原則,討論并發、同步、事件多路分離等機制的適用場合。
網絡應用的瓶頸在何處?
事件多路分離 vs 一連接一線程 (Event demultiplexing vs One thread per connection);
同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O);
如何適當地使用多線程?
什么時候需要多個 事件多路分離線程?
9、應用層協議定義與實現
?
為什么要自定義應用層協議?
定義應用層協議 (以XMMEP協議為例);
用C++實現自定義的協議 (以XMMEP協議為例)。
注:XMMEP為X-Messenger Message Exchanging Protocol。
五、時間安排
課程時間:3天,以每天6小時計,具體安排如下:
Day1
1 - ACE簡介
2 - ACE基礎的網絡I/O對象
3 - ACE并發編程
Day2
?4 - ACE Reactor框架
?5 - ACE Acceptor-Connector框架
?
Day3
6 - ACE Proactor框架
7 - ACE實用工具
8 - 高性能網絡編程討論
9 - 應用層協議定義與實現
課程回顧與總結
Module07 - 數據庫開發
數據庫作為服務器端應用數據持久化的最重要的部件,在服務器端應用開發中占有非常重要的地位。本模塊主要針對Oracle 10g和MySQL 5.1兩種關系型數據庫管理系統。本模塊包含以下內容:
SQL語言
詳細介紹DML、DDL語句的語法和使用。Oracle PL/SQL
全面介紹Oracle PL/SQL語法,以及使用PL/SQL編寫存儲過程、函數、觸發器。MySQL存儲過程
編寫MySQL存儲過程、函數、觸發器。C++ OTL(OTL 是 Oracle,Odbc and DB2-CLI Template Library 的縮寫,是一個C++編譯中操控關系數據庫的模板庫,它目前幾乎支持所有的當前各種主流數據庫)
OTL:Oracle、ODBC and DB2-CLI Template Library。通過OTL,可以方便、高效的與各類主流的關系型數據庫如DB2、Oracle、Infomix、Sybase、MySQL等通信。例如Oracle,MS SQL Server,Sybase,Informix,MySQL,DB2,Interbase / Firebird,PostgreSQL,SQLite,SAP/DB,TimesTen,MS ACCESS等等。OTL中直接操作Oracle主要是通過Oracle提供的OCI接口進行,進行操作DB2數據庫則是通過CLI接口來進行,至于MS 的數據庫和其它一些數據庫,則OTL只提供了ODBC來操作的方式。當然Oracle和DB2也可以由OTL間接使用ODBC的方式來進行操縱。在MS Windows and Unix 平臺下,OTL目前支持的數據庫版本主要有:Oracle 7 (直接使用 OCI7),Oracle 8 (直接使用 OCI8),Oracle 8i (直接使用OCI8i),Oracle 9i (直接使用OCI9i),Oracle 10g (直接使用OCI10g),DB2 (直接使用DB2 CLI),ODBC 3.x,ODBC 2.5。ODBC:開放數據庫互連(Open Database Connectivity,ODBC)
Module08 - 項目實戰
課程結束后,學員需基于C++、Boost或ACE實現以下2個項目:
項目1:X-Messenger Servers
IM(即時通信)服務器群,類似于MSN、QQ等IM的服務器??梢曰贐oost.asio或ACE實現。項目2:X-Messenger Client
IM(即時通信)客戶端軟件,類似于MSN、QQ等IM的工具。實現Contacts管理、P2P文件傳輸、P2P一對一文本聊天、群聊等現代IM客戶端功能,可以基于Boost.asio或ACE實現。
C++進階 必讀書籍
(一)語言入門:
《C++ Primer》
最新版本:第三版(第四版國外已上架, 國內一些網上書店也在預訂中)
適合有豐富C經驗,缺乏C++經驗的。不過我個人一直認為此書帶著過于強烈的C語言的痕跡,對于C++的學習未必是 好事。
《The C++ Programming Language》/《C++程序設計語言》
最新版本:第三版特別版
簡稱 TC++PL,有其他語言的豐富經驗的。(也有人簡稱之為“TCPL”,但需與另一本《The C Programmer Language》區分開來)
《Essential C++》
《Accelerated C++》
這兩本薄一些,都是不錯的選擇。《Accelerated C++》本人沒有讀過,從各方面的評價來看,完全值得推薦。以上幾本書都有相應的中文版,而且翻譯的質量都不錯。上面的書未必都需要讀一遍,但無論如何,TC++PL是應該閱讀的。
(二) 進階A:
這個路線側重于語言本身
《Effective C++》
最新版本:第二版(第三版國外已上架,國內一些網上書店也在預訂中)
簡稱EC。C++程序員必讀!很多時候,我們說C++圣經不是指TC++PL,而是這一本。《The Pragmatic Programmer》一書中寫到:“一旦你發現自己要參與C++項目的開發,趕快跑(不要走)到書店去購買Scott Mayer的《Effective C++》,可能還要《More Effective C++》”。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 編程規范》
個人認為此書應為C++程序員必備的案頭書。幾乎Effective系列和Exceptional系 列都在這里得到了總結。最新的模版、異常的業界經驗都在這里的到了體現??赡艿奈ㄒ蝗毕菥褪菍σ粋€新手而言,關于“為什么這么做”的問題,解釋的不夠。
我 的看法是:如果你不理解其中的條款,記憶,并且照做;如果你理解其中的條款,我猜你一定會同意書中的觀點。我認為這本書中的內容至少在2009年以前都不 會過時,人們將廣為傳誦它制定的101條戒律。
還不知道他的簡稱,也許“101”會成為一個候選者?
提到《Effective C++》,那么另外三本書一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新書《Exceptional C++ Style》也是值得一看的好書。
上 述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。并且,在將來反復閱讀這幾本書。
(三)進階B:
這 個路線側重于程序庫。
《The C++ Standard Library》/《C++標準程序庫—自修教程與參考手冊》
聽說過STL嗎?這本書會教你最基本 的,也是最重要的STL的使用。這本書,應該是必讀的。《Effective STL》
會使用STL還不夠,還必須知道什么時候選擇什么STL組件,這是STL使用的必讀書。
《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型編程與STL》。
這本書理論性較強,但是真的很嚴謹,而且并不是非常難懂。理解其 中對于Concept的解釋,將是非常重要的。
《C++ STL》
這不是講述使用程序庫的,而是講述程序庫實現原理的。腸胃不好的,需要慢慢吸收。
這個路線的書,仍然是建議按順序閱讀。
進階A、進階B兩個路線應該是可以并行的。
其他進階參考書
提 出這些參考書,只是避免爭議,也為開闊視野,筆者并不曾完全讀過所有的。
《Thinking in C++》/《C++編程思想》
這本書及其中文版傳言好壞都有,沒有認真看過,不做評價,如果確有興趣,不妨嘗試 一下該書。
以下幾本書基本上涉及的都是語言本身,大體上可以按照以下的順序閱讀。
《C++必知必會》
如果早一年,這本書將是重量級的,然而它被101和《Exceptional C++ Style》蓋過一頭。
《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序設計陷阱》
這又是一本我未曾讀過,而且廣受好評的書。
《STL 源碼剖析》
這本書我剛到手,就被人"借"走,以至于到現在也沒有看過。看過這本書的朋友,可以給一個合適的評價。
高級:
《The Design and Evolution of C++》/《C++語方的設計和演化》
簡稱D&E,內 容并不艱深,Bjarne的書,僅此,就值得一讀。
前段時間,互動網曾8塊一本(人民幣)賤賣此書,現在好像沒了。
《Inside The C++ Object Model》/《深度探索C++對象模型》
C程序員讀后一定會覺得C++原來并不神秘。
《C++ Template》
在閱讀STL、Boost或者Loki的源代碼之前,請仔細閱讀本書,它可以減輕一些閱讀的煩惱。這本書是討 論C++模版的權威。
《Modern C++ Design Generic Programming and Design Patterns Applied》/《C++設計新思維——泛型編程與設計模式之應用》
簡稱MCD。在閱讀MCD之前,建議先閱讀一下《C++ Template》。
《對象揭秘:Java、Eiffel和C++》
你對C++不滿嗎?這本書可以部分地幫你完成抱怨的目標。也許它還可以讓你不迷信C++。
最后,一份C++標準文檔也是應該加以咀嚼的。?
還有一些書籍,并不能簡單的歸于C++,也難以在純粹的書本學習中加以掌握?!禗esign Patterns》/《設計模式》一書就歸于此類。
所有上述的書籍,要么談論C++語言本身,要么談論STL的,要么兼而有之(當然嚴格講STL也是C++語言非常重要的一部分)。偶爾,某些書中條 目也會涉及實際工程。這些書并不是C++軟件開發的全部,但是他們很重要。閱讀這些書,未必需要化費太多的精力,有時候是會困難,但也有時候會很快速。
最 后,編程語言并非計算機科學技術的全部,尤其對于在校的學生來說,打好基礎、開闊視野都是非常重要的。