一個程式設計師的Java和C++學習之路(整理)
轉自http://blog.csdn.net/xugangwen/article/details/44811783
經典程式設計書籍大全:
http://blog.jobbole.com/106093/
https://github.com/jobbole/awesome-programming-books
一直有這麼個想法,列一下我個人認為在學習和使用Java過程中可以推薦一讀的書籍,給初學者或者想深入的朋友一些建議,幫助成長。推薦的的都是我自己讀過,也會推薦一些朋友讀過並且口碑不錯的書籍。
1、《Thinking in java》(閱讀2遍),入門第一位是建立正確的概念。
2、《Core Java》,我沒系統讀過,這本書更貼近實踐,更多API的介紹,同樣,更新也更頻繁。(可以選重點章節讀一下)
1、《Effective Java》(閱讀1遍),在熟悉語法、API之後,你需要知道最佳實踐和陷阱,沒有比這本更好的。
2、《深入Java虛擬機器》(閱讀2遍),翻譯一般,但不可不讀,最好結合最新的JVM規範來讀。
3、《Java Puzzlers》,通過謎題介紹一些你可能沒有注意到的邊角料,作為趣味讀物也不錯
(1)《Java Concurrency in Practic》(閱讀1遍),併發領域必讀經典。
(2)《Java併發程式設計:設計原則與模式》,同樣是Doug lea的作品。
(3)《java threads》,入門讀物。
(4)《Programming Concurrency on the JVM:Mastering Synchronization, STM, and Actors》
(5)《多處理器程式設計的藝術》(閱讀1遍)
Collection Framworks/STL,資料結構和演算法:《演算法概論》 《演算法導論》 《計算機程式設計藝術》
《Java Generics and Collections》
(1) O’Reilly的《Java nio》,很多人都推薦,我個人覺的一般,基本上只是個API更詳細的說明文件,O’reilly的java系列很多都是這樣。
(2)我更推薦這本《Fundamental networking in java》,由淺入深教你怎麼做java網路程式設計,並且介紹很多背景知識,甚至介紹了各種最佳實踐、網路程式設計模型以及Java socket在不同平臺之間的差異等等。
(3) Netty
(1) Servlet規範
(2) JSP規範
(3) JavaBean規範
(4) JMS/Java Naming and Directory Interface(JNDI)/JDBC/Java Transaction API(JTA)
(5) Struct2 + Spring + ibatis/hibernate/jdbc/
1、《分析模式——可複用物件模型》
2、《面向模式的軟體體系結構》,國內貌似翻譯了5卷,絕對經典,可惜翻譯較差。
3、《企業應用架構模式》(2遍)
4、《分散式架構:選一本書》
1、《設計模式》,GOF的經典。
2、《設計模式精解》(1遍),應該有最新版,個人認為更適合入門。
3、《Head first設計模式》,更輕鬆的入門讀物。
4、《Java與模式》
1、《程式碼大全》(1遍)
1、《重構——改善既有程式碼設計》(1遍),想寫好程式碼必讀。
2、《重構與模式》
1、《敏捷軟體開發》
2、《測試驅動開發》(1遍),你不一定要TDD,但是你一定要學會做單元測試。
3、《Agile Java》,也可以作為java入門讀物。
4、《快速軟體開發》
5、《物件導向分析與設計》,OO設計必讀。
6、《Unix程式設計藝術》(1遍),開啟你的眼界。
1、 《深入理解計算機系統》(0.8遍)
2、 《演算法導論》閱讀(0.9遍)基本部分閱讀,其它參考閱讀
3、 OS部分:《深入Linux核心架構》《Linux核心設計與實現》《Linux核心分析與作業系統設計》 《Linux/UNIX系統程式設計手冊》
4、 《TCP/IP詳解》(0.8遍)(三卷)、《UNlX環境高階程式設計》《unix網路程式設計》(兩卷),學習網路程式設計必讀書。
5、 《C++網路程式設計》上下兩卷,介紹ACE的,但是其中對各種模式運用的介紹非常值的一讀。
7、 《編譯原理》龍書,最新版用java解釋,我沒有讀完,順便提下。
6、 《計算機程式的構造與解釋》,必讀
8、 《資料庫概念》
9、 《Joel說軟體》程式設計文化
10、《人月神話》、《人件》(閱讀1遍)
11、《卓有成效的程式設計師》(閱讀1遍),給我很大啟發的一本書。
12、《程式設計師修煉之道》(閱讀1遍)
參考:
我的Java學習推薦書目 http://jm-blog.aliapp.com/?p=522
Java開發實用權威書籍集合 http://www.iteye.com/news/21791/
學習JVM的References http://jm-blog.aliapp.com/?p=525
哪本書適合推薦給Java初學者? http://www.zhihu.com/question/19848946?rf=19752221
最近想寫點有用的東西,發現自己最拿手的java用起來真是笨手笨腳的。
碰到好多實現起來巨繁瑣的問題,比如操作底層庫,和OS framework互動,做個使用者體驗好點的本地圖形程式等等,這些都是java的軟肋。
其實,我一直對底層頗感興趣,工作中也只能接觸一下JVM,但VM畢竟是VM,始終與底層失之交臂。
Linux、Mysql、Memcached、Boost、Apache、JVM、ACE... ... 很多基礎服務都是用C/C++實現的,要像瞭解他們原理、能看懂程式碼、可以修改bug、增加新功能模組
開發嵌入式、中小型專案C/C++專案,維護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++程式碼看起來如同行雲流水,必讀。
OS: Linux kernel LVS、Linux應用程式
DB: Mysql、PostgreSQL
Complier: JVM、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
... ...
部分轉載請註明原文連結:http://kenwublog.com/a-java-programmer-learning-cpp
推薦的一些C\C++書籍:http://blog.jobbole.com/61308/
自學者可以參考的學習順序(LinuxC++現場全科班培訓的順序)
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++全科班課程由以下模組組成:
由於本系列課程基於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系統呼叫和類庫的區別;
熟悉檔案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 - 程式間通訊
課程回顧與總結
六、課程資源
不同系統平臺下的開發工具、開發環境各有不同。該模組課程關注的是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下的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 - 應用層協議定義與實現
課程回顧與總結
六、課程資源
一、課程目標
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機制和網路服務端應用
深入講解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指標
const成員函式、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++作為一門多風格的程式設計語言,除了強大的物件導向支援外,泛型程式設計(模板機制)的支援更是極大程度上提高了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介面卡
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是由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.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 、vi
Boost 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 - 應用層協議定義與實現
課程回顧與總結
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基本的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 - 應用層協議定義與實現
課程回顧與總結
資料庫作為伺服器端應用資料持久化的最重要的部件,在伺服器端應用開發中佔有非常重要的地位。本模組主要針對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)
課程結束後,學員需基於C++、Boost或ACE實現以下2個專案:
專案1:X-Messenger Servers
IM(即時通訊)伺服器群,類似於MSN、QQ等IM的伺服器。可以基於Boost.asio或ACE實現。
專案2:X-Messenger Client
IM(即時通訊)客戶端軟體,類似於MSN、QQ等IM的工具。實現Contacts管理、P2P檔案傳輸、P2P一對一文字聊天、群聊等現代IM客戶端功能,可以基於Boost.asio或ACE實現。
其他專案,可由學員自行定義。
http://www.xuanyuan-soft.cn/zh/personal/projects
軒轅高階IT培訓中心的所有專案均圍繞Linux、C++、高效能伺服器端應用而設定,主要涉及C++、網路、多執行緒、資料庫等方面。以C++ STL、Boost、ACE等優秀的類庫和框架來實現專案所定義的功能。
與普通的教學專案不同,軒轅高階IT培訓中心的所有最終專案均以企業應用的強度來要求和架構,不僅僅停留在Demo專案的層次,只有這樣的要求才能考驗學員對專案開發的整個過程的理解和對企業級專案的確切認識,從而保證在實現過程中能學習到真實企業專案所要求的安全性、穩定性 、高效能以及程式碼的規範性和大專案的分工合作。
可獲取的課程資源見:教學資源。
企業高階課程
C++高階程式設計
4 C++物件導向程式設計高階培訓 檢視公開課計劃
3 C++泛型程式設計與STL高階培訓 檢視公開課計劃
1 Boost核心類庫精講 檢視公開課計劃
2 ACE核心框架精講 檢視公開課計劃
Linux系統程式設計
1 Linux環境高階程式設計 檢視公開課計劃
2 Linux高階I/O機制 檢視公開課計劃
高效能網路程式設計
1 ACE高效能網路程式設計 檢視公開課計劃
2 Boost高效能網路程式設計 檢視公開課計劃
3 Linux高效能網路程式設計 檢視公開課計劃
4 高效能伺服器程式設計 檢視公開課計劃
多核與並行程式設計
1 OpenMP多核程式設計高階培訓 檢視公開課計劃
2 POSIX Threads程式設計高階培訓 檢視公開課計劃
3 ACE併發程式設計精講 檢視公開課計劃
4 C++2011多執行緒程式設計高階培訓 檢視公開課計劃
《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是應該閱讀的。
這個路線側重於語言本身
《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》也是值得一看的好書。
上 述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。並且,在將來反覆閱讀這幾本書。
這 個路線側重於程式庫。
《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++,也難以在純粹的書本學習中加以掌握。 《Design Patterns》/《設計模式》一書就歸於此類。
所有上述的書籍,要麼談論C++語言本身,要麼談論STL的,要麼兼而有之(當然嚴格講STL也是C++語言非常重要的一部分)。偶爾,某些書中條 目也會涉及實際工程。這些書並不是C++軟體開發的全部,但是他們很重要。閱讀這些書,未必需要化費太多的精力,有時候是會困難,但也有時候會很快速。
最 後,程式語言並非電腦科學技術的全部,尤其對於在校的學生來說,打好基礎、開闊視野都是非常重要的。
**************************************************************
《Multi-Paradigm Design For C++ 》,這本書有些陳舊,也許在出版的年代還是很優秀的,現在,這樣的書已經完全可以被推薦書目覆蓋了。最重要的是,書中的某些觀點今天已經不合時宜了。
《C++程式設計慣用法》這是一本如雷貫耳的書,可惜,這本書是1992年出版的,書中的很多內容,已經被後來的作品覆蓋,而且講述得更全面嚴謹。另 外,該書中對於C++的認識,在今天看來,已經過時甚至成為錯誤的觀點。因此,只適合已經通曉C++的人蔘考。
《深入淺出MFC》
這是一本講述如何使用MFC庫的書。今天,MFC日漸式微,而且,MFC所使用的C++技術也是一直為人所詬病的。書確實是不錯的,但是,學習C++並不 一定要學習MFC。因此,對於學習C++而言,這本書不是必須。
《The Art Of C++》
老實說,我對這本書的評價一般般。而且,“Art”名不副實,有翻譯成《C++實戰》,到是更確切一些。
《大規模C++程式設計》
這是一本重要的書,特別是對於缺乏大規模C++軟體開發的人來說,尤其如此。但是,這本書的中文版翻譯太差勁了。這是一本關於工程的書,因此,並不是 C++學習必備的。另外,書中的觀點略嫌保守,對於最新的C++技術運用不多。
《Imperfect C++》
這是一本基礎於實踐結合的書,確實很優秀,而且所講內容並不很難。但是從學習C++的角度而言,理解這本書需要許多的實踐經驗。推不推薦,屬於兩難的一本 書。
《C++ Primer》和《TC++PL》都不適合初學者
這個書目的目標是:幫助一個人在C++領域儘快地登堂入室,幫助一個人成為合格的C++程式設計師。
這個書目不適合下列目標:應付各類計算機考試,應付面試,快速瞭解C++。
《C語言參考手冊(原書第5版)》 ---- 作為參考書,沒錯的
引用China-pub上的介紹:
本書是經典C語言參考手冊的最新版,在強調正確性、可移植性和可維護性的基礎上,對C語言的具體細節、執行庫以及C語言程式設計風格做了完整、準確的描述。本 書涵蓋了傳統C語言、C89、C95、C99等所有C語言版本的實現,同時討論了C++與C語言相容的部分。全書自上而下介紹了C語言的詞法結構、預處理 器、宣告、型別表示式、語句、函式和執行庫,是所有C語言程式設計人員必備的參考書。 這本暢銷的權威參考手冊對C語言的基本概念和執行庫提供了完整的描述,同時還強調了以正確性、可移植性和可維護性為根本出發點的良好的C語言程式設計風格,被 國外眾多高校廣泛採用為教材或教學參考書,本書描述了C語言各個版本的所有細節,是C語言程式設計人員和實現者惟一必備的參考手冊。最新的第5版經過修訂和更 新,融入了最新C語言標準ISO IEC 9899:1999的完整描述,包括強大的語言擴充套件和新的函式庫。 Web站點www.CAReferenceManual.com中包 含了本書較長示例的原始碼、對C語言爭論點的深入討論、最新ISO IEC語言標準修訂以及其他重要C語言資源的連結。本書作為參考手冊,提供了非常詳細、清晰的c語言描述:
●標準C語言(1999):是標準C語言的新版本,支援複數型別與布林型別、變長陣列、精確浮點 數程式設計和具有可移植性與國際化的新的庫函式
●標準以C語言(1989):當前大多數程式設計人員使用的C語言版本
●傳統C語言:1990年之前常用的版本,還有幾百萬行程式碼正在使用
●C++相容C語言:可以同時在C語言與C++中使用的程式碼
●所有C語言版本的完整執行庫
《C語言的科學與藝術》 --- 非常好的一本書,現在也有中文版
引用China-pub上的介紹:
本書是電腦科學的經典教材,介紹了電腦科學的基礎知識和程式設計的專門知識。本書以介紹ANSI C為主線,不僅涵蓋C語言的基本知識,而且介紹了軟體工程技術以及如何應用良好的程式設計風格進行開發等內容。本書採用了庫函式的方法,強調抽象的原則, 詳細闡述了庫和模組化開發。此外,本書還利用大量例項講述解決問題的全過程,對開發過程中常見的錯誤也給出瞭解決和避免的方法。本書既可作為高等院校計算 機科學入門課程及C語言入門課程的教材,也是C語言開發人員的極佳參考書。
《C語言介面與實現:建立可重用軟體的技術》
引用China-pub上的介紹:
本書概念清晰、內容新穎、例項詳盡,是一本有關設計、實現和有效使用C語言庫函式,掌握建立可重用C語言軟體模組技術的參考指南。本書倡導基於介面的C語 言設計理念及其實現技術,深入詳細地描述了24個C語言介面及其實現。
本書通過敘述如何用一種與語言無關的方法將介面的設計與實現獨立開來,從而形成一種基於介面的設計途徑來建立可重用的API,本書是一本針對C語言程式設計師 的不可多得的好書,也是值得所有希望掌握可重用軟體模組技術的讀者閱讀的參考書籍。關於如何設計、實現和有效使用庫函式的指南少之又少(如果說還有的 話)。這本力作填補了這個空白。它可以作為下一代軟體的工具書.所有的C語言程式設計師都應該閱讀。 ——W.Richard Stevens
“我向每位專業C語言程式設計師推薦這本書。C語言程式設計師們忽視書中所描述的各種技術已經太長時間了。” ——Norman Ramsey,貝爾實驗室研究員
《C程式設計語言(第2版·新版)》
引用China-pub上的介紹:
本書是由C語言的設計者Brian W. Kernighan和Dennis M. Ritchie編寫的一部介紹標準C語言及其程式設計方法的權威性經典著作。全面、系統地講述了C語言的各個特性及程式設計的基本方法,包括基本概念、類 型和表示式、控制流、函式與程式結構、指標與陣列、結構、輸入與輸出、UNIX系統介面、標準庫等內容。
本書的講述深入淺出,配合典型例證,通俗易懂,實用性強,適合作為大專院校計算機專業或非計算機專業的C語言教材,也可以作為從事計算機相關軟硬體開 發的技術人員的參考書。 在計算機發展的歷史上,沒有哪一種程式設計語言像C語言這樣應用如此廣泛。
本書原著 即為C語言的設計者之一Dennis M.Ritchie和著名的電腦科學家Brian W.Kernighan合著的 一本介紹C語言的權威經典著作。我們現在見到的大量論述C語言程式設計的教材和專著均以 此書為藍本。原著第1版中介紹的C語言成為後來廣泛使用的C語言版本—— 標準C的基礎。人們熟知的“hello, World”程式就是由本書首次引入的,現在,這一程式已經成為所有程式設計語言入門的第一課。原著第2版根據1987年制定的ANSIC標準做了適當的 修訂.引入了最新的語言形式,並增加了新的示例,通過簡潔的描述、典型的示例,作者全面、系統、準確地講述了C語言的各 個特性以及程式設計的基本方法。對於計算機從業人員來說,本書是一本必讀的程式設計語言方面的參考書。
相關文章
- 一個JAVA程式設計師成長之路分享Java程式設計師
- 一、(基礎知識)一個前端程式設計師的java小白之路前端程式設計師Java
- 黑馬程式設計師前端學習之路程式設計師前端
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- Java程式設計師的成長之路Java程式設計師
- Java程式設計師需要學習的技能Java程式設計師
- 一枚iOS程式設計師學習JavaWeb之路(三)-EhCacheiOS程式設計師JavaWeb
- 一個十年JAVA老程式設計師成長之路分享Java程式設計師
- 2018年Java程式設計師學習大資料開發最佳之路!Java程式設計師大資料
- 一個程式設計師的北漂之路——充滿多少淚和水程式設計師
- Java程式設計師學習的6個技巧, 你get到了嗎?Java程式設計師
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- Java入門基礎學習,成為一個Java程式設計師的必備知識Java程式設計師
- Java網路程式設計基礎學習與整理Java程式設計
- 設計師學習HTML/CSS之路-07HTMLCSS
- 一枚程式設計師的跑步之路程式設計師
- 我的程式設計師之路程式設計師
- 好程式設計師Java學習路線Java bean是個什麼概念程式設計師JavaBean
- Java程式設計師需要學習哪些知識?Java程式設計師
- Android程式設計師的Java後臺學習建議Android程式設計師Java
- 好程式設計師Java教程分享如何系統的學習Java程式設計師Java
- 非程式設計師選擇學習C++還是Python?程式設計師C++Python
- 程式設計師生活之路--來自程式設計師爸爸的一封信程式設計師
- 程式設計師的成長秘籍:個人程式設計能力的修煉之路程式設計師
- 帶你真正瞭解Java,Java程式設計師必學知識點整理Java程式設計師
- 新Rust程式設計師需要學習的9個功能Rust程式設計師
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 程式設計師的高產之路程式設計師
- 程式設計師的進階之路程式設計師
- 寫給Java程式設計師學習路線圖Java程式設計師
- 好程式設計師Java學習路線之集程式設計師Java
- 好程式設計師Java學習路線JSP物件程式設計師JavaJS物件
- 好程式設計師Java學習路線分享SpringCloud程式設計師JavaSpringGCCloud
- 好程式設計師Java學習路線之Java中的物件流和序列化程式設計師Java物件
- PHP 程式設計師的堆學習PHP程式設計師
- 寫給Java程式設計師的Java虛擬機器學習指南Java程式設計師虛擬機機器學習
- 學程式設計,Python和Java哪個更好?程式設計PythonJava
- Java程式設計師修煉之路(一)我們為什麼選擇JavaJava程式設計師