一個程序員的Java和C++學習之路(整理)

轉載:http://blog.csdn.net/ajian005/article/details/8003655

Java學習之路

 

一直有這麼個想法,列一下我我的認爲在學習和使用Java過程當中能夠推薦一讀的書籍,給初學者或者想深刻的朋友一些建議,幫助成長。推薦的的都是我本身讀過,也會推薦一些朋友讀過而且口碑不錯的書籍。前端

1、基礎類

 

一、《Thinking in java》(閱讀2遍),入門第一位是創建正確的概念。
二、《Core Java》,我沒系統讀過,這本書更貼近實踐,更多API的介紹,一樣,更新也更頻繁。java

2、進階類

 

一、《Effective Java》(閱讀1遍),在熟悉語法、API以後,你須要知道最佳實踐和陷阱,沒有比這本更好的。
二、《深刻Java虛擬機》(閱讀2遍),翻譯通常,但不可不讀,最好結合最新的JVM規範來讀。
三、《Java Puzzlers》,經過謎題介紹一些你可能沒有注意到的邊角料,做爲趣味讀物也不錯ios

 

3、特定領域

一、併發編程:

 

 

(1)《Java Concurrency in Practic》(閱讀1遍),併發領域必讀經典。
(2)《Java併發編程:設計原則與模式》,一樣是Doug lea的做品。
(3)《java threads》,入門讀物。
(4)《Programming Concurrency on the JVM:Mastering Synchronization, STM, and Actors》c++

 

二、集合編程:

 

 Collection Framworks/STL,數據結構和算法:《算法概論》 《算法導論》 《計算機編程藝術》
《Java Generics and Collections》程序員

 

三、網絡編程:

 

(1) O’Reilly的《Java nio》,不少人都推薦,我我的覺的通常,基本上只是個API更詳細的說明文檔,O’reilly的java系列不少都是這樣。
(2)我更推薦這本《Fundamental networking in java》,由淺入深教你怎麼作java網絡編程,而且介紹不少背景知識,甚至介紹了各類最佳實踐、網絡編程模型以及Java socket在不一樣平臺之間的差別等等。web

四、web編程

 

(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/面試

4、模式與設計

 

1架構模式、

一、《分析模式——可複用對象模型》
二、《面向模式的軟件體系結構》,國內貌似翻譯了5卷,絕對經典,惋惜翻譯較差。
三、《企業應用架構模式》(2遍)
四、《分佈式架構:選一本書》正則表達式

2設計模式

一、《設計模式》,GOF的經典。
二、《設計模式精解》(1遍),應該有最新版,我的認爲更適合入門。
三、《Head first設計模式》,更輕鬆的入門讀物。
四、《Java與模式》算法

3代碼模式/慣例/編碼規範

一、《代碼大全》(1遍)sql

4 重構

一、《重構——改善既有代碼設計》(1遍),想寫好代碼必讀。
二、《重構與模式》

 

5、方法論/軟件工程

 

一、《敏捷軟件開發》
二、《測試驅動開發》(1遍),你不必定要TDD,可是你必定要學會作單元測試。
三、《Agile Java》,也能夠做爲java入門讀物。
四、《快速軟件開發》
五、《面向對象分析與設計》,OO設計必讀。
六、《Unix編程藝術》(1遍),打開你的眼界。

6、Java以外

 

一、 《深刻理解計算機系統》
二、 《算法導論》閱讀(0.4遍)基本部分閱讀,其它參考閱讀
三、  OS部分:《深刻Linux內核架構》《Linux內核設計與實現》《Linux內核分析與操做系統設計》 《Linux/UNIX系統編程手冊》
四、 《TCP/IP詳解》(三卷)、《UNlX環境高級編程》《unix網絡編程》(兩卷),學習網絡編程必讀書。
五、 《C++網絡編程》上下兩卷,介紹ACE的,可是其中對各類模式運用的介紹很是值的一讀。
七、 《編譯原理》龍書,最新版用java解釋,我沒有讀完,順便提下。
六、 《計算機程序的構造與解釋》,必讀
八、 《數據庫概念》
九、 《Joel說軟件》編程文化
十、《人月神話》、《人件》
十一、《卓有成效的程序員》(閱讀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

 

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: 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/

 

自學者能夠參考的學習順序(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環境高級編程

 1、課程目標
本次課程涵蓋Linux系統編程的幾個主要方面,經過本次課程的學習,學員將具有如下能力:
    瞭解Linux系統調用和類庫的區別;
    熟悉文件I/O、文件和目錄、進程管理、進程間通訊(IPC)、信號、時間與定時器的編程。
2、參訓要求
參加本次課程的學員須具有如下能力:
    本次課程使用 C語言 教學,因此學員需擁有較好的C語言基礎;
    能熟練使用經常使用的Linux命令;
    能熟練使用gcc、gdb、熟練撰寫makefile;
    最好熟練使用vi、emacs等文本編輯器其中的一種。
3、課程實踐環境
    學員自備電腦
    操做系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
    編譯器:GCC v4.1+、GDB v7.0+
    可選IDE:Eclipse CDT
4、課程大綱
本次課程由如下幾個部分構成:
一、預備知識
    UNIX歷史和標準
        UNIX; BSD & System V
        GNU project; Linux Kernel
        POSIX, SUSv3, SUSv4
    Linux系統相關概念
        系統調用和庫函數
        錯誤處理
        特性測試宏
        系統數據類型
        系統限制和選項 (sysconf(), pathconf())
        系統參數: /proc文件系統
二、文件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()
三、文件和目錄
    文件屬性
        獲取文件的屬性:stat()
        文件的時間戳
        文件的全部權:chown()
        文件的操做權限:chmod()
    目錄和鏈接文件
        硬鏈接和軟鏈接 (符號鏈接)
        目錄
        迭代目錄樹
        當前工做目錄(CWD)
        路徑名
    監控文件系統的事件:inotify
        inotify API
        inotify事件
        inotify限制
四、進程控制
    進程屬性
        進程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
        獲取或修改進程權限
五、信號 (Signals)
    信號類型和默認動做
    信號處理方式
    信號處理器
    發送信號
    信號集
    阻塞信號(signal mask)
    系統調用的中斷和從新執行
    等待信號
六、時間和定時器(Timers) 
    時間相關的數據類型
    POSIX Clock
    獲取當前時間
    設置當前時間
    C標準庫 時間函數
    Sleep
    定時器(Timers)
        簡單的定時器:alarm()
        interval Timers
        高級定時器
七、進程間通訊 (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)
5、時間安排
課程時間:3天,以天天6小時計,具體安排以下:
    Day1
        1 - 預備知識
        2 - 文件I/O
        3 - 文件與目錄
    Day2
        4 - 進程控制
        5 - 信號
        6 - 定時器
    Day3
        7 - 進程間通訊
        課程回顧與總結
6、課程資源

 

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高性能網絡編程

 1、課程目標
本次課程深刻講解Linux下的socket編程,並以此爲基礎,着重討論如何提升網絡服務端應用的性能,經過本次課程的學習,學員將收穫如下方面的成果:
    熟練使用socket系列函數進行網絡編程;
    深入理解服務端應用的性能要求;
    利用Linux提供的各類機制,有效地解決服務端應用的性能瓶頸。
2、參訓要求
參加本次課程的學員須具有如下能力:
    瞭解TCP/IP協議,有網絡編程概念。
    本次課程使用 C語言 教學,因此學員需擁有較好的C語言基礎;
    能熟練使用經常使用的Linux命令;
    能熟練使用gcc、gdb、熟練撰寫makefile;
    最好熟練使用vi、emacs等文本編輯器其中的一種。
3、課程實踐環境
    學員自備電腦
    操做系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
    編譯器:GCC v4.1+、GDB v7.0+
    可選IDE:Eclipse CDT
4、課程大綱
本次課程由如下幾個部分構成:
一、POSIX Thread - 多線程
    線程管理
        線程建立:pthread_create()
        線程終止:pthread_exit()
        線程鏈接和分離:join and detach
    線程同步機制
        互斥體:mutex
        讀寫鎖:read-write lock
        條件變量:condition variable
    線程屬性控制
    mutex屬性控制
二、Socket 簡介
    Socket地址數據結構:struct sockaddr,struct sockaddr_in
    字節序以及字節序操做:ntohl(), ntohs(), htonl(), htons()
    Internet地址操做:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()
三、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
四、UDP Socket
    recvfrom()和sendto():收發UDP數據報
    UDP Echo Server
    UDP Echo Client
    組播(Multicast)和廣播(Broadcast)
五、Socket Options和 IP Options
    經常使用的Socket Options
    經常使用的IP Options
    Socket選項和IP選項對網絡應用的影響
六、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
七、異步I/O:構建前攝式(Proactive)網絡應用
    相關概念:同步I/O和異步I/O、Proactor模式
    異步I/O 是如何提升I/O 性能的
    異步I/O系列操做
    使用異步I/O的機制構建TCP Server
八、高性能網絡編程討論
    考究高性能網絡編程中應該遵循的原則,討論併發、同步、事件多路分離等機制的適用場合
    網絡應用的瓶頸何在
    事件多路分離 vs 一鏈接一線程 (Event demultiplexing vs One thread per connection)
    同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O)
    如何適當地使用多線程
    何時須要多個 事件多路分離線程
九、應用層協議定義與實現
    爲何要自定義應用層協議
    定義應用層協議 (以XMMEP協議爲例)
    用C++實現自定義的協議 (以XMMEP協議爲例)
注:XMMEP爲X-Messenger Message Exchanging Protocol
5、時間安排
課程時間: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 - 應用層協議定義與實現
        課程回顧與總結
6、課程資源

 

Linux高級I/O機制

 1、課程目標
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機制提升網絡應用的併發響應和性能。
2、參訓要求
    參加本次課程的學員須具有如下能力:
    本次課程使用 C語言 教學,因此學員需擁有較好的C語言基礎;
    能熟練使用經常使用的Linux命令;
    因爲本次課程涉及socket編程,因此學員需有Linux下socket編程的經歷;
    能熟練使用gcc、gdb、熟練撰寫makefile;
    最好熟練使用vi、emacs等文本編輯器其中的一種。
3、課程實踐環境
    學員自備電腦
    操做系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
    編譯器:GCC v4.1+、GDB v7.0+
    可選IDE:Eclipse CDT
4、課程大綱
本次課程由如下幾個部分構成:
一、預備知識
    理解:UNIX下一切皆文件
    I/O的實質和I/O的步驟
二、文件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())
三、散/聚I/O (Scatter/Gather I/O)
    什麼是散/聚 I/O,爲何須要散/聚 I/O
    系統調用:readv(), writev()
四、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)
五、異步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()
六、使用高性能I/O機制提升網絡服務端應用的性能
    爲何傳統的I/O機制會致使服務端應用的性能瓶頸
    使用select()和poll()實現ACE中的Reactor模式
    使用epoll實現ACE中的Reactor模式
    在網絡應用中使用異步I/O機制:模擬ACE中Proactor模式和框架
    實例演示,區別傳統I/O機制和高性能I/O機制對於服務端應用的重要性
5、時間安排
課程時間: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++面向對象編程高級培訓

 1、課程目標
本次課程圍繞C++面向對象編程這一課題,深刻的講解C++ OOP語言機制,以及運用面向對象技術有效架構C++應用。經過本次課程的學習,學員將具有如下能力:
    深入理解C++面嚮對象語言機制;
    面向對象編程的若干法則。
2、參訓要求
參加本次課程的學員須具有如下能力:
    本次課程假定學員有編程經歷,使用C/C++、Java或其它語言實際編寫過代碼;
    能熟練使用Windows或Linux下的C++編譯器(如g++)、調試器(如gdb)。
3、課程實踐環境
    學員自備電腦
    實踐平臺 (如下兩者之一):
        Win32 / Visual Studio 2008 (或更新)
        Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
4、課程大綱
本次課程由如下幾個部分構成:
一、從C到C++
    引用和指針:爲何引用很重要
    const關鍵字:爲何const很重要
    名字空間 (namespace)
二、深刻C++對象
    關於C++對象
        內置類型的對象,如int、double對象
        自定義類型的對象
    對象類型的定義
        關鍵字class和struct
        類成員:成員函數和數據成員
        靜態數據成員
        成員的訪問控制
        對象的size
        關於this指針
        const成員函數、const究竟修飾什麼
        mutable數據成員
        4種特殊成員函數:constructor、destructor、copy constructor、operator=
        對象的構造、初始化列表
        對象的析構
        對象的複製
        什麼狀況下有必要顯式定義4種特殊函數
    C++對象生命週期
三、操做符重載
    關於C++中操做符重載機制
    重要操做符重載
        算術運算:+, -, *, /, %, ++, --, ...
        關係運算:>, <, ==, !=
        下標存取:[ ]
        函數調用:(),函數對象
        類型轉換、單參數構造函數與隱式轉換、阻止隱式轉換 -- explicit關鍵字
    友元與成員
四、面向對象基礎 -- 繼承
    基類與派生類
    再談對象的構造與析構
    虛函數、純虛函數
    派生類的內存佈局、虛函數表
    多態、多態類型、如何體現多態
    虛析構、爲何虛析構很重要
五、關於繼承更多的話題
    多繼承
    虛繼承與虛基類
    對基類的訪問、public / protected / private繼承
    Down cast:static_cast<>和dynamic_cast<>
    運行期類型識別 (RTTI)
六、C++與面向對象設計
    C++語言機制提供了完整的OOP支持
    超越繼承
    OOP若干法則和設計模式
        封裝變化,分離不變與變化
        面向接口編程,而不是針對實現編程
        多用組合、少用繼承
        努力保持交互對象間的鬆耦合
        類設計的開閉原則:類應該對擴展開放、對修改關閉
        依賴抽象,而不是依賴具體類
        最少知識原則
        好萊塢法則 (控制反轉):不要打電話給我,我會找你的
        單一責任原則:一個類應該只有一個引發變化的緣由
5、時間安排
課程時間: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高級培訓:

 1、課程目標

 

C++做爲一門多風格的程序設計語言,除了強大的面向對象支持外,泛型編程(模板機制)的支持更是極大程度上提升了C++的表現能力,如今模板的運用已成爲C++類庫、應用程序中天然且不可分割的一部分,滲透到各個角落。本次課程將深刻、細緻的講解C++模板機制、STL、Boost相關類庫的實現思路、手法以及其表現出的智慧,以企經過本次課程的學習,將這些經驗自如地用到後續的軟件開發中。此次課程關注:
    C++模板機制
    STL和Boost部分類庫的剖析

2、參訓要求

參加本次課程的學員須具有如下能力:
    本次課程假定學員有編程經歷,使用C/C++、Java或其它語言實際編寫過代碼;
    能熟練使用Windows或Linux下的編譯器(如g++)、調試器(如gdb)。

3、課程實踐環境

    學員自備電腦
    實踐平臺 (如下兩者之一):
        Win32 / Visual Studio 2008 (或更新)
        Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi

4、課程大綱

本次課程由如下幾個部分構成:
一、C++ 模板機制
    關於C++模板
    類模板
    函數模板
    模板實例化
    模板參數
    使用模板參數指定策略
    特徵類 (Traits classes)
    模板特化
        徹底特化
        部分特化
    類模板的派生
    Curiously Recurring Template Pattern (CRTP)
    依賴名字:關鍵字typename和template的另外一種用處

二、STL 概要
    什麼是STL
    STL組件
        容器
        算法
        迭代器
        函數對象
        適配器
        分配器
    STL的能力與限制
三、STL容器
    序列容器
        Vector
        Deque
        List
    有序關聯容器
        Multisets
        Sets
        Multimaps
        Maps
    無序關聯容器
        Unordered Multisets
        Unordered sets (Hashsets)
        Unordered Multimaps
        Unordered maps (Hashmaps)
四、STL迭代器
    關於迭代器
    迭代器的操做
    迭代器類別
        Input Iterators
        Output Iterators
        Forward Iterators
        Bi-directional Iterators
        Random Access Iterators
    Constant Iterators
    Reverse Iterator
五、STL算法
    STL算法一覽
    算法類別
    各種算法介紹
        非修改性算法
        修改性算法
        排序算法
        集合算法
        堆算法
六、預與定義STL數對象
    預約義一元函數對象
    預約義二元函數對象
    判斷式(Predicates)
七、STL適配器
    適配器的概念
    容器適配器
        Stack
        Queue
    迭代器適配器
        Inserters
    函數對象適配器
        Binders
        Function Adapters
        Negaters

5、時間安排

課程時間: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核心類庫精講

1、課程目標
Boost是由C++標準委員會成員發起、衆多C++業界高人蔘與設計並實現的一個涉及面廣、質量高且業已普遍使用的C++標準後備庫,其中 TR1已經被歸入C++0x標準庫。不論從風格和內容組織上講,均可以認爲Boost項目是C++標準庫的延伸。本次課程擷取一系列重要的類庫進行深刻的講解,涉及的類庫以下:
    容器與數據結構;
    字符串算法和文字處理;
    內存管理相關;
    函數對象與高階編程;
    I/O
    一些實用類庫
2、參訓要求
參加本次課程的學員須具有如下能力:
    熟練掌握C++語法,理解C++面向對象和泛型(模板)機制;

3、課程實踐環境
    學員自備電腦
    實踐平臺 (如下兩者之一):
        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等方式與講師溝通。
4、課程大綱
本次課程由如下幾個部分構成:
一、Boost類庫概要
    Boost的發展
    Boost與C++0x(如今的C++2011標準)
    Boost類庫組織
    Boost類庫的適用範圍
二、容器與數據結構
    array:STL風格的定長數組
    unordered:基於hash_table的關聯容器,hash_map、hash_set、multi_hash_map、multi_hash_set
    bimap:雙向map
    mutli_array:多維數組
    pointer container:指針容器
    property_tree:適合用於讀/寫配置文件的容器
    更多實用數據結構簡介
三、字符串算法與文字處理
    lexical_cast:類型轉換的類模板
    string_algos:字符串算法庫,如查找、匹配、替換等操做
    tokenizer:強大的字符串分割工具
    regex:強大而易用的正則表達式庫,支持perl、sed、awk等正則表達式語法
四、函數對象與高階編程
    回顧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模式的實現;
五、內存管理
    smart pointers:boost智能指針,scoped_ptr、shared_ptr
    pool:內存池
六、I/O
    serializtion:序列化,將C++對象的序列化和反序列化,支持的格式有文本格式、xml格式、以及可移植的二進制格式
    format:C printf格式的輸入/輸出格式化操做,擁有更好的類型安全和容錯能力
    iostreams:C++標準庫iostream的補充
七、實用類庫
    date_time:日期時間庫
    system:操做系統支持
    filesystem:可移植的文件系統訪問、操做
    program_options:應用程序命令行參數、選項設置以及獲取實用工具
    timer:定時器
5、時間安排
課程時間:2天,以天天6小時計,具體安排以下:
    Day1
        1 - Boost類庫概要
        2 - 容器與數據結構
        3 - 字符串算法與文字處理
        4 - 函數對象與高階編程
    Day2
        5 - 內存管理
        6 - I/O
        7 - 實用類庫

Boost高性能網絡編程


 1、課程目標
本次課程圍繞高性能網絡編程這一主題,從衆多的Boost類庫中挑選出Boost.Asio、Boost.Thread以及其它配套的實用庫,做爲主要學習的內容,經過本次課程的學習,學員將具有如下能力:
    掌握智能指針、高階函數對象、對象序列化/反序列化等類庫的使用;
    理解現代操做系統線程模型、併發以及同步機制;
    熟練使用Boost.Thread線程管理和同步機制接口開發併發應用;
    深入理解現代操做系統中事件多路分離和分派機制如select、epoll等、瞭解異步I/O以及完成事件的分派;
    熟練使用Boost.Asio構建穩定、高效和靈活的網絡應用。
2、參訓要求
參加本次課程的學員須具有如下能力:
    熟練掌握C++語法,理解C++面向對象和泛型(模板)機制;
    瞭解TCP/IP協議,有網絡編程概念。
3、課程實踐環境
    學員自備電腦
    實踐平臺 (如下兩者之一):
        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等方式與講師溝通。
4、課程大綱
本次課程由如下幾個部分構成:
一、Boost.Serialization - 序列化
    基本類型和自定義類型的序列化;
    數組、指針和智能指針的序列化;
    STL容器、std::string的序列化;
    識別類的版本;
    XML格式的archive;
    二進制格式的archive。
二、Boost.Smart_Ptr - 智能指針
    回顧std::auto_ptr<>;
    無Copyable 語義的scoped_ptr<>;
    shared_ptr<>;
    weak_ptr<>;
    enable_shared_from_this<>;
三、Boost.Bind and Boost.Function- 函數對象相關
    什麼是函數對象?
    回顧std::bind1st()、std::bind2nd()、std::mem_fun()、std::ptr_fun()等適配器;
    Boost bind();
    Boost Function;
    Boost ref()。
四、Boost.Signals2 - 實現回調機制
    Boost Signal2:線程安全的Signal-Slot機制 (Publishers → Signals/Subscribers → Slots),即Observer模式的實現;
    簡單的回調;
    多個Slot回調;
    管理Connections;
    一些示例。
五、一些實用類庫
    Boost.Property_Tree;
    Boost.Format;
六、Boost.Thread - 多線程
    線程與進程之區別;
    用戶線程與內核線程;
    不一樣操做系統中的線程模型;
    線程管理:線程建立、中斷、分離/鏈接等;
    同步機制:Mutex、Lock、Condition_variable、TSS等。
七、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核心接口介紹。
八、高性能網絡編程討論
    考究高性能網絡編程中應該遵循的原則,討論併發、同步、事件多路分離等機制的適用場合。
    網絡應用的瓶頸在何處?
    事件多路分離 vs 一鏈接一線程 (Event demultiplexing vs One thread per connection);
    同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O);
    如何適當地使用多線程?
    何時須要多個 事件多路分離線程?
九、應用層協議定義與實現

    爲何要自定義應用層協議?
    定義應用層協議 (以XMMEP協議爲例);
    用C++實現自定義的協議 (以XMMEP協議爲例)。
注:XMMEP爲X-Messenger Message Exchanging Protocol。
5、時間安排
課程時間: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高性能網絡編程

 1、課程目標

本次課程針對使用ACE工具包進行高性能網絡應用開發,經過本次課程的學習,學員將具有如下能力:
    瞭解ACE的架構和組件;
    理解現代操做系統線程模型、併發以及同步機制;
    熟練使用ACE線程管理和同步機制接口開發併發應用;
    熟練使用ACE基本的IPC SAP接口,如SOCK_Stream、SOCK_Dgram等;
    深入理解現代操做系統中事件多路分離和分派機制如select、epoll等、瞭解異步I/O以及完成事件的分派;
    熟練使用ACE Reactor組件、Acceptor-Connector組件、Proactor組件等構建穩定、高效和靈活的網絡應用。
2、參訓要求
參加本次課程的學員須具有如下能力:
    熟練掌握C++語法,理解C++面向對象和泛型(模板)機制;
    瞭解TCP/IP協議,有網絡編程概念。
3、課程實踐環境
    學員自備電腦
    實踐平臺 (如下兩者之一):
        Win32 / Visual Studio 2008 (或更新)
        Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
    ACE 6.0.0+
4、課程大綱
本次課程由如下幾個部分構成:
一、 ACE簡介
    什麼是ACE?
    ACE的使用範圍;
    ACE工具包的架構層次;
    ACE的組件簡介。
二、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)。
三、ACE併發編程:線程與同步
    線程與進程之區別;
    用戶線程與內核線程;
    不一樣操做系統中的線程模型;
    ACE線程管理:Thread_Manager;
    ACE線程同步:ACE_Guard、ACE_Thread_Mutex等;
    ACE Task框架:Message_Block、Message_Queue、ACE_Task。
四、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框架實現一個多人聊天室。
五、ACE Acceptor-Connector框架
ACE Acceptor-Connector框架實現了Acceptor-Connector模式,這種模式經過解除:1,網絡化應用中相互協做的對等服務的鏈接和初始化所需的活動、2,以及它們一旦鏈接和初始化後所執行的處理的耦合,加強了軟件複用和可擴展性。
    集成了Message_Queue的ACE_Event_handler:ACE_Svc_Handler;
    接受器:ACE_Acceptor;
    鏈接器:ACE_Connector;
    例程:基於Acceptor-Connector框架實現一個轉發服務器。
六、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框架從新實現多人聊天室。
七、ACE實用工具
    ACE日誌實用工具:ACE_Log_Msg;
    讀寫配置文件:ACE_Configuration_Heap;
    Singleton模式 (單例模式) 的ACE實現:ACE_Singleton類模板。
八、高性能網絡編程討論
    考究高性能網絡編程中應該遵循的原則,討論併發、同步、事件多路分離等機制的適用場合。
    網絡應用的瓶頸在何處?
    事件多路分離 vs 一鏈接一線程 (Event demultiplexing vs One thread per connection);
    同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O);
    如何適當地使用多線程?
    何時須要多個 事件多路分離線程?
九、應用層協議定義與實現
    爲何要自定義應用層協議?
    定義應用層協議 (以XMMEP協議爲例);
    用C++實現自定義的協議 (以XMMEP協議爲例)。
    注:XMMEP爲X-Messenger Message Exchanging Protocol。
5、時間安排
課程時間: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,能夠方便、高效的與各種主流的關係型數據庫如DB二、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的服務器。能夠基於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++進階 必讀書籍

 

 

 

(一)語言入門:


《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++,也難以在純粹的書本學習中加以掌握。 《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語言、C8九、C9五、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語言的各 個特性以及程序設計的基本方法。對於計算機從業人員來講,本書是一本必讀的程序設計語言方面的參考書。

 

C/C++學習路線圖

相關文章
相關標籤/搜索